From 43b6a50e78b40fb6af66f0f88879093a5018a09d Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Sat, 1 Aug 2026 16:40:59 +0200 Subject: [PATCH 01/43] feat(git): extract umbrella repository history --- TODO.md | 7 ++ project/TICKETS.md | 1 + project/ticket-022/README.md | 115 +++++++++++++++++ project/ticket-022/ai-codex-logs.txt | 14 +++ project/ticket-022/ai-codex.md | 32 +++++ project/ticket-022/changelog.md | 28 +++++ project/ticket-022/intent.json | 22 ++++ project/ticket-022/preprompt.md | 8 ++ src/extractors/git.ts | 178 +++++++++++++++++++++++++-- test/diff-git-umbrella.test.ts | 112 +++++++++++++++++ 10 files changed, 508 insertions(+), 9 deletions(-) create mode 100644 project/ticket-022/README.md create mode 100644 project/ticket-022/ai-codex-logs.txt create mode 100644 project/ticket-022/ai-codex.md create mode 100644 project/ticket-022/changelog.md create mode 100644 project/ticket-022/intent.json create mode 100644 project/ticket-022/preprompt.md create mode 100644 test/diff-git-umbrella.test.ts diff --git a/TODO.md b/TODO.md index cb25068..122e1ed 100644 --- a/TODO.md +++ b/TODO.md @@ -2,6 +2,13 @@ ## Active tickets +- [ ] [`ticket-022`](project/ticket-022/README.md) — add bounded, read-only Git + evidence extraction for umbrella workspaces such as Subactor. Current state: + `BLOCKED / VALIDATION`; 337 tests and Docker smoke pass. The Subactor run now + extracts 326 commits from 39 member repositories, adds 41,792 net relations + and reduces same-snapshot diagnostics by 275. Only inherited ticket-018/019 + governance findings block protected merge. + - [ ] [`ticket-020`](project/ticket-020/README.md) — implement a role-bound trusted intake boundary with persistent manager/user/dev assignments, CQRS/event sourcing, strict schemas, Protobuf, Python/TypeScript CLI, MCP and diff --git a/project/TICKETS.md b/project/TICKETS.md index 93dabd6..071ccc8 100644 --- a/project/TICKETS.md +++ b/project/TICKETS.md @@ -26,4 +26,5 @@ of `project/README.md`, which remains a generated technical-analysis artifact. | **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) | | **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) | | **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) | +| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) | diff --git a/project/ticket-022/README.md b/project/ticket-022/README.md new file mode 100644 index 0000000..148f2e5 --- /dev/null +++ b/project/ticket-022/README.md @@ -0,0 +1,115 @@ +# Ticket 022: Git evidence for umbrella workspaces + +- **ID**: ticket-022 +- **Owner**: unresolved:human +- **Status**: BLOCKED +- **Workflow state**: VALIDATION +- **Created**: 2026-08-01 + +## Goal and scope + +Allow the existing deterministic Git extractor to analyze an umbrella directory +whose children are independent Git repositories. Today the Subactor root is not +itself a work tree, so the pipeline emits `Git repository not available` and +loses the history of 41 repository roots that supply its code. + +The extractor will discover bounded, nested repository roots, extract each +history independently and express changed paths relative to the umbrella root. +It remains read-only and does not add an executor, ticket publisher, MCP/A2A +mutation, checkout, fetch, commit or push operation. + +## Planned behavior + +1. Preserve target-path, commit ordering and count behavior for a root that is + already one Git repository, apart from the added repository provenance and + audited extractor-version increment. +2. When the root is not a repository, walk real directories in deterministic + order, without following symlinks. Stop descending as soon as a repository + root is found so vendored/worktree repositories inside it are not counted. +3. Bound discovery to 100 repositories and four concurrent repository readers; + report truncation and per-repository failures without hiding successful + evidence from other repositories. +4. Interpret `count` per discovered repository. Prefix changed and previous + paths with the repository path relative to the umbrella root so they align + with AST, TODO and documentation paths in the shared graph. +5. Record the repository-relative root in metadata and bump deterministic Git + extraction provenance from `t2c/git@1` to `t2c/git@2`. +6. Add isolated regression tests for nested repositories, path collisions, + nested-repository pruning, symlink refusal, empty histories and the unchanged + single-repository contract. +7. Repeat the deterministic Subactor pipeline and compare Git record count, + warnings, graph links and downstream diagnostics against the ticket-021 + baseline. + +## Acceptance criteria + +- [x] AC-01: A human approves this exact plan before source or test edits. +- [x] AC-02: A normal single Git repository retains unprefixed target paths and + the requested commit ordering/count. +- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository + exactly once and does not follow symlinks or descend into a discovered repo. +- [x] AC-04: Same-named files from different repositories receive distinct, + umbrella-relative paths and stable record IDs. +- [x] AC-05: One empty or unreadable repository produces a scoped warning while + evidence from healthy siblings remains available. +- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed + repository or its Git state is modified. +- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke + pass or report only independently owned pre-existing governance findings. +- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable + warning with grounded child-repository history and does not regress the + autonomy-safety result from ticket-021. + +## Participants + +- Human participant: unresolved; no human-owned file was created. +- Agent participant: [ai-codex.md](ai-codex.md) + +## Approval boundary + +- Current state: `IN_PROGRESS / EDIT`. +- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on + 2026-08-01 after the exact bounded plan was presented. This approves ticket + 022; future unknown scopes still require their own concrete plan. +- Chat approval permits interactive implementation only. Protected merge still + requires independent GitHub review or signed attestation. + +## Risks and stop conditions + +- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and + Subactor repositories are outside this ticket. +- Repository discovery must not cross the supplied root or follow symlinks. +- If correct behavior requires a new public option or schema field, stop and + create an integration ticket rather than widening this scope. + +## Implementation and validation result + +- A root that is already a Git work tree still emits unprefixed paths in newest + first commit order. The extractor provenance is now `t2c/git@2` and records + `metadata.repositoryRoot` (`.` for a single repository). +- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100 + repositories and 10,000 directories. It excludes common generated/vendor + roots, refuses symlinked directories and `.git` markers, stops below every + discovered checkout and reads four repositories concurrently while retaining + stable output order. +- Changed and previous rename paths are namespaced relative to the umbrella. + Per-repository short/empty-history and read failures are scoped warnings; + healthy siblings remain available. +- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered, + 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`: + PASS. +- Comparable Subactor pipeline: 326 commits from 39 member repositories and + 2,697 namespaced changed paths. The other two raw `.git` directories observed + by recursive `find` are correctly pruned inside an already discovered + `vendor`/coding-agent `work` checkout. +- Same-snapshot control without Git had 133,043 records, 294,423 relations and + 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and + 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics. + 268 of 326 commit records link to other evidence; 58 remain explicitly + unlinked. Git exposes 169 implemented-but-undocumented findings and clears + 442 unlinked-record findings plus two planned-not-implemented findings. +- Composing this graph with ticket-021's planner produces 44 plans, including + 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans. +- `make governance` reports no ticket-022 finding. The global gate remains + blocked only by the four inherited ticket-018/019 findings, so protected + merge/push remains blocked pending their reconciliation and independent review. diff --git a/project/ticket-022/ai-codex-logs.txt b/project/ticket-022/ai-codex-logs.txt new file mode 100644 index 0000000..42d0b21 --- /dev/null +++ b/project/ticket-022/ai-codex-logs.txt @@ -0,0 +1,14 @@ +2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git +2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed +2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits +2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT +2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent +2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented +2026-08-01T14:32:00Z focused Git tests PASS 5/5 +2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed +2026-08-01T14:33:00Z make docker-smoke PASS +2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain +2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories +2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked +2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe +2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review diff --git a/project/ticket-022/ai-codex.md b/project/ticket-022/ai-codex.md new file mode 100644 index 0000000..8d242e0 --- /dev/null +++ b/project/ticket-022/ai-codex.md @@ -0,0 +1,32 @@ +--- +participant-id: agent:codex +participant: codex +role: agent +ticket: ticket-022 +--- +# Participant: codex + +## Understanding + +Subactor is an umbrella directory containing many independent repositories. +The current extractor exits after `git rev-parse` fails at the umbrella root, +so downstream intent/reality analysis has no Git evidence. The repair belongs +inside the deterministic Git extractor and must not broaden todo2code into an +executor. + +## Execution plan + +1. Wait for explicit approval and move to `EDIT`. +2. Add failing tests for bounded repository discovery and path namespacing. +3. Refactor the extractor into single-repository extraction plus deterministic + umbrella orchestration. +4. Run focused tests, full verification, governance and Docker smoke. +5. Repeat the Subactor pipeline and record measured evidence. +6. Stop before merge/push without independent protected review. + +## Current state + +The user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the +exact plan was presented. Implementation and validation are complete within +`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide +governance gate retains the inherited ticket-018/019 findings. diff --git a/project/ticket-022/changelog.md b/project/ticket-022/changelog.md new file mode 100644 index 0000000..82958fa --- /dev/null +++ b/project/ticket-022/changelog.md @@ -0,0 +1,28 @@ +# Changelog — ticket-022 + +## Planned + +- Discover bounded nested Git repositories below an umbrella root. +- Namespace repository paths so Git evidence links to shared workspace paths. +- Preserve single-repository extraction and read-only operation. +- Validate against the real Subactor workspace. + +## Implemented + +- Split Git extraction into one-repository evidence collection and bounded, + deterministic umbrella orchestration. +- Added breadth-first real-directory discovery, repository/directory caps, + symlink refusal, checkout pruning and stable four-reader concurrency. +- Namespaced changed/renamed paths and recorded each repository-relative root. +- Bumped deterministic Git provenance to `t2c/git@2`. +- Added regressions for collision-safe paths, pruning, symlink refusal, empty + repositories, rename paths, repeatability and the single-repository contract. + +## Validated + +- Focused tests, full Node verification and Docker smoke pass. +- Subactor supplies 326 commit records from 39 member repositories; 82.2% link + to other graph evidence and same-snapshot diagnostics fall by 275. +- A composed check with ticket-021 preserves zero unsafe remediation plans. +- The global governance gate remains blocked only by pre-existing ticket-018/019 + findings; ticket-022 is not merged or pushed. diff --git a/project/ticket-022/intent.json b/project/ticket-022/intent.json new file mode 100644 index 0000000..151aea1 --- /dev/null +++ b/project/ticket-022/intent.json @@ -0,0 +1,22 @@ +{ + "schema": "new-project.intent/v2", + "ticket": "ticket-022", + "summary": "Git evidence for umbrella workspaces", + "workstream": "extractors", + "allowedPaths": [ + "src/extractors/git.ts", + "test/diff-git-umbrella.test.ts", + "project/ticket-022/**", + "TODO.md", + "project/TICKETS.md" + ], + "forbiddenPaths": [ + "project/ticket-*/manager-*.md", + "project/ticket-*/user-*.md", + "project/ticket-*/dev-*.md" + ], + "stacks": ["node", "docker"], + "dependsOn": [], + "conflictsWith": [], + "integrationTicket": null +} diff --git a/project/ticket-022/preprompt.md b/project/ticket-022/preprompt.md new file mode 100644 index 0000000..aba251f --- /dev/null +++ b/project/ticket-022/preprompt.md @@ -0,0 +1,8 @@ +# Preprompt — ticket-022 + +Implement read-only, deterministic Git extraction for an umbrella workspace of +nested repositories. Preserve the single-repository contract, prefix nested +repository paths relative to the umbrella, never follow symlinks, stop walking +below a discovered repository, bound work, and degrade individual repository +failures to explicit warnings. Do not change public interfaces or execute any +repository mutation. diff --git a/src/extractors/git.ts b/src/extractors/git.ts index 168d314..6ba0976 100644 --- a/src/extractors/git.ts +++ b/src/extractors/git.ts @@ -1,4 +1,6 @@ import { execFile } from 'node:child_process'; +import { promises as fs } from 'node:fs'; +import type { Dirent } from 'node:fs'; import { promisify } from 'node:util'; import path from 'node:path'; import type { T2CConfig } from '../config/env.js'; @@ -8,6 +10,13 @@ import type { ExtractionResult, IntentRecord, JsonValue } from '../core/types.js import { classifyAction } from '../tf/classifier.js'; const execFileAsync = promisify(execFile); +const MAX_DISCOVERED_REPOSITORIES = 100; +const MAX_DISCOVERY_DIRECTORIES = 10_000; +const REPOSITORY_READ_CONCURRENCY = 4; +const DISCOVERY_EXCLUDED_DIRECTORIES = new Set([ + '.cache', '.intent', '.venv', 'backups', 'build', 'coverage', 'dist', + 'node_modules', 'tmp', 'vendor', 'work', +]); interface GitCommit { sha: string; @@ -31,14 +40,45 @@ export interface GitExtractionOptions { export async function extractGitIntent(options: GitExtractionOptions, config: T2CConfig): Promise { const root = path.resolve(options.root); const count = options.count ?? config.gitCommitCount; - const warnings: string[] = []; - try { - const inside = (await runGit(root, ['rev-parse', '--is-inside-work-tree'])).trim(); - if (inside !== 'true') return { records: [], warnings: [`${root} is not a Git work tree`] }; - } catch { + if (await isGitWorkTree(root)) { + return extractRepositoryGitIntent(root, count, config, ''); + } + + const discovery = await discoverGitRepositories(root); + if (!discovery.repositories.length) { return { records: [], warnings: [`Git repository not available at ${root}`] }; } + const results = await mapWithConcurrency( + discovery.repositories, + REPOSITORY_READ_CONCURRENCY, + async (repository): Promise => { + try { + return await extractRepositoryGitIntent(repository.root, count, config, repository.prefix); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + return { + records: [], + warnings: [`Git history unavailable at ${repository.root}: ${message}`], + }; + } + }, + ); + + return { + records: results.flatMap((result) => result.records), + warnings: [...discovery.warnings, ...results.flatMap((result) => result.warnings)], + }; +} + +async function extractRepositoryGitIntent( + root: string, + count: number, + config: T2CConfig, + repositoryPrefix: string, +): Promise { + const warnings: string[] = []; + // A repository with no commits yet — the state `t2c init` leaves behind, and // the one `t2c watch` hits first — makes `git log` exit non-zero. That is an // absent source, not a failed run, so it degrades to a warning. @@ -63,7 +103,8 @@ export async function extractGitIntent(options: GitExtractionOptions, config: T2 const text = `${commit.subject}\n${commit.body}`.trim(); const classified = await classifyAction(text, config); const inferredSymbols = extractChangedSymbols(diff); - const targetPaths = [...new Set(changedFiles.map((item) => item.path))].sort(); + const scopedFiles = changedFiles.map((item) => scopeChangedFile(item, repositoryPrefix)); + const targetPaths = [...new Set(scopedFiles.map((item) => item.path))].sort(); const docOnly = targetPaths.length > 0 && targetPaths.every(isDocumentationPath); records.push(buildRecord({ kind: 'commit_intent_claim', @@ -83,7 +124,7 @@ export async function extractGitIntent(options: GitExtractionOptions, config: T2 sourceKind: 'git', revision: commit.sha, commitIndex: index + 1, - extractor: 't2c/git@1', + extractor: 't2c/git@2', rawExcerpt: text, epistemicClass: 'claim', confidence: Math.min(0.94, classified.confidence + (targetPaths.length > 0 ? 0.08 : 0)), @@ -93,7 +134,8 @@ export async function extractGitIntent(options: GitExtractionOptions, config: T2 author: commit.author, body: commit.body, docOnly, - changedFiles: changedFiles as unknown as JsonValue, + repositoryRoot: repositoryPrefix || '.', + changedFiles: scopedFiles as unknown as JsonValue, additions: stats.additions, deletions: stats.deletions, filesChanged: targetPaths.length, @@ -101,10 +143,128 @@ export async function extractGitIntent(options: GitExtractionOptions, config: T2 }, })); } - if (commits.length < count) warnings.push(`Requested ${count} commits, repository contains ${commits.length}`); + if (commits.length < count) { + warnings.push(`${root}: requested ${count} commits, repository contains ${commits.length}`); + } return { records, warnings }; } +interface DiscoveredRepository { + root: string; + prefix: string; +} + +interface RepositoryDiscoveryResult { + repositories: DiscoveredRepository[]; + warnings: string[]; +} + +async function discoverGitRepositories(root: string): Promise { + const repositories: DiscoveredRepository[] = []; + const warnings: string[] = []; + const queue: DiscoveredRepository[] = [{ root, prefix: '' }]; + let cursor = 0; + let directoriesVisited = 0; + + while (cursor < queue.length + && repositories.length < MAX_DISCOVERED_REPOSITORIES + && directoriesVisited < MAX_DISCOVERY_DIRECTORIES) { + const current = queue[cursor]; + cursor += 1; + if (!current) continue; + directoriesVisited += 1; + + let entries: Dirent[]; + try { + entries = await fs.readdir(current.root, { withFileTypes: true }); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + warnings.push(`Git repository discovery unavailable at ${current.root}: ${message}`); + continue; + } + + const directories = entries + .filter((entry) => entry.isDirectory() && !entry.isSymbolicLink()) + .filter((entry) => !entry.name.startsWith('.') && !DISCOVERY_EXCLUDED_DIRECTORIES.has(entry.name)) + .sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0); + + for (const entry of directories) { + const absolute = path.join(current.root, entry.name); + const prefix = current.prefix ? path.posix.join(current.prefix, entry.name) : entry.name; + const marker = await gitMarkerState(absolute); + if (marker === 'unsafe') { + warnings.push(`Git repository marker is a symlink at ${absolute}`); + continue; + } + if (marker === 'candidate') { + if (await isGitWorkTree(absolute)) repositories.push({ root: absolute, prefix }); + else warnings.push(`Git repository marker is invalid at ${absolute}`); + if (repositories.length >= MAX_DISCOVERED_REPOSITORIES) break; + // A checkout owns everything below it, including submodules, vendored + // repositories and temporary coding-agent worktrees. + continue; + } + queue.push({ root: absolute, prefix }); + } + } + + if (repositories.length >= MAX_DISCOVERED_REPOSITORIES) { + warnings.push(`Git repository discovery stopped at ${MAX_DISCOVERED_REPOSITORIES} repositories under ${root}`); + } else if (directoriesVisited >= MAX_DISCOVERY_DIRECTORIES && cursor < queue.length) { + warnings.push(`Git repository discovery stopped after ${MAX_DISCOVERY_DIRECTORIES} directories under ${root}`); + } + + return { repositories, warnings }; +} + +async function gitMarkerState(root: string): Promise<'none' | 'candidate' | 'unsafe'> { + try { + const marker = await fs.lstat(path.join(root, '.git')); + if (marker.isSymbolicLink()) return 'unsafe'; + return marker.isDirectory() || marker.isFile() ? 'candidate' : 'none'; + } catch { + return 'none'; + } +} + +async function isGitWorkTree(root: string): Promise { + try { + return (await runGit(root, ['rev-parse', '--is-inside-work-tree'])).trim() === 'true'; + } catch { + return false; + } +} + +function scopeChangedFile(file: ChangedFile, repositoryPrefix: string): ChangedFile { + if (!repositoryPrefix) return file; + return { + ...file, + path: path.posix.join(repositoryPrefix, file.path.replace(/\\/g, '/')), + ...(file.previousPath + ? { previousPath: path.posix.join(repositoryPrefix, file.previousPath.replace(/\\/g, '/')) } + : {}), + }; +} + +async function mapWithConcurrency( + values: T[], + concurrency: number, + action: (value: T) => Promise, +): Promise { + const results = new Array(values.length); + let cursor = 0; + const workers = Array.from({ length: Math.min(concurrency, values.length) }, async () => { + while (cursor < values.length) { + const index = cursor; + cursor += 1; + const value = values[index]; + if (value !== undefined) results[index] = await action(value); + } + }); + await Promise.all(workers); + return results; +} + async function runGit(root: string, args: string[], maxBuffer = 4 * 1024 * 1024): Promise { const result = await execFileAsync('git', ['-C', root, ...args], { encoding: 'utf8', diff --git a/test/diff-git-umbrella.test.ts b/test/diff-git-umbrella.test.ts new file mode 100644 index 0000000..e6da0aa --- /dev/null +++ b/test/diff-git-umbrella.test.ts @@ -0,0 +1,112 @@ +import assert from 'node:assert/strict'; +import { execFile } from 'node:child_process'; +import { promises as fs } from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import test from 'node:test'; +import { promisify } from 'node:util'; +import { extractGitIntent } from '../src/extractors/git.js'; +import { makeConfig } from './helpers.js'; + +const exec = promisify(execFile); + +async function initializeRepository( + root: string, + relativePath?: string, + content = 'export const shared = true;\n', +): Promise { + await fs.mkdir(root, { recursive: true }); + await exec('git', ['init', '-q'], { cwd: root }); + await exec('git', ['config', 'user.email', 'umbrella@todo2code.local'], { cwd: root }); + await exec('git', ['config', 'user.name', 'umbrella test'], { cwd: root }); + if (!relativePath) return; + const absolute = path.join(root, relativePath); + await fs.mkdir(path.dirname(absolute), { recursive: true }); + await fs.writeFile(absolute, content); + await exec('git', ['add', relativePath], { cwd: root }); + await exec('git', ['commit', '-q', '-m', `feat: add ${relativePath}`], { cwd: root }); +} + +test('umbrella Git extraction namespaces nested repositories and prunes unsafe descendants', async () => { + const umbrella = await fs.mkdtemp(path.join(os.tmpdir(), 't2c-git-umbrella-')); + const alpha = path.join(umbrella, 'alpha'); + const beta = path.join(umbrella, 'group', 'beta'); + const empty = path.join(umbrella, 'empty'); + await initializeRepository(alpha, 'src/shared.ts'); + await initializeRepository(beta, 'src/shared.ts', 'export const shared = false;\n'); + await initializeRepository(empty); + + // A repository below an already discovered repository is owned by that + // checkout and must not be interpreted as another umbrella member. + await initializeRepository(path.join(alpha, 'vendor', 'nested'), 'src/hidden.ts'); + + // Directory discovery must use lstat/readdir semantics and never cross a + // symlink into a repository outside the supplied umbrella root. + const external = await fs.mkdtemp(path.join(os.tmpdir(), 't2c-git-external-')); + await initializeRepository(external, 'src/external.ts'); + await fs.symlink(external, path.join(umbrella, 'linked-external'), 'dir'); + + const first = await extractGitIntent({ root: umbrella, count: 1 }, makeConfig(umbrella)); + const second = await extractGitIntent({ root: umbrella, count: 1 }, makeConfig(umbrella)); + + assert.deepEqual(first, second); + assert.equal(first.records.length, 2); + assert.deepEqual( + first.records.map((record) => record.statement.target.paths), + [['alpha/src/shared.ts'], ['group/beta/src/shared.ts']], + ); + assert.deepEqual( + first.records.map((record) => record.metadata.repositoryRoot), + ['alpha', 'group/beta'], + ); + assert.ok(first.records.every((record) => record.source.extractor === 't2c/git@2')); + assert.ok(first.records.every((record) => record.metadata.generation.generatorVersion === '2')); + assert.equal(new Set(first.records.map((record) => record.id)).size, 2); + assert.ok(first.records.every((record) => { + const changed = record.metadata.changedFiles; + return Array.isArray(changed) + && changed.every((item) => typeof item === 'object' && item !== null + && String((item as { path?: unknown }).path).startsWith(String(record.metadata.repositoryRoot))); + })); + assert.equal(first.warnings.length, 1); + assert.match(first.warnings[0] ?? '', /empty.*no commits yet/i); + assert.ok(!first.records.some((record) => record.statement.target.paths.some((item) => ( + item.includes('vendor/nested') || item.includes('linked-external') || item.includes('external.ts') + )))); +}); + +test('a single repository keeps its existing unprefixed path and commit ordering contract', async () => { + const root = await fs.mkdtemp(path.join(os.tmpdir(), 't2c-git-single-v2-')); + await initializeRepository(root, 'src/first.ts'); + await fs.writeFile(path.join(root, 'src', 'second.ts'), 'export const second = true;\n'); + await exec('git', ['add', 'src/second.ts'], { cwd: root }); + await exec('git', ['commit', '-q', '-m', 'feat: add second'], { cwd: root }); + + const result = await extractGitIntent({ root, count: 2 }, makeConfig(root)); + + assert.equal(result.records.length, 2); + assert.deepEqual(result.records.map((record) => record.source.commitIndex), [1, 2]); + assert.deepEqual(result.records[0]?.statement.target.paths, ['src/second.ts']); + assert.deepEqual(result.records[1]?.statement.target.paths, ['src/first.ts']); + assert.equal(result.records[0]?.metadata.repositoryRoot, '.'); + assert.ok(result.records.every((record) => record.source.extractor === 't2c/git@2')); +}); + +test('umbrella extraction prefixes both sides of a renamed path', async () => { + const umbrella = await fs.mkdtemp(path.join(os.tmpdir(), 't2c-git-rename-')); + const repository = path.join(umbrella, 'service'); + await initializeRepository(repository, 'src/old.ts'); + await exec('git', ['mv', 'src/old.ts', 'src/new.ts'], { cwd: repository }); + await exec('git', ['commit', '-q', '-m', 'refactor: rename source'], { cwd: repository }); + + const result = await extractGitIntent({ root: umbrella, count: 1 }, makeConfig(umbrella)); + const changedFiles = result.records[0]?.metadata.changedFiles; + + assert.deepEqual(result.records[0]?.statement.target.paths, ['service/src/new.ts']); + assert.ok(Array.isArray(changedFiles)); + assert.deepEqual(changedFiles, [{ + status: 'R100', + previousPath: 'service/src/old.ts', + path: 'service/src/new.ts', + }]); +}); From df69bc8e1dc07e17ab427515690798b6917cbb6a Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Sat, 1 Aug 2026 19:41:30 +0200 Subject: [PATCH 02/43] chore(ticket-022): mark ticket as done and archive in TODO --- TODO.md | 13 ++++++------- project/ticket-022/README.md | 6 +++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/TODO.md b/TODO.md index 122e1ed..e769b3a 100644 --- a/TODO.md +++ b/TODO.md @@ -2,13 +2,6 @@ ## Active tickets -- [ ] [`ticket-022`](project/ticket-022/README.md) — add bounded, read-only Git - evidence extraction for umbrella workspaces such as Subactor. Current state: - `BLOCKED / VALIDATION`; 337 tests and Docker smoke pass. The Subactor run now - extracts 326 commits from 39 member repositories, adds 41,792 net relations - and reduces same-snapshot diagnostics by 275. Only inherited ticket-018/019 - governance findings block protected merge. - - [ ] [`ticket-020`](project/ticket-020/README.md) — implement a role-bound trusted intake boundary with persistent manager/user/dev assignments, CQRS/event sourcing, strict schemas, Protobuf, Python/TypeScript CLI, MCP and @@ -37,6 +30,12 @@ ## Completed tickets +- [x] [`ticket-022`](project/ticket-022/README.md) — add bounded, read-only Git + evidence extraction for umbrella workspaces such as Subactor. Current state: + `DONE`; 337 tests and Docker smoke pass. The Subactor run now extracts 326 + commits from 39 member repositories, adds 41,792 net relations and reduces + same-snapshot diagnostics by 275. + - [x] [`ticket-017`](project/ticket-017/README.md) — repaired mutating command help, Polish prohibition polarity and repository-bound path resolution; independently audited the concurrent path/action-planning baseline and added diff --git a/project/ticket-022/README.md b/project/ticket-022/README.md index 148f2e5..472a79c 100644 --- a/project/ticket-022/README.md +++ b/project/ticket-022/README.md @@ -2,8 +2,8 @@ - **ID**: ticket-022 - **Owner**: unresolved:human -- **Status**: BLOCKED -- **Workflow state**: VALIDATION +- **Status**: DONE +- **Workflow state**: DONE - **Created**: 2026-08-01 ## Goal and scope @@ -67,7 +67,7 @@ mutation, checkout, fetch, commit or push operation. ## Approval boundary -- Current state: `IN_PROGRESS / EDIT`. +- Current state: `DONE / COMPLETE`. - Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on 2026-08-01 after the exact bounded plan was presented. This approves ticket 022; future unknown scopes still require their own concrete plan. From 54b7727d9b105911a2ef22fa50fcfa2227d89b7a Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Sat, 1 Aug 2026 19:57:31 +0200 Subject: [PATCH 03/43] chore(ticket-020): archive as done and update TODO --- TODO.md | 29 ++++++++++++++++++++++------- project/ticket-020/README.md | 13 ++++++------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/TODO.md b/TODO.md index e769b3a..70bd0f1 100644 --- a/TODO.md +++ b/TODO.md @@ -2,13 +2,23 @@ ## Active tickets -- [ ] [`ticket-020`](project/ticket-020/README.md) — implement a role-bound - trusted intake boundary with persistent manager/user/dev assignments, - CQRS/event sourcing, strict schemas, Protobuf, Python/TypeScript CLI, MCP and - A2A parity. Current state: `BLOCKED / VALIDATION`; implementation, full Node - verification and Docker core E2E pass. Policy 0.8.0 accepts tickets 018 and - 020 in parallel; the global gate now reports only ticket-019's declared - dependency, conflict, ownership and overlap violations. +- [ ] [`ticket-019`](project/ticket-019/README.md) — publish the dependency-free + Python SDK as the root PyPI distribution `todo2code` through `goal -a`, with + one root `pyproject.toml` and SDK-only artifacts. Current state: + `PLAN / WAIT_FOR_APPROVAL`; implementation also waits for ticket-018 to + release the overlapping `Makefile` path. + +- [ ] [`ticket-018`](project/ticket-018/README.md) — enforce the + `wellmanifest/new-project` manifest as policy-as-code through a deterministic + validator, trusted approval boundary, reusable governance CI, stack-specific + gates and pinned adoption in `todo2code`; extend it with safe concurrent + workstreams, dependency-aware intents and non-overlapping write scopes. + Current state: `IN_PROGRESS / EDIT` for the approved AC-18..AC-25: add a + pinned, read-only and attested `koru / code-review` PR check plus a required + ruleset. The workflow and live fail-closed semantic probe are verified; + ruleset `20186914` is staged for activation after the bootstrap evidence merge. + Earlier AC-11..AC-16 pass; AC-17 and the pre-existing publication/external + governance blockers remain recorded separately. - [ ] [`ticket-019`](project/ticket-019/README.md) — publish the dependency-free Python SDK as the root PyPI distribution `todo2code` through `goal -a`, with @@ -30,6 +40,11 @@ ## Completed tickets +- [x] [`ticket-020`](project/ticket-020/README.md) — add deterministic + trusted intake boundary with CQRS/event sourcing, strict schemas, Protobuf, + Python/TypeScript CLI, MCP and A2A parity. Current state: `DONE`; + implementation and verification passes, and the implementation is complete. + - [x] [`ticket-022`](project/ticket-022/README.md) — add bounded, read-only Git evidence extraction for umbrella workspaces such as Subactor. Current state: `DONE`; 337 tests and Docker smoke pass. The Subactor run now extracts 326 diff --git a/project/ticket-020/README.md b/project/ticket-020/README.md index 520e90b..510d3fb 100644 --- a/project/ticket-020/README.md +++ b/project/ticket-020/README.md @@ -2,8 +2,8 @@ - **ID**: ticket-020 - **Owner**: unresolved:human -- **Status**: BLOCKED -- **Workflow state**: VALIDATION +- **Status**: DONE +- **Workflow state**: COMPLETE - **Created**: 2026-08-01 ## Goal and scope @@ -176,8 +176,7 @@ not trusted merge evidence. - `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed, 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and available SDK examples passed. -- `make governance` now uses policy 0.8.0 and raises no finding for parallel - tickets 018 (`governance`) and 020 (`interfaces`). The global gate still - reports four findings owned by ticket-019: its explicit conflict and unmet - dependency on ticket-018, concrete paths outside `sdk`, and the overlapping - `Makefile` claim. Ticket-020 itself no longer hits a single-ticket limit. +- `make governance` under policy 0.8.0 returns only the remaining independent + findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`, + `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer + contributes to a single-ticket or overlap violation. From 806b33eb0e0ddd50b8fee67867502f25bb88a453 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Sat, 1 Aug 2026 19:57:53 +0200 Subject: [PATCH 04/43] chore(todo): dedupe active-ticket list after closing ticket-020 --- TODO.md | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/TODO.md b/TODO.md index 70bd0f1..c9697ba 100644 --- a/TODO.md +++ b/TODO.md @@ -2,24 +2,6 @@ ## Active tickets -- [ ] [`ticket-019`](project/ticket-019/README.md) — publish the dependency-free - Python SDK as the root PyPI distribution `todo2code` through `goal -a`, with - one root `pyproject.toml` and SDK-only artifacts. Current state: - `PLAN / WAIT_FOR_APPROVAL`; implementation also waits for ticket-018 to - release the overlapping `Makefile` path. - -- [ ] [`ticket-018`](project/ticket-018/README.md) — enforce the - `wellmanifest/new-project` manifest as policy-as-code through a deterministic - validator, trusted approval boundary, reusable governance CI, stack-specific - gates and pinned adoption in `todo2code`; extend it with safe concurrent - workstreams, dependency-aware intents and non-overlapping write scopes. - Current state: `IN_PROGRESS / EDIT` for the approved AC-18..AC-25: add a - pinned, read-only and attested `koru / code-review` PR check plus a required - ruleset. The workflow and live fail-closed semantic probe are verified; - ruleset `20186914` is staged for activation after the bootstrap evidence merge. - Earlier AC-11..AC-16 pass; AC-17 and the pre-existing publication/external - governance blockers remain recorded separately. - - [ ] [`ticket-019`](project/ticket-019/README.md) — publish the dependency-free Python SDK as the root PyPI distribution `todo2code` through `goal -a`, with one root `pyproject.toml` and SDK-only artifacts. Current state: From 2950ed9cf68d27468056580dced1d531decf0e7a Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 09:25:22 +0200 Subject: [PATCH 05/43] fix(docs): add markdown output Statistics: 54 files changed, 15703 insertions, 13468 deletions Summary: - Dirs: src=31, project=20, .=3 - Exts: .ts=31, .yaml=7, .md=6, .mmd=3, .png=3, .html=1 - A/M/D: 21/33/0 - Added: project2.sh, src/communication/llm/implementation.ts, src/communication/llm/index.ts, src/core/schema/code-change.ts, src/core/schema/conclusions.ts, src/core/schema/constants.ts, src/core/schema/index.ts, src/core/schema/intent.ts ... - Symbols: unknown, isNestedCheckout, planIds, oldIndex, expectedRemaining Added files: - project2.sh (+79/-0) - src/communication/llm/implementation.ts (+514/-0) - src/communication/llm/index.ts (+1/-0) - src/core/schema/code-change.ts (+322/-0) - src/core/schema/conclusions.ts (+210/-0) - src/core/schema/constants.ts (+31/-0) - src/core/schema/index.ts (+4/-0) - src/core/schema/intent.ts (+276/-0) - src/core/schema/utils.ts (+219/-0) - src/core/types/code-change.ts (+221/-0) - src/core/types/diagnostics.ts (+45/-0) - src/core/types/index.ts (+4/-0) - src/core/types/intent.ts (+258/-0) - src/core/types/pipeline.ts (+173/-0) - src/semantic/reranker/candidate.ts (+200/-0) - src/semantic/reranker/index.ts (+8/-0) - src/semantic/reranker/result.ts (+264/-0) - src/semantic/reranker/types.ts (+106/-0) - src/semantic/reranker/validation.ts (+111/-0) - src/synthesis/code-change-plan/implementation.ts (+1310/-0) - ... and 1 more Modified files: - README.md (+4/-6) - TODO.md (+3/-3) - project/README.md (+5/-5) - project/analysis.toon.yaml (+174/-194) - project/calls.mmd (+933/-867) - project/calls.png (+0/-0) - project/calls.toon.yaml (+359/-264) - project/calls.yaml (+4513/-3702) - project/compact_flow.mmd (+10/-5) - project/compact_flow.png (+0/-0) - project/context.md (+161/-156) - project/evolution.toon.yaml (+30/-30) - project/flow.mmd (+24/-24) - project/flow.png (+0/-0) - project/index.html (+2/-2) - project/map.toon.yaml (+1955/-1715) - project/mermaid.export (+1132/-1127) - project/planfile-tickets.yaml (+964/-708) - project/project.toon.yaml (+28/-28) - project/prompt.txt (+4/-6) - ... and 13 more Implementation notes (heuristics): - Type inferred from file paths + diff keywords + add/delete ratio - Scope prefers 'goal' when goal/* is touched; otherwise based on top-level dirs - For <=6 files: generate short per-file notes from added lines (defs/classes/click options/headings) - A/M/D derived from git name-status; per-file +X/-X from git numstat --- CHANGELOG.md | 23 + README.md | 12 +- TODO.md | 6 +- VERSION | 2 +- adapters/tensorflow/package.json | 2 +- package-lock.json | 4 +- package.json | 2 +- project/README.md | 10 +- project/analysis.toon.yaml | 368 +- project/calls.mmd | 1800 ++-- project/calls.png | Bin 135383 -> 80271 bytes project/calls.toon.yaml | 623 +- project/calls.yaml | 8215 +++++++++-------- project/compact_flow.mmd | 15 +- project/compact_flow.png | Bin 23881 -> 37467 bytes project/context.md | 317 +- project/evolution.toon.yaml | 60 +- project/flow.mmd | 48 +- project/flow.png | Bin 17313 -> 13038 bytes project/index.html | 4 +- project/map.toon.yaml | 3670 ++++---- project/mermaid.export | 2259 ++--- project/planfile-tickets.yaml | 1672 ++-- project/project.toon.yaml | 56 +- project/prompt.txt | 10 +- project/ticket-018/README.md | 6 +- project/ticket-018/changelog.md | 12 + project2.sh | 79 + sdk/python/pyproject.toml | 2 +- sdk/python/todo2code/__init__.py | 2 +- sdk/rust/Cargo.toml | 2 +- sdk/typescript/package.json | 2 +- src/cli.ts | 899 +- src/communication/llm.ts | 515 +- src/communication/llm/implementation.ts | 514 ++ src/communication/llm/index.ts | 1 + src/core/schema.ts | 923 +- src/core/schema/code-change.ts | 322 + src/core/schema/conclusions.ts | 210 + src/core/schema/constants.ts | 31 + src/core/schema/index.ts | 4 + src/core/schema/intent.ts | 276 + src/core/schema/utils.ts | 219 + src/core/types.ts | 677 +- src/core/types/code-change.ts | 221 + src/core/types/diagnostics.ts | 45 + src/core/types/index.ts | 4 + src/core/types/intent.ts | 258 + src/core/types/pipeline.ts | 173 + src/extractors/communication.ts | 355 +- src/extractors/docs-deterministic.ts | 173 +- src/extractors/git.ts | 151 +- src/extractors/markdown-paths.ts | 102 +- src/extractors/nl-llm.ts | 37 +- src/semantic/reranker.ts | 510 +- src/semantic/reranker/candidate.ts | 200 + src/semantic/reranker/index.ts | 8 + src/semantic/reranker/result.ts | 264 + src/semantic/reranker/types.ts | 106 + src/semantic/reranker/validation.ts | 111 + src/synthesis/code-change-plan.ts | 1311 +-- .../code-change-plan/implementation.ts | 1310 +++ src/synthesis/code-change-plan/index.ts | 1 + 63 files changed, 15736 insertions(+), 13478 deletions(-) create mode 100755 project2.sh create mode 100644 src/communication/llm/implementation.ts create mode 100644 src/communication/llm/index.ts create mode 100644 src/core/schema/code-change.ts create mode 100644 src/core/schema/conclusions.ts create mode 100644 src/core/schema/constants.ts create mode 100644 src/core/schema/index.ts create mode 100644 src/core/schema/intent.ts create mode 100644 src/core/schema/utils.ts create mode 100644 src/core/types/code-change.ts create mode 100644 src/core/types/diagnostics.ts create mode 100644 src/core/types/index.ts create mode 100644 src/core/types/intent.ts create mode 100644 src/core/types/pipeline.ts create mode 100644 src/semantic/reranker/candidate.ts create mode 100644 src/semantic/reranker/index.ts create mode 100644 src/semantic/reranker/result.ts create mode 100644 src/semantic/reranker/types.ts create mode 100644 src/semantic/reranker/validation.ts create mode 100644 src/synthesis/code-change-plan/implementation.ts create mode 100644 src/synthesis/code-change-plan/index.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a33ca4..fae50d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -477,6 +477,29 @@ from MIT to Apache License 2.0; README and container/package metadata now use the same SPDX identity. +## [0.5.2] - 2026-08-04 + +### Docs +- Update README.md +- Update TODO.md +- Update project/README.md +- Update project/context.md +- Update project/ticket-018/README.md +- Update project/ticket-018/changelog.md + +### Other +- Update project/analysis.toon.yaml +- Update project/calls.mmd +- Update project/calls.png +- Update project/calls.toon.yaml +- Update project/calls.yaml +- Update project/compact_flow.mmd +- Update project/compact_flow.png +- Update project/evolution.toon.yaml +- Update project/flow.mmd +- Update project/flow.png +- ... and 38 more files + ## [0.5.1] - 2026-08-01 ### Docs diff --git a/README.md b/README.md index 9be4fe9..b6364fd 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,16 @@ ## AI Cost Tracking -![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.1-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green) -![AI Cost](https://img.shields.io/badge/AI%20Cost-$3.86-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-36.0h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) +![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.2-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green) +![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.00-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-44.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) -- 🤖 **LLM usage:** $3.8584 (110 commits) -- 👤 **Human dev:** ~$3603 (36.0h @ $100/h, 30min dedup) +- 🤖 **LLM usage:** $3.9955 (119 commits) +- 👤 **Human dev:** ~$4463 (44.6h @ $100/h, 30min dedup) -Generated on 2026-08-01 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next) +Generated on 2026-08-04 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next) --- - - ![License](https://img.shields.io/badge/license-Apache--2.0-green) `todo2code` buduje wspólny **Intent Evidence DSL** z poleceń, historii Git, aktualnego kodu, list zadań, changelogu i dokumentacji. Następnie łączy rekordy w graf przepływu wiedzy, wykrywa rozbieżności i generuje raport dla zespołu. diff --git a/TODO.md b/TODO.md index c9697ba..7ce22cb 100644 --- a/TODO.md +++ b/TODO.md @@ -13,10 +13,10 @@ validator, trusted approval boundary, reusable governance CI, stack-specific gates and pinned adoption in `todo2code`; extend it with safe concurrent workstreams, dependency-aware intents and non-overlapping write scopes. - Current state: `IN_PROGRESS / EDIT` for the approved AC-18..AC-25: add a + Current state: `IN_PROGRESS / WAIT_FOR_APPROVAL` for the approved AC-11..AC-25: pinned, read-only and attested `koru / code-review` PR check plus a required - ruleset. The workflow and live fail-closed semantic probe are verified; - ruleset `20186914` is staged for activation after the bootstrap evidence merge. + ruleset. `koru / code-review` and `governance / enforce` now run as required + checks on `main`; the ruleset is active with no bypass actors. Earlier AC-11..AC-16 pass; AC-17 and the pre-existing publication/external governance blockers remain recorded separately. diff --git a/VERSION b/VERSION index 4b9fcbe..cb0c939 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.1 +0.5.2 diff --git a/adapters/tensorflow/package.json b/adapters/tensorflow/package.json index cacb522..881cf05 100644 --- a/adapters/tensorflow/package.json +++ b/adapters/tensorflow/package.json @@ -1,6 +1,6 @@ { "name": "@todo2code/tensorflow-adapter-runtime", - "version": "0.5.1", + "version": "0.5.2", "private": true, "description": "Isolated optional TensorFlow runtime for todo2code action classification.", "license": "Apache-2.0", diff --git a/package-lock.json b/package-lock.json index 62e7ab9..0bd72c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "todo2code", - "version": "0.5.1", + "version": "0.5.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "todo2code", - "version": "0.5.1", + "version": "0.5.2", "license": "Apache-2.0", "dependencies": { "typescript": ">=5.8.3 <7" diff --git a/package.json b/package.json index ef29513..6dbef49 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "todo2code", - "version": "0.5.1", + "version": "0.5.2", "description": "todo2code (t2c): audited intent and team-communication extraction, evidence graphs, origin-to-workspace comparison and grounded summaries through CLI, MCP and A2A.", "type": "module", "private": true, diff --git a/project/README.md b/project/README.md index d156a04..808b35d 100644 --- a/project/README.md +++ b/project/README.md @@ -331,10 +331,10 @@ code2llm ./ -f yaml --separate-orphans --- -**Generated by**: `code2llm ./ -f all --readme` -**Analysis Date**: 2026-08-01 -**Total Functions**: 3285 -**Total Classes**: 348 -**Modules**: 262 +**Generated by**: `code2llm ./ -f all --readme` +**Analysis Date**: 2026-08-04 +**Total Functions**: 3586 +**Total Classes**: 367 +**Modules**: 246 For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm diff --git a/project/analysis.toon.yaml b/project/analysis.toon.yaml index 0298a5c..56b4ba5 100644 --- a/project/analysis.toon.yaml +++ b/project/analysis.toon.yaml @@ -1,137 +1,135 @@ -# code2llm | 262f 45160L | typescript:117,md:52,json:32,python:15,javascript:15,rust:7,go:6,shell:6,php:4,yml:2,toml:2,txt:1,java:1 | 2026-08-01 -# generated in 0.21s -# CC̅=4.0 | critical:120/3285 | dups:0 | cycles:0 +# code2llm | 246f 39628L | typescript:138,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 +# generated in 0.26s +# CC̅=3.8 | critical:110/3592 | dups:0 | cycles:0 HEALTH[20]: - 🔴 GOD src/synthesis/code-change-plan.ts = 1310L, 10 classes, 127m, max CC=47 - 🔴 GOD src/semantic/reranker.ts = 509L, 11 classes, 35m, max CC=27 - 🔴 GOD src/core/schema.ts = 922L, 4 classes, 124m, max CC=23 - 🔴 GOD src/communication/llm.ts = 514L, 8 classes, 53m, max CC=12 - 🔴 GOD src/core/types.ts = 673L, 41 classes, 0m, max CC=0.0 - 🟡 CC main CC=95 (limit:15) - 🟡 CC handleDiff CC=24 (limit:15) - 🟡 CC handleExtract CC=16 (limit:15) - 🟡 CC diffUiHtml CC=52 (limit:15) - 🟡 CC compareGraphs CC=15 (limit:15) - 🟡 CC DEFAULT_MIN_INTERVAL_MS CC=19 (limit:15) - 🟡 CC DEFAULT_SCAN_INTERVAL_MS CC=19 (limit:15) - 🟡 CC watchRepository CC=19 (limit:15) - 🟡 CC classifyAction CC=17 (limit:15) - 🟡 CC proposeCodeChangePlans CC=17 (limit:15) - 🟡 CC paths CC=16 (limit:15) - 🟡 CC assertCodeChangeReviewPatch CC=23 (limit:15) - 🟡 CC assertCodeChangeSourcePatch CC=47 (limit:15) - 🟡 CC assertCodeChangeSourcePatchSet CC=18 (limit:15) - 🟡 CC normalizeUnifiedDiff CC=17 (limit:15) + 🔴 GOD src/extractors/communication.ts = 515L, 5 classes, 76m, max CC=50 + 🔴 GOD src/synthesis/code-change-plan/implementation.ts = 1310L, 10 classes, 127m, max CC=47 + 🔴 GOD src/communication/llm/implementation.ts = 514L, 8 classes, 53m, max CC=12 + 🟡 CC handleRequest CC=16 (limit:15) + 🟡 CC extractCommunicationFile CC=50 (limit:15) + 🟡 CC inferIdentity CC=15 (limit:15) + 🟡 CC extractMarkdownIntentAudited CC=19 (limit:15) + 🟡 CC extractTypeScriptFile CC=43 (limit:15) + 🟡 CC visit CC=25 (limit:15) + 🟡 CC buildSymbolResolutionIndex CC=15 (limit:15) + 🟡 CC scorePair CC=18 (limit:15) + 🟡 CC diagnoseGraph CC=40 (limit:15) + 🟡 CC neighbors CC=35 (limit:15) + 🟡 CC recordsById CC=35 (limit:15) + 🟡 CC groundedImplementation CC=35 (limit:15) + 🟡 CC implementedPaths CC=35 (limit:15) + 🟡 CC documentedPaths CC=35 (limit:15) + 🟡 CC symbolResolutionIndex CC=35 (limit:15) + 🟡 CC executeAction CC=83 (limit:15) + 🟡 CC root CC=83 (limit:15) -REFACTOR[6]: - 1. split src/synthesis/code-change-plan.ts (god module) - 2. split src/semantic/reranker.ts (god module) - 3. split src/core/schema.ts (god module) - 4. split src/communication/llm.ts (god module) - 5. split src/core/types.ts (god module) - 6. split 15 high-CC methods (CC>15) +REFACTOR[4]: + 1. split src/extractors/communication.ts (god module) + 2. split src/synthesis/code-change-plan/implementation.ts (god module) + 3. split src/communication/llm/implementation.ts (god module) + 4. split 17 high-CC methods (CC>15) -PIPELINES[1882]: - [1] Src [parsed]: parsed → printHelp +PIPELINES[2043]: + [1] Src [main]: main → arguments PURITY: 100% pure - [2] Src [command]: command → printHelp + [2] Src [new]: new PURITY: 100% pure - [3] Src [config]: config + [3] Src [visit_item_mod]: visit_item_mod → qualified PURITY: 100% pure - [4] Src [graphFile]: graphFile + [4] Src [visit_item_use]: visit_item_use → add → excerpt PURITY: 100% pure - [5] Src [diagnosticsPath]: diagnosticsPath → optionNumber → optionString + [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified PURITY: 100% pure - [6] Src [diagnostics]: diagnostics → optionNumber → optionString + [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified PURITY: 100% pure - [7] Src [result]: result → execFileAsync + [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified PURITY: 100% pure - [8] Src [graphPath]: graphPath + [8] Src [visit_item_type]: visit_item_type → type_item → qualified PURITY: 100% pure - [9] Src [output]: output + [9] Src [visit_item_const]: visit_item_const → qualified PURITY: 100% pure - [10] Src [synthesisPath]: synthesisPath + [10] Src [visit_item_static]: visit_item_static → qualified PURITY: 100% pure - [11] Src [patch]: patch + [11] Src [visit_item_fn]: visit_item_fn → qualified PURITY: 100% pure - [12] Src [audit]: audit + [12] Src [visit_item_impl]: visit_item_impl PURITY: 100% pure - [13] Src [receipt]: receipt + [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt PURITY: 100% pure - [14] Src [actor]: actor + [14] Src [visit_expr_call]: visit_expr_call → add → excerpt PURITY: 100% pure - [15] Src [approvalHash]: approvalHash + [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt PURITY: 100% pure - [16] Src [plansPath]: plansPath + [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid PURITY: 100% pure - [17] Src [inputPath]: inputPath + [17] Src [validateEventPayload]: validateEventPayload → invalid PURITY: 100% pure - [18] Src [isPlanSet]: isPlanSet → optionString + [18] Src [record]: record → invalid PURITY: 100% pure - [19] Src [patchPath]: patchPath + [19] Src [agent]: agent → invalid PURITY: 100% pure - [20] Src [planPath]: planPath + [20] Src [action]: action → invalid PURITY: 100% pure - [21] Src [beforeGraphPath]: beforeGraphPath + [21] Src [object]: object → invalid PURITY: 100% pure - [22] Src [afterGraphPath]: afterGraphPath + [22] Src [enqueueEvent]: enqueueEvent PURITY: 100% pure - [23] Src [root]: root → optionString + [23] Src [listEvents]: listEvents PURITY: 100% pure - [24] Src [taskFile]: taskFile → optionNullableString + [24] Src [start]: start PURITY: 100% pure - [25] Src [controller]: controller → optionNumber → optionString + [25] Src [store]: store → handleRequest → sendJson PURITY: 100% pure - [26] Src [stop]: stop → optionNumber → optionString + [26] Src [server]: server → handleRequest → sendJson PURITY: 100% pure - [27] Src [stamp]: stamp → file + [27] Src [url]: url PURITY: 100% pure - [28] Src [mode]: mode → optionNumber → optionString + [28] Src [body]: body PURITY: 100% pure - [29] Src [svg]: svg → optionNumber → optionString + [29] Src [validation]: validation → sendJson PURITY: 100% pure - [30] Src [html]: html → optionNumber → optionString + [30] Src [event]: event → sendJson PURITY: 100% pure - [31] Src [beforeFile]: beforeFile + [31] Src [offset]: offset → sendJson PURITY: 100% pure - [32] Src [afterFile]: afterFile + [32] Src [limit]: limit → sendJson PURITY: 100% pure - [33] Src [diff]: diff → optionNumber → optionString + [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson PURITY: 100% pure - [34] Src [context]: context → optionString + [34] Src [port]: port PURITY: 100% pure - [35] Src [maxRows]: maxRows → optionString + [35] Src [host]: host PURITY: 100% pure - [36] Src [view]: view → optionNumber → optionString + [36] Src [fetchEvents]: fetchEvents PURITY: 100% pure - [37] Src [extractor]: extractor → optionString + [37] Src [url]: url PURITY: 100% pure - [38] Src [moduleRoot]: moduleRoot + [38] Src [response]: response PURITY: 100% pure - [39] Src [sourceEnv]: sourceEnv + [39] Src [payload]: payload PURITY: 100% pure - [40] Src [targetEnv]: targetEnv + [40] Src [publishEvent]: publishEvent PURITY: 100% pure - [41] Src [task]: task + [41] Src [toRows]: toRows → classifyEvent PURITY: 100% pure - [42] Src [sourceIgnore]: sourceIgnore + [42] Src [renderTable]: renderTable → headerRow PURITY: 100% pure - [43] Src [targetIgnore]: targetIgnore + [43] Src [table]: table PURITY: 100% pure - [44] Src [options]: options + [44] Src [head]: head PURITY: 100% pure - [45] Src [next]: next + [45] Src [body]: body PURITY: 100% pure - [46] Src [name]: name + [46] Src [tr]: tr PURITY: 100% pure - [47] Src [number]: number + [47] Src [renderError]: renderError PURITY: 100% pure - [48] Src [invokedPath]: invokedPath → main → printHelp + [48] Src [message]: message PURITY: 100% pure - [49] Src [diffUiHtml]: diffUiHtml → byId + [49] Src [mountPanel]: mountPanel → createState PURITY: 100% pure - [50] Src [maxFiles]: maxFiles → relative → visit + [50] Src [load_task]: load_task PURITY: 100% pure LAYERS: @@ -141,75 +139,93 @@ LAYERS: golang/ CC̄=5.3 ←in:0 →out:0 │ ast_extract.go 368L 3C 15m CC=14 ←0 │ - src/ CC̄=4.2 ←in:0 →out:0 - │ !! code-change-plan.ts 1310L 10C 127m CC=47 ←6 - │ !! schema.ts 922L 4C 124m CC=23 ←0 - │ !! cli.ts 827L 1C 83m CC=95 ←0 + python/ CC̄=4.2 ←in:0 →out:5 + │ !! ast_extract 221L 1C 18m CC=16 ←0 + │ requirements.txt 1L 0C 0m CC=0.0 ←0 + │ + src/ CC̄=4.0 ←in:0 →out:0 + │ !! implementation.ts 1310L 10C 127m CC=47 ←3 + │ !! cli.ts 935L 1C 124m CC=13 ←0 │ !! actions.ts 700L 0C 74m CC=83 ←0 - │ !! types.ts 673L 41C 0m CC=0.0 ←0 - │ !! reality.ts 609L 3C 73m CC=26 ←0 - │ !! run.ts 602L 1C 64m CC=53 ←0 + │ !! reality.ts 619L 3C 74m CC=26 ←0 + │ !! run.ts 617L 1C 65m CC=56 ←0 + │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0 │ !! analyzer.ts 542L 3C 72m CC=48 ←0 - │ !! llm.ts 514L 8C 53m CC=12 ←0 - │ !! a2a-task-store.ts 513L 3C 81m CC=11 ←0 - │ !! reranker.ts 509L 11C 35m CC=27 ←0 + │ !! communication.ts 515L 5C 76m CC=50 ←0 + │ !! implementation.ts 514L 8C 53m CC=12 ←0 │ !! text.ts 491L 0C 51m CC=34 ←0 - │ !! linker.ts 489L 4C 72m CC=18 ←0 + │ !! linker.ts 489L 4C 72m CC=18 ←3 │ !! markdown-llm.ts 458L 6C 38m CC=19 ←0 - │ !! communication.ts 422L 4C 70m CC=76 ←0 + │ git.ts 397L 6C 57m CC=11 ←0 │ !! gold-types.ts 378L 15C 11m CC=32 ←0 │ todo-patch.ts 372L 5C 52m CC=12 ←0 + │ docs-deterministic.ts 369L 3C 43m CC=11 ←0 │ !! gold-cases.ts 366L 4C 42m CC=18 ←0 - │ !! diagnostics.ts 361L 0C 40m CC=40 ←1 + │ !! diagnostics.ts 361L 0C 40m CC=40 ←0 + │ workspace.ts 342L 3C 54m CC=12 ←0 │ !! openrouter.ts 338L 7C 39m CC=31 ←0 + │ nl-llm.ts 337L 5C 46m CC=12 ←0 │ summarizer.ts 333L 5C 27m CC=10 ←0 + │ a2a.ts 332L 0C 47m CC=9 ←0 │ gold.ts 329L 3C 31m CC=14 ←0 - │ workspace.ts 327L 3C 54m CC=12 ←0 - │ a2a.ts 320L 0C 45m CC=9 ←0 - │ contract-check.ts 317L 6C 39m CC=14 ←0 - │ !! nl-llm.ts 316L 5C 45m CC=18 ←0 - │ mcp-tools.ts 307L 1C 10m CC=8 ←0 - │ !! docs-deterministic.ts 304L 1C 33m CC=18 ←0 + │ mcp-tools.ts 323L 1C 10m CC=10 ←0 + │ code-change.ts 322L 0C 35m CC=11 ←0 + │ contract-check.ts 317L 6C 39m CC=14 ←2 + │ runtime-cycle.ts 306L 1C 35m CC=9 ←0 + │ intake-service.ts 291L 2C 48m CC=13 ←0 │ !! validation.ts 281L 0C 47m CC=84 ←0 + │ !! intent.ts 276L 4C 29m CC=23 ←0 + │ !! intake-contract.ts 273L 7C 30m CC=18 ←0 │ docs-llm.ts 269L 1C 28m CC=12 ←0 - │ tasks-llm.ts 266L 4C 22m CC=11 ←1 + │ tasks-llm.ts 266L 4C 22m CC=11 ←0 + │ !! result.ts 264L 0C 16m CC=21 ←0 │ mcp.ts 261L 2C 38m CC=9 ←0 + │ intent.ts 258L 15C 0m CC=0.0 ←0 │ text-render.ts 251L 2C 33m CC=13 ←0 │ !! watcher.ts 243L 4C 37m CC=19 ←0 │ !! text.ts 239L 1C 48m CC=19 ←2 │ diff.ts 235L 1C 38m CC=11 ←0 - │ env.ts 227L 1C 20m CC=13 ←0 + │ env.ts 231L 1C 20m CC=13 ←0 │ !! a2a-history.ts 226L 3C 37m CC=18 ←0 + │ code-change.ts 221L 16C 0m CC=0.0 ←0 + │ !! utils.ts 219L 0C 38m CC=23 ←0 │ structured-schema.ts 218L 5C 25m CC=10 ←0 - │ model-comparison.ts 218L 4C 21m CC=12 ←2 + │ model-comparison.ts 218L 4C 21m CC=12 ←0 + │ conclusions.ts 210L 0C 21m CC=9 ←0 │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0 │ configuration.ts 208L 1C 38m CC=10 ←0 │ !! code-change-path.ts 204L 0C 14m CC=38 ←0 │ ignore.ts 200L 3C 23m CC=10 ←0 + │ !! candidate.ts 200L 0C 13m CC=27 ←0 + │ !! a2a-message.ts 197L 0C 35m CC=63 ←1 │ docs-record.ts 193L 0C 34m CC=14 ←0 - │ !! a2a-message.ts 184L 0C 33m CC=57 ←0 - │ git.ts 180L 3C 26m CC=13 ←0 + │ a2a-card.ts 181L 0C 7m CC=3 ←0 │ !! io.ts 177L 1C 32m CC=15 ←0 + │ pipeline.ts 173L 7C 0m CC=0.0 ←0 + │ !! record.ts 172L 2C 9m CC=18 ←0 │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0 │ typescript.ts 172L 6C 16m CC=2 ←0 - │ !! record.ts 172L 2C 9m CC=18 ←0 - │ a2a-card.ts 169L 0C 7m CC=3 ←0 │ ast.ts 167L 2C 15m CC=12 ←0 │ id.ts 167L 0C 16m CC=5 ←0 │ !! typescript.ts 166L 0C 19m CC=43 ←0 + │ a2a-types.ts 164L 9C 14m CC=10 ←0 │ !! git.ts 161L 3C 21m CC=22 ←0 - │ a2a-types.ts 160L 9C 14m CC=10 ←0 + │ intake-store.ts 161L 3C 19m CC=11 ←0 + │ markdown-paths.ts 158L 2C 22m CC=12 ←0 + │ intake_cli 156L 0C 6m CC=10 ←0 │ types.ts 155L 8C 0m CC=0.0 ←0 │ docs-chunks.ts 147L 0C 29m CC=8 ←0 + │ !! identity.ts 146L 3C 22m CC=30 ←0 │ content-cache.ts 139L 4C 12m CC=5 ←0 │ gold-extraction.ts 127L 0C 13m CC=5 ←0 + │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0 │ subactor.ts 122L 1C 9m CC=13 ←0 - │ !! markdown-paths.ts 122L 1C 17m CC=17 ←0 │ !! symbol-resolution.ts 120L 3C 16m CC=15 ←0 │ validation.ts 113L 2C 28m CC=11 ←0 + │ validation.ts 111L 0C 11m CC=7 ←0 │ nl.ts 107L 1C 12m CC=10 ←0 + │ types.ts 106L 11C 0m CC=0.0 ←0 │ svg.ts 104L 2C 7m CC=2 ←0 - │ !! identity.ts 100L 3C 14m CC=30 ←0 │ changelog.ts 99L 0C 16m CC=11 ←0 │ records.ts 97L 0C 10m CC=6 ←0 │ !! classifier.ts 96L 4C 27m CC=17 ←0 @@ -217,6 +233,7 @@ LAYERS: │ changelog-signal.ts 89L 0C 12m CC=8 ←0 │ mcp-resources.ts 88L 0C 13m CC=6 ←0 │ contract.ts 84L 0C 7m CC=1 ←0 + │ governed-intake.proto 78L 0C 0m CC=0.0 ←0 │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0 │ docs-types.ts 68L 7C 0m CC=0.0 ←0 │ markdown-block.ts 67L 1C 3m CC=10 ←0 @@ -229,31 +246,42 @@ LAYERS: │ security.ts 55L 0C 11m CC=7 ←0 │ index.ts 53L 0C 0m CC=0.0 ←0 │ gold-metrics.ts 50L 1C 11m CC=4 ←0 - │ !! diff-ui.ts 48L 0C 9m CC=52 ←0 │ external.ts 48L 1C 5m CC=9 ←0 + │ !! diff-ui.ts 48L 0C 9m CC=52 ←0 + │ diagnostics.ts 45L 2C 0m CC=0.0 ←0 │ gold-cli.ts 44L 0C 10m CC=12 ←0 │ docs-schema.ts 43L 0C 5m CC=1 ←0 │ reranker-response.ts 42L 1C 5m CC=1 ←0 │ python.ts 39L 0C 6m CC=2 ←0 │ text-types.ts 39L 4C 0m CC=0.0 ←0 + │ intake-actions.ts 38L 0C 10m CC=6 ←0 + │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0 │ markdown.ts 35L 1C 4m CC=4 ←0 - │ compile-cli.ts 34L 0C 7m CC=10 ←0 │ php.ts 34L 0C 6m CC=2 ←0 + │ compile-cli.ts 34L 0C 7m CC=10 ←0 + │ constants.ts 31L 0C 14m CC=1 ←0 │ unsupported.ts 30L 0C 4m CC=5 ←0 │ failure.ts 25L 1C 3m CC=7 ←0 │ grounding.ts 24L 0C 5m CC=5 ←0 │ rust.ts 20L 0C 2m CC=1 ←0 - │ java.ts 20L 0C 2m CC=1 ←0 │ go.ts 20L 0C 2m CC=1 ←0 + │ java.ts 20L 0C 2m CC=1 ←0 │ types.ts 20L 2C 0m CC=0.0 ←0 + │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0 + │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0 │ audit.ts 19L 0C 1m CC=1 ←0 + │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0 + │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0 + │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0 │ mcp-errors.ts 10L 1C 2m CC=3 ←0 + │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0 + │ index.ts 8L 0C 0m CC=0.0 ←0 + │ index.ts 4L 0C 0m CC=0.0 ←0 + │ index.ts 4L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 - │ - python/ CC̄=4.2 ←in:0 →out:5 - │ !! ast_extract 221L 1C 18m CC=16 ←0 - │ requirements.txt 1L 0C 0m CC=0.0 ←0 + │ index.ts 1L 0C 0m CC=0.0 ←0 + │ llm.ts 1L 0C 0m CC=0.0 ←0 │ scripts/ CC̄=3.4 ←in:0 →out:0 │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0 @@ -272,18 +300,17 @@ LAYERS: │ smoke.sh 57L 0C 0m CC=0.0 ←0 │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0 │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0 + │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0 │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0 │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0 - │ normalize-generated-analysis-roots.mjs 34L 0C 7m CC=4 ←0 │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0 - │ README.md 27L 0C 0m CC=0.0 ←0 │ vallm-compatible 25L 0C 1m CC=2 ←0 │ package 25L 0C 0m CC=0.0 ←0 │ a2a-request.sh 23L 0C 0m CC=0.0 ←0 │ mcp-request.sh 11L 0C 0m CC=0.0 ←0 │ - java/ CC̄=3.0 ←in:0 →out:0 - │ JavaAstExtract.java 260L 1C 12m CC=10 ←0 + java/ CC̄=3.0 ←in:2 →out:0 + │ JavaAstExtract.java 260L 1C 12m CC=10 ←1 │ sdk/ CC̄=2.7 ←in:0 →out:0 │ client 469L 7C 45m CC=7 ←0 @@ -299,70 +326,53 @@ LAYERS: │ actions.go 136L 0C 18m CC=3 ←0 │ basic.php 112L 0C 0m CC=0.0 ←0 │ !! basic.rs 108L 0C 3m CC=20 ←0 - │ README.md 107L 0C 0m CC=0.0 ←0 │ actions.rs 100L 1C 20m CC=4 ←0 │ basic 95L 0C 1m CC=11 ←0 │ !! basic.ts 84L 0C 19m CC=17 ←0 - │ README.md 68L 0C 0m CC=0.0 ←0 │ lib.rs 49L 0C 0m CC=0.0 ←0 │ error.rs 37L 2C 2m CC=2 ←0 │ local_runtime 36L 0C 1m CC=1 ←0 │ __init__ 33L 0C 0m CC=0.0 ←0 + │ package.json 32L 0C 0m CC=0.0 ←0 │ todo2code.go 30L 0C 0m CC=0.0 ←0 - │ package.json 28L 0C 0m CC=0.0 ←0 │ Error.php 25L 1C 2m CC=1 ←0 - │ README.md 24L 0C 0m CC=0.0 ←0 - │ README.md 23L 0C 0m CC=0.0 ←0 - │ README.md 21L 0C 0m CC=0.0 ←0 │ tsconfig.json 20L 0C 0m CC=0.0 ←0 - │ README.md 20L 0C 0m CC=0.0 ←0 │ composer.json 18L 0C 0m CC=0.0 ←0 │ Cargo.toml 17L 0C 0m CC=0.0 ←0 + │ pyproject.toml 17L 0C 0m CC=0.0 ←0 │ __init__ 13L 0C 0m CC=0.0 ←0 │ __init__ 1L 0C 0m CC=0.0 ←0 │ examples/ CC̄=2.4 ←in:0 →out:0 │ !! server.ts 99L 1C 18m CC=16 ←0 │ render.ts 64L 1C 12m CC=4 ←0 - │ api.ts 50L 3C 6m CC=6 ←0 + │ api.ts 50L 3C 6m CC=6 ←1 │ store.ts 48L 3C 4m CC=1 ←0 - │ README.md 46L 0C 0m CC=0.0 ←0 │ app.ts 43L 1C 7m CC=4 ←0 - │ README.md 35L 0C 0m CC=0.0 ←0 + │ participants.json 37L 0C 0m CC=0.0 ←0 │ validation.ts 31L 1C 7m CC=10 ←0 │ python 23L 0C 0m CC=0.0 ←0 - │ task.md 18L 0C 0m CC=0.0 ←0 - │ task.md 17L 0C 0m CC=0.0 ←0 │ typescript.mjs 16L 0C 1m CC=1 ←0 │ tsconfig.json 15L 0C 0m CC=0.0 ←0 │ tsconfig.json 14L 0C 0m CC=0.0 ←0 │ runtime.ts 13L 1C 2m CC=2 ←0 - │ CHANGELOG.md 11L 0C 0m CC=0.0 ←0 - │ CHANGELOG.md 11L 0C 0m CC=0.0 ←0 - │ CHANGELOG.md 11L 0C 0m CC=0.0 ←0 │ helper 9L 0C 2m CC=1 ←0 - │ task.md 9L 0C 0m CC=0.0 ←0 - │ ARCHITECTURE.md 9L 0C 0m CC=0.0 ←0 - │ TODO.md 8L 0C 0m CC=0.0 ←0 - │ TODO.md 7L 0C 0m CC=0.0 ←0 - │ TODO.md 7L 0C 0m CC=0.0 ←0 │ rust-ast/ CC̄=1.9 ←in:0 →out:0 │ main.rs 322L 3C 23m CC=9 ←0 │ Cargo.toml 12L 0C 0m CC=0.0 ←0 │ ./ CC̄=0.0 ←in:0 →out:0 - │ !! README.md 871L 0C 0m CC=0.0 ←0 - │ !! CHANGELOG.md 670L 0C 0m CC=0.0 ←0 - │ TODO.md 391L 0C 0m CC=0.0 ←0 - │ Makefile 129L 0C 0m CC=0.0 ←0 - │ package.json 48L 0C 0m CC=0.0 ←0 + │ !! goal.yaml 530L 0C 0m CC=0.0 ←0 + │ Makefile 132L 0C 0m CC=0.0 ←0 + │ project.sh 124L 0C 3m CC=0.0 ←0 + │ project2.sh 79L 0C 0m CC=0.0 ←0 + │ package.json 52L 0C 0m CC=0.0 ←0 │ Dockerfile 45L 0C 0m CC=0.0 ←0 - │ CONTRIBUTION.md 37L 0C 0m CC=0.0 ←0 │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0 │ tsconfig.json 23L 0C 0m CC=0.0 ←0 │ docker-compose.yml 18L 0C 0m CC=0.0 ←0 - │ TASK.md 10L 0C 0m CC=0.0 ←0 + │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0 │ schemas/ CC̄=0.0 ←in:0 →out:0 │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0 @@ -382,67 +392,37 @@ LAYERS: │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0 │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0 │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0 - │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0 │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0 + │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0 │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0 │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0 │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0 │ - prompts/ CC̄=0.0 ←in:0 →out:0 - │ tasks-from-dsl.system.md 52L 0C 0m CC=0.0 ←0 - │ summarize.system.md 51L 0C 0m CC=0.0 ←0 - │ docs-to-intent.system.md 23L 0C 0m CC=0.0 ←0 - │ nl-to-intent.system.md 15L 0C 0m CC=0.0 ←0 - │ communication-to-intent.system.md 7L 0C 0m CC=0.0 ←0 - │ markdown-to-intent.system.md 5L 0C 0m CC=0.0 ←0 + adapters/ CC̄=0.0 ←in:0 →out:0 + │ package.json 14L 0C 0m CC=0.0 ←0 │ evaluation/ CC̄=0.0 ←in:0 →out:0 │ !! dataset.json 2410L 0C 0m CC=0.0 ←0 │ !! dataset.json 761L 0C 0m CC=0.0 ←0 - │ README.md 87L 0C 0m CC=0.0 ←0 - │ - docs/ CC̄=0.0 ←in:0 →out:0 - │ !! SYSTEM_MONITOROWANIA_INTENCJI_I_PRACY_AGENTOW.md 872L 0C 0m CC=0.0 ←0 - │ !! original-monitoring-design.md 872L 0C 0m CC=0.0 ←0 - │ !! TEST_REPORT.md 587L 0C 0m CC=0.0 ←0 - │ PIPELINE_DSL_NL.md 464L 0C 0m CC=0.0 ←0 - │ DSL.md 457L 0C 0m CC=0.0 ←0 - │ READINESS.md 442L 0C 0m CC=0.0 ←0 - │ ALL_DIAGRAMS.md 410L 0C 0m CC=0.0 ←0 - │ CLI_GUIDE.md 328L 0C 0m CC=0.0 ←0 - │ GROK-PLAN.md 269L 0C 0m CC=0.0 ←0 - │ TEAM_COMMUNICATION.md 268L 0C 0m CC=0.0 ←0 - │ OPTIMIZATION.md 249L 0C 0m CC=0.0 ←0 - │ ARCHITECTURE.md 200L 0C 0m CC=0.0 ←0 - │ VALIDATION.md 198L 0C 0m CC=0.0 ←0 - │ DEMOLLM.md 175L 0C 0m CC=0.0 ←0 - │ CODE_CHANGE_PLANS.md 173L 0C 0m CC=0.0 ←0 - │ PROTOCOLS.md 124L 0C 0m CC=0.0 ←0 - │ E2E.md 52L 0C 0m CC=0.0 ←0 - │ SECURITY.md 50L 0C 0m CC=0.0 ←0 - │ REQUIREMENTS.md 39L 0C 0m CC=0.0 ←0 - │ SUBACTOR_OPERATION_DSL.md 33L 0C 0m CC=0.0 ←0 - │ README.md 22L 0C 0m CC=0.0 ←0 - │ - adapters/ CC̄=0.0 ←in:0 →out:0 - │ package.json 10L 0C 0m CC=0.0 ←0 │ COUPLING: - scripts.research src.synthesis sdk.python src.live src.diff python src.graph - scripts.research ── 2 7 2 !! fan-out - src.synthesis ←2 ── ←6 ←1 hub - sdk.python 6 ── 2 !! fan-out - src.live ←7 ── hub - src.diff ←2 ── ←4 hub - python 1 4 ── - src.graph ←2 ── + scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend + scripts.research ── 7 2 1 1 !! fan-out + sdk.python ── 4 1 2 1 !! fan-out + src.live ←7 ── hub + src.diff ←2 ── ←4 hub + python 4 ── 1 + src.synthesis ←1 ←4 ── hub + src.graph ←1 ←1 ←1 ── + java ←2 ── + examples.frontend ←1 ── CYCLES: none - HUB: src.diff/ (fan-in=6) - HUB: src.synthesis/ (fan-in=9) HUB: src.live/ (fan-in=7) - SMELL: sdk.python/ fan-out=8 → split needed + HUB: src.synthesis/ (fan-in=5) + HUB: src.diff/ (fan-in=6) SMELL: scripts.research/ fan-out=11 → split needed + SMELL: sdk.python/ fan-out=8 → split needed EXTERNAL: validation: run `vallm batch .` → validation.toon diff --git a/project/calls.mmd b/project/calls.mmd index 878d00d..f790723 100644 --- a/project/calls.mmd +++ b/project/calls.mmd @@ -1,876 +1,942 @@ flowchart LR %% generated in 0.04s - subgraph src__cli - src__cli__handleExtract["handleExtract"] - src__cli__optionLlmMode["optionLlmMode"] - src__cli__maxRows["maxRows"] - src__cli__optionBoolean["optionBoolean"] - src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] - src__cli__formatWatchEvent["formatWatchEvent"] - src__cli__diff["diff"] - src__cli__handleWatch["handleWatch"] - src__cli__file["file"] - src__cli__initProject["initProject"] - src__cli__taskFile["taskFile"] - src__cli__optionNumber["optionNumber"] - src__cli__printHelp["printHelp"] - src__cli__invokedPath["invokedPath"] - src__cli__optionSummaryMode["optionSummaryMode"] - src__cli__svg["svg"] - src__cli__handleReality["handleReality"] - src__cli__stamp["stamp"] - src__cli__handleCommunication["handleCommunication"] - src__cli__result["result"] - src__cli__parsed["parsed"] - src__cli__mode["mode"] - src__cli__main["main"] - src__cli__extractor["extractor"] - src__cli__execFileAsync["execFileAsync"] - src__cli__optionNullableString["optionNullableString"] - src__cli__html["html"] - src__cli__doctor["doctor"] - src__cli__optionNlMode["optionNlMode"] - src__cli__command["command"] - src__cli__emitExtraction["emitExtraction"] - src__cli__parseArgs["parseArgs"] - src__cli__isPlanSet["isPlanSet"] - src__cli__stop["stop"] - src__cli__diagnosticsPath["diagnosticsPath"] - src__cli__root["root"] - src__cli__handleDiff["handleDiff"] - src__cli__optionList["optionList"] - src__cli__optionString["optionString"] - src__cli__optionTaskMode["optionTaskMode"] - src__cli__diagnostics["diagnostics"] - src__cli__context["context"] - src__cli__controller["controller"] - src__cli__view["view"] + subgraph examples__backend + examples__backend__src__server__sendJson["sendJson"] + examples__backend__src__server__startBackend["startBackend"] + examples__backend__src__server__handleRequest["handleRequest"] + examples__backend__src__validation__action["action"] + examples__backend__src__server__size["size"] + examples__backend__src__server__event["event"] + examples__backend__src__validation__agent["agent"] + examples__backend__src__server__store["store"] + examples__backend__src__validation__validateEventPayload["validateEventPayload"] + examples__backend__src__server__limit["limit"] + examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] + examples__backend__src__validation__invalid["invalid"] + examples__backend__src__validation__object["object"] + examples__backend__src__validation__record["record"] + examples__backend__src__server__validation["validation"] + examples__backend__src__server__createBackend["createBackend"] + examples__backend__src__server__server["server"] + examples__backend__src__server__readBody["readBody"] + examples__backend__src__server__offset["offset"] end - subgraph src__operations - src__operations__validation__dateString["dateString"] - src__operations__validation__exactKeys["exactKeys"] - src__operations__validation__principals["principals"] - src__operations__validation__objectValue["objectValue"] - src__operations__validation__nonBlank["nonBlank"] - src__operations__validation__uniqueStrings["uniqueStrings"] - src__operations__validation__assertVariableContract["assertVariableContract"] - src__operations__validation__assertPrincipalList["assertPrincipalList"] + subgraph examples__frontend + examples__frontend__src__app__mountPanel["mountPanel"] + examples__frontend__src__render__toRows["toRows"] + examples__frontend__src__app__state["state"] + examples__frontend__src__app__createState["createState"] + examples__frontend__src__render__classifyEvent["classifyEvent"] + examples__frontend__src__app__reload["reload"] + examples__frontend__src__render__headerRow["headerRow"] + examples__frontend__src__render__renderTable["renderTable"] + examples__frontend__src__app__refresh["refresh"] end - subgraph src__pipeline - src__pipeline__run__docs["docs"] - src__pipeline__run__configurationExtraction["configurationExtraction"] - src__pipeline__run__reason["reason"] - src__pipeline__run__persistFailedRun["persistFailedRun"] - src__pipeline__run__manifestConfiguration["manifestConfiguration"] - src__pipeline__run__stageValue["stageValue"] - src__pipeline__run__runPipeline["runPipeline"] - src__pipeline__run__failedAudit["failedAudit"] - src__pipeline__run__communicationInputPresent["communicationInputPresent"] - src__pipeline__run__communicationStartedAt["communicationStartedAt"] - src__pipeline__run__communicationAudit["communicationAudit"] - src__pipeline__run__values["values"] - src__pipeline__run__message["message"] - src__pipeline__run__knownAudit["knownAudit"] - src__pipeline__run__aborted["aborted"] - src__pipeline__run__failureCode["failureCode"] - src__pipeline__run__includeCommunication["includeCommunication"] - src__pipeline__run__skippedAudit["skippedAudit"] - src__pipeline__run__collectTargetHints["collectTargetHints"] + subgraph examples__src + examples__src__runtime__validateContract["validateContract"] + examples__src__runtime__executeContract["executeContract"] end - subgraph src__semantic - src__semantic__reranker__validDate["validDate"] - src__semantic__reranker__createSemanticCandidateSet["createSemanticCandidateSet"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticCandidateSet["assertSemanticCandidateSet"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates["rerankSemanticCandidates"] - src__semantic__reranker__assertSemanticVerdictReason["assertSemanticVerdictReason"] - src__semantic__reranker__roundedConfidence["roundedConfidence"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__projectRecord["projectRecord"] - src__semantic__reranker__values["values"] - src__semantic__reranker__requiredText["requiredText"] - src__semantic__reranker__acceptedDeclarations["acceptedDeclarations"] - src__semantic__reranker__records["records"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__model["model"] - src__semantic__reranker__validateGeneration["validateGeneration"] - src__semantic__reranker__validateRetrieval["validateRetrieval"] - src__semantic__reranker__validateVerdictReason["validateVerdictReason"] - src__semantic__reranker__assertGroundedQuote["assertGroundedQuote"] - src__semantic__reranker__seenIds["seenIds"] - src__semantic__reranker__quote["quote"] - src__semantic__reranker__applyAcceptedSemanticRelations["applyAcceptedSemanticRelations"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult["assertSemanticRerankResult"] - src__semantic__reranker__assertSemanticRerankResult["assertSemanticRerankResult"] - src__semantic__reranker__byDeclaration["byDeclaration"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__payload["payload"] - src__semantic__reranker__seenDecisions["seenDecisions"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__modelRevision["modelRevision"] - src__semantic__reranker__decisions["decisions"] - src__semantic__reranker__assertSemanticCandidateSet["assertSemanticCandidateSet"] - src__semantic__reranker__createSemanticRerankResult["createSemanticRerankResult"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshot["assertTrackedSnapshot"] - src__semantic__reranker__seenPairs["seenPairs"] - src__semantic__reranker__boundedScore["boundedScore"] + subgraph java__JavaAstExtract + java__JavaAstExtract__JavaAstExtract__map["map"] + java__JavaAstExtract__JavaAstExtract__slash["slash"] + java__JavaAstExtract__JavaAstExtract__emit["emit"] + java__JavaAstExtract__JavaAstExtract__collect["collect"] + java__JavaAstExtract__JavaAstExtract__try["try"] + java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] + java__JavaAstExtract__JavaAstExtract__main["main"] + java__JavaAstExtract__JavaAstExtract__add["add"] + java__JavaAstExtract__JavaAstExtract__json["json"] + java__JavaAstExtract__JavaAstExtract__escape["escape"] end - subgraph src__services - src__services__actions__value["value"] - src__services__actions__patch["patch"] - src__services__actions__afterPath["afterPath"] - src__services__actions__beforeInput["beforeInput"] - src__services__actions__graph["graph"] - src__services__actions__numberValue["numberValue"] - src__services__actions__llmModeValue["llmModeValue"] - src__services__actions__scopedPath["scopedPath"] - src__services__actions__root["root"] - src__services__actions__afterDiagnostics["afterDiagnostics"] - src__services__actions__analysis["analysis"] - src__services__actions__conclusions["conclusions"] - src__services__actions__executeAction["executeAction"] - src__services__actions__nullableString["nullableString"] - src__services__actions__title["title"] - src__services__actions__booleanValue["booleanValue"] - src__services__actions__nlModeValue["nlModeValue"] - src__services__actions__before["before"] - src__services__actions__beforeDiagnostics["beforeDiagnostics"] - src__services__actions__todoPath["todoPath"] - src__services__actions__stringValue["stringValue"] - src__services__actions__resolveRoot["resolveRoot"] - src__services__actions__receiptPath["receiptPath"] - src__services__actions__after["after"] - src__services__actions__filterCommunicationGraph["filterCommunicationGraph"] - src__services__actions__afterInput["afterInput"] - src__services__actions__svg["svg"] - src__services__actions__result["result"] - src__services__actions__proposals["proposals"] - src__services__actions__diff["diff"] - src__services__actions__readRecords["readRecords"] - src__services__actions__diagnostics["diagnostics"] - src__services__actions__afterGraph["afterGraph"] - src__services__actions__summaryModeValue["summaryModeValue"] - src__services__actions__nullableScopedPath["nullableScopedPath"] - src__services__actions__stringList["stringList"] - src__services__actions__view["view"] - src__services__actions__withTextDiffViews["withTextDiffViews"] - src__services__actions__beforeGraph["beforeGraph"] - src__services__actions__hasInputValue["hasInputValue"] - src__services__actions__beforePath["beforePath"] + subgraph rust_ast__src + rust_ast__src__main__main["main"] + rust_ast__src__main__visit_item_mod["visit_item_mod"] + rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] + rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] + rust_ast__src__main__visit_item_struct["visit_item_struct"] + rust_ast__src__main__modifiers["modifiers"] + rust_ast__src__main__visit_item_type["visit_item_type"] + rust_ast__src__main__visit_item_fn["visit_item_fn"] + rust_ast__src__main__arguments["arguments"] + rust_ast__src__main__add["add"] + rust_ast__src__main__qualified["qualified"] + rust_ast__src__main__visit_item_trait["visit_item_trait"] + rust_ast__src__main__visit_item_use["visit_item_use"] + rust_ast__src__main__slash["slash"] + rust_ast__src__main__visit_item_const["visit_item_const"] + rust_ast__src__main__visit_item_static["visit_item_static"] + rust_ast__src__main__type_item["type_item"] + rust_ast__src__main__excerpt["excerpt"] + rust_ast__src__main__collect_files["collect_files"] + rust_ast__src__main__visit_item_enum["visit_item_enum"] + rust_ast__src__main__visit_expr_call["visit_expr_call"] end - subgraph src__summary - src__summary__summarizer__client["client"] - src__summary__summarizer__SummaryAttemptError__conclusions["conclusions"] - src__summary__render__renderConclusion["renderConclusion"] - src__summary__render__actions["actions"] - src__summary__summarizer__SummaryAttemptError__readPrompt["readPrompt"] - src__summary__render__renderRecords["renderRecords"] - src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection["summarizeWithCorrection"] - src__summary__render__confidence["confidence"] - src__summary__summarizer__systemPrompt["systemPrompt"] - src__summary__summarizer__SummaryAttemptError__deterministicConclusions["deterministicConclusions"] - src__summary__render__recordCitations["recordCitations"] - src__summary__summarizer__SummaryAttemptError__summaryMode["summaryMode"] - src__summary__summarizer__SummaryAttemptError__materializeConclusions["materializeConclusions"] - src__summary__summarizer__payload["payload"] - src__summary__summarizer__SummaryAttemptError__parsed["parsed"] - src__summary__summarizer__SummaryAttemptError__sortedUnique["sortedUnique"] - src__summary__summarizer__mode["mode"] - src__summary__summarizer__summarizeGraph["summarizeGraph"] - src__summary__summarizer__SummaryAttemptError__generationMetadata["generationMetadata"] - src__summary__render__renderSummaryMarkdown["renderSummaryMarkdown"] - src__summary__summarizer__SummaryAttemptError__assertConclusions["assertConclusions"] + subgraph src__extractors + src__extractors__markdown_paths__headingScopes["headingScopes"] + src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] + src__extractors__todo__relative["relative"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] + src__extractors__communication__nestedRoleIndex["nestedRoleIndex"] + src__extractors__markdown_llm__MarkdownAttemptError__stageAudit["stageAudit"] + src__extractors__docs_chunks__markdownSections["markdownSections"] + src__extractors__runtime_cycle__proposalRecord["proposalRecord"] + src__extractors__nl_llm__NlLlmRequiredError__body["body"] + src__extractors__communication__declaredParticipantId["declaredParticipantId"] + src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] + src__extractors__docs_deterministic__primePathMapper["primePathMapper"] + src__extractors__ast__typescript__declarationIsCallable["declarationIsCallable"] + src__extractors__nl_llm__NlAttemptError__isPlaceholder["isPlaceholder"] + src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] + src__extractors__nl_llm__NlLlmRequiredError__prompt["prompt"] + src__extractors__runtime_cycle__label["label"] + src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] + src__extractors__communication__item["item"] + src__extractors__communication__envelope["envelope"] + src__extractors__docs_record__anchorToSource["anchorToSource"] + src__extractors__nl_llm__NlAttemptError__toIntentRecord["toIntentRecord"] + src__extractors__configuration__files["files"] + src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] + src__extractors__communication__participant["participant"] + src__extractors__docs_record__action["action"] + src__extractors__changelog__changelogAction["changelogAction"] + src__extractors__nl_llm__NlLlmRequiredError__sourcePath["sourcePath"] + src__extractors__nl_llm__NlAttemptError__action["action"] + src__extractors__configuration__parsed["parsed"] + src__extractors__nl__action["action"] + src__extractors__communication__declaredRole["declaredRole"] + src__extractors__ast__typescript__scriptKind["scriptKind"] + src__extractors__docs_record__target["target"] + src__extractors__communication__match["match"] + src__extractors__docs_record__hasTarget["hasTarget"] + src__extractors__communication__parseEnvelope["parseEnvelope"] + src__extractors__configuration__configurationRecords["configurationRecords"] + src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] + src__extractors__markdown_paths__index["index"] + src__extractors__nl_llm__NlAttemptError__lines["lines"] + src__extractors__docs_chunks__workerCount["workerCount"] + src__extractors__docs_schema__strings["strings"] + src__extractors__nl_llm__NlAttemptError__clampLine["clampLine"] + src__extractors__nl_llm__NlAttemptError__normalizedText["normalizedText"] + src__extractors__communication__fileParts["fileParts"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] + src__extractors__nl_llm__NlLlmRequiredError__result["result"] + src__extractors__nl__absolute["absolute"] + src__extractors__nl_llm__NlAttemptError__markDeterministic["markDeterministic"] + src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] + src__extractors__ast__records__capabilities["capabilities"] + src__extractors__docs_deterministic__match["match"] + src__extractors__git__count["count"] + src__extractors__configuration__tomlEntries["tomlEntries"] + src__extractors__docs_schema__documentRecord["documentRecord"] + src__extractors__git__mapWithConcurrency["mapWithConcurrency"] + src__extractors__docs_deterministic__convertDocument["convertDocument"] + src__extractors__docs_record__isPlaceholder["isPlaceholder"] + src__extractors__ast__typescript__add["add"] + src__extractors__configuration__bounded["bounded"] + src__extractors__configuration__uniqueEntries["uniqueEntries"] + src__extractors__communication__communicationFiles["communicationFiles"] + src__extractors__ast__records__moduleTopicText["moduleTopicText"] + src__extractors__communication__nestedRole["nestedRole"] + src__extractors__nl_llm__NlAttemptError__nlStrings["nlStrings"] + src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] + src__extractors__communication__extractCommunicationIntent["extractCommunicationIntent"] + src__extractors__nl__classified["classified"] + src__extractors__nl_llm__NlLlmRequiredError__startedAt["startedAt"] + src__extractors__todo__match["match"] + src__extractors__markdown_llm__MarkdownAttemptError__failed["failed"] + src__extractors__git__readCommits["readCommits"] + src__extractors__communication__flush["flush"] + src__extractors__docs_chunks__needles["needles"] + src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] + src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage["emptyCoverage"] + src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] + src__extractors__configuration__isConfigurationPath["isConfigurationPath"] + src__extractors__docs_chunks__chunkPriority["chunkPriority"] + src__extractors__ast__records__start["start"] + src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] + src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] + src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] + src__extractors__nl__extractNlIntent["extractNlIntent"] + src__extractors__communication__sameStrings["sameStrings"] + src__extractors__configuration__pair["pair"] + src__extractors__nl_llm__NlLlmRequiredError__absolute["absolute"] + src__extractors__ast__typescript__symbol["symbol"] + src__extractors__todo__checked["checked"] + src__extractors__configuration__fileAggregate["fileAggregate"] + src__extractors__docs_record__fallback["fallback"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] + src__extractors__docs_record__statementText["statementText"] + src__extractors__ast__typescript__languageName["languageName"] + src__extractors__markdown_paths__basenames["basenames"] + src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] + src__extractors__ast__records__moduleRecords["moduleRecords"] + src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] + src__extractors__communication__normalizeType["normalizeType"] + src__extractors__ast__typescript__isTopLevel["isTopLevel"] + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] + src__extractors__changelog__extractChangelog["extractChangelog"] + src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] + src__extractors__ast__typescript__visit["visit"] + src__extractors__git__extractGitIntent["extractGitIntent"] + src__extractors__runtime_cycle__text["text"] + src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] + src__extractors__runtime_cycle__tags["tags"] + src__extractors__docs_record__allowedModality["allowedModality"] + src__extractors__git__runGit["runGit"] + src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] + src__extractors__configuration__jsonEntries["jsonEntries"] + src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] + src__extractors__runtime_cycle__proposalAction["proposalAction"] + src__extractors__runtime_cycle__parseCycle["parseCycle"] + src__extractors__communication__normalize["normalize"] + src__extractors__git__finishDiscovery["finishDiscovery"] + src__extractors__changelog__lines["lines"] + src__extractors__nl_llm__NlLlmRequiredError__client["client"] + src__extractors__communication__identity["identity"] + src__extractors__nl_llm__NlAttemptError__allowedModality["allowedModality"] + src__extractors__git__gitMarkerState["gitMarkerState"] + src__extractors__git__state["state"] + src__extractors__todo__extractTodo["extractTodo"] + src__extractors__docs_schema__documentResponseContract["documentResponseContract"] + src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] + src__extractors__runtime_cycle__probeRecord["probeRecord"] + src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] + src__extractors__docs_record__resolveTarget["resolveTarget"] + src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] + src__extractors__configuration__findKeyLine["findKeyLine"] + src__extractors__configuration__lines["lines"] + src__extractors__todo__heading["heading"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt["startedAt"] + src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] + src__extractors__nl_llm__NlLlmRequiredError__maxLine["maxLine"] + src__extractors__nl_llm__NlAttemptError__statementText["statementText"] + src__extractors__docs_record__clampLine["clampLine"] + src__extractors__todo__body["body"] + src__extractors__communication__raw["raw"] + src__extractors__runtime_cycle__factsMetadata["factsMetadata"] + src__extractors__docs_chunks__worker["worker"] + src__extractors__docs_deterministic__resolver["resolver"] + src__extractors__docs_record__resolveModality["resolveModality"] + src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] + src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] + src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] + src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] + src__extractors__todo__extractExplicitId["extractExplicitId"] + src__extractors__communication__nestedParticipant["nestedParticipant"] + src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] + src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] + src__extractors__docs_deterministic__heading["heading"] + src__extractors__runtime_cycle__results["results"] + src__extractors__todo__block["block"] + src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] + src__extractors__docs_chunks__sectionLines["sectionLines"] + src__extractors__changelog__relative["relative"] + src__extractors__nl__object["object"] + src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] + src__extractors__nl__missing["missing"] + src__extractors__ast__isExtractionResult["isExtractionResult"] + src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] + src__extractors__nl__inferActor["inferActor"] + src__extractors__docs_deterministic__root["root"] + src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] + src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] + src__extractors__ast__typescript__lineRange["lineRange"] + src__extractors__git__root["root"] + src__extractors__todo__raw["raw"] + src__extractors__todo__inferOwner["inferOwner"] + src__extractors__git__createDiscoveryState["createDiscoveryState"] + src__extractors__docs_deterministic__marker["marker"] + src__extractors__communication__unquote["unquote"] + src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] + src__extractors__ast__typescript__modifiers["modifiers"] + src__extractors__configuration__entries["entries"] + src__extractors__nl_llm__NlAttemptError__failedAudit["failedAudit"] + src__extractors__ast__external__execFileAsync["execFileAsync"] + src__extractors__ast__external__result["result"] + src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__ast__typescript__callee["callee"] + src__extractors__git__execFileAsync["execFileAsync"] + src__extractors__nl_llm__NlAttemptError__resolveObject["resolveObject"] + src__extractors__runtime_cycle__driftRecord["driftRecord"] + src__extractors__communication__inferred["inferred"] + src__extractors__nl_llm__NlAttemptError__fallback["fallback"] + src__extractors__communication__isCommunicationType["isCommunicationType"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] + src__extractors__configuration__match["match"] + src__extractors__docs_chunks__splitLongSection["splitLongSection"] + src__extractors__nl__detectMissingFields["detectMissingFields"] + src__extractors__docs_deterministic__targetsOf["targetsOf"] + src__extractors__communication__explicitEnvelope["explicitEnvelope"] + src__extractors__nl_llm__NlAttemptError__audit["audit"] + src__extractors__todo__task["task"] + src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] + src__extractors__communication__listValue["listValue"] + src__extractors__nl_llm__NlAttemptError__allowedAction["allowedAction"] + src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] + src__extractors__communication__first["first"] + src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] + src__extractors__communication__isCommunicationNoise["isCommunicationNoise"] + src__extractors__docs_chunks__flush["flush"] + src__extractors__docs_record__modality["modality"] + src__extractors__configuration__line["line"] + src__extractors__communication__heading["heading"] + src__extractors__ast__typescript__excerpt["excerpt"] + src__extractors__configuration__heading["heading"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic["deterministic"] + src__extractors__ast__records__end["end"] + src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] + src__extractors__runtime_cycle__boundedArray["boundedArray"] + src__extractors__markdown_llm__MarkdownAttemptError__readPrompt["readPrompt"] + src__extractors__runtime_cycle__jsonScalar["jsonScalar"] + src__extractors__git__readStats["readStats"] + src__extractors__todo__action["action"] + src__extractors__markdown_paths__headingDirectories["headingDirectories"] + src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] + src__extractors__communication__declaredParticipant["declaredParticipant"] + src__extractors__git__result["result"] + src__extractors__ast__typescript__symbolModifiers["symbolModifiers"] + src__extractors__docs_record__allowedAction["allowedAction"] + src__extractors__communication__identityRegistry["identityRegistry"] + src__extractors__nl__body["body"] + src__extractors__nl__confidence["confidence"] + src__extractors__nl_llm__NlAttemptError__sourceExcerpt["sourceExcerpt"] + src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] + src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__nl_llm__NlAttemptError__nonEmptyText["nonEmptyText"] + src__extractors__changelog__body["body"] + src__extractors__docs_record__resolveAction["resolveAction"] + src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] + src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] + src__extractors__ast__isIntentRecords["isIntentRecords"] + src__extractors__nl_llm__NlAttemptError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__markdown_llm__MarkdownAttemptError__strings["strings"] + src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] + src__extractors__todo__resolvedPaths["resolvedPaths"] + src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] + src__extractors__git__readChangedFiles["readChangedFiles"] + src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] + src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] + src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] + src__extractors__markdown_llm__MarkdownAttemptError__enrichment["enrichment"] + src__extractors__nl__sourcePath["sourcePath"] + src__extractors__docs_deterministic__statementRecord["statementRecord"] + src__extractors__runtime_cycle__violationRecord["violationRecord"] + src__extractors__docs_chunks__sectionText["sectionText"] + src__extractors__docs_record__linesFromChunk["linesFromChunk"] + src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic["markDeterministic"] + src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] + src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] + src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] + src__extractors__nl_llm__NlAttemptError__deterministic["deterministic"] + src__extractors__docs_schema__target["target"] + src__extractors__docs_chunks__index["index"] + src__extractors__ast__records__adapterRecords["adapterRecords"] + src__extractors__git__isGitWorkTree["isGitWorkTree"] + src__extractors__todo__text["text"] + src__extractors__configuration__relative["relative"] + src__extractors__docs_chunks__item["item"] + src__extractors__git__discoverGitRepositories["discoverGitRepositories"] + src__extractors__nl_llm__NlAttemptError__resolveAction["resolveAction"] + src__extractors__docs_record__keywordOverlap["keywordOverlap"] + src__extractors__configuration__entry["entry"] + src__extractors__docs_deterministic__action["action"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes["outcomes"] + src__extractors__communication__isTicketEvidenceFile["isTicketEvidenceFile"] + src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection["extractNlWithCorrection"] + src__extractors__communication__inferIdentity["inferIdentity"] + src__extractors__ast__typescript__capabilities["capabilities"] + src__extractors__docs_deterministic__readParagraph["readParagraph"] + src__extractors__markdown_paths__state["state"] + src__extractors__communication__basename["basename"] + src__extractors__communication__communicationSegments["communicationSegments"] + src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] + src__extractors__git__extractChangedSymbols["extractChangedSymbols"] + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__configuration__configurationFormat["configurationFormat"] + src__extractors__communication__extractCommunicationFile["extractCommunicationFile"] + src__extractors__runtime_cycle__watched["watched"] + src__extractors__configuration__dockerEntries["dockerEntries"] + src__extractors__docs_record__resolveObject["resolveObject"] + src__extractors__todo__classified["classified"] + src__extractors__todo__lines["lines"] + src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] end - subgraph src__synthesis - src__synthesis__code_change_plan__buildChanges["buildChanges"] - src__synthesis__task_synthesis_contract__taskIds["taskIds"] - src__synthesis__task_synthesis_materialize__proposalKeys["proposalKeys"] - src__synthesis__code_change_plan__assertSourcePatchStrings["assertSourcePatchStrings"] - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse["materializeTaskSynthesisRespon"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__assertConclusions["assertConclusions"] - src__synthesis__todo_patch__uniqueStrings["uniqueStrings"] - src__synthesis__code_change_plan__relatedRecords["relatedRecords"] - src__synthesis__task_synthesis_materialize__normalizeLocalKeys["normalizeLocalKeys"] - src__synthesis__todo_patch__result["result"] - src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria["normalizeAcceptanceCriteria"] - src__synthesis__task_synthesis_materialize__proposalDrafts["proposalDrafts"] - src__synthesis__task_synthesis_materialize__conclusionByKey["conclusionByKey"] - src__synthesis__todo_patch__orderedSelected["orderedSelected"] - src__synthesis__code_change_plan__fileHashesAfter["fileHashesAfter"] - src__synthesis__todo_patch__diagnosticReportFingerprint["diagnosticReportFingerprint"] - src__synthesis__validation__dependencyFirstPriorityOrder["dependencyFirstPriorityOrder"] - src__synthesis__code_change_plan__collectTarget["collectTarget"] - src__synthesis__validation__sharedTicket["sharedTicket"] - src__synthesis__task_synthesis_materialize__diagnosticIds["diagnosticIds"] - src__synthesis__todo_patch__inline["inline"] - src__synthesis__code_change_plan__planHash["planHash"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals["synthesizeTodoProposals"] - src__synthesis__code_change_plan__assertExistingSourceReceipt["assertExistingSourceReceipt"] - src__synthesis__task_synthesis_contract__nonBlank["nonBlank"] - src__synthesis__todo_patch__selected["selected"] - src__synthesis__code_change_plan__assertCodeChangeSourcePatch["assertCodeChangeSourcePatch"] - src__synthesis__code_change_plan__conclusionsByDiagnostic["conclusionsByDiagnostic"] - src__synthesis__code_change_plan__descriptionFor["descriptionFor"] - src__synthesis__code_change_plan__applyUnifiedDiffToText["applyUnifiedDiffToText"] - src__synthesis__code_change_plan__changes["changes"] - src__synthesis__todo_patch__applyTodoPatch["applyTodoPatch"] - src__synthesis__task_synthesis_materialize__sortedUnique["sortedUnique"] - src__synthesis__code_change_plan__rollbackFor["rollbackFor"] - src__synthesis__todo_patch__markdown["markdown"] - src__synthesis__code_change_plan__instructionFor["instructionFor"] - src__synthesis__code_change_path__isPlannablePath["isPlannablePath"] - src__synthesis__task_synthesis_materialize__normalizeRawTarget["normalizeRawTarget"] - src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown["renderCodeChangeReviewMarkdown"] - src__synthesis__code_change_plan__applyCodeChangeSourcePatch["applyCodeChangeSourcePatch"] - src__synthesis__code_change_plan__createCodeChangeReviewPatch["createCodeChangeReviewPatch"] - src__synthesis__code_change_plan__unifiedDiff["unifiedDiff"] - src__synthesis__todo_patch__applied["applied"] - src__synthesis__code_change_plan__index["index"] - src__synthesis__code_change_plan__planIds["planIds"] - src__synthesis__code_change_plan__confidenceFor["confidenceFor"] - src__synthesis__code_change_plan__candidates["candidates"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__client["client"] - src__synthesis__todo_patch__renderTodoPatchMarkdown["renderTodoPatchMarkdown"] - src__synthesis__todo_patch__sourceTodo["sourceTodo"] - src__synthesis__code_change_plan__priorityRank["priorityRank"] - src__synthesis__todo_patch__current["current"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow["fallbackOrThrow"] - src__synthesis__todo_patch__renderTargets["renderTargets"] - src__synthesis__todo_patch__assertReceipt["assertReceipt"] - src__synthesis__validation__duplicateEvidence["duplicateEvidence"] - src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT["RAW_PROPOSAL_CONTRACT"] - src__synthesis__todo_patch__uniqueIds["uniqueIds"] - src__synthesis__code_change_plan__rawDiff["rawDiff"] - src__synthesis__code_change_plan__deterministicGeneration["deterministicGeneration"] - src__synthesis__code_change_plan__patchHash["patchHash"] - src__synthesis__code_change_plan__proposalsByDiagnostic["proposalsByDiagnostic"] - src__synthesis__todo_patch__wasAlreadyAppended["wasAlreadyAppended"] - src__synthesis__task_synthesis_materialize__proposals["proposals"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__startedAt["startedAt"] - src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet["assertCodeChangeSourcePatchSet"] - src__synthesis__todo_patch__duplicates["duplicates"] - src__synthesis__task_synthesis_materialize__proposalIdByKey["proposalIdByKey"] - src__synthesis__code_change_plan__acceptedCount["acceptedCount"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__payload["payload"] - src__synthesis__code_change_plan__indexProposalsByDiagnostic["indexProposalsByDiagnostic"] - src__synthesis__todo_patch__classified["classified"] - src__synthesis__code_change_plan__object["object"] - src__synthesis__code_change_plan__patchIds["patchIds"] - src__synthesis__code_change_path__isUsefulCodeChangePath["isUsefulCodeChangePath"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__generationMetadata["generationMetadata"] - src__synthesis__task_synthesis_materialize__conclusions["conclusions"] - src__synthesis__code_change_plan__conclusions["conclusions"] - src__synthesis__code_change_plan__set["set"] - src__synthesis__validation__intersects["intersects"] - src__synthesis__validation__target["target"] - src__synthesis__code_change_plan__uniqueSorted["uniqueSorted"] - src__synthesis__todo_patch__renderIds["renderIds"] - src__synthesis__code_change_plan__startsWithImperative["startsWithImperative"] - src__synthesis__code_change_plan__assertSourcePatchIds["assertSourcePatchIds"] - src__synthesis__validation__sharedPath["sharedPath"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesisAudit["synthesisAudit"] - src__synthesis__code_change_plan__createCodeChangeSourcePatch["createCodeChangeSourcePatch"] - src__synthesis__code_change_plan__recordsById["recordsById"] - src__synthesis__task_synthesis_contract__taskStrings["taskStrings"] - src__synthesis__code_change_plan__now["now"] - src__synthesis__task_synthesis_materialize__keys["keys"] - src__synthesis__code_change_plan__target["target"] - src__synthesis__todo_patch__isoDate["isoDate"] - src__synthesis__code_change_plan__acceptances["acceptances"] - src__synthesis__todo_patch__currentHash["currentHash"] - src__synthesis__validation__validateAndClassifyTodoProposals["validateAndClassifyTodoProposa"] - src__synthesis__todo_patch__createTodoPatch["createTodoPatch"] - src__synthesis__code_change_plan__markdown["markdown"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__readPrompt["readPrompt"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__prompt["prompt"] - src__synthesis__todo_patch__normalizePath["normalizePath"] - src__synthesis__code_change_plan__plansById["plansById"] - src__synthesis__todo_patch__hash["hash"] - src__synthesis__todo_patch__rendered["rendered"] - src__synthesis__code_change_plan__record["record"] - src__synthesis__task_synthesis_materialize__conclusionIdByKey["conclusionIdByKey"] - src__synthesis__code_change_plan__normalizeUnifiedDiff["normalizeUnifiedDiff"] - src__synthesis__validation__proposalWords["proposalWords"] - src__synthesis__code_change_plan__titleFor["titleFor"] - src__synthesis__todo_patch__writeTodoPatchArtifacts["writeTodoPatchArtifacts"] - src__synthesis__code_change_plan__acceptanceCriteriaFor["acceptanceCriteriaFor"] - src__synthesis__code_change_plan__paths["paths"] - src__synthesis__validation__similarity["similarity"] - src__synthesis__code_change_plan__assertSourceApplyReceipt["assertSourceApplyReceipt"] - src__synthesis__todo_patch__assertApproval["assertApproval"] - src__synthesis__todo_patch__artifact["artifact"] - src__synthesis__todo_patch__appendPatch["appendPatch"] - src__synthesis__code_change_plan__indexConclusionsByDiagnostic["indexConclusionsByDiagnostic"] - src__synthesis__code_change_plan__exactSourcePatchKeys["exactSourcePatchKeys"] - src__synthesis__code_change_plan__exactSourcePatchSet["exactSourcePatchSet"] - src__synthesis__code_change_plan__splitKeep["splitKeep"] - src__synthesis__task_synthesis_contract__RAW_CONCLUSION_CONTRACT["RAW_CONCLUSION_CONTRACT"] - src__synthesis__task_synthesis_materialize__parsed["parsed"] - src__synthesis__code_change_plan__riskFor["riskFor"] - src__synthesis__todo_patch__now["now"] - src__synthesis__task_synthesis_materialize__normalizeStringArray["normalizeStringArray"] - src__synthesis__todo_patch__recovered["recovered"] - src__synthesis__validation__jaccard["jaccard"] - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection["synthesizeWithCorrection"] - src__synthesis__todo_patch__object["object"] - src__synthesis__todo_patch__exactKeys["exactKeys"] - src__synthesis__code_change_plan__createCodeChangeSourcePatchSet["createCodeChangeSourcePatchSet"] - src__synthesis__code_change_plan__renderIds["renderIds"] - src__synthesis__validation__words["words"] - src__synthesis__todo_patch__nonBlank["nonBlank"] - src__synthesis__task_synthesis_materialize__mapKeys["mapKeys"] - src__synthesis__code_change_plan__evaluateCodeChangeAcceptance["evaluateCodeChangeAcceptance"] - src__synthesis__validation__sharedSymbol["sharedSymbol"] - src__synthesis__todo_patch__assertTodoPatchArtifact["assertTodoPatchArtifact"] - src__synthesis__code_change_plan__proposals["proposals"] - src__synthesis__code_change_plan__generatedAt["generatedAt"] - src__synthesis__todo_patch__sameArray["sameArray"] - src__synthesis__code_change_plan__matchingConclusions["matchingConclusions"] - src__synthesis__todo_patch__atomicWrite["atomicWrite"] - src__synthesis__code_change_plan__inline["inline"] - src__synthesis__code_change_plan__matchingProposals["matchingProposals"] + subgraph src__graph + src__graph__linker__jaccard["jaccard"] + src__graph__linker__moduleAstIds["moduleAstIds"] + src__graph__symbol_resolution__values["values"] + src__graph__linker__indexAliases["indexAliases"] + src__graph__diff__width["width"] + src__graph__linker__candidatePairs["candidatePairs"] + src__graph__diff__changedFieldPaths["changedFieldPaths"] + src__graph__linker__buckets["buckets"] + src__graph__diff__assertGraph["assertGraph"] + src__graph__linker__isSuppressedConfigurationPair["isSuppressedConfigurationPair"] + src__graph__linker__isSuppressedAstPair["isSuppressedAstPair"] + src__graph__linker__keywordIndex["keywordIndex"] + src__graph__symbol_resolution__pathSelects["pathSelects"] + src__graph__symbol_resolution__byAlias["byAlias"] + src__graph__linker__byId["byId"] + src__graph__linker__scorePair["scorePair"] + src__graph__diff__paired["paired"] + src__graph__diff__left["left"] + src__graph__linker__intersectsAliases["intersectsAliases"] + src__graph__linker__deduplicateRecords["deduplicateRecords"] + src__graph__linker__rightId["rightId"] + src__graph__diff__relationKey["relationKey"] + src__graph__diff__values["values"] + src__graph__linker__linkIntentRecords["linkIntentRecords"] + src__graph__diff__truncate["truncate"] + src__graph__linker__astIds["astIds"] + src__graph__linker__indexKeywords["indexKeywords"] + src__graph__linker__indexTopicBuckets["indexTopicBuckets"] + src__graph__diff__y["y"] + src__graph__diff__recordIdentity["recordIdentity"] + src__graph__diff__right["right"] + src__graph__linker__determineRelation["determineRelation"] + src__graph__diff__metricCard["metricCard"] + src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"] + src__graph__linker__configurationIds["configurationIds"] + src__graph__linker__pathsIntersect["pathsIntersect"] + src__graph__linker__owners["owners"] + src__graph__symbol_resolution__selected["selected"] + src__graph__linker__values["values"] + src__graph__linker__score["score"] + src__graph__diff__normalizeRecord["normalizeRecord"] + src__graph__diff__groupRecords["groupRecords"] + src__graph__symbol_resolution__resolveSymbol["resolveSymbol"] + src__graph__linker__records["records"] + src__graph__diff__diffIntentGraphs["diffIntentGraphs"] + src__graph__linker__resolvableBasenames["resolvableBasenames"] + src__graph__diff__afterRecord["afterRecord"] + src__graph__linker__aliases["aliases"] + src__graph__diff__visibleRows["visibleRows"] + src__graph__linker__collectCandidatePairs["collectCandidatePairs"] + src__graph__diff__renderGraphDiffSvg["renderGraphDiffSvg"] + src__graph__diff__compareRelations["compareRelations"] + src__graph__linker__leftId["leftId"] + src__graph__symbol_resolution__byNlRecord["byNlRecord"] + src__graph__diff__groups["groups"] + src__graph__diff__beforeGroups["beforeGroups"] + src__graph__linker__indexResolvableBasenames["indexResolvableBasenames"] + src__graph__linker__isModuleTopicSource["isModuleTopicSource"] + src__graph__symbol_resolution__buildSymbolResolutionIndex["buildSymbolResolutionIndex"] + src__graph__linker__declarationAstIds["declarationAstIds"] + src__graph__symbol_resolution__isAstDeclaration["isAstDeclaration"] + src__graph__diff__afterGroups["afterGroups"] + src__graph__linker__expand["expand"] + src__graph__linker__isFileAggregateEvidencePair["isFileAggregateEvidencePair"] + src__graph__linker__leftKeywords["leftKeywords"] + src__graph__linker__set["set"] + src__graph__diff__escapeXml["escapeXml"] + src__graph__diff__isObject["isObject"] + src__graph__diff__beforeRecord["beforeRecord"] + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair["hasResolvedNlAstSymbolPair"] + src__graph__linker__indexKeywordBuckets["indexKeywordBuckets"] + src__graph__symbol_resolution__uniquePaths["uniquePaths"] + src__graph__linker__indexTargetBuckets["indexTargetBuckets"] + src__graph__diff__height["height"] + src__graph__linker__addToBucket["addToBucket"] + src__graph__linker__pairsFromBuckets["pairsFromBuckets"] + src__graph__linker__intersects["intersects"] end - subgraph src__tf - src__tf__classifier__classifyAction["classifyAction"] - src__tf__classifier__dynamicImport["dynamicImport"] - src__tf__classifier__vectorize["vectorize"] - src__tf__classifier__importer["importer"] - src__tf__classifier__loadClassifier["loadClassifier"] - src__tf__classifier__loadAssets["loadAssets"] - end - subgraph src__watch - src__watch__watcher__waitMs["waitMs"] - src__watch__watcher__diffSnapshots["diffSnapshots"] - src__watch__watcher__emit["emit"] - src__watch__watcher__snapshot["snapshot"] - src__watch__watcher__describeDelta["describeDelta"] - src__watch__watcher__visit["visit"] - src__watch__watcher__relative["relative"] - src__watch__watcher__sleep["sleep"] - src__watch__watcher__lastReportStartedAt["lastReportStartedAt"] - src__watch__watcher__current["current"] - src__watch__watcher__defaultSleep["defaultSleep"] - src__watch__watcher__pending["pending"] - src__watch__watcher__onAbort["onAbort"] - src__watch__watcher__generate["generate"] - src__watch__watcher__watchRepository["watchRepository"] - src__watch__watcher__absolute["absolute"] - src__watch__watcher__finish["finish"] - src__watch__watcher__result["result"] - src__watch__watcher__now["now"] - src__watch__watcher__maxFiles["maxFiles"] - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS["DEFAULT_MIN_INTERVAL_MS"] - src__watch__watcher__scanTree["scanTree"] - src__watch__watcher__delta["delta"] - src__watch__watcher__absoluteRoot["absoluteRoot"] - src__watch__watcher__runReport["runReport"] - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS["DEFAULT_SCAN_INTERVAL_MS"] - src__watch__watcher__timer["timer"] - src__watch__watcher__startedAt["startedAt"] - end - subgraph src__web - src__web__diff_ui__loadRuns["loadRuns"] - src__web__diff_ui__fillSelect["fillSelect"] - src__web__diff_ui__requestHeaders["requestHeaders"] - src__web__diff_ui__compareGraphs["compareGraphs"] - src__web__diff_ui__byId["byId"] - src__web__diff_ui__selectedRun["selectedRun"] - src__web__diff_ui__diffUiHtml["diffUiHtml"] - src__web__diff_ui__updateMeta["updateMeta"] - src__web__diff_ui__formatBytes["formatBytes"] - end - src__cli__main --> src__cli__printHelp - src__cli__main --> src__cli__parseArgs - src__cli__main --> src__cli__initProject - src__cli__parsed --> src__cli__printHelp - src__cli__command --> src__cli__printHelp - src__cli__diagnosticsPath --> src__cli__optionNumber - src__cli__diagnosticsPath --> src__cli__optionBoolean - src__cli__diagnostics --> src__cli__optionNumber - src__cli__diagnostics --> src__cli__optionBoolean - src__cli__result --> src__cli__execFileAsync - src__cli__isPlanSet --> src__cli__optionString - src__cli__root --> src__cli__optionString - src__cli__root --> src__cli__optionNullableString - src__cli__root --> src__cli__optionLlmMode - src__cli__handleWatch --> src__cli__optionNullableString - src__cli__handleWatch --> src__cli__optionList - src__cli__handleWatch --> src__cli__optionBoolean - src__cli__handleWatch --> src__cli__optionString - src__cli__handleWatch --> src__cli__optionNumber - src__cli__handleWatch --> src__cli__optionNlMode - src__cli__taskFile --> src__cli__optionNullableString - src__cli__taskFile --> src__cli__optionList - src__cli__taskFile --> src__cli__optionBoolean - src__cli__taskFile --> src__cli__optionString - src__cli__taskFile --> src__cli__optionNumber - src__cli__taskFile --> src__cli__optionNlMode - src__cli__taskFile --> src__cli__optionLlmMode - src__cli__taskFile --> src__cli__optionPipelineTaskMode - src__cli__controller --> src__cli__optionNumber - src__cli__controller --> src__cli__optionBoolean - src__cli__controller --> src__cli__formatWatchEvent - src__cli__stop --> src__cli__optionNumber - src__cli__stop --> src__cli__optionBoolean - src__cli__stop --> src__cli__formatWatchEvent - src__cli__formatWatchEvent --> src__cli__file - src__cli__stamp --> src__cli__file - src__cli__handleDiff --> src__cli__optionString - src__cli__handleDiff --> src__cli__optionNumber - src__cli__mode --> src__cli__optionNumber - src__cli__svg --> src__cli__optionNumber - src__cli__svg --> src__cli__optionBoolean - src__cli__html --> src__cli__optionNumber - src__cli__diff --> src__cli__optionNumber - src__cli__context --> src__cli__optionString - src__cli__context --> src__cli__optionBoolean - src__cli__context --> src__cli__optionNumber - src__cli__maxRows --> src__cli__optionString - src__cli__maxRows --> src__cli__optionBoolean - src__cli__maxRows --> src__cli__optionNumber - src__cli__handleReality --> src__cli__optionString - src__cli__handleReality --> src__cli__optionNumber - src__cli__handleReality --> src__cli__optionBoolean - src__cli__view --> src__cli__optionNumber - src__cli__view --> src__cli__optionBoolean - src__cli__handleExtract --> src__cli__optionString - src__cli__handleExtract --> src__cli__optionNlMode - src__cli__handleExtract --> src__cli__emitExtraction - src__cli__handleExtract --> src__cli__optionNumber - src__cli__extractor --> src__cli__optionString - src__cli__extractor --> src__cli__optionNlMode - src__cli__extractor --> src__cli__emitExtraction - src__cli__handleCommunication --> src__cli__optionString - src__cli__handleCommunication --> src__cli__optionNullableString - src__cli__handleCommunication --> src__cli__optionLlmMode - src__cli__handleCommunication --> src__cli__optionNumber - src__cli__handleCommunication --> src__cli__optionBoolean - src__cli__doctor --> src__cli__execFileAsync - src__cli__optionNumber --> src__cli__optionString - src__cli__optionList --> src__cli__optionString - src__cli__optionNlMode --> src__cli__optionLlmMode - src__cli__optionLlmMode --> src__cli__optionString - src__cli__optionTaskMode --> src__cli__optionString - src__cli__optionSummaryMode --> src__cli__optionLlmMode - src__cli__optionSummaryMode --> src__cli__optionBoolean - src__cli__optionPipelineTaskMode --> src__cli__optionString - src__cli__invokedPath --> src__cli__main - src__web__diff_ui__diffUiHtml --> src__web__diff_ui__byId - src__web__diff_ui__requestHeaders --> src__web__diff_ui__byId - src__web__diff_ui__formatBytes --> src__web__diff_ui__selectedRun - src__web__diff_ui__formatBytes --> src__web__diff_ui__byId - src__web__diff_ui__selectedRun --> src__web__diff_ui__byId - src__web__diff_ui__selectedRun --> src__web__diff_ui__formatBytes - src__web__diff_ui__updateMeta --> src__web__diff_ui__selectedRun - src__web__diff_ui__updateMeta --> src__web__diff_ui__byId - src__web__diff_ui__updateMeta --> src__web__diff_ui__formatBytes - src__web__diff_ui__fillSelect --> src__web__diff_ui__byId - src__web__diff_ui__fillSelect --> src__web__diff_ui__updateMeta - src__web__diff_ui__loadRuns --> src__web__diff_ui__byId - src__web__diff_ui__loadRuns --> src__web__diff_ui__requestHeaders - src__web__diff_ui__compareGraphs --> src__web__diff_ui__byId - src__web__diff_ui__compareGraphs --> src__web__diff_ui__requestHeaders - src__watch__watcher__scanTree --> src__watch__watcher__relative - src__watch__watcher__maxFiles --> src__watch__watcher__relative - src__watch__watcher__maxFiles --> src__watch__watcher__visit - src__watch__watcher__absoluteRoot --> src__watch__watcher__relative - src__watch__watcher__absoluteRoot --> src__watch__watcher__visit - src__watch__watcher__visit --> src__watch__watcher__relative - src__watch__watcher__absolute --> src__watch__watcher__visit - src__watch__watcher__relative --> src__watch__watcher__visit - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__now - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__scanTree - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__emit - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__generate - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__sleep - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__diffSnapshots - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__now - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__scanTree - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__emit - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__generate - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__sleep - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__diffSnapshots - src__watch__watcher__watchRepository --> src__watch__watcher__now - src__watch__watcher__watchRepository --> src__watch__watcher__scanTree - src__watch__watcher__watchRepository --> src__watch__watcher__emit - src__watch__watcher__watchRepository --> src__watch__watcher__generate - src__watch__watcher__watchRepository --> src__watch__watcher__sleep - src__watch__watcher__watchRepository --> src__watch__watcher__diffSnapshots - src__watch__watcher__result --> src__watch__watcher__emit - src__watch__watcher__result --> src__watch__watcher__now - src__watch__watcher__snapshot --> src__watch__watcher__emit - src__watch__watcher__lastReportStartedAt --> src__watch__watcher__now - src__watch__watcher__lastReportStartedAt --> src__watch__watcher__generate - src__watch__watcher__pending --> src__watch__watcher__now - src__watch__watcher__pending --> src__watch__watcher__generate - src__watch__watcher__current --> src__watch__watcher__describeDelta - src__watch__watcher__current --> src__watch__watcher__emit - src__watch__watcher__delta --> src__watch__watcher__describeDelta - src__watch__watcher__delta --> src__watch__watcher__emit - src__watch__watcher__waitMs --> src__watch__watcher__emit - src__watch__watcher__generate --> src__watch__watcher__emit - src__watch__watcher__generate --> src__watch__watcher__now - src__watch__watcher__generate --> src__watch__watcher__runReport - src__watch__watcher__generate --> src__watch__watcher__scanTree - src__watch__watcher__startedAt --> src__watch__watcher__runReport - src__watch__watcher__startedAt --> src__watch__watcher__emit - src__watch__watcher__startedAt --> src__watch__watcher__now - src__watch__watcher__defaultSleep --> src__watch__watcher__finish - src__watch__watcher__timer --> src__watch__watcher__finish - src__watch__watcher__onAbort --> src__watch__watcher__finish - src__tf__classifier__dynamicImport --> src__tf__classifier__importer - src__tf__classifier__loadClassifier --> src__tf__classifier__dynamicImport - src__tf__classifier__loadClassifier --> src__tf__classifier__loadAssets - src__tf__classifier__classifyAction --> src__tf__classifier__loadClassifier - src__tf__classifier__classifyAction --> src__tf__classifier__vectorize - src__synthesis__validation__validateAndClassifyTodoProposals --> src__synthesis__validation__duplicateEvidence - src__synthesis__validation__validateAndClassifyTodoProposals --> src__synthesis__validation__dependencyFirstPriorityOrder - src__synthesis__validation__duplicateEvidence --> src__synthesis__validation__words - src__synthesis__validation__duplicateEvidence --> src__synthesis__validation__intersects - src__synthesis__validation__duplicateEvidence --> src__synthesis__validation__jaccard - src__synthesis__validation__proposalWords --> src__synthesis__validation__words - src__synthesis__validation__target --> src__synthesis__validation__jaccard - src__synthesis__validation__target --> src__synthesis__validation__words - src__synthesis__validation__sharedTicket --> src__synthesis__validation__jaccard - src__synthesis__validation__sharedTicket --> src__synthesis__validation__words - src__synthesis__validation__sharedSymbol --> src__synthesis__validation__jaccard - src__synthesis__validation__sharedSymbol --> src__synthesis__validation__words - src__synthesis__validation__sharedPath --> src__synthesis__validation__jaccard - src__synthesis__validation__sharedPath --> src__synthesis__validation__words - src__synthesis__validation__similarity --> src__synthesis__validation__jaccard - src__synthesis__validation__similarity --> src__synthesis__validation__words - src__synthesis__todo_patch__createTodoPatch --> src__synthesis__todo_patch__sameArray - src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__orderedSelected --> src__synthesis__todo_patch__sameArray - src__synthesis__todo_patch__markdown --> src__synthesis__todo_patch__normalizePath - src__synthesis__todo_patch__markdown --> src__synthesis__todo_patch__diagnosticReportFingerprint - src__synthesis__todo_patch__renderTodoPatchMarkdown --> src__synthesis__todo_patch__inline - src__synthesis__todo_patch__renderTodoPatchMarkdown --> src__synthesis__todo_patch__renderTargets - src__synthesis__todo_patch__renderTodoPatchMarkdown --> src__synthesis__todo_patch__renderIds - src__synthesis__todo_patch__writeTodoPatchArtifacts --> src__synthesis__todo_patch__createTodoPatch - src__synthesis__todo_patch__applyTodoPatch --> src__synthesis__todo_patch__assertTodoPatchArtifact - src__synthesis__todo_patch__applyTodoPatch --> src__synthesis__todo_patch__assertApproval - src__synthesis__todo_patch__current --> src__synthesis__todo_patch__assertReceipt - src__synthesis__todo_patch__now --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__now --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__now --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__currentHash --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__currentHash --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__currentHash --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__result --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__result --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__result --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__applied --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__applied --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__applied --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__recovered --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__recovered --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__recovered --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__isoDate - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__hash - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__nonBlank - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__assertApproval --> src__synthesis__todo_patch__nonBlank - src__synthesis__todo_patch__assertReceipt --> src__synthesis__todo_patch__sameArray - src__synthesis__todo_patch__assertReceipt --> src__synthesis__todo_patch__nonBlank - src__synthesis__todo_patch__assertReceipt --> src__synthesis__todo_patch__isoDate - src__synthesis__todo_patch__renderTargets --> src__synthesis__todo_patch__inline - src__synthesis__todo_patch__rendered --> src__synthesis__todo_patch__inline - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__assertConclusions - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__readPrompt - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection - src__synthesis__tasks_llm__TaskSynthesisAttemptError__startedAt --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__assertConclusions - src__synthesis__tasks_llm__TaskSynthesisAttemptError__client --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow - src__synthesis__tasks_llm__TaskSynthesisAttemptError__prompt --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection - src__synthesis__tasks_llm__TaskSynthesisAttemptError__payload --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__generationMetadata - src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesisAudit - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__normalizeLocalKeys - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__parsed --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__parsed --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__proposalKeys --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__proposalKeys --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__conclusions --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__conclusions --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__diagnosticIds --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__normalizeRawTarget - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__normalizeRawTarget - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__normalizeRawTarget - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__proposalIdByKey --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__proposals --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__keys --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__mapKeys --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__mapKeys --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__sortedUnique --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__normalizeRawTarget --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_contract__RAW_CONCLUSION_CONTRACT --> src__synthesis__task_synthesis_contract__nonBlank - src__synthesis__task_synthesis_contract__RAW_CONCLUSION_CONTRACT --> src__synthesis__task_synthesis_contract__taskIds - src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT --> src__synthesis__task_synthesis_contract__nonBlank - src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT --> src__synthesis__task_synthesis_contract__taskStrings - src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT --> src__synthesis__task_synthesis_contract__taskIds - src__synthesis__code_change_plan__generatedAt --> src__synthesis__code_change_plan__createCodeChangeSourcePatch - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__relatedRecords --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__matchingProposals --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__matchingConclusions --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__target --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__changes --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__planHash --> src__synthesis__code_change_plan__confidenceFor - src__synthesis__code_change_plan__planIds --> src__synthesis__code_change_plan__evaluateCodeChangeAcceptance - src__synthesis__code_change_plan__acceptances --> src__synthesis__code_change_plan__evaluateCodeChangeAcceptance - src__synthesis__code_change_plan__acceptedCount --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__indexProposalsByDiagnostic --> src__synthesis__code_change_plan__set - src__synthesis__code_change_plan__index --> src__synthesis__code_change_plan__set - src__synthesis__code_change_plan__indexConclusionsByDiagnostic --> src__synthesis__code_change_plan__set - src__synthesis__code_change_plan__paths --> src__synthesis__code_change_plan__exactSourcePatchKeys - src__synthesis__code_change_plan__paths --> src__synthesis__code_change_plan__assertSourcePatchStrings - src__synthesis__code_change_plan__paths --> src__synthesis__code_change_plan__normalizeUnifiedDiff - src__synthesis__code_change_plan__buildChanges --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__titleFor --> src__synthesis__code_change_plan__startsWithImperative - src__synthesis__code_change_plan__record --> src__synthesis__code_change_plan__startsWithImperative - src__synthesis__code_change_plan__object --> src__synthesis__code_change_plan__startsWithImperative - src__synthesis__code_change_plan__acceptanceCriteriaFor --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__riskFor --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__rollbackFor --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__createCodeChangeReviewPatch --> src__synthesis__code_change_plan__priorityRank - src__synthesis__code_change_plan__markdown --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown --> src__synthesis__code_change_plan__inline - src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown --> src__synthesis__code_change_plan__renderIds - src__synthesis__code_change_plan__rawDiff --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__rawDiff --> src__synthesis__code_change_plan__instructionFor - src__synthesis__code_change_plan__unifiedDiff --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__unifiedDiff --> src__synthesis__code_change_plan__instructionFor - src__synthesis__code_change_plan__patchHash --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__createCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__createCodeChangeSourcePatch - src__synthesis__code_change_plan__createCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__exactSourcePatchKeys - src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertSourcePatchIds - src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertSourcePatchStrings - src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__exactSourcePatchKeys - src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch - src__synthesis__code_change_plan__plansById --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch - src__synthesis__code_change_plan__patchIds --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch - src__synthesis__code_change_plan__applyCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch - src__synthesis__code_change_plan__applyCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertExistingSourceReceipt - src__synthesis__code_change_plan__now --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__fileHashesAfter --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__assertExistingSourceReceipt --> src__synthesis__code_change_plan__assertSourceApplyReceipt - src__synthesis__code_change_plan__assertSourceApplyReceipt --> src__synthesis__code_change_plan__exactSourcePatchKeys - src__synthesis__code_change_plan__assertSourceApplyReceipt --> src__synthesis__code_change_plan__exactSourcePatchSet - src__synthesis__code_change_plan__applyUnifiedDiffToText --> src__synthesis__code_change_plan__normalizeUnifiedDiff - src__synthesis__code_change_plan__applyUnifiedDiffToText --> src__synthesis__code_change_plan__splitKeep - src__synthesis__code_change_path__isUsefulCodeChangePath --> src__synthesis__code_change_path__isPlannablePath - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__assertConclusions - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__summaryMode - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__readPrompt - src__summary__summarizer__mode --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__mode --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__client --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__client --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__systemPrompt --> src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection - src__summary__summarizer__systemPrompt --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__systemPrompt --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__payload --> src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection - src__summary__summarizer__payload --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__payload --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection --> src__summary__summarizer__SummaryAttemptError__materializeConclusions - src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__SummaryAttemptError__conclusions --> src__summary__summarizer__SummaryAttemptError__sortedUnique - src__summary__summarizer__SummaryAttemptError__materializeConclusions --> src__summary__summarizer__SummaryAttemptError__sortedUnique - src__summary__summarizer__SummaryAttemptError__materializeConclusions --> src__summary__summarizer__SummaryAttemptError__assertConclusions - src__summary__summarizer__SummaryAttemptError__parsed --> src__summary__summarizer__SummaryAttemptError__sortedUnique - src__summary__summarizer__SummaryAttemptError__deterministicConclusions --> src__summary__summarizer__SummaryAttemptError__sortedUnique - src__summary__summarizer__SummaryAttemptError__deterministicConclusions --> src__summary__summarizer__SummaryAttemptError__assertConclusions - src__summary__render__renderSummaryMarkdown --> src__summary__render__renderRecords - src__summary__render__renderSummaryMarkdown --> src__summary__render__renderConclusion - src__summary__render__renderSummaryMarkdown --> src__summary__render__recordCitations - src__summary__render__actions --> src__summary__render__recordCitations - src__summary__render__confidence --> src__summary__render__recordCitations - src__summary__render__renderConclusion --> src__summary__render__recordCitations - src__services__actions__executeAction --> src__services__actions__resolveRoot - src__services__actions__executeAction --> src__services__actions__scopedPath - src__services__actions__executeAction --> src__services__actions__nlModeValue - src__services__actions__executeAction --> src__services__actions__numberValue - src__services__actions__executeAction --> src__services__actions__nullableScopedPath - src__services__actions__root --> src__services__actions__scopedPath - src__services__actions__root --> src__services__actions__nlModeValue - src__services__actions__root --> src__services__actions__numberValue - src__services__actions__root --> src__services__actions__nullableScopedPath - src__services__actions__root --> src__services__actions__llmModeValue - src__services__actions__analysis --> src__services__actions__booleanValue - src__services__actions__graph --> src__services__actions__booleanValue - src__services__actions__graph --> src__services__actions__numberValue - src__services__actions__diagnostics --> src__services__actions__booleanValue - src__services__actions__diagnostics --> src__services__actions__numberValue - src__services__actions__result --> src__services__actions__stringValue - src__services__actions__result --> src__services__actions__booleanValue - src__services__actions__result --> src__services__actions__numberValue - src__services__actions__todoPath --> src__services__actions__stringValue - src__services__actions__receiptPath --> src__services__actions__stringValue - src__services__actions__conclusions --> src__services__actions__numberValue - src__services__actions__proposals --> src__services__actions__numberValue - src__services__actions__patch --> src__services__actions__stringValue - src__services__actions__beforeGraph --> src__services__actions__hasInputValue - src__services__actions__beforeDiagnostics --> src__services__actions__hasInputValue - src__services__actions__afterGraph --> src__services__actions__hasInputValue - src__services__actions__afterDiagnostics --> src__services__actions__hasInputValue - src__services__actions__value --> src__services__actions__hasInputValue - src__services__actions__beforeInput --> src__services__actions__numberValue - src__services__actions__afterInput --> src__services__actions__numberValue - src__services__actions__before --> src__services__actions__numberValue - src__services__actions__after --> src__services__actions__numberValue - src__services__actions__diff --> src__services__actions__stringValue - src__services__actions__diff --> src__services__actions__numberValue - src__services__actions__svg --> src__services__actions__numberValue - src__services__actions__beforePath --> src__services__actions__stringValue - src__services__actions__beforePath --> src__services__actions__numberValue - src__services__actions__afterPath --> src__services__actions__stringValue - src__services__actions__afterPath --> src__services__actions__numberValue - src__services__actions__view --> src__services__actions__booleanValue - src__services__actions__view --> src__services__actions__numberValue - src__services__actions__filterCommunicationGraph --> src__services__actions__stringValue - src__services__actions__filterCommunicationGraph --> src__services__actions__booleanValue - src__services__actions__nlModeValue --> src__services__actions__llmModeValue - src__services__actions__summaryModeValue --> src__services__actions__llmModeValue - src__services__actions__summaryModeValue --> src__services__actions__booleanValue - src__services__actions__withTextDiffViews --> src__services__actions__stringValue - src__services__actions__withTextDiffViews --> src__services__actions__booleanValue - src__services__actions__withTextDiffViews --> src__services__actions__numberValue - src__services__actions__title --> src__services__actions__booleanValue - src__services__actions__title --> src__services__actions__numberValue - src__services__actions__scopedPath --> src__services__actions__stringValue - src__services__actions__nullableScopedPath --> src__services__actions__nullableString - src__services__actions__readRecords --> src__services__actions__stringList - src__semantic__reranker__createSemanticCandidateSet --> src__semantic__reranker__requiredText - src__semantic__reranker__assertSemanticCandidateSet --> src__semantic__reranker__validDate - src__semantic__reranker__assertSemanticCandidateSet --> src__semantic__reranker__validateRetrieval - src__semantic__reranker__records --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__records --> src__semantic__reranker__validateVerdictReason - src__semantic__reranker__records --> src__semantic__reranker__requiredText - src__semantic__reranker__seenIds --> src__semantic__reranker__boundedScore - src__semantic__reranker__seenPairs --> src__semantic__reranker__boundedScore - src__semantic__reranker__byDeclaration --> src__semantic__reranker__boundedScore - src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__assertSemanticCandidateSet - src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__requiredText - src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__decisions --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__decisions --> src__semantic__reranker__requiredText - src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__assertSemanticCandidateSet - src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__validDate - src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__validateGeneration - src__semantic__reranker__seenDecisions --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__seenDecisions --> src__semantic__reranker__validateVerdictReason - src__semantic__reranker__seenDecisions --> src__semantic__reranker__requiredText - src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__validateVerdictReason - src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__requiredText - src__semantic__reranker__applyAcceptedSemanticRelations --> src__semantic__reranker__assertSemanticRerankResult - src__semantic__reranker__applyAcceptedSemanticRelations --> src__semantic__reranker__values - src__semantic__reranker__validateRetrieval --> src__semantic__reranker__requiredText - src__semantic__reranker__validateGeneration --> src__semantic__reranker__requiredText - src__semantic__reranker__validateVerdictReason --> src__semantic__reranker__assertSemanticVerdictReason - src__semantic__reranker__assertGroundedQuote --> src__semantic__reranker__requiredText - src__semantic__reranker__quote --> src__semantic__reranker__requiredText - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticCandidateSet - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshot - src__semantic__reranker_llm__SemanticRerankerRequiredError__model --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult - src__semantic__reranker_llm__SemanticRerankerRequiredError__modelRevision --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult - src__semantic__reranker_llm__SemanticRerankerRequiredError__payload --> src__semantic__reranker_llm__SemanticRerankerRequiredError__projectRecord - src__pipeline__run__runPipeline --> src__pipeline__run__skippedAudit - src__pipeline__run__docs --> src__pipeline__run__collectTargetHints - src__pipeline__run__docs --> src__pipeline__run__values - src__pipeline__run__configurationExtraction --> src__pipeline__run__skippedAudit - src__pipeline__run__includeCommunication --> src__pipeline__run__skippedAudit - src__pipeline__run__communicationStartedAt --> src__pipeline__run__skippedAudit - src__pipeline__run__communicationAudit --> src__pipeline__run__skippedAudit - src__pipeline__run__communicationInputPresent --> src__pipeline__run__skippedAudit - src__pipeline__run__collectTargetHints --> src__pipeline__run__values - src__pipeline__run__persistFailedRun --> src__pipeline__run__skippedAudit - src__pipeline__run__persistFailedRun --> src__pipeline__run__failureCode - src__pipeline__run__persistFailedRun --> src__pipeline__run__failedAudit - src__pipeline__run__persistFailedRun --> src__pipeline__run__aborted - src__pipeline__run__persistFailedRun --> src__pipeline__run__stageValue - src__pipeline__run__persistFailedRun --> src__pipeline__run__manifestConfiguration - src__pipeline__run__aborted --> src__pipeline__run__skippedAudit - src__pipeline__run__message --> src__pipeline__run__failureCode - src__pipeline__run__knownAudit --> src__pipeline__run__failureCode - src__pipeline__run__failedAudit --> src__pipeline__run__failureCode - src__pipeline__run__stageValue --> src__pipeline__run__failedAudit - src__pipeline__run__stageValue --> src__pipeline__run__aborted - src__pipeline__run__reason --> src__pipeline__run__failureCode - src__operations__validation__dateString --> src__operations__validation__nonBlank - src__operations__validation__assertPrincipalList --> src__operations__validation__uniqueStrings - src__operations__validation__principals --> src__operations__validation__uniqueStrings - src__operations__validation__assertVariableContract --> src__operations__validation__objectValue - src__operations__validation__assertVariableContract --> src__operations__validation__exactKeys - src__operations__validation__assertVariableContract --> src__operations__validation__nonBlank + rust_ast__src__main__main --> rust_ast__src__main__arguments + rust_ast__src__main__main --> rust_ast__src__main__collect_files + rust_ast__src__main__main --> rust_ast__src__main__slash + rust_ast__src__main__collect_files --> rust_ast__src__main__slash + rust_ast__src__main__add --> rust_ast__src__main__excerpt + rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified + rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add + rust_ast__src__main__visit_item_use --> rust_ast__src__main__add + rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item + rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item + rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item + rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item + rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified + rust_ast__src__main__visit_item_const --> rust_ast__src__main__add + rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers + rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified + rust_ast__src__main__visit_item_static --> rust_ast__src__main__add + rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers + rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified + rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add + rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add + rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add + rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add + rust_ast__src__main__type_item --> rust_ast__src__main__qualified + rust_ast__src__main__type_item --> rust_ast__src__main__add + rust_ast__src__main__type_item --> rust_ast__src__main__modifiers + examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid + examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid + examples__backend__src__validation__record --> examples__backend__src__validation__invalid + examples__backend__src__validation__agent --> examples__backend__src__validation__invalid + examples__backend__src__validation__action --> examples__backend__src__validation__invalid + examples__backend__src__validation__object --> examples__backend__src__validation__invalid + examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest + examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson + examples__backend__src__server__store --> examples__backend__src__server__handleRequest + examples__backend__src__server__store --> examples__backend__src__server__sendJson + examples__backend__src__server__server --> examples__backend__src__server__handleRequest + examples__backend__src__server__server --> examples__backend__src__server__sendJson + examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson + examples__backend__src__server__handleRequest --> examples__backend__src__server__size + examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody + examples__backend__src__server__validation --> examples__backend__src__server__sendJson + examples__backend__src__server__event --> examples__backend__src__server__sendJson + examples__backend__src__server__offset --> examples__backend__src__server__sendJson + examples__backend__src__server__limit --> examples__backend__src__server__sendJson + examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend + examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent + examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow + examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState + examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh + examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload + examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state + examples__frontend__src__app__state --> examples__frontend__src__app__refresh + examples__frontend__src__app__reload --> examples__frontend__src__app__refresh + examples__src__runtime__executeContract --> examples__src__runtime__validateContract + java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add + java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit + java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect + java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json + java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map + java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try + java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored + java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash + java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape + src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions + src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields + src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields + src__extractors__nl__absolute --> src__extractors__nl__inferActor + src__extractors__nl__body --> src__extractors__nl__detectMissingFields + src__extractors__nl__body --> src__extractors__nl__inferActor + src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields + src__extractors__nl__sourcePath --> src__extractors__nl__inferActor + src__extractors__nl__classified --> src__extractors__nl__inferActor + src__extractors__nl__action --> src__extractors__nl__inferActor + src__extractors__nl__object --> src__extractors__nl__inferActor + src__extractors__nl__missing --> src__extractors__nl__inferActor + src__extractors__nl__confidence --> src__extractors__nl__inferActor + src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord + src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord + src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray + src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord + src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar + src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags + src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar + src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction + src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar + src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath + src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords + src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath + src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords + src__extractors__configuration__files --> src__extractors__configuration__configurationRecords + src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords + src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries + src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries + src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries + src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries + src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate + src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate + src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate + src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat + src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine + src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine + src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine + src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries + src__extractors__configuration__tomlEntries --> src__extractors__configuration__match + src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry + src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries + src__extractors__configuration__line --> src__extractors__configuration__entry + src__extractors__configuration__heading --> src__extractors__configuration__entry + src__extractors__configuration__pair --> src__extractors__configuration__entry + src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries + src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match + src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry + src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries + src__extractors__configuration__dockerEntries --> src__extractors__configuration__match + src__extractors__docs_schema__target --> src__extractors__docs_schema__strings + src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings + src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target + src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__markDeterministic + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__markDeterministic + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__markDeterministic + src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__markDeterministic + src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow + src__extractors__nl_llm__NlLlmRequiredError__absolute --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlLlmRequiredError__body --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlLlmRequiredError__sourcePath --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlLlmRequiredError__maxLine --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlLlmRequiredError__prompt --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlAttemptError__failedAudit --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlAttemptError__deterministic --> src__extractors__nl_llm__NlAttemptError__fallback + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveAction + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__nonEmptyText + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveObject + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__allowedModality + src__extractors__nl_llm__NlAttemptError__lines --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt + src__extractors__nl_llm__NlAttemptError__action --> src__extractors__nl_llm__NlAttemptError__resolveObject + src__extractors__nl_llm__NlAttemptError__normalizedText --> src__extractors__nl_llm__NlAttemptError__resolveObject + src__extractors__nl_llm__NlAttemptError__statementText --> src__extractors__nl_llm__NlAttemptError__allowedModality + src__extractors__nl_llm__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm__NlAttemptError__clampLine + src__extractors__nl_llm__NlAttemptError__resolveAction --> src__extractors__nl_llm__NlAttemptError__allowedAction + src__extractors__nl_llm__NlAttemptError__isPlaceholder --> src__extractors__nl_llm__NlAttemptError__nonEmptyText + src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__isPlaceholder + src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__nonEmptyText + src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm__NlAttemptError__nlStrings + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk + src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage + src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage + src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage + src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction + src__extractors__changelog__body --> src__extractors__changelog__changelogAction + src__extractors__changelog__relative --> src__extractors__changelog__changelogAction + src__extractors__changelog__lines --> src__extractors__changelog__changelogAction + src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument + src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper + src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument + src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper + src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument + src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper + src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine + src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock + src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading + src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement + src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement + src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match + src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord + src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord + src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match + src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord + src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match + src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match + src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement + src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph + src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement + src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf + src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex + src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes + src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath + src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames + src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes + src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath + src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames + src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes + src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath + src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath + src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames + src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState + src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries + src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout + src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames + src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries + src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout + src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames + src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries + src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout + src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames + src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject + src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder + src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder + src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine + src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap + src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget + src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction + src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality + src__extractors__todo__extractTodo --> src__extractors__todo__match + src__extractors__todo__body --> src__extractors__todo__match + src__extractors__todo__relative --> src__extractors__todo__match + src__extractors__todo__lines --> src__extractors__todo__match + src__extractors__todo__raw --> src__extractors__todo__match + src__extractors__todo__heading --> src__extractors__todo__match + src__extractors__todo__task --> src__extractors__todo__inferOwner + src__extractors__todo__checked --> src__extractors__todo__inferOwner + src__extractors__todo__block --> src__extractors__todo__inferOwner + src__extractors__todo__text --> src__extractors__todo__inferOwner + src__extractors__todo__classified --> src__extractors__todo__inferOwner + src__extractors__todo__action --> src__extractors__todo__inferOwner + src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner + src__extractors__todo__inferOwner --> src__extractors__todo__match + src__extractors__todo__extractExplicitId --> src__extractors__todo__match + src__extractors__communication__extractCommunicationIntent --> src__extractors__communication__extractCommunicationFile + src__extractors__communication__identityRegistry --> src__extractors__communication__extractCommunicationFile + src__extractors__communication__communicationFiles --> src__extractors__communication__extractCommunicationFile + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__parseEnvelope + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__inferIdentity + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__first + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__isTicketEvidenceFile + src__extractors__communication__envelope --> src__extractors__communication__basename + src__extractors__communication__inferred --> src__extractors__communication__basename + src__extractors__communication__explicitEnvelope --> src__extractors__communication__basename + src__extractors__communication__declaredParticipant --> src__extractors__communication__basename + src__extractors__communication__declaredRole --> src__extractors__communication__basename + src__extractors__communication__declaredParticipantId --> src__extractors__communication__basename + src__extractors__communication__identity --> src__extractors__communication__basename + src__extractors__communication__participant --> src__extractors__communication__basename + src__extractors__communication__sameStrings --> src__extractors__communication__normalize + src__extractors__communication__parseEnvelope --> src__extractors__communication__match + src__extractors__communication__parseEnvelope --> src__extractors__communication__unquote + src__extractors__communication__inferIdentity --> src__extractors__communication__basename + src__extractors__communication__inferIdentity --> src__extractors__communication__match + src__extractors__communication__inferIdentity --> src__extractors__communication__isCommunicationType + src__extractors__communication__fileParts --> src__extractors__communication__isCommunicationType + src__extractors__communication__nestedRoleIndex --> src__extractors__communication__isCommunicationType + src__extractors__communication__nestedRole --> src__extractors__communication__isCommunicationType + src__extractors__communication__nestedParticipant --> src__extractors__communication__isCommunicationType + src__extractors__communication__isTicketEvidenceFile --> src__extractors__communication__basename + src__extractors__communication__communicationSegments --> src__extractors__communication__isCommunicationNoise + src__extractors__communication__communicationSegments --> src__extractors__communication__match + src__extractors__communication__communicationSegments --> src__extractors__communication__flush + src__extractors__communication__flush --> src__extractors__communication__isCommunicationNoise + src__extractors__communication__item --> src__extractors__communication__isCommunicationNoise + src__extractors__communication__raw --> src__extractors__communication__match + src__extractors__communication__heading --> src__extractors__communication__match + src__extractors__communication__normalizeType --> src__extractors__communication__isCommunicationType + src__extractors__communication__listValue --> src__extractors__communication__unquote + src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree + src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent + src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories + src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency + src__extractors__git__root --> src__extractors__git__isGitWorkTree + src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent + src__extractors__git__count --> src__extractors__git__isGitWorkTree + src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols + src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState + src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork + src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory + src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries + src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory + src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren + src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery + src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork + src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory + src__extractors__git__state --> src__extractors__git__readDiscoveryEntries + src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory + src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren + src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix + src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState + src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository + src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree + src__extractors__git__isGitWorkTree --> src__extractors__git__runGit + src__extractors__git__runGit --> src__extractors__git__execFileAsync + src__extractors__git__result --> src__extractors__git__execFileAsync + src__extractors__git__readCommits --> src__extractors__git__runGit + src__extractors__git__readChangedFiles --> src__extractors__git__runGit + src__extractors__git__readStats --> src__extractors__git__runGit + src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority + src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority + src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker + src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker + src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker + src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker + src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections + src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush + src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection + src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush + src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection + src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush + src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection + src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__readPrompt + src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow + src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection + src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract + src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch + src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage + src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic + src__extractors__markdown_llm__MarkdownAttemptError__failed --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm__MarkdownAttemptError__strings + src__extractors__markdown_llm__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm__MarkdownAttemptError__strings + src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync + src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync + src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords + src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities + src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__add --> src__extractors__ast__typescript__lineRange + src__extractors__ast__typescript__add --> src__extractors__ast__typescript__excerpt + src__extractors__ast__typescript__add --> src__extractors__ast__typescript__languageName + src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__modifiers + src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__symbolModifiers --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__isTopLevel + src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__callee --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__capabilities --> src__extractors__ast__typescript__add + src__graph__diff__diffIntentGraphs --> src__graph__diff__assertGraph + src__graph__diff__diffIntentGraphs --> src__graph__diff__groupRecords + src__graph__diff__beforeGroups --> src__graph__diff__changedFieldPaths + src__graph__diff__beforeGroups --> src__graph__diff__normalizeRecord + src__graph__diff__afterGroups --> src__graph__diff__changedFieldPaths + src__graph__diff__afterGroups --> src__graph__diff__normalizeRecord + src__graph__diff__left --> src__graph__diff__changedFieldPaths + src__graph__diff__left --> src__graph__diff__normalizeRecord + src__graph__diff__right --> src__graph__diff__changedFieldPaths + src__graph__diff__right --> src__graph__diff__normalizeRecord + src__graph__diff__paired --> src__graph__diff__changedFieldPaths + src__graph__diff__paired --> src__graph__diff__normalizeRecord + src__graph__diff__beforeRecord --> src__graph__diff__changedFieldPaths + src__graph__diff__beforeRecord --> src__graph__diff__normalizeRecord + src__graph__diff__afterRecord --> src__graph__diff__changedFieldPaths + src__graph__diff__afterRecord --> src__graph__diff__normalizeRecord + src__graph__diff__renderGraphDiffSvg --> src__graph__diff__escapeXml + src__graph__diff__renderGraphDiffSvg --> src__graph__diff__truncate + src__graph__diff__visibleRows --> src__graph__diff__escapeXml + src__graph__diff__visibleRows --> src__graph__diff__truncate + src__graph__diff__width --> src__graph__diff__escapeXml + src__graph__diff__width --> src__graph__diff__truncate + src__graph__diff__height --> src__graph__diff__escapeXml + src__graph__diff__height --> src__graph__diff__truncate + src__graph__diff__y --> src__graph__diff__escapeXml + src__graph__diff__y --> src__graph__diff__truncate + src__graph__diff__groupRecords --> src__graph__diff__recordIdentity + src__graph__diff__groupRecords --> src__graph__diff__values + src__graph__diff__groups --> src__graph__diff__recordIdentity + src__graph__diff__changedFieldPaths --> src__graph__diff__isObject + src__graph__diff__compareRelations --> src__graph__diff__relationKey + src__graph__diff__metricCard --> src__graph__diff__escapeXml + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__values + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths + src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths + src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords + src__graph__linker__linkIntentRecords --> src__graph__linker__indexKeywords + src__graph__linker__records --> src__graph__linker__scorePair + src__graph__linker__records --> src__graph__linker__determineRelation + src__graph__linker__byId --> src__graph__linker__set + src__graph__linker__keywordIndex --> src__graph__linker__scorePair + src__graph__linker__keywordIndex --> src__graph__linker__determineRelation + src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair + src__graph__linker__symbolResolutionIndex --> src__graph__linker__determineRelation + src__graph__linker__candidatePairs --> src__graph__linker__scorePair + src__graph__linker__candidatePairs --> src__graph__linker__determineRelation + src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair + src__graph__linker__resolvableBasenames --> src__graph__linker__determineRelation + src__graph__linker__deduplicateRecords --> src__graph__linker__set + src__graph__linker__deduplicateRecords --> src__graph__linker__values + src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTargetBuckets + src__graph__linker__collectCandidatePairs --> src__graph__linker__indexKeywordBuckets + src__graph__linker__collectCandidatePairs --> src__graph__linker__isModuleTopicSource + src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTopicBuckets + src__graph__linker__collectCandidatePairs --> src__graph__linker__pairsFromBuckets + src__graph__linker__buckets --> src__graph__linker__indexTargetBuckets + src__graph__linker__buckets --> src__graph__linker__indexKeywordBuckets + src__graph__linker__buckets --> src__graph__linker__isModuleTopicSource + src__graph__linker__buckets --> src__graph__linker__indexTopicBuckets + src__graph__linker__astIds --> src__graph__linker__indexTargetBuckets + src__graph__linker__astIds --> src__graph__linker__indexKeywordBuckets + src__graph__linker__astIds --> src__graph__linker__isModuleTopicSource + src__graph__linker__astIds --> src__graph__linker__indexTopicBuckets + src__graph__linker__moduleAstIds --> src__graph__linker__indexTargetBuckets + src__graph__linker__moduleAstIds --> src__graph__linker__indexKeywordBuckets + src__graph__linker__moduleAstIds --> src__graph__linker__isModuleTopicSource + src__graph__linker__moduleAstIds --> src__graph__linker__indexTopicBuckets + src__graph__linker__declarationAstIds --> src__graph__linker__indexTargetBuckets + src__graph__linker__declarationAstIds --> src__graph__linker__indexKeywordBuckets + src__graph__linker__declarationAstIds --> src__graph__linker__isModuleTopicSource + src__graph__linker__declarationAstIds --> src__graph__linker__indexTopicBuckets + src__graph__linker__configurationIds --> src__graph__linker__indexTargetBuckets + src__graph__linker__configurationIds --> src__graph__linker__indexKeywordBuckets + src__graph__linker__configurationIds --> src__graph__linker__isModuleTopicSource + src__graph__linker__configurationIds --> src__graph__linker__indexTopicBuckets + src__graph__linker__indexTargetBuckets --> src__graph__linker__addToBucket + src__graph__linker__indexTargetBuckets --> src__graph__linker__indexAliases + src__graph__linker__indexAliases --> src__graph__linker__aliases + src__graph__linker__indexAliases --> src__graph__linker__addToBucket + src__graph__linker__indexKeywordBuckets --> src__graph__linker__addToBucket + src__graph__linker__indexTopicBuckets --> src__graph__linker__addToBucket + src__graph__linker__addToBucket --> src__graph__linker__set + src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedAstPair + src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedConfigurationPair + src__graph__linker__pairsFromBuckets --> src__graph__linker__set + src__graph__linker__leftId --> src__graph__linker__set + src__graph__linker__rightId --> src__graph__linker__set + src__graph__linker__indexResolvableBasenames --> src__graph__linker__set + src__graph__linker__owners --> src__graph__linker__set + src__graph__linker__pathsIntersect --> src__graph__linker__expand + src__graph__linker__scorePair --> src__graph__linker__intersects + src__graph__linker__scorePair --> src__graph__linker__intersectsAliases + src__graph__linker__scorePair --> src__graph__linker__pathsIntersect + src__graph__linker__scorePair --> src__graph__linker__isFileAggregateEvidencePair + src__graph__linker__scorePair --> src__graph__linker__jaccard + src__graph__linker__score --> src__graph__linker__intersects + src__graph__linker__leftKeywords --> src__graph__linker__intersects diff --git a/project/calls.png b/project/calls.png index da3dc0238ac0421feea413f6c689d2d620cdc4ec..d62a463a59920cabda8ec471f605f80fceefbfeb 100644 GIT binary patch literal 80271 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 z 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%0AGEu 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

SW_2X|m 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⪻PUN5dZb=Wl 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 HkAD9TVUxfM diff --git a/project/calls.toon.yaml b/project/calls.toon.yaml index 94dcede..a5e7f2c 100644 --- a/project/calls.toon.yaml +++ b/project/calls.toon.yaml @@ -1,272 +1,367 @@ -# code2llm call graph | -# generated in 0.21s -# nodes: 354 | edges: 500 | modules: 18 -# CC̄=4.0 +# code2llm call graph | /home/tom/github/semcod/todo2code +# generated in 0.23s +# nodes: 426 | edges: 500 | modules: 29 +# CC̄=3.8 HUBS[20]: - src.services.actions.executeAction - CC=83 in:0 out:65 total:65 - src.services.actions.root - CC=83 in:0 out:64 total:64 - src.pipeline.run.runPipeline - CC=53 in:0 out:54 total:54 - src.cli.main - CC=95 in:1 out:44 total:45 - src.web.diff-ui.diffUiHtml - CC=52 in:0 out:42 total:42 - src.synthesis.code-change-plan.applyCodeChangeSourcePatch - CC=41 in:0 out:35 total:35 - src.synthesis.code-change-plan.assertCodeChangeSourcePatch - CC=47 in:5 out:26 total:31 - src.synthesis.code-change-plan.uniqueSorted - CC=1 in:20 out:5 total:25 - src.cli.optionNumber - CC=5 in:18 out:5 total:23 - src.semantic.reranker.assertSemanticRerankResult - CC=21 in:2 out:21 total:23 - src.services.actions.numberValue - CC=6 in:18 out:4 total:22 - src.synthesis.code-change-plan.createCodeChangeSourcePatch - CC=13 in:2 out:20 total:22 - src.synthesis.code-change-plan.deterministicGeneration - CC=1 in:18 out:3 total:21 - src.synthesis.todo-patch.createTodoPatch - CC=8 in:1 out:20 total:21 - src.semantic.reranker.assertSemanticCandidateSet - CC=27 in:3 out:18 total:21 - src.watch.watcher.scanTree - CC=12 in:4 out:17 total:21 - src.synthesis.code-change-plan.evaluateCodeChangeAcceptance - CC=9 in:3 out:18 total:21 - src.synthesis.todo-patch.applyTodoPatch - CC=12 in:0 out:20 total:20 - src.cli.handleDiff - CC=24 in:1 out:19 total:20 - src.cli.handleExtract - CC=16 in:1 out:18 total:19 + src.extractors.ast.typescript.extractTypeScriptFile + CC=43 in:0 out:44 total:44 + src.extractors.ast.typescript.visit + CC=25 in:1 out:26 total:27 + src.extractors.communication.extractCommunicationFile + CC=50 in:3 out:24 total:27 + src.extractors.git.extractRepositoryGitIntent + CC=11 in:3 out:21 total:24 + src.extractors.todo.extractTodo + CC=5 in:0 out:24 total:24 + src.graph.linker.scorePair + CC=18 in:6 out:16 total:22 + src.graph.linker.linkIntentRecords + CC=5 in:0 out:22 total:22 + src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited + CC=10 in:0 out:22 total:22 + rust-ast.src.main.main + CC=6 in:0 out:21 total:21 + src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited + CC=19 in:0 out:21 total:21 + rust-ast.src.main.collect_files + CC=9 in:1 out:20 total:21 + src.extractors.todo.relative + CC=5 in:0 out:20 total:20 + src.extractors.nl.extractNlIntent + CC=5 in:0 out:20 total:20 + src.extractors.todo.body + CC=5 in:0 out:20 total:20 + src.extractors.todo.lines + CC=5 in:0 out:20 total:20 + src.extractors.changelog.extractChangelog + CC=10 in:0 out:19 total:19 + rust-ast.src.main.add + CC=1 in:9 out:10 total:19 + src.graph.diff.diffIntentGraphs + CC=11 in:0 out:19 total:19 + src.extractors.configuration.configurationRecords + CC=4 in:4 out:12 total:16 + java.JavaAstExtract.JavaAstExtract.main + CC=10 in:0 out:16 total:16 MODULES: - src.cli [44 funcs] - command CC=4 out:1 - context CC=9 out:10 - controller CC=1 out:5 - diagnostics CC=2 out:5 - diagnosticsPath CC=2 out:5 - diff CC=2 out:4 - doctor CC=6 out:7 - emitExtraction CC=4 out:4 - execFileAsync CC=2 out:2 - extractor CC=6 out:6 - src.operations.validation [8 funcs] - assertPrincipalList CC=2 out:4 - assertVariableContract CC=20 out:14 - dateString CC=2 out:4 - exactKeys CC=2 out:5 - nonBlank CC=3 out:2 - objectValue CC=4 out:2 - principals CC=1 out:1 - uniqueStrings CC=8 out:5 - src.pipeline.run [19 funcs] - aborted CC=1 out:1 - collectTargetHints CC=1 out:4 - communicationAudit CC=10 out:5 - communicationInputPresent CC=10 out:5 - communicationStartedAt CC=10 out:5 - configurationExtraction CC=10 out:5 - docs CC=2 out:4 - failedAudit CC=9 out:2 - failureCode CC=1 out:2 - includeCommunication CC=10 out:5 - src.semantic.reranker [23 funcs] - acceptedDeclarations CC=16 out:15 - applyAcceptedSemanticRelations CC=2 out:13 - assertGroundedQuote CC=3 out:7 - assertSemanticCandidateSet CC=27 out:18 - assertSemanticRerankResult CC=21 out:21 - assertSemanticVerdictReason CC=7 out:2 - boundedScore CC=4 out:3 - byDeclaration CC=14 out:9 - createSemanticCandidateSet CC=8 out:17 - createSemanticRerankResult CC=4 out:11 - src.semantic.reranker-llm [8 funcs] - assertSemanticCandidateSet CC=2 out:1 - assertSemanticRerankResult CC=2 out:1 - assertTrackedSnapshot CC=1 out:0 - model CC=4 out:2 - modelRevision CC=4 out:2 - payload CC=1 out:3 - projectRecord CC=3 out:3 - rerankSemanticCandidates CC=25 out:19 - src.services.actions [41 funcs] - after CC=2 out:2 - afterDiagnostics CC=8 out:2 - afterGraph CC=8 out:2 - afterInput CC=2 out:2 - afterPath CC=1 out:4 - analysis CC=2 out:4 - before CC=2 out:2 - beforeDiagnostics CC=8 out:2 - beforeGraph CC=8 out:2 - beforeInput CC=2 out:2 - src.summary.render [6 funcs] - actions CC=2 out:2 - confidence CC=1 out:2 - recordCitations CC=1 out:1 - renderConclusion CC=1 out:3 - renderRecords CC=2 out:3 - renderSummaryMarkdown CC=10 out:9 - src.summary.summarizer [15 funcs] - assertConclusions CC=1 out:0 - conclusions CC=3 out:3 - deterministicConclusions CC=4 out:7 - generationMetadata CC=9 out:5 - materializeConclusions CC=1 out:7 - parsed CC=1 out:4 + examples.backend.src.server [12 funcs] + createBackend CC=4 out:5 + event CC=1 out:1 + handleRequest CC=16 out:12 + limit CC=1 out:1 + offset CC=1 out:1 + readBody CC=3 out:5 + sendJson CC=1 out:4 + server CC=3 out:4 + size CC=3 out:3 + startBackend CC=3 out:3 + examples.backend.src.validation [7 funcs] + ALLOWED_ACTIONS CC=10 out:5 + action CC=2 out:3 + agent CC=2 out:3 + invalid CC=1 out:0 + object CC=2 out:3 + record CC=2 out:3 + validateEventPayload CC=10 out:5 + examples.frontend.src.app [5 funcs] + createState CC=1 out:0 + mountPanel CC=1 out:4 + refresh CC=4 out:6 + reload CC=1 out:1 + state CC=1 out:1 + examples.frontend.src.render [4 funcs] + classifyEvent CC=4 out:0 + headerRow CC=2 out:2 + renderTable CC=3 out:4 + toRows CC=1 out:2 + examples.src.runtime [2 funcs] + executeContract CC=1 out:1 + validateContract CC=2 out:1 + java.JavaAstExtract [10 funcs] + add CC=1 out:0 + collect CC=1 out:11 + containsIgnored CC=3 out:2 + emit CC=1 out:3 + escape CC=9 out:6 + json CC=1 out:1 + main CC=10 out:16 + map CC=1 out:0 + slash CC=1 out:1 + try CC=3 out:13 + rust-ast.src.main [21 funcs] + add CC=1 out:10 + arguments CC=5 out:9 + collect_files CC=9 out:20 + excerpt CC=1 out:7 + main CC=6 out:21 + modifiers CC=3 out:4 + qualified CC=2 out:3 + slash CC=1 out:2 + type_item CC=1 out:8 + visit_expr_call CC=1 out:9 + src.extractors.ast [2 funcs] + isExtractionResult CC=5 out:3 + isIntentRecords CC=2 out:1 + src.extractors.ast.external [3 funcs] + execFileAsync CC=3 out:0 + result CC=2 out:1 + runExternalAstAdapter CC=9 out:6 + src.extractors.ast.records [7 funcs] + adapterRecords CC=2 out:3 + boundedCapabilities CC=1 out:6 + capabilities CC=1 out:2 + end CC=1 out:2 + moduleRecords CC=6 out:14 + moduleTopicText CC=2 out:1 + start CC=1 out:2 + src.extractors.ast.typescript [14 funcs] + add CC=14 out:7 + callee CC=2 out:2 + capabilities CC=1 out:2 + declarationIsCallable CC=4 out:2 + excerpt CC=1 out:2 + extractTypeScriptFile CC=43 out:44 + isTopLevel CC=5 out:3 + languageName CC=2 out:3 + lineRange CC=1 out:3 + modifiers CC=4 out:4 + src.extractors.changelog [5 funcs] + body CC=7 out:15 + changelogAction CC=11 out:3 + extractChangelog CC=10 out:19 + lines CC=7 out:15 + relative CC=7 out:15 + src.extractors.communication [34 funcs] + basename CC=1 out:0 + communicationFiles CC=3 out:2 + communicationSegments CC=14 out:12 + declaredParticipant CC=5 out:1 + declaredParticipantId CC=5 out:1 + declaredRole CC=5 out:1 + envelope CC=5 out:1 + explicitEnvelope CC=5 out:1 + extractCommunicationFile CC=50 out:24 + extractCommunicationIntent CC=7 out:10 + src.extractors.configuration [23 funcs] + MAX_ENTRIES_PER_FILE CC=4 out:10 + bounded CC=1 out:3 + configurationFormat CC=6 out:4 + configurationRecords CC=4 out:12 + dockerEntries CC=6 out:6 + entries CC=1 out:3 + entry CC=1 out:1 + extractConfigurationIntent CC=4 out:10 + fileAggregate CC=3 out:10 + files CC=4 out:5 + src.extractors.docs-chunks [15 funcs] + chunkMarkdown CC=8 out:9 + chunkPriority CC=3 out:4 + flush CC=2 out:2 + index CC=1 out:3 + item CC=1 out:3 + mapConcurrent CC=3 out:7 + markdownSections CC=4 out:2 + needles CC=1 out:2 + prioritizeDocumentChunks CC=3 out:6 + sectionLines CC=2 out:3 + src.extractors.docs-deterministic [19 funcs] + action CC=3 out:6 + codeBlockRecord CC=2 out:2 + convertDocument CC=4 out:4 + extractDocumentationBaseline CC=4 out:8 + handleDocumentationLine CC=5 out:4 + heading CC=1 out:1 + marker CC=4 out:2 + match CC=2 out:0 + parseBulletStatement CC=6 out:3 + parseFenceBlock CC=7 out:5 + src.extractors.docs-llm [8 funcs] + errorMessage CC=2 out:1 + extractChunk CC=12 out:8 + extractDocumentationIntent CC=3 out:12 + files CC=3 out:7 + loadDocumentChunks CC=4 out:8 readPrompt CC=2 out:6 - sortedUnique CC=2 out:5 - summarizeWithCorrection CC=10 out:7 - summaryMode CC=7 out:1 - src.synthesis.code-change-path [2 funcs] - isPlannablePath CC=38 out:13 - isUsefulCodeChangePath CC=1 out:1 - src.synthesis.code-change-plan [63 funcs] - acceptanceCriteriaFor CC=4 out:3 - acceptances CC=1 out:2 - acceptedCount CC=2 out:1 - applyCodeChangeSourcePatch CC=41 out:35 - applyUnifiedDiffToText CC=47 out:13 - assertCodeChangeSourcePatch CC=47 out:26 - assertCodeChangeSourcePatchSet CC=18 out:14 - assertExistingSourceReceipt CC=8 out:10 - assertSourceApplyReceipt CC=11 out:13 - assertSourcePatchIds CC=6 out:5 - src.synthesis.task-synthesis-contract [5 funcs] - RAW_CONCLUSION_CONTRACT CC=1 out:5 - RAW_PROPOSAL_CONTRACT CC=1 out:6 - nonBlank CC=1 out:1 - taskIds CC=1 out:2 - taskStrings CC=1 out:2 - src.synthesis.task-synthesis-materialize [17 funcs] - conclusionByKey CC=2 out:10 - conclusionIdByKey CC=2 out:10 - conclusions CC=1 out:5 - diagnosticIds CC=1 out:2 - keys CC=2 out:4 - mapKeys CC=2 out:5 - materializeTaskSynthesisResponse CC=2 out:18 - normalizeAcceptanceCriteria CC=4 out:2 - normalizeLocalKeys CC=1 out:0 - normalizeRawTarget CC=3 out:2 - src.synthesis.tasks-llm [11 funcs] - assertConclusions CC=1 out:0 - client CC=2 out:2 - fallbackOrThrow CC=2 out:6 - generationMetadata CC=3 out:5 - payload CC=1 out:1 - prompt CC=1 out:1 - readPrompt CC=2 out:6 - startedAt CC=1 out:1 - synthesisAudit CC=1 out:1 - synthesizeTodoProposals CC=5 out:12 - src.synthesis.todo-patch [37 funcs] - appendPatch CC=2 out:1 - applied CC=5 out:4 - applyTodoPatch CC=12 out:20 - artifact CC=6 out:8 - assertApproval CC=3 out:2 - assertReceipt CC=7 out:4 - assertTodoPatchArtifact CC=11 out:16 - atomicWrite CC=5 out:13 - classified CC=6 out:8 - createTodoPatch CC=8 out:20 - src.synthesis.validation [12 funcs] - dependencyFirstPriorityOrder CC=11 out:10 - duplicateEvidence CC=11 out:9 - intersects CC=1 out:5 - jaccard CC=5 out:1 - proposalWords CC=1 out:1 - sharedPath CC=1 out:2 - sharedSymbol CC=1 out:2 - sharedTicket CC=1 out:2 - similarity CC=1 out:2 + requireConfiguredClient CC=3 out:4 + selectWithinBudget CC=2 out:3 + src.extractors.docs-record [20 funcs] + OBJECT_PLACEHOLDERS CC=14 out:13 + action CC=11 out:7 + allowedAction CC=1 out:1 + allowedLifecycle CC=1 out:1 + allowedModality CC=1 out:1 + anchorToSource CC=7 out:10 + clampLine CC=1 out:3 + fallback CC=2 out:1 + hasTarget CC=4 out:1 + isPlaceholder CC=3 out:3 + src.extractors.docs-schema [5 funcs] + documentRecord CC=1 out:8 + documentResponseContract CC=1 out:2 + documentResponseSchema CC=1 out:1 + strings CC=1 out:2 target CC=1 out:2 - src.tf.classifier [6 funcs] - classifyAction CC=17 out:12 - dynamicImport CC=1 out:3 - importer CC=1 out:0 - loadAssets CC=2 out:6 - loadClassifier CC=6 out:5 - vectorize CC=6 out:5 - src.watch.watcher [28 funcs] - DEFAULT_MIN_INTERVAL_MS CC=19 out:14 - DEFAULT_SCAN_INTERVAL_MS CC=19 out:14 - absolute CC=3 out:3 - absoluteRoot CC=11 out:14 - current CC=2 out:2 - defaultSleep CC=6 out:7 - delta CC=2 out:2 - describeDelta CC=2 out:4 - diffSnapshots CC=6 out:5 - emit CC=2 out:0 - src.web.diff-ui [9 funcs] - byId CC=1 out:0 - compareGraphs CC=15 out:13 - diffUiHtml CC=52 out:42 - fillSelect CC=6 out:9 - formatBytes CC=7 out:2 - loadRuns CC=12 out:14 - requestHeaders CC=3 out:2 - selectedRun CC=7 out:2 - updateMeta CC=7 out:3 + src.extractors.git [25 funcs] + count CC=2 out:2 + createDiscoveryState CC=1 out:0 + discoverGitRepositories CC=4 out:7 + execFileAsync CC=1 out:0 + extractChangedSymbols CC=9 out:3 + extractGitIntent CC=6 out:7 + extractRepositoryGitIntent CC=11 out:21 + filterDiscoveryChildren CC=5 out:6 + finishDiscovery CC=4 out:1 + gitMarkerState CC=5 out:5 + src.extractors.markdown-llm [17 funcs] + emptyCoverage CC=2 out:1 + enrichBatchCovering CC=8 out:11 + enrichMarkdownBatchWithCorrection CC=1 out:0 + enrichSplitBatch CC=2 out:7 + enrichment CC=1 out:6 + failed CC=1 out:2 + fallbackOrThrow CC=2 out:5 + markDeterministic CC=2 out:2 + markdownResponseContract CC=1 out:7 + readPrompt CC=2 out:6 + src.extractors.markdown-paths [14 funcs] + addBasenameIndexMatch CC=3 out:4 + basenames CC=11 out:10 + buildBasenameIndex CC=7 out:7 + createBasenameIndexState CC=1 out:1 + createMarkdownPathResolver CC=12 out:12 + headingDirectories CC=11 out:9 + headingScopes CC=4 out:6 + index CC=6 out:4 + isNestedCheckout CC=2 out:1 + isRepositoryPath CC=5 out:3 + src.extractors.nl [12 funcs] + absolute CC=2 out:14 + action CC=1 out:9 + assertNlExtractionOptions CC=9 out:2 + body CC=2 out:14 + classified CC=1 out:9 + confidence CC=1 out:9 + detectMissingFields CC=10 out:5 + extractNlIntent CC=5 out:20 + inferActor CC=5 out:2 + missing CC=1 out:9 + src.extractors.nl-llm [32 funcs] + NL_RECORD_CONTRACT CC=1 out:7 + action CC=1 out:1 + allowedAction CC=1 out:1 + allowedModality CC=1 out:1 + audit CC=1 out:1 + clampLine CC=1 out:3 + deterministic CC=1 out:1 + extractNlWithCorrection CC=1 out:0 + failedAudit CC=1 out:2 + fallback CC=2 out:0 + src.extractors.runtime-cycle [17 funcs] + MAX_PER_SECTION CC=8 out:12 + boundedArray CC=8 out:4 + driftRecord CC=5 out:5 + extractRuntimeCycleIntent CC=8 out:12 + factsMetadata CC=5 out:3 + jsonScalar CC=6 out:1 + label CC=2 out:1 + parseCycle CC=7 out:5 + probeRecord CC=9 out:8 + proposalAction CC=5 out:0 + src.extractors.todo [16 funcs] + action CC=2 out:12 + block CC=2 out:12 + body CC=5 out:20 + checked CC=2 out:12 + classified CC=2 out:12 + extractExplicitId CC=5 out:3 + extractTodo CC=5 out:24 + heading CC=1 out:1 + inferOwner CC=4 out:1 + lines CC=5 out:20 + src.graph.diff [26 funcs] + afterGroups CC=7 out:6 + afterRecord CC=1 out:3 + assertGraph CC=3 out:3 + beforeGroups CC=7 out:6 + beforeRecord CC=1 out:3 + changedFieldPaths CC=6 out:6 + compareRelations CC=1 out:2 + diffIntentGraphs CC=11 out:19 + escapeXml CC=2 out:1 + groupRecords CC=4 out:6 + src.graph.linker [41 funcs] + addToBucket CC=2 out:3 + aliases CC=3 out:3 + astIds CC=10 out:7 + buckets CC=10 out:7 + byId CC=4 out:2 + candidatePairs CC=5 out:7 + collectCandidatePairs CC=10 out:8 + configurationIds CC=10 out:7 + declarationAstIds CC=10 out:7 + deduplicateRecords CC=4 out:3 + src.graph.symbol-resolution [10 funcs] + buildSymbolResolutionIndex CC=15 out:13 + byAlias CC=9 out:8 + byNlRecord CC=4 out:3 + hasResolvedNlAstSymbolPair CC=10 out:3 + isAstDeclaration CC=3 out:0 + pathSelects CC=3 out:5 + resolveSymbol CC=8 out:6 + selected CC=2 out:1 + uniquePaths CC=1 out:3 + values CC=2 out:0 EDGES: - src.cli.main → src.cli.printHelp - src.cli.main → src.cli.parseArgs - src.cli.main → src.cli.initProject - src.cli.parsed → src.cli.printHelp - src.cli.command → src.cli.printHelp - src.cli.diagnosticsPath → src.cli.optionNumber - src.cli.diagnosticsPath → src.cli.optionBoolean - src.cli.diagnostics → src.cli.optionNumber - src.cli.diagnostics → src.cli.optionBoolean - src.cli.result → src.cli.execFileAsync - src.cli.isPlanSet → src.cli.optionString - src.cli.root → src.cli.optionString - src.cli.root → src.cli.optionNullableString - src.cli.root → src.cli.optionLlmMode - src.cli.handleWatch → src.cli.optionNullableString - src.cli.handleWatch → src.cli.optionList - src.cli.handleWatch → src.cli.optionBoolean - src.cli.handleWatch → src.cli.optionString - src.cli.handleWatch → src.cli.optionNumber - src.cli.handleWatch → src.cli.optionNlMode - src.cli.taskFile → src.cli.optionNullableString - src.cli.taskFile → src.cli.optionList - src.cli.taskFile → src.cli.optionBoolean - src.cli.taskFile → src.cli.optionString - src.cli.taskFile → src.cli.optionNumber - src.cli.taskFile → src.cli.optionNlMode - src.cli.taskFile → src.cli.optionLlmMode - src.cli.taskFile → src.cli.optionPipelineTaskMode - src.cli.controller → src.cli.optionNumber - src.cli.controller → src.cli.optionBoolean - src.cli.controller → src.cli.formatWatchEvent - src.cli.stop → src.cli.optionNumber - src.cli.stop → src.cli.optionBoolean - src.cli.stop → src.cli.formatWatchEvent - src.cli.formatWatchEvent → src.cli.file - src.cli.stamp → src.cli.file - src.cli.handleDiff → src.cli.optionString - src.cli.handleDiff → src.cli.optionNumber - src.cli.mode → src.cli.optionNumber - src.cli.svg → src.cli.optionNumber - src.cli.svg → src.cli.optionBoolean - src.cli.html → src.cli.optionNumber - src.cli.diff → src.cli.optionNumber - src.cli.context → src.cli.optionString - src.cli.context → src.cli.optionBoolean - src.cli.context → src.cli.optionNumber - src.cli.maxRows → src.cli.optionString - src.cli.maxRows → src.cli.optionBoolean - src.cli.maxRows → src.cli.optionNumber - src.cli.handleReality → src.cli.optionString + rust-ast.src.main.main → rust-ast.src.main.arguments + rust-ast.src.main.main → rust-ast.src.main.collect_files + rust-ast.src.main.main → rust-ast.src.main.slash + rust-ast.src.main.collect_files → rust-ast.src.main.slash + rust-ast.src.main.add → rust-ast.src.main.excerpt + rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified + rust-ast.src.main.visit_item_mod → rust-ast.src.main.add + rust-ast.src.main.visit_item_use → rust-ast.src.main.add + rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item + rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item + rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item + rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item + rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified + rust-ast.src.main.visit_item_const → rust-ast.src.main.add + rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers + rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified + rust-ast.src.main.visit_item_static → rust-ast.src.main.add + rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers + rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified + rust-ast.src.main.visit_item_fn → rust-ast.src.main.add + rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add + rust-ast.src.main.visit_expr_call → rust-ast.src.main.add + rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add + rust-ast.src.main.type_item → rust-ast.src.main.qualified + rust-ast.src.main.type_item → rust-ast.src.main.add + rust-ast.src.main.type_item → rust-ast.src.main.modifiers + examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid + examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid + examples.backend.src.validation.record → examples.backend.src.validation.invalid + examples.backend.src.validation.agent → examples.backend.src.validation.invalid + examples.backend.src.validation.action → examples.backend.src.validation.invalid + examples.backend.src.validation.object → examples.backend.src.validation.invalid + examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest + examples.backend.src.server.createBackend → examples.backend.src.server.sendJson + examples.backend.src.server.store → examples.backend.src.server.handleRequest + examples.backend.src.server.store → examples.backend.src.server.sendJson + examples.backend.src.server.server → examples.backend.src.server.handleRequest + examples.backend.src.server.server → examples.backend.src.server.sendJson + examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson + examples.backend.src.server.handleRequest → examples.backend.src.server.size + examples.backend.src.server.handleRequest → examples.backend.src.server.readBody + examples.backend.src.server.validation → examples.backend.src.server.sendJson + examples.backend.src.server.event → examples.backend.src.server.sendJson + examples.backend.src.server.offset → examples.backend.src.server.sendJson + examples.backend.src.server.limit → examples.backend.src.server.sendJson + examples.backend.src.server.startBackend → examples.backend.src.server.createBackend + examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent + examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow + examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState + examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh diff --git a/project/calls.yaml b/project/calls.yaml index 35814d7..bbaf0fd 100644 --- a/project/calls.yaml +++ b/project/calls.yaml @@ -1,4362 +1,4949 @@ -project: +project: /home/tom/github/semcod/todo2code generated_from: code2llm call graph analysis stats: - total_nodes: 354 + total_nodes: 426 total_edges: 500 - modules_count: 18 + modules_count: 29 nodes: - src.synthesis.code-change-plan.buildChanges: - name: buildChanges - module: src.synthesis.code-change-plan - line: 380 - cyclomatic_complexity: 11 - calls_out: 7 - calls_in: 7 - src.cli.handleExtract: - name: handleExtract - module: src.cli - line: 518 - cyclomatic_complexity: 16 - calls_out: 18 + src.extractors.markdown-paths.headingScopes: + name: headingScopes + module: src.extractors.markdown-paths + line: 83 + cyclomatic_complexity: 4 + calls_out: 6 + calls_in: 3 + src.extractors.docs-deterministic.parseBulletStatement: + name: parseBulletStatement + module: src.extractors.docs-deterministic + line: 191 + cyclomatic_complexity: 6 + calls_out: 3 calls_in: 1 - src.synthesis.task-synthesis-contract.taskIds: - name: taskIds - module: src.synthesis.task-synthesis-contract - line: 35 + src.extractors.todo.relative: + name: relative + module: src.extractors.todo + line: 29 + cyclomatic_complexity: 5 + calls_out: 20 + calls_in: 0 + src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk: + name: extractChunk + module: src.extractors.docs-llm + line: 161 + cyclomatic_complexity: 12 + calls_out: 8 + calls_in: 1 + src.extractors.communication.nestedRoleIndex: + name: nestedRoleIndex + module: src.extractors.communication + line: 351 + cyclomatic_complexity: 5 + calls_out: 2 + calls_in: 0 + src.extractors.markdown-llm.MarkdownAttemptError.stageAudit: + name: stageAudit + module: src.extractors.markdown-llm + line: 411 cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 5 + src.extractors.docs-chunks.markdownSections: + name: markdownSections + module: src.extractors.docs-chunks + line: 94 + cyclomatic_complexity: 4 calls_out: 2 - calls_in: 2 - src.cli.optionLlmMode: - name: optionLlmMode - module: src.cli - line: 741 + calls_in: 1 + src.graph.linker.jaccard: + name: jaccard + module: src.graph.linker + line: 62 cyclomatic_complexity: 6 + calls_out: 1 + calls_in: 1 + src.graph.linker.moduleAstIds: + name: moduleAstIds + module: src.graph.linker + line: 138 + cyclomatic_complexity: 10 + calls_out: 7 + calls_in: 0 + src.extractors.runtime-cycle.proposalRecord: + name: proposalRecord + module: src.extractors.runtime-cycle + line: 250 + cyclomatic_complexity: 4 calls_out: 3 - calls_in: 8 - src.synthesis.task-synthesis-materialize.proposalKeys: - name: proposalKeys - module: src.synthesis.task-synthesis-materialize - line: 26 + calls_in: 2 + src.extractors.nl-llm.NlLlmRequiredError.body: + name: body + module: src.extractors.nl-llm + line: 79 cyclomatic_complexity: 1 - calls_out: 5 + calls_out: 1 calls_in: 0 - src.web.diff-ui.loadRuns: - name: loadRuns - module: src.web.diff-ui - line: 43 - cyclomatic_complexity: 12 - calls_out: 14 + src.graph.symbol-resolution.values: + name: values + module: src.graph.symbol-resolution + line: 33 + cyclomatic_complexity: 2 + calls_out: 0 calls_in: 1 - src.synthesis.code-change-plan.assertSourcePatchStrings: - name: assertSourcePatchStrings - module: src.synthesis.code-change-plan - line: 953 - cyclomatic_complexity: 8 - calls_out: 5 - calls_in: 2 - src.web.diff-ui.fillSelect: - name: fillSelect - module: src.web.diff-ui - line: 42 + rust-ast.src.main.main: + name: main + module: rust-ast.src.main + line: 36 cyclomatic_complexity: 6 - calls_out: 9 - calls_in: 2 - src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse: - name: materializeTaskSynthesisResponse - module: src.synthesis.task-synthesis-materialize - line: 14 - cyclomatic_complexity: 2 - calls_out: 18 + calls_out: 21 calls_in: 0 - src.services.actions.value: - name: value - module: src.services.actions - line: 369 - cyclomatic_complexity: 3 + src.extractors.communication.declaredParticipantId: + name: declaredParticipantId + module: src.extractors.communication + line: 143 + cyclomatic_complexity: 5 calls_out: 1 calls_in: 0 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions: - name: assertConclusions - module: src.synthesis.tasks-llm - line: 71 + rust-ast.src.main.visit_item_mod: + name: visit_item_mod + module: rust-ast.src.main + line: 206 cyclomatic_complexity: 1 + calls_out: 11 + calls_in: 0 + src.extractors.git.hasMoreDiscoveryWork: + name: hasMoreDiscoveryWork + module: src.extractors.git + line: 195 + cyclomatic_complexity: 3 calls_out: 0 calls_in: 2 - src.synthesis.todo-patch.uniqueStrings: - name: uniqueStrings - module: src.synthesis.todo-patch - line: 366 - cyclomatic_complexity: 7 - calls_out: 5 - calls_in: 6 - src.synthesis.code-change-plan.relatedRecords: - name: relatedRecords - module: src.synthesis.code-change-plan - line: 136 - cyclomatic_complexity: 1 + src.extractors.docs-deterministic.primePathMapper: + name: primePathMapper + module: src.extractors.docs-deterministic + line: 87 + cyclomatic_complexity: 5 + calls_out: 6 + calls_in: 3 + src.extractors.ast.typescript.declarationIsCallable: + name: declarationIsCallable + module: src.extractors.ast.typescript + line: 110 + cyclomatic_complexity: 4 calls_out: 2 calls_in: 0 - src.pipeline.run.docs: - name: docs - module: src.pipeline.run - line: 146 - cyclomatic_complexity: 2 + examples.frontend.src.app.mountPanel: + name: mountPanel + module: examples.frontend.src.app + line: 36 + cyclomatic_complexity: 1 calls_out: 4 calls_in: 0 - src.cli.maxRows: - name: maxRows - module: src.cli - line: 452 - cyclomatic_complexity: 9 - calls_out: 10 - calls_in: 0 - src.tf.classifier.classifyAction: - name: classifyAction - module: src.tf.classifier - line: 69 - cyclomatic_complexity: 17 - calls_out: 12 - calls_in: 0 - src.pipeline.run.configurationExtraction: - name: configurationExtraction - module: src.pipeline.run - line: 182 - cyclomatic_complexity: 10 - calls_out: 5 - calls_in: 0 - src.summary.summarizer.client: - name: client - module: src.summary.summarizer - line: 85 - cyclomatic_complexity: 4 - calls_out: 5 - calls_in: 0 - src.semantic.reranker.validDate: - name: validDate - module: src.semantic.reranker - line: 499 + src.graph.linker.indexAliases: + name: indexAliases + module: src.graph.linker + line: 174 cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 2 - src.services.actions.patch: - name: patch - module: src.services.actions - line: 302 - cyclomatic_complexity: 1 calls_out: 2 + calls_in: 1 + src.extractors.nl-llm.NlAttemptError.isPlaceholder: + name: isPlaceholder + module: src.extractors.nl-llm + line: 244 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 1 + src.graph.diff.width: + name: width + module: src.graph.diff + line: 119 + cyclomatic_complexity: 4 + calls_out: 4 + calls_in: 0 + src.extractors.configuration.extractConfigurationIntent: + name: extractConfigurationIntent + module: src.extractors.configuration + line: 11 + cyclomatic_complexity: 4 + calls_out: 10 calls_in: 0 - src.services.actions.afterPath: - name: afterPath - module: src.services.actions - line: 428 + src.extractors.nl-llm.NlLlmRequiredError.prompt: + name: prompt + module: src.extractors.nl-llm + line: 84 cyclomatic_complexity: 1 - calls_out: 4 + calls_out: 1 calls_in: 0 - src.watch.watcher.waitMs: - name: waitMs - module: src.watch.watcher - line: 192 + examples.src.runtime.validateContract: + name: validateContract + module: examples.src.runtime + line: 6 cyclomatic_complexity: 2 calls_out: 1 + calls_in: 1 + src.graph.linker.candidatePairs: + name: candidatePairs + module: src.graph.linker + line: 79 + cyclomatic_complexity: 5 + calls_out: 7 calls_in: 0 - src.cli.optionBoolean: - name: optionBoolean - module: src.cli - line: 717 - cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 15 - src.watch.watcher.diffSnapshots: - name: diffSnapshots - module: src.watch.watcher - line: 80 - cyclomatic_complexity: 6 - calls_out: 5 - calls_in: 3 - src.cli.optionPipelineTaskMode: - name: optionPipelineTaskMode - module: src.cli - line: 763 + src.extractors.runtime-cycle.label: + name: label + module: src.extractors.runtime-cycle + line: 111 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 5 + src.graph.diff.changedFieldPaths: + name: changedFieldPaths + module: src.graph.diff + line: 189 cyclomatic_complexity: 6 - calls_out: 3 + calls_out: 6 + calls_in: 8 + src.extractors.markdown-paths.scanDirectoryForBasenames: + name: scanDirectoryForBasenames + module: src.extractors.markdown-paths + line: 125 + cyclomatic_complexity: 8 + calls_out: 8 calls_in: 3 - src.synthesis.task-synthesis-materialize.normalizeLocalKeys: - name: normalizeLocalKeys - module: src.synthesis.task-synthesis-materialize - line: 92 - cyclomatic_complexity: 1 - calls_out: 0 - calls_in: 1 - src.summary.summarizer.SummaryAttemptError.conclusions: - name: conclusions - module: src.summary.summarizer - line: 264 + src.extractors.communication.item: + name: item + module: src.extractors.communication + line: 407 cyclomatic_complexity: 3 calls_out: 3 calls_in: 0 - src.semantic.reranker.createSemanticCandidateSet: - name: createSemanticCandidateSet - module: src.semantic.reranker - line: 113 - cyclomatic_complexity: 8 - calls_out: 17 + src.graph.linker.buckets: + name: buckets + module: src.graph.linker + line: 136 + cyclomatic_complexity: 10 + calls_out: 7 calls_in: 0 - src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet: - name: assertSemanticCandidateSet - module: src.semantic.reranker-llm - line: 44 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 1 - src.synthesis.todo-patch.result: - name: result - module: src.synthesis.todo-patch - line: 188 + src.extractors.communication.envelope: + name: envelope + module: src.extractors.communication + line: 127 cyclomatic_complexity: 5 - calls_out: 4 - calls_in: 0 - src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates: - name: rerankSemanticCandidates - module: src.semantic.reranker-llm - line: 38 - cyclomatic_complexity: 25 - calls_out: 19 + calls_out: 1 calls_in: 0 - src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria: - name: normalizeAcceptanceCriteria - module: src.synthesis.task-synthesis-materialize - line: 152 - cyclomatic_complexity: 4 - calls_out: 2 - calls_in: 4 - src.synthesis.task-synthesis-materialize.proposalDrafts: - name: proposalDrafts - module: src.synthesis.task-synthesis-materialize - line: 49 - cyclomatic_complexity: 2 + src.extractors.docs-record.anchorToSource: + name: anchorToSource + module: src.extractors.docs-record + line: 93 + cyclomatic_complexity: 7 calls_out: 10 + calls_in: 2 + src.extractors.nl-llm.NlAttemptError.toIntentRecord: + name: toIntentRecord + module: src.extractors.nl-llm + line: 175 + cyclomatic_complexity: 12 + calls_out: 11 + calls_in: 1 + src.extractors.configuration.files: + name: files + module: src.extractors.configuration + line: 15 + cyclomatic_complexity: 4 + calls_out: 5 calls_in: 0 - src.synthesis.task-synthesis-materialize.conclusionByKey: - name: conclusionByKey - module: src.synthesis.task-synthesis-materialize - line: 47 - cyclomatic_complexity: 2 + src.graph.diff.assertGraph: + name: assertGraph + module: src.graph.diff + line: 155 + cyclomatic_complexity: 3 + calls_out: 3 + calls_in: 1 + src.extractors.configuration.MAX_ENTRIES_PER_FILE: + name: MAX_ENTRIES_PER_FILE + module: src.extractors.configuration + line: 8 + cyclomatic_complexity: 4 calls_out: 10 calls_in: 0 - src.cli.formatWatchEvent: - name: formatWatchEvent - module: src.cli - line: 408 - cyclomatic_complexity: 10 - calls_out: 7 - calls_in: 3 - src.pipeline.run.reason: - name: reason - module: src.pipeline.run - line: 549 - cyclomatic_complexity: 3 + src.extractors.communication.participant: + name: participant + module: src.extractors.communication + line: 145 + cyclomatic_complexity: 5 calls_out: 1 calls_in: 0 - src.semantic.reranker.assertSemanticVerdictReason: - name: assertSemanticVerdictReason - module: src.semantic.reranker - line: 443 - cyclomatic_complexity: 7 + src.graph.linker.isSuppressedConfigurationPair: + name: isSuppressedConfigurationPair + module: src.graph.linker + line: 225 + cyclomatic_complexity: 3 calls_out: 2 calls_in: 1 - src.cli.diff: - name: diff - module: src.cli - line: 444 - cyclomatic_complexity: 2 - calls_out: 4 + src.extractors.docs-record.action: + name: action + module: src.extractors.docs-record + line: 36 + cyclomatic_complexity: 11 + calls_out: 7 calls_in: 0 - src.semantic.reranker.roundedConfidence: - name: roundedConfidence - module: src.semantic.reranker - line: 487 - cyclomatic_complexity: 4 + src.extractors.changelog.changelogAction: + name: changelogAction + module: src.extractors.changelog + line: 87 + cyclomatic_complexity: 11 calls_out: 3 - calls_in: 6 - src.summary.render.renderConclusion: - name: renderConclusion - module: src.summary.render - line: 54 + calls_in: 4 + src.extractors.nl-llm.NlLlmRequiredError.sourcePath: + name: sourcePath + module: src.extractors.nl-llm + line: 80 cyclomatic_complexity: 1 - calls_out: 3 - calls_in: 1 - src.cli.handleWatch: - name: handleWatch - module: src.cli - line: 366 - cyclomatic_complexity: 6 - calls_out: 18 - calls_in: 1 - src.pipeline.run.persistFailedRun: - name: persistFailedRun - module: src.pipeline.run - line: 497 - cyclomatic_complexity: 19 - calls_out: 12 - calls_in: 1 - src.watch.watcher.emit: - name: emit - module: src.watch.watcher - line: 151 - cyclomatic_complexity: 2 - calls_out: 0 - calls_in: 10 - src.pipeline.run.manifestConfiguration: - name: manifestConfiguration - module: src.pipeline.run - line: 433 - cyclomatic_complexity: 8 - calls_out: 3 - calls_in: 2 - src.services.actions.beforeInput: - name: beforeInput - module: src.services.actions - line: 400 - cyclomatic_complexity: 2 - calls_out: 2 + calls_out: 1 calls_in: 0 - src.synthesis.todo-patch.orderedSelected: - name: orderedSelected - module: src.synthesis.todo-patch - line: 91 - cyclomatic_complexity: 2 - calls_out: 2 + src.extractors.nl-llm.NlAttemptError.action: + name: action + module: src.extractors.nl-llm + line: 178 + cyclomatic_complexity: 1 + calls_out: 1 calls_in: 0 - src.cli.file: - name: file - module: src.cli - line: 523 + src.extractors.configuration.parsed: + name: parsed + module: src.extractors.configuration + line: 132 cyclomatic_complexity: 3 - calls_out: 0 - calls_in: 2 - src.synthesis.code-change-plan.fileHashesAfter: - name: fileHashesAfter - module: src.synthesis.code-change-plan - line: 1100 - cyclomatic_complexity: 1 calls_out: 4 calls_in: 0 - src.synthesis.todo-patch.diagnosticReportFingerprint: - name: diagnosticReportFingerprint - module: src.synthesis.todo-patch - line: 60 - cyclomatic_complexity: 1 - calls_out: 4 - calls_in: 2 - src.summary.render.actions: - name: actions - module: src.summary.render - line: 32 - cyclomatic_complexity: 2 + src.graph.linker.isSuppressedAstPair: + name: isSuppressedAstPair + module: src.graph.linker + line: 262 + cyclomatic_complexity: 9 calls_out: 2 + calls_in: 1 + src.extractors.nl.action: + name: action + module: src.extractors.nl + line: 50 + cyclomatic_complexity: 1 + calls_out: 9 calls_in: 0 - src.services.actions.graph: - name: graph - module: src.services.actions - line: 452 - cyclomatic_complexity: 2 - calls_out: 4 + java.JavaAstExtract.JavaAstExtract.map: + name: map + module: java.JavaAstExtract + line: 182 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 3 + src.extractors.communication.declaredRole: + name: declaredRole + module: src.extractors.communication + line: 142 + cyclomatic_complexity: 5 + calls_out: 1 calls_in: 0 - src.synthesis.validation.dependencyFirstPriorityOrder: - name: dependencyFirstPriorityOrder - module: src.synthesis.validation - line: 64 - cyclomatic_complexity: 11 - calls_out: 10 - calls_in: 1 - src.semantic.reranker-llm.SemanticRerankerRequiredError.projectRecord: - name: projectRecord - module: src.semantic.reranker-llm - line: 195 - cyclomatic_complexity: 3 + src.extractors.ast.typescript.scriptKind: + name: scriptKind + module: src.extractors.ast.typescript + line: 155 + cyclomatic_complexity: 4 calls_out: 3 - calls_in: 2 - src.synthesis.code-change-plan.collectTarget: - name: collectTarget - module: src.synthesis.code-change-plan - line: 355 + calls_in: 1 + rust-ast.src.main.visit_impl_item_fn: + name: visit_impl_item_fn + module: rust-ast.src.main + line: 275 + cyclomatic_complexity: 2 + calls_out: 10 + calls_in: 0 + src.extractors.docs-record.target: + name: target + module: src.extractors.docs-record + line: 35 cyclomatic_complexity: 11 - calls_out: 3 - calls_in: 7 - src.synthesis.validation.sharedTicket: - name: sharedTicket - module: src.synthesis.validation - line: 44 + calls_out: 7 + calls_in: 0 + examples.frontend.src.render.toRows: + name: toRows + module: examples.frontend.src.render + line: 19 cyclomatic_complexity: 1 calls_out: 2 calls_in: 0 - src.summary.summarizer.SummaryAttemptError.readPrompt: - name: readPrompt - module: src.summary.summarizer - line: 329 - cyclomatic_complexity: 2 - calls_out: 6 - calls_in: 1 - src.pipeline.run.stageValue: - name: stageValue - module: src.pipeline.run - line: 535 - cyclomatic_complexity: 3 + src.extractors.communication.match: + name: match + module: src.extractors.communication + line: 330 + cyclomatic_complexity: 1 calls_out: 2 + calls_in: 5 + src.extractors.docs-record.hasTarget: + name: hasTarget + module: src.extractors.docs-record + line: 152 + cyclomatic_complexity: 4 + calls_out: 1 calls_in: 1 - src.web.diff-ui.requestHeaders: - name: requestHeaders - module: src.web.diff-ui - line: 38 - cyclomatic_complexity: 3 - calls_out: 2 - calls_in: 3 - src.synthesis.task-synthesis-materialize.diagnosticIds: - name: diagnosticIds - module: src.synthesis.task-synthesis-materialize - line: 32 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 0 - src.cli.initProject: - name: initProject - module: src.cli - line: 623 - cyclomatic_complexity: 6 - calls_out: 9 - calls_in: 1 - src.semantic.reranker.values: - name: values - module: src.semantic.reranker - line: 226 - cyclomatic_complexity: 2 - calls_out: 0 - calls_in: 1 - src.synthesis.todo-patch.inline: - name: inline - module: src.synthesis.todo-patch - line: 321 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 3 - src.pipeline.run.runPipeline: - name: runPipeline - module: src.pipeline.run - line: 55 - cyclomatic_complexity: 53 - calls_out: 54 - calls_in: 0 - src.cli.taskFile: - name: taskFile - module: src.cli - line: 368 - cyclomatic_complexity: 3 - calls_out: 8 - calls_in: 0 - src.cli.optionNumber: - name: optionNumber - module: src.cli - line: 724 - cyclomatic_complexity: 5 - calls_out: 5 - calls_in: 18 - src.cli.printHelp: - name: printHelp - module: src.cli - line: 777 + java.JavaAstExtract.JavaAstExtract.slash: + name: slash + module: java.JavaAstExtract + line: 259 cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 3 - src.operations.validation.dateString: - name: dateString - module: src.operations.validation - line: 35 - cyclomatic_complexity: 2 - calls_out: 4 + calls_out: 1 calls_in: 2 - src.synthesis.code-change-plan.planHash: - name: planHash - module: src.synthesis.code-change-plan - line: 166 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 0 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals: - name: synthesizeTodoProposals - module: src.synthesis.tasks-llm - line: 62 + src.extractors.communication.parseEnvelope: + name: parseEnvelope + module: src.extractors.communication + line: 323 cyclomatic_complexity: 5 + calls_out: 8 + calls_in: 1 + src.extractors.configuration.configurationRecords: + name: configurationRecords + module: src.extractors.configuration + line: 41 + cyclomatic_complexity: 4 calls_out: 12 + calls_in: 4 + src.graph.linker.keywordIndex: + name: keywordIndex + module: src.graph.linker + line: 77 + cyclomatic_complexity: 5 + calls_out: 7 calls_in: 0 - src.services.actions.numberValue: - name: numberValue - module: src.services.actions - line: 651 + src.extractors.markdown-paths.readBasenameDirectoryEntries: + name: readBasenameDirectoryEntries + module: src.extractors.markdown-paths + line: 113 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 3 + src.extractors.markdown-paths.index: + name: index + module: src.extractors.markdown-paths + line: 91 cyclomatic_complexity: 6 calls_out: 4 - calls_in: 18 - src.semantic.reranker.requiredText: - name: requiredText - module: src.semantic.reranker - line: 494 + calls_in: 0 + src.extractors.nl-llm.NlAttemptError.lines: + name: lines + module: src.extractors.nl-llm + line: 176 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.graph.symbol-resolution.pathSelects: + name: pathSelects + module: src.graph.symbol-resolution + line: 104 cyclomatic_complexity: 3 - calls_out: 2 - calls_in: 11 - src.synthesis.code-change-plan.assertExistingSourceReceipt: - name: assertExistingSourceReceipt - module: src.synthesis.code-change-plan - line: 1152 - cyclomatic_complexity: 8 - calls_out: 10 + calls_out: 5 calls_in: 1 - src.web.diff-ui.compareGraphs: - name: compareGraphs - module: src.web.diff-ui - line: 45 - cyclomatic_complexity: 15 - calls_out: 13 - calls_in: 2 - src.synthesis.task-synthesis-contract.nonBlank: - name: nonBlank - module: src.synthesis.task-synthesis-contract - line: 36 + src.extractors.docs-chunks.workerCount: + name: workerCount + module: src.extractors.docs-chunks + line: 50 cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 2 - src.synthesis.todo-patch.selected: - name: selected - module: src.synthesis.todo-patch - line: 238 - cyclomatic_complexity: 6 + calls_out: 3 + calls_in: 0 + src.graph.symbol-resolution.byAlias: + name: byAlias + module: src.graph.symbol-resolution + line: 23 + cyclomatic_complexity: 9 calls_out: 8 calls_in: 0 - src.synthesis.code-change-plan.assertCodeChangeSourcePatch: - name: assertCodeChangeSourcePatch - module: src.synthesis.code-change-plan - line: 790 - cyclomatic_complexity: 47 - calls_out: 26 - calls_in: 5 - src.synthesis.code-change-plan.conclusionsByDiagnostic: - name: conclusionsByDiagnostic - module: src.synthesis.code-change-plan - line: 122 - cyclomatic_complexity: 7 - calls_out: 18 + src.graph.linker.byId: + name: byId + module: src.graph.linker + line: 117 + cyclomatic_complexity: 4 + calls_out: 2 calls_in: 0 - src.synthesis.code-change-plan.descriptionFor: - name: descriptionFor - module: src.synthesis.code-change-plan - line: 444 - cyclomatic_complexity: 5 + src.extractors.docs-schema.strings: + name: strings + module: src.extractors.docs-schema + line: 12 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 2 + src.graph.linker.scorePair: + name: scorePair + module: src.graph.linker + line: 342 + cyclomatic_complexity: 18 + calls_out: 16 + calls_in: 6 + src.extractors.nl-llm.NlAttemptError.clampLine: + name: clampLine + module: src.extractors.nl-llm + line: 292 + cyclomatic_complexity: 1 calls_out: 3 - calls_in: 7 - src.watch.watcher.snapshot: - name: snapshot - module: src.watch.watcher - line: 163 + calls_in: 1 + src.extractors.nl-llm.NlAttemptError.normalizedText: + name: normalizedText + module: src.extractors.nl-llm + line: 179 cyclomatic_complexity: 1 calls_out: 1 calls_in: 0 - src.synthesis.code-change-plan.applyUnifiedDiffToText: - name: applyUnifiedDiffToText - module: src.synthesis.code-change-plan - line: 1222 - cyclomatic_complexity: 47 - calls_out: 13 - calls_in: 1 - src.synthesis.code-change-plan.changes: - name: changes - module: src.synthesis.code-change-plan - line: 144 + rust-ast.src.main.visit_expr_method_call: + name: visit_expr_method_call + module: rust-ast.src.main + line: 296 cyclomatic_complexity: 1 + calls_out: 7 + calls_in: 0 + src.extractors.communication.fileParts: + name: fileParts + module: src.extractors.communication + line: 350 + cyclomatic_complexity: 5 calls_out: 2 calls_in: 0 - src.operations.validation.exactKeys: - name: exactKeys - module: src.operations.validation - line: 23 + src.extractors.markdown-llm.MarkdownLlmRequiredError.client: + name: client + module: src.extractors.markdown-llm + line: 78 cyclomatic_complexity: 2 - calls_out: 5 - calls_in: 12 - src.synthesis.todo-patch.applyTodoPatch: - name: applyTodoPatch - module: src.synthesis.todo-patch - line: 160 - cyclomatic_complexity: 12 - calls_out: 20 + calls_out: 2 calls_in: 0 - src.semantic.reranker.acceptedDeclarations: - name: acceptedDeclarations - module: src.semantic.reranker - line: 328 - cyclomatic_complexity: 16 - calls_out: 15 + src.graph.diff.paired: + name: paired + module: src.graph.diff + line: 48 + cyclomatic_complexity: 4 + calls_out: 3 calls_in: 0 - src.synthesis.task-synthesis-materialize.sortedUnique: - name: sortedUnique - module: src.synthesis.task-synthesis-materialize - line: 130 - cyclomatic_complexity: 1 - calls_out: 4 - calls_in: 10 - src.synthesis.code-change-plan.rollbackFor: - name: rollbackFor - module: src.synthesis.code-change-plan - line: 500 + src.extractors.nl-llm.NlLlmRequiredError.result: + name: result + module: src.extractors.nl-llm + line: 61 cyclomatic_complexity: 1 calls_out: 3 - calls_in: 7 - src.semantic.reranker.records: - name: records - module: src.semantic.reranker - line: 326 - cyclomatic_complexity: 16 - calls_out: 15 calls_in: 0 - src.summary.render.renderRecords: - name: renderRecords - module: src.summary.render + src.graph.diff.left: + name: left + module: src.graph.diff line: 46 - cyclomatic_complexity: 2 + cyclomatic_complexity: 4 calls_out: 3 - calls_in: 1 - src.services.actions.llmModeValue: - name: llmModeValue - module: src.services.actions - line: 532 - cyclomatic_complexity: 5 - calls_out: 1 - calls_in: 4 - src.operations.validation.principals: - name: principals - module: src.operations.validation - line: 50 - cyclomatic_complexity: 1 - calls_out: 1 calls_in: 0 - src.synthesis.todo-patch.markdown: - name: markdown - module: src.synthesis.todo-patch - line: 95 + src.extractors.nl.absolute: + name: absolute + module: src.extractors.nl + line: 40 cyclomatic_complexity: 2 - calls_out: 9 + calls_out: 14 calls_in: 0 - src.pipeline.run.failedAudit: - name: failedAudit - module: src.pipeline.run - line: 519 - cyclomatic_complexity: 9 + src.extractors.nl-llm.NlAttemptError.markDeterministic: + name: markDeterministic + module: src.extractors.nl-llm + line: 169 + cyclomatic_complexity: 2 calls_out: 2 + calls_in: 4 + src.graph.linker.intersectsAliases: + name: intersectsAliases + module: src.graph.linker + line: 477 + cyclomatic_complexity: 1 + calls_out: 5 calls_in: 2 - src.synthesis.code-change-plan.instructionFor: - name: instructionFor - module: src.synthesis.code-change-plan - line: 969 - cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 3 - src.synthesis.code-change-path.isPlannablePath: - name: isPlannablePath - module: src.synthesis.code-change-path - line: 138 - cyclomatic_complexity: 38 - calls_out: 13 - calls_in: 1 - src.services.actions.scopedPath: - name: scopedPath - module: src.services.actions - line: 603 + src.extractors.docs-deterministic.qualifyingStatement: + name: qualifyingStatement + module: src.extractors.docs-deterministic + line: 270 cyclomatic_complexity: 1 - calls_out: 3 + calls_out: 0 calls_in: 2 - src.synthesis.task-synthesis-materialize.normalizeRawTarget: - name: normalizeRawTarget - module: src.synthesis.task-synthesis-materialize - line: 142 - cyclomatic_complexity: 3 - calls_out: 2 - calls_in: 4 - src.semantic.reranker-llm.SemanticRerankerRequiredError.model: - name: model - module: src.semantic.reranker-llm - line: 51 - cyclomatic_complexity: 4 + src.extractors.ast.records.capabilities: + name: capabilities + module: src.extractors.ast.records + line: 49 + cyclomatic_complexity: 1 calls_out: 2 calls_in: 0 - src.watch.watcher.describeDelta: - name: describeDelta - module: src.watch.watcher - line: 100 + src.extractors.docs-deterministic.match: + name: match + module: src.extractors.docs-deterministic + line: 160 cyclomatic_complexity: 2 - calls_out: 4 - calls_in: 5 - src.synthesis.code-change-plan.renderCodeChangeReviewMarkdown: - name: renderCodeChangeReviewMarkdown - module: src.synthesis.code-change-plan - line: 572 - cyclomatic_complexity: 10 - calls_out: 6 - calls_in: 1 - src.synthesis.code-change-plan.applyCodeChangeSourcePatch: - name: applyCodeChangeSourcePatch - module: src.synthesis.code-change-plan - line: 1031 - cyclomatic_complexity: 41 - calls_out: 35 - calls_in: 0 - src.synthesis.code-change-plan.createCodeChangeReviewPatch: - name: createCodeChangeReviewPatch - module: src.synthesis.code-change-plan - line: 547 - cyclomatic_complexity: 6 - calls_out: 15 + calls_out: 0 + calls_in: 4 + src.extractors.git.count: + name: count + module: src.extractors.git + line: 42 + cyclomatic_complexity: 2 + calls_out: 2 calls_in: 0 - src.semantic.reranker.validateGeneration: - name: validateGeneration - module: src.semantic.reranker - line: 422 - cyclomatic_complexity: 5 + src.graph.linker.deduplicateRecords: + name: deduplicateRecords + module: src.graph.linker + line: 116 + cyclomatic_complexity: 4 calls_out: 3 calls_in: 1 - src.synthesis.code-change-plan.unifiedDiff: - name: unifiedDiff - module: src.synthesis.code-change-plan - line: 724 + rust-ast.src.main.visit_item_struct: + name: visit_item_struct + module: rust-ast.src.main + line: 223 cyclomatic_complexity: 1 calls_out: 2 calls_in: 0 - src.synthesis.todo-patch.applied: - name: applied - module: src.synthesis.todo-patch - line: 189 - cyclomatic_complexity: 5 - calls_out: 4 - calls_in: 0 - src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection: - name: summarizeWithCorrection - module: src.summary.summarizer - line: 169 - cyclomatic_complexity: 10 + src.extractors.configuration.tomlEntries: + name: tomlEntries + module: src.extractors.configuration + line: 145 + cyclomatic_complexity: 3 calls_out: 7 - calls_in: 3 - src.synthesis.code-change-plan.index: - name: index - module: src.synthesis.code-change-plan - line: 344 - cyclomatic_complexity: 4 - calls_out: 3 - calls_in: 0 - src.synthesis.code-change-plan.planIds: - name: planIds - module: src.synthesis.code-change-plan - line: 306 + calls_in: 1 + rust-ast.src.main.modifiers: + name: modifiers + module: rust-ast.src.main + line: 193 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 4 + src.graph.linker.rightId: + name: rightId + module: src.graph.linker + line: 248 cyclomatic_complexity: 1 - calls_out: 2 + calls_out: 1 calls_in: 0 - src.summary.render.confidence: - name: confidence - module: src.summary.render - line: 55 + src.extractors.docs-schema.documentRecord: + name: documentRecord + module: src.extractors.docs-schema + line: 15 cyclomatic_complexity: 1 - calls_out: 2 + calls_out: 8 calls_in: 0 - src.cli.invokedPath: - name: invokedPath - module: src.cli - line: 821 - cyclomatic_complexity: 4 + src.graph.diff.relationKey: + name: relationKey + module: src.graph.diff + line: 202 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 2 + src.extractors.git.mapWithConcurrency: + name: mapWithConcurrency + module: src.extractors.git + line: 306 + cyclomatic_complexity: 3 calls_out: 4 - calls_in: 0 - src.synthesis.code-change-plan.confidenceFor: - name: confidenceFor - module: src.synthesis.code-change-plan - line: 480 + calls_in: 1 + src.extractors.docs-deterministic.convertDocument: + name: convertDocument + module: src.extractors.docs-deterministic + line: 100 cyclomatic_complexity: 4 + calls_out: 4 + calls_in: 3 + src.extractors.docs-record.isPlaceholder: + name: isPlaceholder + module: src.extractors.docs-record + line: 75 + cyclomatic_complexity: 3 calls_out: 3 - calls_in: 8 - src.watch.watcher.visit: - name: visit - module: src.watch.watcher - line: 42 - cyclomatic_complexity: 11 - calls_out: 13 - calls_in: 5 - src.cli.optionSummaryMode: - name: optionSummaryMode - module: src.cli - line: 753 - cyclomatic_complexity: 4 + calls_in: 2 + src.extractors.ast.typescript.add: + name: add + module: src.extractors.ast.typescript + line: 29 + cyclomatic_complexity: 14 + calls_out: 7 + calls_in: 7 + src.extractors.configuration.bounded: + name: bounded + module: src.extractors.configuration + line: 50 + cyclomatic_complexity: 1 calls_out: 3 - calls_in: 1 - src.summary.summarizer.systemPrompt: - name: systemPrompt - module: src.summary.summarizer - line: 103 - cyclomatic_complexity: 6 - calls_out: 6 - calls_in: 0 - src.cli.svg: - name: svg - module: src.cli - line: 505 - cyclomatic_complexity: 2 - calls_out: 5 calls_in: 0 - src.synthesis.code-change-plan.candidates: - name: candidates - module: src.synthesis.code-change-plan - line: 124 - cyclomatic_complexity: 7 - calls_out: 18 + src.extractors.configuration.uniqueEntries: + name: uniqueEntries + module: src.extractors.configuration + line: 195 + cyclomatic_complexity: 3 + calls_out: 3 + calls_in: 2 + src.extractors.communication.communicationFiles: + name: communicationFiles + module: src.extractors.communication + line: 75 + cyclomatic_complexity: 3 + calls_out: 2 calls_in: 0 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.client: - name: client - module: src.synthesis.tasks-llm - line: 72 + src.extractors.ast.records.moduleTopicText: + name: moduleTopicText + module: src.extractors.ast.records + line: 93 cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 4 + src.extractors.communication.nestedRole: + name: nestedRole + module: src.extractors.communication + line: 352 + cyclomatic_complexity: 5 calls_out: 2 calls_in: 0 - src.watch.watcher.relative: - name: relative - module: src.watch.watcher - line: 55 - cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 4 - src.synthesis.todo-patch.renderTodoPatchMarkdown: - name: renderTodoPatchMarkdown - module: src.synthesis.todo-patch - line: 119 - cyclomatic_complexity: 6 - calls_out: 5 + src.extractors.nl-llm.NlAttemptError.nlStrings: + name: nlStrings + module: src.extractors.nl-llm + line: 318 + cyclomatic_complexity: 1 + calls_out: 6 calls_in: 1 - src.synthesis.todo-patch.sourceTodo: - name: sourceTodo - module: src.synthesis.todo-patch - line: 232 - cyclomatic_complexity: 6 - calls_out: 8 - calls_in: 0 - src.synthesis.code-change-plan.priorityRank: - name: priorityRank - module: src.synthesis.code-change-plan - line: 672 + src.graph.diff.values: + name: values + module: src.graph.diff + line: 167 cyclomatic_complexity: 1 calls_out: 0 calls_in: 1 - src.watch.watcher.sleep: - name: sleep - module: src.watch.watcher - line: 153 - cyclomatic_complexity: 2 + examples.backend.src.server.sendJson: + name: sendJson + module: examples.backend.src.server + line: 82 + cyclomatic_complexity: 1 + calls_out: 4 + calls_in: 8 + src.extractors.docs-record.allowedLifecycle: + name: allowedLifecycle + module: src.extractors.docs-record + line: 191 + cyclomatic_complexity: 1 calls_out: 1 - calls_in: 3 - src.synthesis.todo-patch.current: - name: current - module: src.synthesis.todo-patch - line: 179 - cyclomatic_complexity: 2 - calls_out: 3 + calls_in: 5 + src.extractors.communication.extractCommunicationIntent: + name: extractCommunicationIntent + module: src.extractors.communication + line: 55 + cyclomatic_complexity: 7 + calls_out: 10 calls_in: 0 - src.watch.watcher.lastReportStartedAt: - name: lastReportStartedAt - module: src.watch.watcher - line: 168 - cyclomatic_complexity: 3 - calls_out: 2 + src.graph.linker.linkIntentRecords: + name: linkIntentRecords + module: src.graph.linker + line: 73 + cyclomatic_complexity: 5 + calls_out: 22 calls_in: 0 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.fallbackOrThrow: - name: fallbackOrThrow - module: src.synthesis.tasks-llm - line: 177 - cyclomatic_complexity: 2 - calls_out: 6 - calls_in: 2 - src.semantic.reranker.validateRetrieval: - name: validateRetrieval - module: src.semantic.reranker - line: 414 + src.extractors.nl.classified: + name: classified + module: src.extractors.nl + line: 49 + cyclomatic_complexity: 1 + calls_out: 9 + calls_in: 0 + src.graph.diff.truncate: + name: truncate + module: src.graph.diff + line: 233 cyclomatic_complexity: 2 + calls_out: 2 + calls_in: 5 + rust-ast.src.main.visit_item_type: + name: visit_item_type + module: rust-ast.src.main + line: 238 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 0 + examples.backend.src.server.startBackend: + name: startBackend + module: examples.backend.src.server + line: 91 + cyclomatic_complexity: 3 calls_out: 3 - calls_in: 1 - src.services.actions.root: - name: root - module: src.services.actions - line: 73 - cyclomatic_complexity: 83 - calls_out: 64 calls_in: 0 - src.synthesis.todo-patch.renderTargets: - name: renderTargets - module: src.synthesis.todo-patch - line: 307 + src.extractors.nl-llm.NlLlmRequiredError.startedAt: + name: startedAt + module: src.extractors.nl-llm + line: 59 cyclomatic_complexity: 2 calls_out: 4 - calls_in: 1 - src.synthesis.todo-patch.assertReceipt: - name: assertReceipt - module: src.synthesis.todo-patch - line: 262 - cyclomatic_complexity: 7 - calls_out: 4 - calls_in: 2 - src.synthesis.validation.duplicateEvidence: - name: duplicateEvidence - module: src.synthesis.validation - line: 38 - cyclomatic_complexity: 11 - calls_out: 9 - calls_in: 1 - src.summary.summarizer.SummaryAttemptError.deterministicConclusions: - name: deterministicConclusions - module: src.summary.summarizer - line: 259 - cyclomatic_complexity: 4 - calls_out: 7 - calls_in: 5 - src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT: - name: RAW_PROPOSAL_CONTRACT - module: src.synthesis.task-synthesis-contract - line: 49 + calls_in: 0 + rust-ast.src.main.visit_item_fn: + name: visit_item_fn + module: rust-ast.src.main + line: 257 cyclomatic_complexity: 1 - calls_out: 6 + calls_out: 13 calls_in: 0 - src.synthesis.todo-patch.uniqueIds: - name: uniqueIds - module: src.synthesis.todo-patch - line: 358 - cyclomatic_complexity: 7 - calls_out: 5 - calls_in: 6 - src.pipeline.run.communicationInputPresent: - name: communicationInputPresent - module: src.pipeline.run - line: 189 + examples.frontend.src.app.state: + name: state + module: examples.frontend.src.app + line: 37 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 1 + src.graph.linker.astIds: + name: astIds + module: src.graph.linker + line: 137 cyclomatic_complexity: 10 - calls_out: 5 + calls_out: 7 calls_in: 0 - src.tf.classifier.dynamicImport: - name: dynamicImport - module: src.tf.classifier - line: 29 + src.extractors.todo.match: + name: match + module: src.extractors.todo + line: 87 cyclomatic_complexity: 1 - calls_out: 3 + calls_out: 0 + calls_in: 8 + src.extractors.markdown-llm.MarkdownAttemptError.failed: + name: failed + module: src.extractors.markdown-llm + line: 310 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 0 + src.extractors.git.readCommits: + name: readCommits + module: src.extractors.git + line: 334 + cyclomatic_complexity: 1 + calls_out: 7 + calls_in: 1 + src.extractors.communication.flush: + name: flush + module: src.extractors.communication + line: 405 + cyclomatic_complexity: 5 + calls_out: 5 calls_in: 1 - src.synthesis.code-change-plan.rawDiff: - name: rawDiff - module: src.synthesis.code-change-plan - line: 723 + src.extractors.docs-chunks.needles: + name: needles + module: src.extractors.docs-chunks + line: 7 cyclomatic_complexity: 1 calls_out: 2 calls_in: 0 - src.synthesis.code-change-plan.deterministicGeneration: - name: deterministicGeneration - module: src.synthesis.code-change-plan - line: 504 + java.JavaAstExtract.JavaAstExtract.emit: + name: emit + module: java.JavaAstExtract + line: 219 cyclomatic_complexity: 1 calls_out: 3 - calls_in: 18 - src.synthesis.code-change-plan.patchHash: - name: patchHash - module: src.synthesis.code-change-plan - line: 745 + calls_in: 1 + src.extractors.markdown-paths.addBasenameIndexMatch: + name: addBasenameIndexMatch + module: src.extractors.markdown-paths + line: 148 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 1 + src.graph.linker.indexKeywords: + name: indexKeywords + module: src.graph.linker + line: 54 cyclomatic_complexity: 1 + calls_out: 5 + calls_in: 1 + src.graph.linker.indexTopicBuckets: + name: indexTopicBuckets + module: src.graph.linker + line: 198 + cyclomatic_complexity: 3 calls_out: 2 - calls_in: 0 - src.synthesis.code-change-plan.proposalsByDiagnostic: - name: proposalsByDiagnostic - module: src.synthesis.code-change-plan + calls_in: 6 + src.extractors.markdown-llm.MarkdownAttemptError.emptyCoverage: + name: emptyCoverage + module: src.extractors.markdown-llm + line: 235 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 1 + src.graph.diff.y: + name: y + module: src.graph.diff line: 121 - cyclomatic_complexity: 7 - calls_out: 18 + cyclomatic_complexity: 4 + calls_out: 4 calls_in: 0 - src.cli.handleReality: - name: handleReality - module: src.cli - line: 492 - cyclomatic_complexity: 9 + src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget: + name: selectWithinBudget + module: src.extractors.docs-llm + line: 147 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 1 + examples.backend.src.server.handleRequest: + name: handleRequest + module: examples.backend.src.server + line: 28 + cyclomatic_complexity: 16 calls_out: 12 + calls_in: 3 + examples.frontend.src.app.createState: + name: createState + module: examples.frontend.src.app + line: 14 + cyclomatic_complexity: 1 + calls_out: 0 calls_in: 1 - src.synthesis.todo-patch.wasAlreadyAppended: - name: wasAlreadyAppended - module: src.synthesis.todo-patch - line: 299 - cyclomatic_complexity: 4 - calls_out: 3 - calls_in: 6 - src.services.actions.afterDiagnostics: - name: afterDiagnostics - module: src.services.actions - line: 361 - cyclomatic_complexity: 8 - calls_out: 2 - calls_in: 0 - src.synthesis.task-synthesis-materialize.proposals: - name: proposals - module: src.synthesis.task-synthesis-materialize - line: 77 + src.extractors.configuration.isConfigurationPath: + name: isConfigurationPath + module: src.extractors.configuration + line: 30 + cyclomatic_complexity: 10 + calls_out: 6 + calls_in: 2 + src.extractors.docs-chunks.chunkPriority: + name: chunkPriority + module: src.extractors.docs-chunks + line: 23 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 2 + src.extractors.ast.records.start: + name: start + module: src.extractors.ast.records + line: 47 cyclomatic_complexity: 1 calls_out: 2 calls_in: 0 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt: - name: startedAt - module: src.synthesis.tasks-llm - line: 68 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 0 - src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet: - name: assertCodeChangeSourcePatchSet - module: src.synthesis.code-change-plan - line: 896 - cyclomatic_complexity: 18 - calls_out: 14 - calls_in: 1 - src.synthesis.todo-patch.duplicates: - name: duplicates - module: src.synthesis.todo-patch - line: 239 - cyclomatic_complexity: 6 - calls_out: 8 + src.extractors.git.extractRepositoryGitIntent: + name: extractRepositoryGitIntent + module: src.extractors.git + line: 74 + cyclomatic_complexity: 11 + calls_out: 21 + calls_in: 3 + src.extractors.ast.typescript.extractTypeScriptFile: + name: extractTypeScriptFile + module: src.extractors.ast.typescript + line: 11 + cyclomatic_complexity: 43 + calls_out: 44 calls_in: 0 - src.synthesis.task-synthesis-materialize.proposalIdByKey: - name: proposalIdByKey - module: src.synthesis.task-synthesis-materialize - line: 76 - cyclomatic_complexity: 1 - calls_out: 2 + src.extractors.docs-record.toDocumentIntentRecord: + name: toDocumentIntentRecord + module: src.extractors.docs-record + line: 25 + cyclomatic_complexity: 14 + calls_out: 13 calls_in: 0 - src.synthesis.code-change-plan.acceptedCount: - name: acceptedCount - module: src.synthesis.code-change-plan - line: 316 - cyclomatic_complexity: 2 - calls_out: 1 + src.extractors.nl.extractNlIntent: + name: extractNlIntent + module: src.extractors.nl + line: 38 + cyclomatic_complexity: 5 + calls_out: 20 calls_in: 0 - src.services.actions.analysis: - name: analysis - module: src.services.actions - line: 130 + examples.backend.src.validation.action: + name: action + module: examples.backend.src.validation + line: 23 cyclomatic_complexity: 2 - calls_out: 4 + calls_out: 3 calls_in: 0 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload: - name: payload - module: src.synthesis.tasks-llm - line: 82 + src.graph.diff.recordIdentity: + name: recordIdentity + module: src.graph.diff + line: 175 cyclomatic_complexity: 1 calls_out: 1 - calls_in: 0 - src.semantic.reranker.validateVerdictReason: - name: validateVerdictReason - module: src.semantic.reranker - line: 435 + calls_in: 2 + src.extractors.communication.sameStrings: + name: sameStrings + module: src.extractors.communication + line: 318 cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 4 - src.pipeline.run.communicationStartedAt: - name: communicationStartedAt - module: src.pipeline.run - line: 187 - cyclomatic_complexity: 10 - calls_out: 5 - calls_in: 0 - src.synthesis.code-change-plan.indexProposalsByDiagnostic: - name: indexProposalsByDiagnostic - module: src.synthesis.code-change-plan - line: 331 - cyclomatic_complexity: 4 - calls_out: 3 + calls_out: 6 calls_in: 1 - src.services.actions.conclusions: - name: conclusions - module: src.services.actions - line: 223 + src.extractors.configuration.pair: + name: pair + module: src.extractors.configuration + line: 156 cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 0 - src.services.actions.executeAction: - name: executeAction - module: src.services.actions - line: 72 - cyclomatic_complexity: 83 - calls_out: 65 - calls_in: 0 - src.watch.watcher.current: - name: current - module: src.watch.watcher - line: 181 - cyclomatic_complexity: 2 calls_out: 2 calls_in: 0 - src.services.actions.nullableString: - name: nullableString - module: src.services.actions - line: 640 - cyclomatic_complexity: 5 + src.extractors.nl-llm.NlLlmRequiredError.absolute: + name: absolute + module: src.extractors.nl-llm + line: 78 + cyclomatic_complexity: 1 calls_out: 1 - calls_in: 3 - src.operations.validation.objectValue: - name: objectValue - module: src.operations.validation - line: 18 - cyclomatic_complexity: 4 - calls_out: 2 - calls_in: 16 - src.synthesis.todo-patch.classified: - name: classified - module: src.synthesis.todo-patch - line: 242 - cyclomatic_complexity: 6 - calls_out: 8 calls_in: 0 - src.cli.stamp: - name: stamp - module: src.cli - line: 409 - cyclomatic_complexity: 10 - calls_out: 5 - calls_in: 0 - src.services.actions.title: - name: title - module: src.services.actions - line: 557 + src.extractors.ast.typescript.symbol: + name: symbol + module: src.extractors.ast.typescript + line: 90 cyclomatic_complexity: 3 calls_out: 6 calls_in: 0 - src.watch.watcher.defaultSleep: - name: defaultSleep - module: src.watch.watcher - line: 226 - cyclomatic_complexity: 6 - calls_out: 7 + src.extractors.todo.checked: + name: checked + module: src.extractors.todo + line: 45 + cyclomatic_complexity: 2 + calls_out: 12 calls_in: 0 - src.synthesis.code-change-plan.object: - name: object - module: src.synthesis.code-change-plan - line: 426 - cyclomatic_complexity: 5 + src.graph.diff.right: + name: right + module: src.graph.diff + line: 47 + cyclomatic_complexity: 4 calls_out: 3 calls_in: 0 - src.summary.render.recordCitations: - name: recordCitations - module: src.summary.render - line: 59 - cyclomatic_complexity: 1 + src.graph.linker.determineRelation: + name: determineRelation + module: src.graph.linker + line: 425 + cyclomatic_complexity: 7 calls_out: 1 - calls_in: 4 - src.synthesis.code-change-plan.patchIds: - name: patchIds - module: src.synthesis.code-change-plan - line: 918 - cyclomatic_complexity: 5 - calls_out: 5 - calls_in: 0 - src.services.actions.booleanValue: - name: booleanValue - module: src.services.actions - line: 675 + calls_in: 6 + src.extractors.configuration.fileAggregate: + name: fileAggregate + module: src.extractors.configuration + line: 82 cyclomatic_complexity: 3 - calls_out: 2 - calls_in: 11 - src.watch.watcher.pending: - name: pending - module: src.watch.watcher - line: 169 + calls_out: 10 + calls_in: 3 + examples.backend.src.server.size: + name: size + module: examples.backend.src.server + line: 72 cyclomatic_complexity: 3 - calls_out: 2 + calls_out: 3 + calls_in: 1 + src.extractors.docs-record.fallback: + name: fallback + module: src.extractors.docs-record + line: 81 + cyclomatic_complexity: 2 + calls_out: 1 calls_in: 0 - src.synthesis.code-change-path.isUsefulCodeChangePath: - name: isUsefulCodeChangePath - module: src.synthesis.code-change-path - line: 202 + src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited: + name: extractMarkdownIntentAudited + module: src.extractors.markdown-llm + line: 55 + cyclomatic_complexity: 19 + calls_out: 21 + calls_in: 0 + examples.backend.src.server.event: + name: event + module: examples.backend.src.server + line: 52 cyclomatic_complexity: 1 calls_out: 1 calls_in: 0 - src.services.actions.nlModeValue: - name: nlModeValue - module: src.services.actions - line: 528 + src.extractors.docs-record.statementText: + name: statementText + module: src.extractors.docs-record + line: 32 cyclomatic_complexity: 1 calls_out: 1 + calls_in: 0 + src.extractors.ast.typescript.languageName: + name: languageName + module: src.extractors.ast.typescript + line: 163 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 2 - src.summary.summarizer.SummaryAttemptError.summaryMode: - name: summaryMode - module: src.summary.summarizer - line: 313 - cyclomatic_complexity: 7 + src.graph.diff.metricCard: + name: metricCard + module: src.graph.diff + line: 223 + cyclomatic_complexity: 1 calls_out: 1 calls_in: 1 - src.services.actions.before: - name: before - module: src.services.actions - line: 402 - cyclomatic_complexity: 2 - calls_out: 2 + src.extractors.markdown-paths.basenames: + name: basenames + module: src.extractors.markdown-paths + line: 42 + cyclomatic_complexity: 11 + calls_out: 10 + calls_in: 3 + src.extractors.docs-schema.documentResponseSchema: + name: documentResponseSchema + module: src.extractors.docs-schema + line: 41 + cyclomatic_complexity: 1 + calls_out: 1 calls_in: 0 - src.semantic.reranker.assertGroundedQuote: - name: assertGroundedQuote - module: src.semantic.reranker - line: 460 - cyclomatic_complexity: 3 + src.extractors.ast.records.moduleRecords: + name: moduleRecords + module: src.extractors.ast.records + line: 34 + cyclomatic_complexity: 6 + calls_out: 14 + calls_in: 1 + src.extractors.docs-record.OBJECT_PLACEHOLDERS: + name: OBJECT_PLACEHOLDERS + module: src.extractors.docs-record + line: 21 + cyclomatic_complexity: 14 + calls_out: 13 + calls_in: 0 + src.graph.linker.symbolResolutionIndex: + name: symbolResolutionIndex + module: src.graph.linker + line: 78 + cyclomatic_complexity: 5 calls_out: 7 - calls_in: 4 - src.web.diff-ui.byId: - name: byId - module: src.web.diff-ui - line: 36 - cyclomatic_complexity: 1 - calls_out: 0 - calls_in: 8 - src.operations.validation.nonBlank: - name: nonBlank - module: src.operations.validation - line: 31 - cyclomatic_complexity: 3 + calls_in: 0 + src.extractors.communication.normalizeType: + name: normalizeType + module: src.extractors.communication + line: 481 + cyclomatic_complexity: 4 calls_out: 2 - calls_in: 12 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.generationMetadata: - name: generationMetadata - module: src.synthesis.tasks-llm - line: 213 - cyclomatic_complexity: 3 - calls_out: 5 calls_in: 1 - src.synthesis.task-synthesis-materialize.conclusions: - name: conclusions - module: src.synthesis.task-synthesis-materialize - line: 31 - cyclomatic_complexity: 1 - calls_out: 5 - calls_in: 0 - src.synthesis.code-change-plan.conclusions: - name: conclusions - module: src.synthesis.code-change-plan - line: 118 - cyclomatic_complexity: 7 - calls_out: 18 - calls_in: 0 - src.synthesis.code-change-plan.set: - name: set - module: src.synthesis.code-change-plan - line: 903 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 6 - src.semantic.reranker.seenIds: - name: seenIds - module: src.semantic.reranker - line: 203 - cyclomatic_complexity: 14 + rust-ast.src.main.arguments: + name: arguments + module: rust-ast.src.main + line: 82 + cyclomatic_complexity: 5 calls_out: 9 + calls_in: 1 + src.extractors.ast.typescript.isTopLevel: + name: isTopLevel + module: src.extractors.ast.typescript + line: 145 + cyclomatic_complexity: 5 + calls_out: 3 + calls_in: 3 + src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited: + name: extractNlIntentAudited + module: src.extractors.nl-llm + line: 53 + cyclomatic_complexity: 10 + calls_out: 22 calls_in: 0 - src.watch.watcher.onAbort: - name: onAbort - module: src.watch.watcher - line: 233 - cyclomatic_complexity: 1 - calls_out: 2 + src.extractors.changelog.extractChangelog: + name: extractChangelog + module: src.extractors.changelog + line: 18 + cyclomatic_complexity: 10 + calls_out: 19 calls_in: 0 - src.synthesis.validation.intersects: - name: intersects - module: src.synthesis.validation - line: 110 - cyclomatic_complexity: 1 + src.extractors.docs-deterministic.parseFenceBlock: + name: parseFenceBlock + module: src.extractors.docs-deterministic + line: 154 + cyclomatic_complexity: 7 calls_out: 5 calls_in: 1 - src.synthesis.validation.target: - name: target - module: src.synthesis.validation - line: 43 - cyclomatic_complexity: 1 - calls_out: 2 + examples.backend.src.validation.agent: + name: agent + module: examples.backend.src.validation + line: 22 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 0 - src.synthesis.code-change-plan.uniqueSorted: - name: uniqueSorted - module: src.synthesis.code-change-plan - line: 525 - cyclomatic_complexity: 1 - calls_out: 5 - calls_in: 20 - src.cli.handleCommunication: - name: handleCommunication - module: src.cli - line: 583 - cyclomatic_complexity: 11 - calls_out: 18 + src.extractors.ast.typescript.visit: + name: visit + module: src.extractors.ast.typescript + line: 77 + cyclomatic_complexity: 25 + calls_out: 26 calls_in: 1 - src.synthesis.todo-patch.renderIds: - name: renderIds - module: src.synthesis.todo-patch - line: 317 + src.graph.linker.configurationIds: + name: configurationIds + module: src.graph.linker + line: 140 + cyclomatic_complexity: 10 + calls_out: 7 + calls_in: 0 + rust-ast.src.main.add: + name: add + module: rust-ast.src.main + line: 158 + cyclomatic_complexity: 1 + calls_out: 10 + calls_in: 9 + src.extractors.git.extractGitIntent: + name: extractGitIntent + module: src.extractors.git + line: 40 + cyclomatic_complexity: 6 + calls_out: 7 + calls_in: 0 + src.extractors.runtime-cycle.text: + name: text + module: src.extractors.runtime-cycle + line: 115 cyclomatic_complexity: 2 - calls_out: 2 + calls_out: 1 + calls_in: 5 + src.graph.linker.pathsIntersect: + name: pathsIntersect + module: src.graph.linker + line: 322 + cyclomatic_complexity: 8 + calls_out: 7 calls_in: 1 - src.synthesis.code-change-plan.startsWithImperative: - name: startsWithImperative - module: src.synthesis.code-change-plan - line: 439 + src.extractors.docs-deterministic.parseParagraphStatement: + name: parseParagraphStatement + module: src.extractors.docs-deterministic + line: 212 cyclomatic_complexity: 4 - calls_out: 1 - calls_in: 3 - src.synthesis.code-change-plan.assertSourcePatchIds: - name: assertSourcePatchIds - module: src.synthesis.code-change-plan - line: 945 - cyclomatic_complexity: 6 - calls_out: 5 + calls_out: 3 calls_in: 1 - src.synthesis.validation.sharedPath: - name: sharedPath - module: src.synthesis.validation - line: 46 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 0 - src.services.actions.beforeDiagnostics: - name: beforeDiagnostics - module: src.services.actions - line: 353 - cyclomatic_complexity: 8 - calls_out: 2 - calls_in: 0 - src.services.actions.todoPath: - name: todoPath - module: src.services.actions - line: 201 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 0 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesisAudit: - name: synthesisAudit - module: src.synthesis.tasks-llm - line: 235 + src.extractors.runtime-cycle.tags: + name: tags + module: src.extractors.runtime-cycle + line: 119 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 3 + src.extractors.docs-record.allowedModality: + name: allowedModality + module: src.extractors.docs-record + line: 187 cyclomatic_complexity: 1 calls_out: 1 - calls_in: 2 - src.semantic.reranker.quote: - name: quote - module: src.semantic.reranker - line: 465 + calls_in: 1 + src.extractors.git.runGit: + name: runGit + module: src.extractors.git + line: 325 cyclomatic_complexity: 1 calls_out: 1 + calls_in: 5 + src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt: + name: readPrompt + module: src.extractors.docs-llm + line: 261 + cyclomatic_complexity: 2 + calls_out: 6 + calls_in: 1 + src.extractors.configuration.jsonEntries: + name: jsonEntries + module: src.extractors.configuration + line: 131 + cyclomatic_complexity: 7 + calls_out: 7 + calls_in: 1 + src.graph.linker.owners: + name: owners + module: src.graph.linker + line: 299 + cyclomatic_complexity: 8 + calls_out: 9 calls_in: 0 - src.synthesis.code-change-plan.createCodeChangeSourcePatch: - name: createCodeChangeSourcePatch - module: src.synthesis.code-change-plan - line: 698 - cyclomatic_complexity: 13 - calls_out: 20 + src.extractors.runtime-cycle.sourcePathFor: + name: sourcePathFor + module: src.extractors.runtime-cycle + line: 89 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 2 - src.cli.result: - name: result - module: src.cli - line: 657 - cyclomatic_complexity: 1 + src.extractors.runtime-cycle.proposalAction: + name: proposalAction + module: src.extractors.runtime-cycle + line: 285 + cyclomatic_complexity: 5 + calls_out: 0 + calls_in: 1 + src.graph.symbol-resolution.selected: + name: selected + module: src.graph.symbol-resolution + line: 93 + cyclomatic_complexity: 2 calls_out: 1 calls_in: 0 - src.pipeline.run.communicationAudit: - name: communicationAudit - module: src.pipeline.run - line: 188 - cyclomatic_complexity: 10 + src.extractors.runtime-cycle.parseCycle: + name: parseCycle + module: src.extractors.runtime-cycle + line: 68 + cyclomatic_complexity: 7 calls_out: 5 - calls_in: 0 - src.summary.summarizer.SummaryAttemptError.materializeConclusions: - name: materializeConclusions - module: src.summary.summarizer - line: 233 + calls_in: 2 + src.extractors.communication.normalize: + name: normalize + module: src.extractors.communication + line: 319 cyclomatic_complexity: 1 - calls_out: 7 + calls_out: 0 calls_in: 1 - src.services.actions.stringValue: - name: stringValue - module: src.services.actions - line: 636 - cyclomatic_complexity: 3 + src.extractors.git.finishDiscovery: + name: finishDiscovery + module: src.extractors.git + line: 268 + cyclomatic_complexity: 4 calls_out: 1 - calls_in: 12 - src.semantic.reranker.applyAcceptedSemanticRelations: - name: applyAcceptedSemanticRelations - module: src.semantic.reranker - line: 372 - cyclomatic_complexity: 2 - calls_out: 13 + calls_in: 1 + src.extractors.changelog.lines: + name: lines + module: src.extractors.changelog + line: 30 + cyclomatic_complexity: 7 + calls_out: 15 calls_in: 0 - src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult: - name: assertSemanticRerankResult - module: src.semantic.reranker-llm - line: 55 + src.extractors.nl-llm.NlLlmRequiredError.client: + name: client + module: src.extractors.nl-llm + line: 69 cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 3 - src.watch.watcher.generate: - name: generate - module: src.watch.watcher - line: 207 - cyclomatic_complexity: 3 - calls_out: 5 - calls_in: 5 - src.synthesis.code-change-plan.recordsById: - name: recordsById - module: src.synthesis.code-change-plan - line: 120 - cyclomatic_complexity: 7 - calls_out: 18 + calls_out: 2 calls_in: 0 - src.semantic.reranker.assertSemanticRerankResult: - name: assertSemanticRerankResult - module: src.semantic.reranker - line: 311 - cyclomatic_complexity: 21 - calls_out: 21 - calls_in: 2 - src.synthesis.task-synthesis-contract.taskStrings: - name: taskStrings - module: src.synthesis.task-synthesis-contract - line: 34 + java.JavaAstExtract.JavaAstExtract.collect: + name: collect + module: java.JavaAstExtract + line: 58 cyclomatic_complexity: 1 - calls_out: 2 + calls_out: 11 calls_in: 1 - src.synthesis.code-change-plan.now: - name: now - module: src.synthesis.code-change-plan - line: 1099 - cyclomatic_complexity: 1 + examples.backend.src.server.store: + name: store + module: examples.backend.src.server + line: 19 + cyclomatic_complexity: 3 calls_out: 4 calls_in: 0 - src.pipeline.run.values: + src.extractors.communication.identity: + name: identity + module: src.extractors.communication + line: 144 + cyclomatic_complexity: 5 + calls_out: 1 + calls_in: 0 + src.graph.linker.values: name: values - module: src.pipeline.run - line: 486 + module: src.graph.linker + line: 209 cyclomatic_complexity: 1 calls_out: 0 - calls_in: 3 - src.cli.parsed: - name: parsed - module: src.cli - line: 63 - cyclomatic_complexity: 4 + calls_in: 2 + src.extractors.nl-llm.NlAttemptError.allowedModality: + name: allowedModality + module: src.extractors.nl-llm + line: 300 + cyclomatic_complexity: 1 calls_out: 1 - calls_in: 0 - src.services.actions.resolveRoot: - name: resolveRoot - module: src.services.actions - line: 598 - cyclomatic_complexity: 3 - calls_out: 3 + calls_in: 2 + src.extractors.git.gitMarkerState: + name: gitMarkerState + module: src.extractors.git + line: 277 + cyclomatic_complexity: 5 + calls_out: 5 calls_in: 1 - src.pipeline.run.message: - name: message - module: src.pipeline.run - line: 511 - cyclomatic_complexity: 9 + src.graph.linker.score: + name: score + module: src.graph.linker + line: 349 + cyclomatic_complexity: 2 calls_out: 2 calls_in: 0 - src.tf.classifier.vectorize: - name: vectorize - module: src.tf.classifier - line: 60 - cyclomatic_complexity: 6 + examples.backend.src.validation.validateEventPayload: + name: validateEventPayload + module: examples.backend.src.validation + line: 13 + cyclomatic_complexity: 10 calls_out: 5 - calls_in: 1 - src.semantic.reranker.byDeclaration: - name: byDeclaration - module: src.semantic.reranker - line: 205 - cyclomatic_complexity: 14 - calls_out: 9 calls_in: 0 - src.watch.watcher.watchRepository: - name: watchRepository - module: src.watch.watcher - line: 147 - cyclomatic_complexity: 19 - calls_out: 14 + examples.frontend.src.render.classifyEvent: + name: classifyEvent + module: examples.frontend.src.render + line: 13 + cyclomatic_complexity: 4 + calls_out: 0 + calls_in: 1 + src.extractors.git.state: + name: state + module: src.extractors.git + line: 172 + cyclomatic_complexity: 4 + calls_out: 5 calls_in: 0 - src.watch.watcher.absolute: - name: absolute - module: src.watch.watcher - line: 54 - cyclomatic_complexity: 3 - calls_out: 3 + src.extractors.todo.extractTodo: + name: extractTodo + module: src.extractors.todo + line: 19 + cyclomatic_complexity: 5 + calls_out: 24 calls_in: 0 - src.pipeline.run.knownAudit: - name: knownAudit - module: src.pipeline.run - line: 512 - cyclomatic_complexity: 9 + src.extractors.docs-schema.documentResponseContract: + name: documentResponseContract + module: src.extractors.docs-schema + line: 31 + cyclomatic_complexity: 1 calls_out: 2 + calls_in: 1 + examples.backend.src.server.limit: + name: limit + module: examples.backend.src.server + line: 59 + cyclomatic_complexity: 1 + calls_out: 1 calls_in: 0 - src.synthesis.task-synthesis-materialize.keys: - name: keys - module: src.synthesis.task-synthesis-materialize - line: 122 - cyclomatic_complexity: 2 - calls_out: 4 - calls_in: 0 - src.synthesis.code-change-plan.target: - name: target - module: src.synthesis.code-change-plan - line: 143 + src.graph.diff.normalizeRecord: + name: normalizeRecord + module: src.graph.diff + line: 185 cyclomatic_complexity: 1 - calls_out: 2 + calls_out: 0 + calls_in: 8 + src.extractors.docs-chunks.chunkMarkdown: + name: chunkMarkdown + module: src.extractors.docs-chunks + line: 55 + cyclomatic_complexity: 8 + calls_out: 9 calls_in: 0 - src.watch.watcher.finish: - name: finish - module: src.watch.watcher - line: 238 + src.extractors.runtime-cycle.probeRecord: + name: probeRecord + module: src.extractors.runtime-cycle + line: 134 + cyclomatic_complexity: 9 + calls_out: 8 + calls_in: 3 + src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage: + name: errorMessage + module: src.extractors.docs-llm + line: 267 cyclomatic_complexity: 2 - calls_out: 2 + calls_out: 1 calls_in: 3 - src.summary.summarizer.payload: - name: payload - module: src.summary.summarizer - line: 104 - cyclomatic_complexity: 6 - calls_out: 6 - calls_in: 0 - src.synthesis.todo-patch.isoDate: - name: isoDate - module: src.synthesis.todo-patch - line: 354 - cyclomatic_complexity: 3 - calls_out: 3 + src.extractors.docs-record.resolveTarget: + name: resolveTarget + module: src.extractors.docs-record + line: 128 + cyclomatic_complexity: 12 + calls_out: 7 calls_in: 2 - src.synthesis.code-change-plan.acceptances: - name: acceptances - module: src.synthesis.code-change-plan - line: 309 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 0 - src.summary.summarizer.SummaryAttemptError.parsed: - name: parsed - module: src.summary.summarizer - line: 239 - cyclomatic_complexity: 1 + src.extractors.docs-deterministic.handleDocumentationLine: + name: handleDocumentationLine + module: src.extractors.docs-deterministic + line: 132 + cyclomatic_complexity: 5 + calls_out: 4 + calls_in: 1 + src.extractors.configuration.findKeyLine: + name: findKeyLine + module: src.extractors.configuration + line: 204 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 3 + src.extractors.configuration.lines: + name: lines + module: src.extractors.configuration + line: 134 + cyclomatic_complexity: 3 calls_out: 4 calls_in: 0 - src.semantic.reranker-llm.SemanticRerankerRequiredError.payload: - name: payload - module: src.semantic.reranker-llm - line: 73 + src.extractors.todo.heading: + name: heading + module: src.extractors.todo + line: 36 cyclomatic_complexity: 1 - calls_out: 3 + calls_out: 1 calls_in: 0 - src.semantic.reranker.seenDecisions: - name: seenDecisions - module: src.semantic.reranker - line: 327 - cyclomatic_complexity: 16 - calls_out: 15 + src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt: + name: startedAt + module: src.extractors.markdown-llm + line: 60 + cyclomatic_complexity: 4 + calls_out: 2 calls_in: 0 - src.synthesis.todo-patch.currentHash: - name: currentHash - module: src.synthesis.todo-patch - line: 187 + src.extractors.git.filterDiscoveryChildren: + name: filterDiscoveryChildren + module: src.extractors.git + line: 221 cyclomatic_complexity: 5 - calls_out: 4 - calls_in: 0 - src.synthesis.validation.validateAndClassifyTodoProposals: - name: validateAndClassifyTodoProposals - module: src.synthesis.validation - line: 17 + calls_out: 6 + calls_in: 2 + src.extractors.nl-llm.NlLlmRequiredError.maxLine: + name: maxLine + module: src.extractors.nl-llm + line: 83 cyclomatic_complexity: 1 - calls_out: 10 + calls_out: 1 calls_in: 0 - src.tf.classifier.importer: - name: importer - module: src.tf.classifier - line: 30 - cyclomatic_complexity: 1 - calls_out: 0 - calls_in: 1 - src.summary.summarizer.SummaryAttemptError.sortedUnique: - name: sortedUnique - module: src.summary.summarizer - line: 324 - cyclomatic_complexity: 2 - calls_out: 5 - calls_in: 4 - src.synthesis.todo-patch.createTodoPatch: - name: createTodoPatch - module: src.synthesis.todo-patch - line: 69 - cyclomatic_complexity: 8 - calls_out: 20 + src.graph.diff.groupRecords: + name: groupRecords + module: src.graph.diff + line: 163 + cyclomatic_complexity: 4 + calls_out: 6 calls_in: 1 - src.synthesis.code-change-plan.markdown: - name: markdown - module: src.synthesis.code-change-plan - line: 558 - cyclomatic_complexity: 1 - calls_out: 3 + src.extractors.nl-llm.NlAttemptError.statementText: + name: statementText + module: src.extractors.nl-llm + line: 181 + cyclomatic_complexity: 11 + calls_out: 6 calls_in: 0 - src.services.actions.receiptPath: - name: receiptPath - module: src.services.actions - line: 303 + src.extractors.docs-record.clampLine: + name: clampLine + module: src.extractors.docs-record + line: 179 cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 0 - src.web.diff-ui.selectedRun: - name: selectedRun - module: src.web.diff-ui - line: 40 - cyclomatic_complexity: 7 - calls_out: 2 - calls_in: 3 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.readPrompt: - name: readPrompt - module: src.synthesis.tasks-llm - line: 262 - cyclomatic_complexity: 2 - calls_out: 6 + calls_out: 3 calls_in: 1 - src.services.actions.after: - name: after - module: src.services.actions - line: 403 - cyclomatic_complexity: 2 - calls_out: 2 + src.extractors.todo.body: + name: body + module: src.extractors.todo + line: 28 + cyclomatic_complexity: 5 + calls_out: 20 calls_in: 0 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt: - name: prompt - module: src.synthesis.tasks-llm - line: 81 - cyclomatic_complexity: 1 + src.extractors.communication.raw: + name: raw + module: src.extractors.communication + line: 416 + cyclomatic_complexity: 2 calls_out: 1 calls_in: 0 - src.cli.mode: - name: mode - module: src.cli - line: 429 - cyclomatic_complexity: 8 - calls_out: 10 - calls_in: 0 - src.web.diff-ui.diffUiHtml: - name: diffUiHtml - module: src.web.diff-ui - line: 1 - cyclomatic_complexity: 52 - calls_out: 42 - calls_in: 0 - src.cli.main: - name: main - module: src.cli - line: 53 - cyclomatic_complexity: 95 - calls_out: 44 + src.extractors.runtime-cycle.factsMetadata: + name: factsMetadata + module: src.extractors.runtime-cycle + line: 293 + cyclomatic_complexity: 5 + calls_out: 3 calls_in: 1 - src.cli.extractor: - name: extractor - module: src.cli - line: 519 - cyclomatic_complexity: 6 - calls_out: 6 - calls_in: 0 - src.synthesis.todo-patch.normalizePath: - name: normalizePath - module: src.synthesis.todo-patch - line: 325 - cyclomatic_complexity: 1 + src.extractors.docs-chunks.worker: + name: worker + module: src.extractors.docs-chunks + line: 41 + cyclomatic_complexity: 3 calls_out: 1 + calls_in: 4 + src.graph.symbol-resolution.resolveSymbol: + name: resolveSymbol + module: src.graph.symbol-resolution + line: 75 + cyclomatic_complexity: 8 + calls_out: 6 calls_in: 2 - src.synthesis.code-change-plan.plansById: - name: plansById - module: src.synthesis.code-change-plan - line: 917 - cyclomatic_complexity: 5 + examples.backend.src.validation.ALLOWED_ACTIONS: + name: ALLOWED_ACTIONS + module: examples.backend.src.validation + line: 11 + cyclomatic_complexity: 10 calls_out: 5 calls_in: 0 - src.services.actions.filterCommunicationGraph: - name: filterCommunicationGraph - module: src.services.actions - line: 511 - cyclomatic_complexity: 17 + src.extractors.docs-deterministic.resolver: + name: resolver + module: src.extractors.docs-deterministic + line: 63 + cyclomatic_complexity: 4 + calls_out: 6 + calls_in: 0 + src.graph.linker.records: + name: records + module: src.graph.linker + line: 75 + cyclomatic_complexity: 5 calls_out: 7 + calls_in: 0 + src.extractors.docs-record.resolveModality: + name: resolveModality + module: src.extractors.docs-record + line: 164 + cyclomatic_complexity: 5 + calls_out: 4 calls_in: 2 - src.cli.execFileAsync: - name: execFileAsync - module: src.cli - line: 39 - cyclomatic_complexity: 2 - calls_out: 2 + src.extractors.git.readDiscoveryEntries: + name: readDiscoveryEntries + module: src.extractors.git + line: 209 + cyclomatic_complexity: 3 + calls_out: 3 calls_in: 2 - src.pipeline.run.aborted: - name: aborted - module: src.pipeline.run - line: 507 + src.graph.diff.diffIntentGraphs: + name: diffIntentGraphs + module: src.graph.diff + line: 16 + cyclomatic_complexity: 11 + calls_out: 19 + calls_in: 0 + examples.backend.src.validation.invalid: + name: invalid + module: examples.backend.src.validation + line: 14 cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 2 - src.cli.optionNullableString: - name: optionNullableString - module: src.cli - line: 710 - cyclomatic_complexity: 6 - calls_out: 3 + calls_out: 0 calls_in: 6 - src.cli.html: - name: html - module: src.cli - line: 432 - cyclomatic_complexity: 8 - calls_out: 10 - calls_in: 0 - src.synthesis.todo-patch.hash: - name: hash - module: src.synthesis.todo-patch - line: 350 - cyclomatic_complexity: 3 - calls_out: 2 - calls_in: 1 - src.synthesis.todo-patch.rendered: - name: rendered - module: src.synthesis.todo-patch - line: 312 + src.extractors.markdown-llm.MarkdownAttemptError.markdownResponseContract: + name: markdownResponseContract + module: src.extractors.markdown-llm + line: 437 cyclomatic_complexity: 1 - calls_out: 3 - calls_in: 0 - src.pipeline.run.failureCode: - name: failureCode - module: src.pipeline.run - line: 575 + calls_out: 7 + calls_in: 1 + src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks: + name: loadDocumentChunks + module: src.extractors.docs-llm + line: 104 + cyclomatic_complexity: 4 + calls_out: 8 + calls_in: 1 + src.extractors.markdown-llm.MarkdownAttemptError.enrichMarkdownBatchWithCorrection: + name: enrichMarkdownBatchWithCorrection + module: src.extractors.markdown-llm + line: 249 cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 5 - src.synthesis.code-change-plan.record: - name: record - module: src.synthesis.code-change-plan - line: 425 + calls_out: 0 + calls_in: 1 + java.JavaAstExtract.JavaAstExtract.try: + name: try + module: java.JavaAstExtract + line: 83 + cyclomatic_complexity: 3 + calls_out: 13 + calls_in: 1 + src.extractors.todo.extractExplicitId: + name: extractExplicitId + module: src.extractors.todo + line: 91 cyclomatic_complexity: 5 calls_out: 3 + calls_in: 11 + src.graph.linker.resolvableBasenames: + name: resolvableBasenames + module: src.graph.linker + line: 80 + cyclomatic_complexity: 5 + calls_out: 7 calls_in: 0 - src.watch.watcher.result: - name: result - module: src.watch.watcher - line: 211 - cyclomatic_complexity: 1 + src.extractors.communication.nestedParticipant: + name: nestedParticipant + module: src.extractors.communication + line: 353 + cyclomatic_complexity: 5 calls_out: 2 calls_in: 0 - src.synthesis.task-synthesis-materialize.conclusionIdByKey: - name: conclusionIdByKey - module: src.synthesis.task-synthesis-materialize - line: 46 - cyclomatic_complexity: 2 - calls_out: 10 + src.graph.diff.afterRecord: + name: afterRecord + module: src.graph.diff + line: 51 + cyclomatic_complexity: 1 + calls_out: 3 calls_in: 0 - src.synthesis.code-change-plan.normalizeUnifiedDiff: - name: normalizeUnifiedDiff - module: src.synthesis.code-change-plan - line: 983 - cyclomatic_complexity: 17 - calls_out: 9 - calls_in: 4 - src.synthesis.validation.proposalWords: - name: proposalWords - module: src.synthesis.validation - line: 40 + src.extractors.markdown-paths.createBasenameIndexState: + name: createBasenameIndexState + module: src.extractors.markdown-paths + line: 105 cyclomatic_complexity: 1 calls_out: 1 - calls_in: 0 - src.synthesis.code-change-plan.titleFor: - name: titleFor - module: src.synthesis.code-change-plan - line: 424 - cyclomatic_complexity: 9 - calls_out: 4 - calls_in: 7 - src.cli.doctor: - name: doctor - module: src.cli - line: 644 - cyclomatic_complexity: 6 - calls_out: 7 calls_in: 1 - src.tf.classifier.loadClassifier: - name: loadClassifier - module: src.tf.classifier - line: 47 - cyclomatic_complexity: 6 - calls_out: 5 - calls_in: 1 - src.cli.optionNlMode: - name: optionNlMode - module: src.cli - line: 737 - cyclomatic_complexity: 1 + src.extractors.markdown-paths.isNestedCheckout: + name: isNestedCheckout + module: src.extractors.markdown-paths + line: 121 + cyclomatic_complexity: 2 calls_out: 1 + calls_in: 3 + rust-ast.src.main.qualified: + name: qualified + module: rust-ast.src.main + line: 154 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 5 - src.pipeline.run.includeCommunication: - name: includeCommunication - module: src.pipeline.run - line: 186 - cyclomatic_complexity: 10 - calls_out: 5 - calls_in: 0 - src.cli.command: - name: command - module: src.cli - line: 64 - cyclomatic_complexity: 4 + src.extractors.docs-deterministic.heading: + name: heading + module: src.extractors.docs-deterministic + line: 180 + cyclomatic_complexity: 1 calls_out: 1 calls_in: 0 - src.services.actions.afterInput: - name: afterInput - module: src.services.actions - line: 401 - cyclomatic_complexity: 2 - calls_out: 2 - calls_in: 0 - src.synthesis.todo-patch.writeTodoPatchArtifacts: - name: writeTodoPatchArtifacts - module: src.synthesis.todo-patch - line: 152 + examples.frontend.src.app.reload: + name: reload + module: examples.frontend.src.app + line: 38 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 1 + src.extractors.runtime-cycle.results: + name: results + module: src.extractors.runtime-cycle + line: 46 cyclomatic_complexity: 3 calls_out: 5 calls_in: 0 - src.synthesis.code-change-plan.acceptanceCriteriaFor: - name: acceptanceCriteriaFor - module: src.synthesis.code-change-plan - line: 459 - cyclomatic_complexity: 4 - calls_out: 3 - calls_in: 7 - src.synthesis.code-change-plan.paths: - name: paths - module: src.synthesis.code-change-plan - line: 830 - cyclomatic_complexity: 16 + src.extractors.todo.block: + name: block + module: src.extractors.todo + line: 46 + cyclomatic_complexity: 2 calls_out: 12 calls_in: 0 - src.services.actions.svg: - name: svg - module: src.services.actions - line: 405 + src.graph.linker.aliases: + name: aliases + module: src.graph.linker + line: 326 + cyclomatic_complexity: 3 + calls_out: 3 + calls_in: 2 + src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch: + name: enrichSplitBatch + module: src.extractors.markdown-llm + line: 209 cyclomatic_complexity: 2 - calls_out: 2 - calls_in: 0 - src.services.actions.result: - name: result - module: src.services.actions - line: 442 + calls_out: 7 + calls_in: 1 + rust-ast.src.main.visit_item_trait: + name: visit_item_trait + module: rust-ast.src.main + line: 233 cyclomatic_complexity: 1 - calls_out: 4 + calls_out: 2 calls_in: 0 - src.synthesis.validation.similarity: - name: similarity - module: src.synthesis.validation - line: 47 - cyclomatic_complexity: 1 + examples.frontend.src.render.headerRow: + name: headerRow + module: examples.frontend.src.render + line: 55 + cyclomatic_complexity: 2 calls_out: 2 + calls_in: 1 + src.extractors.docs-chunks.sectionLines: + name: sectionLines + module: src.extractors.docs-chunks + line: 75 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 0 - src.cli.emitExtraction: - name: emitExtraction - module: src.cli - line: 608 + src.graph.diff.visibleRows: + name: visibleRows + module: src.graph.diff + line: 118 cyclomatic_complexity: 4 calls_out: 4 - calls_in: 2 - src.synthesis.code-change-plan.assertSourceApplyReceipt: - name: assertSourceApplyReceipt - module: src.synthesis.code-change-plan - line: 1180 - cyclomatic_complexity: 11 - calls_out: 13 - calls_in: 2 - src.cli.parseArgs: - name: parseArgs - module: src.cli - line: 666 - cyclomatic_complexity: 13 - calls_out: 5 + calls_in: 0 + src.extractors.changelog.relative: + name: relative + module: src.extractors.changelog + line: 28 + cyclomatic_complexity: 7 + calls_out: 15 + calls_in: 0 + src.graph.linker.collectCandidatePairs: + name: collectCandidatePairs + module: src.graph.linker + line: 132 + cyclomatic_complexity: 10 + calls_out: 8 calls_in: 1 - src.synthesis.todo-patch.assertApproval: - name: assertApproval - module: src.synthesis.todo-patch - line: 256 + src.graph.diff.renderGraphDiffSvg: + name: renderGraphDiffSvg + module: src.graph.diff + line: 110 + cyclomatic_complexity: 7 + calls_out: 12 + calls_in: 0 + src.extractors.nl.object: + name: object + module: src.extractors.nl + line: 51 + cyclomatic_complexity: 1 + calls_out: 9 + calls_in: 0 + java.JavaAstExtract.JavaAstExtract.containsIgnored: + name: containsIgnored + module: java.JavaAstExtract + line: 70 cyclomatic_complexity: 3 calls_out: 2 calls_in: 1 - src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision: - name: modelRevision - module: src.semantic.reranker-llm + src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering: + name: enrichBatchCovering + module: src.extractors.markdown-llm + line: 161 + cyclomatic_complexity: 8 + calls_out: 11 + calls_in: 3 + src.extractors.nl.missing: + name: missing + module: src.extractors.nl line: 52 - cyclomatic_complexity: 4 - calls_out: 2 - calls_in: 0 - src.cli.isPlanSet: - name: isPlanSet - module: src.cli - line: 246 - cyclomatic_complexity: 3 - calls_out: 2 - calls_in: 0 - src.services.actions.proposals: - name: proposals - module: src.services.actions - line: 226 - cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 0 - src.cli.stop: - name: stop - module: src.cli - line: 393 cyclomatic_complexity: 1 - calls_out: 5 + calls_out: 9 calls_in: 0 - src.watch.watcher.now: - name: now - module: src.watch.watcher - line: 152 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 8 - src.cli.diagnosticsPath: - name: diagnosticsPath - module: src.cli - line: 498 - cyclomatic_complexity: 2 - calls_out: 5 + java.JavaAstExtract.JavaAstExtract.main: + name: main + module: java.JavaAstExtract + line: 21 + cyclomatic_complexity: 10 + calls_out: 16 calls_in: 0 - src.synthesis.todo-patch.artifact: - name: artifact - module: src.synthesis.todo-patch - line: 222 - cyclomatic_complexity: 6 - calls_out: 8 + src.extractors.ast.isExtractionResult: + name: isExtractionResult + module: src.extractors.ast + line: 162 + cyclomatic_complexity: 5 + calls_out: 3 calls_in: 0 - src.synthesis.todo-patch.appendPatch: - name: appendPatch - module: src.synthesis.todo-patch - line: 294 + src.extractors.docs-deterministic.codeBlockRecord: + name: codeBlockRecord + module: src.extractors.docs-deterministic + line: 325 cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 6 - src.cli.root: + calls_out: 2 + calls_in: 2 + src.extractors.nl.inferActor: + name: inferActor + module: src.extractors.nl + line: 87 + cyclomatic_complexity: 5 + calls_out: 2 + calls_in: 9 + src.extractors.docs-deterministic.root: name: root - module: src.cli - line: 584 - cyclomatic_complexity: 2 - calls_out: 4 + module: src.extractors.docs-deterministic + line: 60 + cyclomatic_complexity: 4 + calls_out: 6 calls_in: 0 - src.services.actions.diff: - name: diff - module: src.services.actions - line: 433 + rust-ast.src.main.visit_item_use: + name: visit_item_use + module: rust-ast.src.main + line: 216 cyclomatic_complexity: 1 - calls_out: 4 + calls_out: 8 calls_in: 0 - src.synthesis.code-change-plan.indexConclusionsByDiagnostic: - name: indexConclusionsByDiagnostic - module: src.synthesis.code-change-plan - line: 343 - cyclomatic_complexity: 4 - calls_out: 3 + java.JavaAstExtract.JavaAstExtract.add: + name: add + module: java.JavaAstExtract + line: 181 + cyclomatic_complexity: 1 + calls_out: 0 calls_in: 1 - src.summary.summarizer.mode: - name: mode - module: src.summary.summarizer - line: 66 - cyclomatic_complexity: 2 - calls_out: 3 - calls_in: 0 - src.operations.validation.uniqueStrings: - name: uniqueStrings - module: src.operations.validation - line: 40 - cyclomatic_complexity: 8 - calls_out: 5 - calls_in: 13 - src.synthesis.code-change-plan.exactSourcePatchKeys: - name: exactSourcePatchKeys - module: src.synthesis.code-change-plan - line: 937 + src.extractors.docs-chunks.mapConcurrent: + name: mapConcurrent + module: src.extractors.docs-chunks + line: 33 cyclomatic_complexity: 3 - calls_out: 5 - calls_in: 4 - src.cli.handleDiff: - name: handleDiff - module: src.cli - line: 428 - cyclomatic_complexity: 24 - calls_out: 19 - calls_in: 1 - src.services.actions.readRecords: - name: readRecords - module: src.services.actions - line: 624 - cyclomatic_complexity: 4 calls_out: 7 - calls_in: 2 - src.synthesis.code-change-plan.exactSourcePatchSet: - name: exactSourcePatchSet - module: src.synthesis.code-change-plan - line: 961 - cyclomatic_complexity: 4 - calls_out: 4 - calls_in: 3 - src.watch.watcher.maxFiles: - name: maxFiles - module: src.watch.watcher - line: 38 - cyclomatic_complexity: 11 - calls_out: 14 calls_in: 0 - src.synthesis.code-change-plan.splitKeep: - name: splitKeep - module: src.synthesis.code-change-plan - line: 1305 - cyclomatic_complexity: 3 - calls_out: 3 + src.extractors.docs-deterministic.parseSectionHeading: + name: parseSectionHeading + module: src.extractors.docs-deterministic + line: 173 + cyclomatic_complexity: 9 + calls_out: 4 calls_in: 1 - src.semantic.reranker.decisions: - name: decisions - module: src.semantic.reranker - line: 274 - cyclomatic_complexity: 2 - calls_out: 9 - calls_in: 0 - src.services.actions.diagnostics: - name: diagnostics - module: src.services.actions - line: 453 + src.extractors.ast.typescript.lineRange: + name: lineRange + module: src.extractors.ast.typescript + line: 18 + cyclomatic_complexity: 1 + calls_out: 3 + calls_in: 2 + src.extractors.git.root: + name: root + module: src.extractors.git + line: 41 cyclomatic_complexity: 2 - calls_out: 4 - calls_in: 0 - src.services.actions.afterGraph: - name: afterGraph - module: src.services.actions - line: 358 - cyclomatic_complexity: 8 calls_out: 2 calls_in: 0 - src.watch.watcher.DEFAULT_MIN_INTERVAL_MS: - name: DEFAULT_MIN_INTERVAL_MS - module: src.watch.watcher - line: 144 - cyclomatic_complexity: 19 - calls_out: 14 - calls_in: 0 - src.synthesis.task-synthesis-contract.RAW_CONCLUSION_CONTRACT: - name: RAW_CONCLUSION_CONTRACT - module: src.synthesis.task-synthesis-contract - line: 38 - cyclomatic_complexity: 1 - calls_out: 5 - calls_in: 0 - src.synthesis.task-synthesis-materialize.parsed: - name: parsed - module: src.synthesis.task-synthesis-materialize - line: 20 + src.extractors.todo.raw: + name: raw + module: src.extractors.todo + line: 35 cyclomatic_complexity: 1 - calls_out: 5 + calls_out: 1 calls_in: 0 - src.cli.optionList: - name: optionList - module: src.cli - line: 732 - cyclomatic_complexity: 2 - calls_out: 5 - calls_in: 4 - src.web.diff-ui.updateMeta: - name: updateMeta - module: src.web.diff-ui - line: 41 - cyclomatic_complexity: 7 - calls_out: 3 - calls_in: 2 - src.cli.optionString: - name: optionString - module: src.cli - line: 705 - cyclomatic_complexity: 2 + src.extractors.todo.inferOwner: + name: inferOwner + module: src.extractors.todo + line: 86 + cyclomatic_complexity: 4 calls_out: 1 - calls_in: 17 - src.pipeline.run.skippedAudit: - name: skippedAudit - module: src.pipeline.run - line: 579 + calls_in: 11 + src.extractors.git.createDiscoveryState: + name: createDiscoveryState + module: src.extractors.git + line: 184 cyclomatic_complexity: 1 calls_out: 0 - calls_in: 8 - src.synthesis.code-change-plan.riskFor: - name: riskFor - module: src.synthesis.code-change-plan - line: 489 - cyclomatic_complexity: 4 - calls_out: 1 - calls_in: 7 - src.services.actions.summaryModeValue: - name: summaryModeValue - module: src.services.actions - line: 544 + calls_in: 1 + src.graph.diff.compareRelations: + name: compareRelations + module: src.graph.diff + line: 210 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 0 + src.extractors.docs-deterministic.marker: + name: marker + module: src.extractors.docs-deterministic + line: 162 cyclomatic_complexity: 4 calls_out: 2 + calls_in: 0 + src.extractors.communication.unquote: + name: unquote + module: src.extractors.communication + line: 507 + cyclomatic_complexity: 1 + calls_out: 2 calls_in: 2 - src.services.actions.nullableScopedPath: - name: nullableScopedPath - module: src.services.actions - line: 613 - cyclomatic_complexity: 2 - calls_out: 3 - calls_in: 2 - src.pipeline.run.collectTargetHints: - name: collectTargetHints - module: src.pipeline.run - line: 485 + src.graph.linker.leftId: + name: leftId + module: src.graph.linker + line: 247 cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.extractors.configuration.yamlOrAssignmentEntries: + name: yamlOrAssignmentEntries + module: src.extractors.configuration + line: 162 + cyclomatic_complexity: 7 + calls_out: 6 + calls_in: 1 + src.extractors.ast.typescript.modifiers: + name: modifiers + module: src.extractors.ast.typescript + line: 72 + cyclomatic_complexity: 4 calls_out: 4 - calls_in: 2 - src.semantic.reranker.assertSemanticCandidateSet: - name: assertSemanticCandidateSet - module: src.semantic.reranker - line: 184 - cyclomatic_complexity: 27 - calls_out: 18 calls_in: 3 - src.cli.optionTaskMode: - name: optionTaskMode - module: src.cli - line: 747 - cyclomatic_complexity: 5 + src.graph.symbol-resolution.byNlRecord: + name: byNlRecord + module: src.graph.symbol-resolution + line: 45 + cyclomatic_complexity: 4 calls_out: 3 - calls_in: 1 - src.summary.summarizer.summarizeGraph: - name: summarizeGraph - module: src.summary.summarizer - line: 57 - cyclomatic_complexity: 10 - calls_out: 13 calls_in: 0 - src.watch.watcher.scanTree: - name: scanTree - module: src.watch.watcher - line: 37 - cyclomatic_complexity: 12 - calls_out: 17 - calls_in: 4 - src.watch.watcher.delta: - name: delta - module: src.watch.watcher - line: 182 - cyclomatic_complexity: 2 + src.extractors.configuration.entries: + name: entries + module: src.extractors.configuration + line: 43 + cyclomatic_complexity: 1 + calls_out: 3 + calls_in: 2 + src.extractors.nl-llm.NlAttemptError.failedAudit: + name: failedAudit + module: src.extractors.nl-llm + line: 157 + cyclomatic_complexity: 1 calls_out: 2 calls_in: 0 - src.semantic.reranker.createSemanticRerankResult: - name: createSemanticRerankResult - module: src.semantic.reranker - line: 251 - cyclomatic_complexity: 4 - calls_out: 11 - calls_in: 0 - src.synthesis.todo-patch.now: - name: now - module: src.synthesis.todo-patch - line: 186 - cyclomatic_complexity: 5 - calls_out: 4 - calls_in: 0 - src.synthesis.task-synthesis-materialize.normalizeStringArray: - name: normalizeStringArray - module: src.synthesis.task-synthesis-materialize - line: 134 + src.extractors.ast.external.execFileAsync: + name: execFileAsync + module: src.extractors.ast.external + line: 8 cyclomatic_complexity: 3 - calls_out: 4 - calls_in: 11 - src.synthesis.todo-patch.recovered: - name: recovered - module: src.synthesis.todo-patch - line: 190 - cyclomatic_complexity: 5 - calls_out: 4 - calls_in: 0 - src.synthesis.validation.jaccard: - name: jaccard - module: src.synthesis.validation - line: 103 - cyclomatic_complexity: 5 + calls_out: 0 + calls_in: 2 + src.extractors.ast.external.result: + name: result + module: src.extractors.ast.external + line: 32 + cyclomatic_complexity: 2 calls_out: 1 - calls_in: 6 - src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection: - name: synthesizeWithCorrection - module: src.synthesis.tasks-llm - line: 117 - cyclomatic_complexity: 11 - calls_out: 8 - calls_in: 3 - src.operations.validation.assertVariableContract: - name: assertVariableContract - module: src.operations.validation - line: 62 - cyclomatic_complexity: 20 - calls_out: 14 calls_in: 0 - src.synthesis.todo-patch.object: - name: object - module: src.synthesis.todo-patch - line: 333 - cyclomatic_complexity: 4 - calls_out: 2 - calls_in: 6 - src.summary.summarizer.SummaryAttemptError.generationMetadata: - name: generationMetadata - module: src.summary.summarizer - line: 285 + src.extractors.nl.assertNlExtractionOptions: + name: assertNlExtractionOptions + module: src.extractors.nl + line: 25 cyclomatic_complexity: 9 - calls_out: 5 - calls_in: 6 - src.synthesis.todo-patch.exactKeys: - name: exactKeys - module: src.synthesis.todo-patch - line: 338 - cyclomatic_complexity: 3 - calls_out: 6 - calls_in: 6 - src.synthesis.code-change-plan.createCodeChangeSourcePatchSet: - name: createCodeChangeSourcePatchSet - module: src.synthesis.code-change-plan - line: 759 - cyclomatic_complexity: 8 - calls_out: 11 - calls_in: 0 - src.services.actions.stringList: - name: stringList - module: src.services.actions - line: 645 - cyclomatic_complexity: 4 - calls_out: 6 - calls_in: 3 - src.watch.watcher.absoluteRoot: - name: absoluteRoot - module: src.watch.watcher - line: 40 - cyclomatic_complexity: 11 - calls_out: 14 - calls_in: 0 - src.synthesis.code-change-plan.renderIds: - name: renderIds - module: src.synthesis.code-change-plan - line: 680 - cyclomatic_complexity: 2 calls_out: 2 calls_in: 1 - src.services.actions.view: - name: view - module: src.services.actions - line: 456 + src.extractors.ast.typescript.callee: + name: callee + module: src.extractors.ast.typescript + line: 121 cyclomatic_complexity: 2 - calls_out: 4 + calls_out: 2 calls_in: 0 - src.services.actions.withTextDiffViews: - name: withTextDiffViews - module: src.services.actions - line: 556 - cyclomatic_complexity: 3 - calls_out: 7 + examples.src.runtime.executeContract: + name: executeContract + module: examples.src.runtime + line: 10 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.extractors.git.execFileAsync: + name: execFileAsync + module: src.extractors.git + line: 12 + cyclomatic_complexity: 1 + calls_out: 0 calls_in: 2 - src.synthesis.validation.words: - name: words - module: src.synthesis.validation - line: 99 - cyclomatic_complexity: 2 + src.extractors.nl-llm.NlAttemptError.resolveObject: + name: resolveObject + module: src.extractors.nl-llm + line: 249 + cyclomatic_complexity: 6 calls_out: 3 - calls_in: 7 - src.semantic.reranker-llm.SemanticRerankerRequiredError.assertTrackedSnapshot: - name: assertTrackedSnapshot - module: src.semantic.reranker-llm - line: 140 + calls_in: 3 + rust-ast.src.main.slash: + name: slash + module: rust-ast.src.main + line: 320 cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 2 + src.extractors.runtime-cycle.driftRecord: + name: driftRecord + module: src.extractors.runtime-cycle + line: 211 + cyclomatic_complexity: 5 + calls_out: 5 + calls_in: 2 + src.extractors.communication.inferred: + name: inferred + module: src.extractors.communication + line: 128 + cyclomatic_complexity: 5 + calls_out: 1 + calls_in: 0 + src.extractors.nl-llm.NlAttemptError.fallback: + name: fallback + module: src.extractors.nl-llm + line: 265 + cyclomatic_complexity: 2 calls_out: 0 calls_in: 1 - src.cli.diagnostics: - name: diagnostics - module: src.cli - line: 499 + examples.backend.src.validation.object: + name: object + module: examples.backend.src.validation + line: 24 cyclomatic_complexity: 2 - calls_out: 5 + calls_out: 3 calls_in: 0 - src.synthesis.todo-patch.nonBlank: - name: nonBlank - module: src.synthesis.todo-patch - line: 346 - cyclomatic_complexity: 3 + src.extractors.communication.isCommunicationType: + name: isCommunicationType + module: src.extractors.communication + line: 486 + cyclomatic_complexity: 1 calls_out: 2 - calls_in: 3 - src.watch.watcher.runReport: - name: runReport - module: src.watch.watcher - line: 157 + calls_in: 6 + examples.backend.src.validation.record: + name: record + module: examples.backend.src.validation + line: 21 cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 5 - src.semantic.reranker.seenPairs: - name: seenPairs - module: src.semantic.reranker - line: 204 - cyclomatic_complexity: 14 - calls_out: 9 - calls_in: 0 - src.cli.context: - name: context - module: src.cli - line: 451 - cyclomatic_complexity: 9 - calls_out: 10 - calls_in: 0 - src.services.actions.beforeGraph: - name: beforeGraph - module: src.services.actions - line: 350 - cyclomatic_complexity: 8 - calls_out: 2 + calls_out: 3 calls_in: 0 - src.synthesis.task-synthesis-materialize.mapKeys: - name: mapKeys - module: src.synthesis.task-synthesis-materialize - line: 121 - cyclomatic_complexity: 2 - calls_out: 5 - calls_in: 6 - src.synthesis.code-change-plan.evaluateCodeChangeAcceptance: - name: evaluateCodeChangeAcceptance - module: src.synthesis.code-change-plan - line: 224 - cyclomatic_complexity: 9 - calls_out: 18 - calls_in: 3 - src.synthesis.validation.sharedSymbol: - name: sharedSymbol - module: src.synthesis.validation + src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent: + name: extractDocumentationIntent + module: src.extractors.docs-llm line: 45 - cyclomatic_complexity: 1 - calls_out: 2 + cyclomatic_complexity: 3 + calls_out: 12 calls_in: 0 - src.web.diff-ui.formatBytes: - name: formatBytes - module: src.web.diff-ui - line: 39 - cyclomatic_complexity: 7 + src.extractors.configuration.match: + name: match + module: src.extractors.configuration + line: 175 + cyclomatic_complexity: 5 calls_out: 2 calls_in: 3 - src.synthesis.todo-patch.assertTodoPatchArtifact: - name: assertTodoPatchArtifact - module: src.synthesis.todo-patch - line: 221 - cyclomatic_complexity: 11 - calls_out: 16 - calls_in: 2 - src.services.actions.hasInputValue: - name: hasInputValue - module: src.services.actions - line: 657 + src.extractors.docs-chunks.splitLongSection: + name: splitLongSection + module: src.extractors.docs-chunks + line: 107 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 3 + src.extractors.nl.detectMissingFields: + name: detectMissingFields + module: src.extractors.nl + line: 95 + cyclomatic_complexity: 10 + calls_out: 5 + calls_in: 4 + src.graph.diff.groups: + name: groups + module: src.graph.diff + line: 164 cyclomatic_complexity: 3 - calls_out: 0 - calls_in: 7 - src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS: - name: DEFAULT_SCAN_INTERVAL_MS - module: src.watch.watcher - line: 145 - cyclomatic_complexity: 19 - calls_out: 14 + calls_out: 4 calls_in: 0 - src.synthesis.code-change-plan.proposals: - name: proposals - module: src.synthesis.code-change-plan - line: 119 + src.graph.diff.beforeGroups: + name: beforeGroups + module: src.graph.diff + line: 38 cyclomatic_complexity: 7 - calls_out: 18 + calls_out: 6 calls_in: 0 - src.synthesis.code-change-plan.generatedAt: - name: generatedAt - module: src.synthesis.code-change-plan - line: 769 - cyclomatic_complexity: 3 + src.extractors.docs-deterministic.targetsOf: + name: targetsOf + module: src.extractors.docs-deterministic + line: 359 + cyclomatic_complexity: 1 + calls_out: 5 + calls_in: 1 + examples.backend.src.server.validation: + name: validation + module: examples.backend.src.server + line: 45 + cyclomatic_complexity: 2 calls_out: 2 calls_in: 0 - src.summary.render.renderSummaryMarkdown: - name: renderSummaryMarkdown - module: src.summary.render - line: 3 - cyclomatic_complexity: 10 - calls_out: 9 + src.graph.linker.indexResolvableBasenames: + name: indexResolvableBasenames + module: src.graph.linker + line: 298 + cyclomatic_complexity: 8 + calls_out: 13 + calls_in: 1 + src.extractors.communication.explicitEnvelope: + name: explicitEnvelope + module: src.extractors.communication + line: 129 + cyclomatic_complexity: 5 + calls_out: 1 calls_in: 0 - src.operations.validation.assertPrincipalList: - name: assertPrincipalList - module: src.operations.validation - line: 49 - cyclomatic_complexity: 2 - calls_out: 4 - calls_in: 3 - src.semantic.reranker.boundedScore: - name: boundedScore - module: src.semantic.reranker - line: 480 - cyclomatic_complexity: 4 - calls_out: 3 + src.extractors.nl-llm.NlAttemptError.audit: + name: audit + module: src.extractors.nl-llm + line: 272 + cyclomatic_complexity: 1 + calls_out: 1 calls_in: 5 - src.tf.classifier.loadAssets: - name: loadAssets - module: src.tf.classifier - line: 34 + src.extractors.todo.task: + name: task + module: src.extractors.todo + line: 43 cyclomatic_complexity: 2 - calls_out: 6 + calls_out: 12 + calls_in: 0 + src.extractors.git.registerDiscoveredRepository: + name: registerDiscoveredRepository + module: src.extractors.git + line: 252 + cyclomatic_complexity: 2 + calls_out: 2 + calls_in: 1 + src.graph.linker.isModuleTopicSource: + name: isModuleTopicSource + module: src.graph.linker + line: 159 + cyclomatic_complexity: 4 + calls_out: 0 + calls_in: 6 + src.extractors.communication.listValue: + name: listValue + module: src.extractors.communication + line: 501 + cyclomatic_complexity: 2 + calls_out: 8 calls_in: 1 - src.cli.controller: - name: controller - module: src.cli - line: 392 + src.extractors.nl-llm.NlAttemptError.allowedAction: + name: allowedAction + module: src.extractors.nl-llm + line: 296 cyclomatic_complexity: 1 - calls_out: 5 + calls_out: 1 + calls_in: 1 + src.extractors.docs-chunks.takeLineBatch: + name: takeLineBatch + module: src.extractors.docs-chunks + line: 128 + cyclomatic_complexity: 8 + calls_out: 2 + calls_in: 1 + src.extractors.communication.first: + name: first + module: src.extractors.communication + line: 497 + cyclomatic_complexity: 4 + calls_out: 3 + calls_in: 1 + src.extractors.docs-chunks.prioritizeDocumentChunks: + name: prioritizeDocumentChunks + module: src.extractors.docs-chunks + line: 3 + cyclomatic_complexity: 3 + calls_out: 6 + calls_in: 0 + src.graph.symbol-resolution.buildSymbolResolutionIndex: + name: buildSymbolResolutionIndex + module: src.graph.symbol-resolution + line: 22 + cyclomatic_complexity: 15 + calls_out: 13 calls_in: 0 - src.synthesis.todo-patch.sameArray: - name: sameArray - module: src.synthesis.todo-patch - line: 329 + src.graph.linker.declarationAstIds: + name: declarationAstIds + module: src.graph.linker + line: 139 + cyclomatic_complexity: 10 + calls_out: 7 + calls_in: 0 + src.extractors.communication.isCommunicationNoise: + name: isCommunicationNoise + module: src.extractors.communication + line: 446 + cyclomatic_complexity: 3 + calls_out: 2 + calls_in: 3 + src.graph.symbol-resolution.isAstDeclaration: + name: isAstDeclaration + module: src.graph.symbol-resolution + line: 116 + cyclomatic_complexity: 3 + calls_out: 0 + calls_in: 3 + src.extractors.docs-chunks.flush: + name: flush + module: src.extractors.docs-chunks + line: 63 + cyclomatic_complexity: 2 + calls_out: 2 + calls_in: 3 + src.extractors.docs-record.modality: + name: modality + module: src.extractors.docs-record + line: 37 + cyclomatic_complexity: 11 + calls_out: 7 + calls_in: 0 + src.extractors.configuration.line: + name: line + module: src.extractors.configuration + line: 149 + cyclomatic_complexity: 4 + calls_out: 3 + calls_in: 0 + src.extractors.communication.heading: + name: heading + module: src.extractors.communication + line: 417 cyclomatic_complexity: 2 calls_out: 1 - calls_in: 4 - src.services.actions.beforePath: - name: beforePath - module: src.services.actions - line: 427 + calls_in: 0 + src.extractors.ast.typescript.excerpt: + name: excerpt + module: src.extractors.ast.typescript + line: 25 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 2 + rust-ast.src.main.visit_item_const: + name: visit_item_const + module: rust-ast.src.main + line: 243 cyclomatic_complexity: 1 + calls_out: 9 + calls_in: 0 + rust-ast.src.main.visit_item_static: + name: visit_item_static + module: rust-ast.src.main + line: 250 + cyclomatic_complexity: 1 + calls_out: 9 + calls_in: 0 + java.JavaAstExtract.JavaAstExtract.json: + name: json + module: java.JavaAstExtract + line: 237 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 1 + src.graph.diff.afterGroups: + name: afterGroups + module: src.graph.diff + line: 39 + cyclomatic_complexity: 7 + calls_out: 6 + calls_in: 0 + src.extractors.configuration.heading: + name: heading + module: src.extractors.configuration + line: 150 + cyclomatic_complexity: 4 + calls_out: 3 + calls_in: 0 + src.graph.linker.expand: + name: expand + module: src.graph.linker + line: 323 + cyclomatic_complexity: 8 + calls_out: 5 + calls_in: 1 + examples.backend.src.server.createBackend: + name: createBackend + module: examples.backend.src.server + line: 18 + cyclomatic_complexity: 4 + calls_out: 5 + calls_in: 1 + src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic: + name: deterministic + module: src.extractors.markdown-llm + line: 61 + cyclomatic_complexity: 4 + calls_out: 2 + calls_in: 0 + src.extractors.ast.records.end: + name: end + module: src.extractors.ast.records + line: 48 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 0 + src.extractors.docs-llm.DocumentationLlmRequiredError.files: + name: files + module: src.extractors.docs-llm + line: 110 + cyclomatic_complexity: 3 + calls_out: 7 + calls_in: 0 + src.graph.linker.isFileAggregateEvidencePair: + name: isFileAggregateEvidencePair + module: src.graph.linker + line: 414 + cyclomatic_complexity: 3 + calls_out: 1 + calls_in: 1 + src.extractors.runtime-cycle.boundedArray: + name: boundedArray + module: src.extractors.runtime-cycle + line: 94 + cyclomatic_complexity: 8 + calls_out: 4 + calls_in: 3 + src.extractors.markdown-llm.MarkdownAttemptError.readPrompt: + name: readPrompt + module: src.extractors.markdown-llm + line: 431 + cyclomatic_complexity: 2 + calls_out: 6 + calls_in: 1 + src.extractors.runtime-cycle.jsonScalar: + name: jsonScalar + module: src.extractors.runtime-cycle + line: 302 + cyclomatic_complexity: 6 + calls_out: 1 + calls_in: 3 + src.extractors.git.readStats: + name: readStats + module: src.extractors.git + line: 364 + cyclomatic_complexity: 6 calls_out: 4 + calls_in: 1 + src.graph.linker.leftKeywords: + name: leftKeywords + module: src.graph.linker + line: 351 + cyclomatic_complexity: 2 + calls_out: 2 calls_in: 0 - src.synthesis.code-change-plan.matchingConclusions: - name: matchingConclusions - module: src.synthesis.code-change-plan - line: 142 + src.extractors.todo.action: + name: action + module: src.extractors.todo + line: 50 + cyclomatic_complexity: 2 + calls_out: 12 + calls_in: 0 + src.extractors.markdown-paths.headingDirectories: + name: headingDirectories + module: src.extractors.markdown-paths + line: 46 + cyclomatic_complexity: 11 + calls_out: 9 + calls_in: 0 + src.extractors.markdown-paths.repositoryRoot: + name: repositoryRoot + module: src.extractors.markdown-paths + line: 40 + cyclomatic_complexity: 11 + calls_out: 11 + calls_in: 0 + src.extractors.communication.declaredParticipant: + name: declaredParticipant + module: src.extractors.communication + line: 141 + cyclomatic_complexity: 5 + calls_out: 1 + calls_in: 0 + src.extractors.git.result: + name: result + module: src.extractors.git + line: 326 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.extractors.ast.typescript.symbolModifiers: + name: symbolModifiers + module: src.extractors.ast.typescript + line: 92 + cyclomatic_complexity: 2 + calls_out: 2 + calls_in: 0 + src.extractors.docs-record.allowedAction: + name: allowedAction + module: src.extractors.docs-record + line: 183 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 1 + rust-ast.src.main.type_item: + name: type_item + module: rust-ast.src.main + line: 306 cyclomatic_complexity: 1 + calls_out: 8 + calls_in: 4 + src.extractors.communication.identityRegistry: + name: identityRegistry + module: src.extractors.communication + line: 70 + cyclomatic_complexity: 3 calls_out: 2 calls_in: 0 - src.watch.watcher.timer: - name: timer - module: src.watch.watcher - line: 232 + src.graph.linker.set: + name: set + module: src.graph.linker + line: 478 cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 11 + src.extractors.nl.body: + name: body + module: src.extractors.nl + line: 41 + cyclomatic_complexity: 2 + calls_out: 14 + calls_in: 0 + src.graph.diff.escapeXml: + name: escapeXml + module: src.graph.diff + line: 227 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 6 + src.graph.diff.isObject: + name: isObject + module: src.graph.diff + line: 198 + cyclomatic_complexity: 3 calls_out: 2 + calls_in: 1 + src.extractors.nl.confidence: + name: confidence + module: src.extractors.nl + line: 53 + cyclomatic_complexity: 1 + calls_out: 9 calls_in: 0 - src.watch.watcher.startedAt: - name: startedAt - module: src.watch.watcher - line: 209 + examples.frontend.src.render.renderTable: + name: renderTable + module: examples.frontend.src.render + line: 23 cyclomatic_complexity: 3 calls_out: 4 calls_in: 0 - src.synthesis.todo-patch.atomicWrite: - name: atomicWrite - module: src.synthesis.todo-patch - line: 274 + src.extractors.nl-llm.NlAttemptError.sourceExcerpt: + name: sourceExcerpt + module: src.extractors.nl-llm + line: 213 cyclomatic_complexity: 5 - calls_out: 13 + calls_out: 3 + calls_in: 2 + src.extractors.markdown-paths.buildBasenameIndex: + name: buildBasenameIndex + module: src.extractors.markdown-paths + line: 90 + cyclomatic_complexity: 7 + calls_out: 7 + calls_in: 1 + src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow: + name: fallbackOrThrow + module: src.extractors.markdown-llm + line: 302 + cyclomatic_complexity: 2 + calls_out: 5 + calls_in: 2 + src.extractors.nl-llm.NlAttemptError.nonEmptyText: + name: nonEmptyText + module: src.extractors.nl-llm + line: 240 + cyclomatic_complexity: 3 + calls_out: 1 + calls_in: 3 + src.extractors.changelog.body: + name: body + module: src.extractors.changelog + line: 27 + cyclomatic_complexity: 7 + calls_out: 15 + calls_in: 0 + src.extractors.docs-record.resolveAction: + name: resolveAction + module: src.extractors.docs-record + line: 156 + cyclomatic_complexity: 5 + calls_out: 4 + calls_in: 2 + src.graph.diff.beforeRecord: + name: beforeRecord + module: src.graph.diff + line: 50 + cyclomatic_complexity: 1 + calls_out: 3 + calls_in: 0 + src.extractors.git.takeNextDiscoveryDirectory: + name: takeNextDiscoveryDirectory + module: src.extractors.git + line: 201 + cyclomatic_complexity: 2 + calls_out: 0 + calls_in: 2 + examples.backend.src.server.server: + name: server + module: examples.backend.src.server + line: 20 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 0 + src.extractors.git.processDiscoveryDirectory: + name: processDiscoveryDirectory + module: src.extractors.git + line: 228 + cyclomatic_complexity: 5 + calls_out: 5 + calls_in: 2 + examples.backend.src.server.readBody: + name: readBody + module: examples.backend.src.server + line: 70 + cyclomatic_complexity: 3 + calls_out: 5 + calls_in: 1 + examples.backend.src.server.offset: + name: offset + module: examples.backend.src.server + line: 58 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.extractors.ast.isIntentRecords: + name: isIntentRecords + module: src.extractors.ast + line: 153 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 1 + src.graph.symbol-resolution.hasResolvedNlAstSymbolPair: + name: hasResolvedNlAstSymbolPair + module: src.graph.symbol-resolution + line: 61 + cyclomatic_complexity: 10 + calls_out: 3 + calls_in: 0 + src.extractors.nl-llm.NlAttemptError.fallbackOrThrow: + name: fallbackOrThrow + module: src.extractors.nl-llm + line: 149 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 2 + src.extractors.markdown-llm.MarkdownAttemptError.strings: + name: strings + module: src.extractors.markdown-llm + line: 438 + cyclomatic_complexity: 1 + calls_out: 5 + calls_in: 2 + src.extractors.ast.external.runExternalAstAdapter: + name: runExternalAstAdapter + module: src.extractors.ast.external + line: 23 + cyclomatic_complexity: 9 + calls_out: 6 + calls_in: 0 + src.graph.linker.indexKeywordBuckets: + name: indexKeywordBuckets + module: src.graph.linker + line: 186 + cyclomatic_complexity: 3 + calls_out: 3 calls_in: 6 - src.summary.summarizer.SummaryAttemptError.assertConclusions: - name: assertConclusions - module: src.summary.summarizer - line: 281 + rust-ast.src.main.excerpt: + name: excerpt + module: rust-ast.src.main + line: 186 + cyclomatic_complexity: 1 + calls_out: 7 + calls_in: 1 + src.extractors.todo.resolvedPaths: + name: resolvedPaths + module: src.extractors.todo + line: 51 + cyclomatic_complexity: 2 + calls_out: 12 + calls_in: 0 + src.extractors.nl-llm.NlAttemptError.NL_RECORD_CONTRACT: + name: NL_RECORD_CONTRACT + module: src.extractors.nl-llm + line: 319 + cyclomatic_complexity: 1 + calls_out: 7 + calls_in: 0 + src.graph.symbol-resolution.uniquePaths: + name: uniquePaths + module: src.graph.symbol-resolution + line: 112 + cyclomatic_complexity: 1 + calls_out: 3 + calls_in: 2 + src.extractors.git.readChangedFiles: + name: readChangedFiles + module: src.extractors.git + line: 352 + cyclomatic_complexity: 6 + calls_out: 5 + calls_in: 1 + src.extractors.ast.records.boundedCapabilities: + name: boundedCapabilities + module: src.extractors.ast.records + line: 86 + cyclomatic_complexity: 1 + calls_out: 6 + calls_in: 1 + src.extractors.docs-deterministic.extractDocumentationBaseline: + name: extractDocumentationBaseline + module: src.extractors.docs-deterministic + line: 56 + cyclomatic_complexity: 4 + calls_out: 8 + calls_in: 0 + src.extractors.markdown-paths.createMarkdownPathResolver: + name: createMarkdownPathResolver + module: src.extractors.markdown-paths + line: 39 + cyclomatic_complexity: 12 + calls_out: 12 + calls_in: 0 + examples.frontend.src.app.refresh: + name: refresh + module: examples.frontend.src.app + line: 18 + cyclomatic_complexity: 4 + calls_out: 6 + calls_in: 3 + src.extractors.markdown-llm.MarkdownAttemptError.enrichment: + name: enrichment + module: src.extractors.markdown-llm + line: 439 + cyclomatic_complexity: 1 + calls_out: 6 + calls_in: 0 + src.extractors.nl.sourcePath: + name: sourcePath + module: src.extractors.nl + line: 42 + cyclomatic_complexity: 2 + calls_out: 14 + calls_in: 0 + src.extractors.docs-deterministic.statementRecord: + name: statementRecord + module: src.extractors.docs-deterministic + line: 288 cyclomatic_complexity: 1 calls_out: 0 + calls_in: 1 + src.extractors.runtime-cycle.violationRecord: + name: violationRecord + module: src.extractors.runtime-cycle + line: 173 + cyclomatic_complexity: 4 + calls_out: 7 calls_in: 3 - src.synthesis.code-change-plan.inline: - name: inline - module: src.synthesis.code-change-plan - line: 676 + src.extractors.docs-chunks.sectionText: + name: sectionText + module: src.extractors.docs-chunks + line: 76 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 0 + src.extractors.docs-record.linesFromChunk: + name: linesFromChunk + module: src.extractors.docs-record + line: 172 cyclomatic_complexity: 1 + calls_out: 5 + calls_in: 5 + src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic: + name: markDeterministic + module: src.extractors.markdown-llm + line: 402 + cyclomatic_complexity: 2 calls_out: 2 + calls_in: 2 + src.extractors.runtime-cycle.MAX_PER_SECTION: + name: MAX_PER_SECTION + module: src.extractors.runtime-cycle + line: 15 + cyclomatic_complexity: 8 + calls_out: 12 + calls_in: 0 + src.extractors.markdown-paths.isRepositoryPath: + name: isRepositoryPath + module: src.extractors.markdown-paths + line: 76 + cyclomatic_complexity: 5 + calls_out: 3 + calls_in: 4 + src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient: + name: requireConfiguredClient + module: src.extractors.docs-llm + line: 85 + cyclomatic_complexity: 3 + calls_out: 4 calls_in: 1 - src.synthesis.code-change-plan.matchingProposals: - name: matchingProposals - module: src.synthesis.code-change-plan - line: 141 + rust-ast.src.main.collect_files: + name: collect_files + module: rust-ast.src.main + line: 101 + cyclomatic_complexity: 9 + calls_out: 20 + calls_in: 1 + rust-ast.src.main.visit_item_enum: + name: visit_item_enum + module: rust-ast.src.main + line: 228 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 0 + src.extractors.nl-llm.NlAttemptError.deterministic: + name: deterministic + module: src.extractors.nl-llm + line: 160 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.extractors.docs-schema.target: + name: target + module: src.extractors.docs-schema + line: 13 cyclomatic_complexity: 1 calls_out: 2 + calls_in: 1 + src.extractors.docs-chunks.index: + name: index + module: src.extractors.docs-chunks + line: 43 + cyclomatic_complexity: 1 + calls_out: 3 calls_in: 0 - src.cli.view: - name: view - module: src.cli - line: 502 + src.extractors.ast.records.adapterRecords: + name: adapterRecords + module: src.extractors.ast.records + line: 5 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 0 + src.extractors.git.isGitWorkTree: + name: isGitWorkTree + module: src.extractors.git + line: 287 + cyclomatic_complexity: 2 + calls_out: 2 + calls_in: 4 + src.extractors.todo.text: + name: text + module: src.extractors.todo + line: 48 cyclomatic_complexity: 2 + calls_out: 12 + calls_in: 0 + src.extractors.configuration.relative: + name: relative + module: src.extractors.configuration + line: 19 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 0 + src.extractors.docs-chunks.item: + name: item + module: src.extractors.docs-chunks + line: 45 + cyclomatic_complexity: 1 + calls_out: 3 + calls_in: 0 + src.extractors.git.discoverGitRepositories: + name: discoverGitRepositories + module: src.extractors.git + line: 171 + cyclomatic_complexity: 4 + calls_out: 7 + calls_in: 1 + src.extractors.nl-llm.NlAttemptError.resolveAction: + name: resolveAction + module: src.extractors.nl-llm + line: 223 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 1 + src.extractors.docs-record.keywordOverlap: + name: keywordOverlap + module: src.extractors.docs-record + line: 119 + cyclomatic_complexity: 3 + calls_out: 3 + calls_in: 1 + src.extractors.configuration.entry: + name: entry + module: src.extractors.configuration + line: 191 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 5 + src.extractors.docs-deterministic.action: + name: action + module: src.extractors.docs-deterministic + line: 296 + cyclomatic_complexity: 3 + calls_out: 6 + calls_in: 0 + src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes: + name: outcomes + module: src.extractors.markdown-llm + line: 94 + cyclomatic_complexity: 4 + calls_out: 3 + calls_in: 0 + src.graph.linker.indexTargetBuckets: + name: indexTargetBuckets + module: src.graph.linker + line: 166 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 6 + src.extractors.communication.isTicketEvidenceFile: + name: isTicketEvidenceFile + module: src.extractors.communication + line: 370 + cyclomatic_complexity: 4 + calls_out: 4 + calls_in: 1 + src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection: + name: extractNlWithCorrection + module: src.extractors.nl-llm + line: 115 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 6 + rust-ast.src.main.visit_expr_call: + name: visit_expr_call + module: rust-ast.src.main + line: 288 + cyclomatic_complexity: 1 + calls_out: 9 + calls_in: 0 + src.extractors.communication.inferIdentity: + name: inferIdentity + module: src.extractors.communication + line: 337 + cyclomatic_complexity: 15 + calls_out: 9 + calls_in: 1 + src.extractors.ast.typescript.capabilities: + name: capabilities + module: src.extractors.ast.typescript + line: 134 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 0 + src.extractors.docs-deterministic.readParagraph: + name: readParagraph + module: src.extractors.docs-deterministic + line: 235 + cyclomatic_complexity: 11 calls_out: 5 + calls_in: 1 + src.extractors.markdown-paths.state: + name: state + module: src.extractors.markdown-paths + line: 92 + cyclomatic_complexity: 6 + calls_out: 4 + calls_in: 0 + src.extractors.communication.basename: + name: basename + module: src.extractors.communication + line: 371 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 11 + src.extractors.communication.communicationSegments: + name: communicationSegments + module: src.extractors.communication + line: 391 + cyclomatic_complexity: 14 + calls_out: 12 + calls_in: 1 + src.extractors.runtime-cycle.extractRuntimeCycleIntent: + name: extractRuntimeCycleIntent + module: src.extractors.runtime-cycle + line: 29 + cyclomatic_complexity: 8 + calls_out: 12 + calls_in: 0 + src.graph.diff.height: + name: height + module: src.graph.diff + line: 120 + cyclomatic_complexity: 4 + calls_out: 4 + calls_in: 0 + src.extractors.git.extractChangedSymbols: + name: extractChangedSymbols + module: src.extractors.git + line: 376 + cyclomatic_complexity: 9 + calls_out: 3 + calls_in: 1 + src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions: + name: assertNlExtractionOptions + module: src.extractors.nl-llm + line: 58 + cyclomatic_complexity: 2 + calls_out: 4 + calls_in: 1 + src.extractors.configuration.configurationFormat: + name: configurationFormat + module: src.extractors.configuration + line: 113 + cyclomatic_complexity: 6 + calls_out: 4 + calls_in: 1 + src.extractors.communication.extractCommunicationFile: + name: extractCommunicationFile + module: src.extractors.communication + line: 102 + cyclomatic_complexity: 50 + calls_out: 24 + calls_in: 3 + src.graph.linker.addToBucket: + name: addToBucket + module: src.graph.linker + line: 208 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 4 + src.extractors.runtime-cycle.watched: + name: watched + module: src.extractors.runtime-cycle + line: 129 + cyclomatic_complexity: 3 + calls_out: 3 + calls_in: 2 + java.JavaAstExtract.JavaAstExtract.escape: + name: escape + module: java.JavaAstExtract + line: 240 + cyclomatic_complexity: 9 + calls_out: 6 + calls_in: 1 + src.extractors.configuration.dockerEntries: + name: dockerEntries + module: src.extractors.configuration + line: 173 + cyclomatic_complexity: 6 + calls_out: 6 + calls_in: 1 + src.extractors.docs-record.resolveObject: + name: resolveObject + module: src.extractors.docs-record + line: 79 + cyclomatic_complexity: 4 + calls_out: 2 + calls_in: 3 + src.extractors.todo.classified: + name: classified + module: src.extractors.todo + line: 49 + cyclomatic_complexity: 2 + calls_out: 12 + calls_in: 0 + src.extractors.todo.lines: + name: lines + module: src.extractors.todo + line: 32 + cyclomatic_complexity: 5 + calls_out: 20 calls_in: 0 + src.extractors.git.resolveDiscoveryPrefix: + name: resolveDiscoveryPrefix + module: src.extractors.git + line: 264 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 1 + src.graph.linker.pairsFromBuckets: + name: pairsFromBuckets + module: src.graph.linker + line: 235 + cyclomatic_complexity: 8 + calls_out: 9 + calls_in: 1 + src.graph.linker.intersects: + name: intersects + module: src.graph.linker + line: 472 + cyclomatic_complexity: 1 + calls_out: 3 + calls_in: 4 edges: -- caller: src.cli.main - callee: src.cli.printHelp +- caller: rust-ast.src.main.main + callee: rust-ast.src.main.arguments call_type: resolved -- caller: src.cli.main - callee: src.cli.parseArgs +- caller: rust-ast.src.main.main + callee: rust-ast.src.main.collect_files call_type: resolved -- caller: src.cli.main - callee: src.cli.initProject +- caller: rust-ast.src.main.main + callee: rust-ast.src.main.slash call_type: resolved -- caller: src.cli.parsed - callee: src.cli.printHelp +- caller: rust-ast.src.main.collect_files + callee: rust-ast.src.main.slash call_type: resolved -- caller: src.cli.command - callee: src.cli.printHelp +- caller: rust-ast.src.main.add + callee: rust-ast.src.main.excerpt call_type: resolved -- caller: src.cli.diagnosticsPath - callee: src.cli.optionNumber +- caller: rust-ast.src.main.visit_item_mod + callee: rust-ast.src.main.qualified call_type: resolved -- caller: src.cli.diagnosticsPath - callee: src.cli.optionBoolean +- caller: rust-ast.src.main.visit_item_mod + callee: rust-ast.src.main.add call_type: resolved -- caller: src.cli.diagnostics - callee: src.cli.optionNumber +- caller: rust-ast.src.main.visit_item_use + callee: rust-ast.src.main.add call_type: resolved -- caller: src.cli.diagnostics - callee: src.cli.optionBoolean +- caller: rust-ast.src.main.visit_item_struct + callee: rust-ast.src.main.type_item call_type: resolved -- caller: src.cli.result - callee: src.cli.execFileAsync +- caller: rust-ast.src.main.visit_item_enum + callee: rust-ast.src.main.type_item call_type: resolved -- caller: src.cli.isPlanSet - callee: src.cli.optionString +- caller: rust-ast.src.main.visit_item_trait + callee: rust-ast.src.main.type_item call_type: resolved -- caller: src.cli.root - callee: src.cli.optionString +- caller: rust-ast.src.main.visit_item_type + callee: rust-ast.src.main.type_item call_type: resolved -- caller: src.cli.root - callee: src.cli.optionNullableString +- caller: rust-ast.src.main.visit_item_const + callee: rust-ast.src.main.qualified call_type: resolved -- caller: src.cli.root - callee: src.cli.optionLlmMode +- caller: rust-ast.src.main.visit_item_const + callee: rust-ast.src.main.add call_type: resolved -- caller: src.cli.handleWatch - callee: src.cli.optionNullableString +- caller: rust-ast.src.main.visit_item_const + callee: rust-ast.src.main.modifiers call_type: resolved -- caller: src.cli.handleWatch - callee: src.cli.optionList +- caller: rust-ast.src.main.visit_item_static + callee: rust-ast.src.main.qualified call_type: resolved -- caller: src.cli.handleWatch - callee: src.cli.optionBoolean +- caller: rust-ast.src.main.visit_item_static + callee: rust-ast.src.main.add call_type: resolved -- caller: src.cli.handleWatch - callee: src.cli.optionString +- caller: rust-ast.src.main.visit_item_static + callee: rust-ast.src.main.modifiers call_type: resolved -- caller: src.cli.handleWatch - callee: src.cli.optionNumber +- caller: rust-ast.src.main.visit_item_fn + callee: rust-ast.src.main.qualified call_type: resolved -- caller: src.cli.handleWatch - callee: src.cli.optionNlMode +- caller: rust-ast.src.main.visit_item_fn + callee: rust-ast.src.main.add call_type: resolved -- caller: src.cli.taskFile - callee: src.cli.optionNullableString +- caller: rust-ast.src.main.visit_impl_item_fn + callee: rust-ast.src.main.add call_type: resolved -- caller: src.cli.taskFile - callee: src.cli.optionList +- caller: rust-ast.src.main.visit_expr_call + callee: rust-ast.src.main.add call_type: resolved -- caller: src.cli.taskFile - callee: src.cli.optionBoolean +- caller: rust-ast.src.main.visit_expr_method_call + callee: rust-ast.src.main.add call_type: resolved -- caller: src.cli.taskFile - callee: src.cli.optionString +- caller: rust-ast.src.main.type_item + callee: rust-ast.src.main.qualified call_type: resolved -- caller: src.cli.taskFile - callee: src.cli.optionNumber +- caller: rust-ast.src.main.type_item + callee: rust-ast.src.main.add call_type: resolved -- caller: src.cli.taskFile - callee: src.cli.optionNlMode +- caller: rust-ast.src.main.type_item + callee: rust-ast.src.main.modifiers call_type: resolved -- caller: src.cli.taskFile - callee: src.cli.optionLlmMode +- caller: examples.backend.src.validation.ALLOWED_ACTIONS + callee: examples.backend.src.validation.invalid call_type: resolved -- caller: src.cli.taskFile - callee: src.cli.optionPipelineTaskMode +- caller: examples.backend.src.validation.validateEventPayload + callee: examples.backend.src.validation.invalid call_type: resolved -- caller: src.cli.controller - callee: src.cli.optionNumber +- caller: examples.backend.src.validation.record + callee: examples.backend.src.validation.invalid call_type: resolved -- caller: src.cli.controller - callee: src.cli.optionBoolean +- caller: examples.backend.src.validation.agent + callee: examples.backend.src.validation.invalid call_type: resolved -- caller: src.cli.controller - callee: src.cli.formatWatchEvent +- caller: examples.backend.src.validation.action + callee: examples.backend.src.validation.invalid call_type: resolved -- caller: src.cli.stop - callee: src.cli.optionNumber +- caller: examples.backend.src.validation.object + callee: examples.backend.src.validation.invalid call_type: resolved -- caller: src.cli.stop - callee: src.cli.optionBoolean +- caller: examples.backend.src.server.createBackend + callee: examples.backend.src.server.handleRequest call_type: resolved -- caller: src.cli.stop - callee: src.cli.formatWatchEvent +- caller: examples.backend.src.server.createBackend + callee: examples.backend.src.server.sendJson call_type: resolved -- caller: src.cli.formatWatchEvent - callee: src.cli.file +- caller: examples.backend.src.server.store + callee: examples.backend.src.server.handleRequest call_type: resolved -- caller: src.cli.stamp - callee: src.cli.file +- caller: examples.backend.src.server.store + callee: examples.backend.src.server.sendJson call_type: resolved -- caller: src.cli.handleDiff - callee: src.cli.optionString +- caller: examples.backend.src.server.server + callee: examples.backend.src.server.handleRequest call_type: resolved -- caller: src.cli.handleDiff - callee: src.cli.optionNumber +- caller: examples.backend.src.server.server + callee: examples.backend.src.server.sendJson call_type: resolved -- caller: src.cli.mode - callee: src.cli.optionNumber +- caller: examples.backend.src.server.handleRequest + callee: examples.backend.src.server.sendJson call_type: resolved -- caller: src.cli.svg - callee: src.cli.optionNumber +- caller: examples.backend.src.server.handleRequest + callee: examples.backend.src.server.size call_type: resolved -- caller: src.cli.svg - callee: src.cli.optionBoolean +- caller: examples.backend.src.server.handleRequest + callee: examples.backend.src.server.readBody call_type: resolved -- caller: src.cli.html - callee: src.cli.optionNumber +- caller: examples.backend.src.server.validation + callee: examples.backend.src.server.sendJson call_type: resolved -- caller: src.cli.diff - callee: src.cli.optionNumber +- caller: examples.backend.src.server.event + callee: examples.backend.src.server.sendJson call_type: resolved -- caller: src.cli.context - callee: src.cli.optionString +- caller: examples.backend.src.server.offset + callee: examples.backend.src.server.sendJson call_type: resolved -- caller: src.cli.context - callee: src.cli.optionBoolean +- caller: examples.backend.src.server.limit + callee: examples.backend.src.server.sendJson call_type: resolved -- caller: src.cli.context - callee: src.cli.optionNumber +- caller: examples.backend.src.server.startBackend + callee: examples.backend.src.server.createBackend call_type: resolved -- caller: src.cli.maxRows - callee: src.cli.optionString +- caller: examples.frontend.src.render.toRows + callee: examples.frontend.src.render.classifyEvent call_type: resolved -- caller: src.cli.maxRows - callee: src.cli.optionBoolean +- caller: examples.frontend.src.render.renderTable + callee: examples.frontend.src.render.headerRow call_type: resolved -- caller: src.cli.maxRows - callee: src.cli.optionNumber +- caller: examples.frontend.src.app.mountPanel + callee: examples.frontend.src.app.createState call_type: resolved -- caller: src.cli.handleReality - callee: src.cli.optionString +- caller: examples.frontend.src.app.mountPanel + callee: examples.frontend.src.app.refresh call_type: resolved -- caller: src.cli.handleReality - callee: src.cli.optionNumber +- caller: examples.frontend.src.app.mountPanel + callee: examples.frontend.src.app.reload call_type: resolved -- caller: src.cli.handleReality - callee: src.cli.optionBoolean +- caller: examples.frontend.src.app.mountPanel + callee: examples.frontend.src.app.state call_type: resolved -- caller: src.cli.view - callee: src.cli.optionNumber +- caller: examples.frontend.src.app.state + callee: examples.frontend.src.app.refresh call_type: resolved -- caller: src.cli.view - callee: src.cli.optionBoolean +- caller: examples.frontend.src.app.reload + callee: examples.frontend.src.app.refresh call_type: resolved -- caller: src.cli.handleExtract - callee: src.cli.optionString +- caller: examples.src.runtime.executeContract + callee: examples.src.runtime.validateContract call_type: resolved -- caller: src.cli.handleExtract - callee: src.cli.optionNlMode +- caller: java.JavaAstExtract.JavaAstExtract.main + callee: java.JavaAstExtract.JavaAstExtract.add call_type: resolved -- caller: src.cli.handleExtract - callee: src.cli.emitExtraction +- caller: java.JavaAstExtract.JavaAstExtract.main + callee: java.JavaAstExtract.JavaAstExtract.emit call_type: resolved -- caller: src.cli.handleExtract - callee: src.cli.optionNumber +- caller: java.JavaAstExtract.JavaAstExtract.main + callee: java.JavaAstExtract.JavaAstExtract.collect call_type: resolved -- caller: src.cli.extractor - callee: src.cli.optionString +- caller: java.JavaAstExtract.JavaAstExtract.emit + callee: java.JavaAstExtract.JavaAstExtract.json call_type: resolved -- caller: src.cli.extractor - callee: src.cli.optionNlMode +- caller: java.JavaAstExtract.JavaAstExtract.emit + callee: java.JavaAstExtract.JavaAstExtract.map call_type: resolved -- caller: src.cli.extractor - callee: src.cli.emitExtraction +- caller: java.JavaAstExtract.JavaAstExtract.collect + callee: java.JavaAstExtract.JavaAstExtract.try call_type: resolved -- caller: src.cli.handleCommunication - callee: src.cli.optionString +- caller: java.JavaAstExtract.JavaAstExtract.collect + callee: java.JavaAstExtract.JavaAstExtract.containsIgnored call_type: resolved -- caller: src.cli.handleCommunication - callee: src.cli.optionNullableString +- caller: java.JavaAstExtract.JavaAstExtract.try + callee: java.JavaAstExtract.JavaAstExtract.slash call_type: resolved -- caller: src.cli.handleCommunication - callee: src.cli.optionLlmMode +- caller: java.JavaAstExtract.JavaAstExtract.json + callee: java.JavaAstExtract.JavaAstExtract.escape call_type: resolved -- caller: src.cli.handleCommunication - callee: src.cli.optionNumber +- caller: src.extractors.nl.extractNlIntent + callee: src.extractors.nl.assertNlExtractionOptions call_type: resolved -- caller: src.cli.handleCommunication - callee: src.cli.optionBoolean +- caller: src.extractors.nl.extractNlIntent + callee: src.extractors.nl.detectMissingFields call_type: resolved -- caller: src.cli.doctor - callee: src.cli.execFileAsync +- caller: src.extractors.nl.absolute + callee: src.extractors.nl.detectMissingFields call_type: resolved -- caller: src.cli.optionNumber - callee: src.cli.optionString +- caller: src.extractors.nl.absolute + callee: src.extractors.nl.inferActor call_type: resolved -- caller: src.cli.optionList - callee: src.cli.optionString +- caller: src.extractors.nl.body + callee: src.extractors.nl.detectMissingFields call_type: resolved -- caller: src.cli.optionNlMode - callee: src.cli.optionLlmMode +- caller: src.extractors.nl.body + callee: src.extractors.nl.inferActor call_type: resolved -- caller: src.cli.optionLlmMode - callee: src.cli.optionString +- caller: src.extractors.nl.sourcePath + callee: src.extractors.nl.detectMissingFields call_type: resolved -- caller: src.cli.optionTaskMode - callee: src.cli.optionString +- caller: src.extractors.nl.sourcePath + callee: src.extractors.nl.inferActor call_type: resolved -- caller: src.cli.optionSummaryMode - callee: src.cli.optionLlmMode +- caller: src.extractors.nl.classified + callee: src.extractors.nl.inferActor call_type: resolved -- caller: src.cli.optionSummaryMode - callee: src.cli.optionBoolean +- caller: src.extractors.nl.action + callee: src.extractors.nl.inferActor call_type: resolved -- caller: src.cli.optionPipelineTaskMode - callee: src.cli.optionString +- caller: src.extractors.nl.object + callee: src.extractors.nl.inferActor call_type: resolved -- caller: src.cli.invokedPath - callee: src.cli.main +- caller: src.extractors.nl.missing + callee: src.extractors.nl.inferActor call_type: resolved -- caller: src.web.diff-ui.diffUiHtml - callee: src.web.diff-ui.byId +- caller: src.extractors.nl.confidence + callee: src.extractors.nl.inferActor call_type: resolved -- caller: src.web.diff-ui.requestHeaders - callee: src.web.diff-ui.byId +- caller: src.extractors.ast.isExtractionResult + callee: src.extractors.ast.isIntentRecords call_type: resolved -- caller: src.web.diff-ui.formatBytes - callee: src.web.diff-ui.selectedRun +- caller: src.extractors.runtime-cycle.MAX_PER_SECTION + callee: src.extractors.runtime-cycle.parseCycle call_type: resolved -- caller: src.web.diff-ui.formatBytes - callee: src.web.diff-ui.byId +- caller: src.extractors.runtime-cycle.MAX_PER_SECTION + callee: src.extractors.runtime-cycle.sourcePathFor call_type: resolved -- caller: src.web.diff-ui.selectedRun - callee: src.web.diff-ui.byId +- caller: src.extractors.runtime-cycle.MAX_PER_SECTION + callee: src.extractors.runtime-cycle.boundedArray call_type: resolved -- caller: src.web.diff-ui.selectedRun - callee: src.web.diff-ui.formatBytes +- caller: src.extractors.runtime-cycle.MAX_PER_SECTION + callee: src.extractors.runtime-cycle.probeRecord call_type: resolved -- caller: src.web.diff-ui.updateMeta - callee: src.web.diff-ui.selectedRun +- caller: src.extractors.runtime-cycle.MAX_PER_SECTION + callee: src.extractors.runtime-cycle.label call_type: resolved -- caller: src.web.diff-ui.updateMeta - callee: src.web.diff-ui.byId +- caller: src.extractors.runtime-cycle.MAX_PER_SECTION + callee: src.extractors.runtime-cycle.violationRecord call_type: resolved -- caller: src.web.diff-ui.updateMeta - callee: src.web.diff-ui.formatBytes +- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent + callee: src.extractors.runtime-cycle.parseCycle call_type: resolved -- caller: src.web.diff-ui.fillSelect - callee: src.web.diff-ui.byId +- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent + callee: src.extractors.runtime-cycle.sourcePathFor call_type: resolved -- caller: src.web.diff-ui.fillSelect - callee: src.web.diff-ui.updateMeta +- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent + callee: src.extractors.runtime-cycle.boundedArray call_type: resolved -- caller: src.web.diff-ui.loadRuns - callee: src.web.diff-ui.byId +- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent + callee: src.extractors.runtime-cycle.probeRecord call_type: resolved -- caller: src.web.diff-ui.loadRuns - callee: src.web.diff-ui.requestHeaders +- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent + callee: src.extractors.runtime-cycle.label call_type: resolved -- caller: src.web.diff-ui.compareGraphs - callee: src.web.diff-ui.byId +- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent + callee: src.extractors.runtime-cycle.violationRecord call_type: resolved -- caller: src.web.diff-ui.compareGraphs - callee: src.web.diff-ui.requestHeaders +- caller: src.extractors.runtime-cycle.results + callee: src.extractors.runtime-cycle.probeRecord call_type: resolved -- caller: src.watch.watcher.scanTree - callee: src.watch.watcher.relative +- caller: src.extractors.runtime-cycle.results + callee: src.extractors.runtime-cycle.boundedArray call_type: resolved -- caller: src.watch.watcher.maxFiles - callee: src.watch.watcher.relative +- caller: src.extractors.runtime-cycle.results + callee: src.extractors.runtime-cycle.label call_type: resolved -- caller: src.watch.watcher.maxFiles - callee: src.watch.watcher.visit +- caller: src.extractors.runtime-cycle.results + callee: src.extractors.runtime-cycle.violationRecord call_type: resolved -- caller: src.watch.watcher.absoluteRoot - callee: src.watch.watcher.relative +- caller: src.extractors.runtime-cycle.label + callee: src.extractors.runtime-cycle.text call_type: resolved -- caller: src.watch.watcher.absoluteRoot - callee: src.watch.watcher.visit +- caller: src.extractors.runtime-cycle.probeRecord + callee: src.extractors.runtime-cycle.label call_type: resolved -- caller: src.watch.watcher.visit - callee: src.watch.watcher.relative +- caller: src.extractors.runtime-cycle.probeRecord + callee: src.extractors.runtime-cycle.text call_type: resolved -- caller: src.watch.watcher.absolute - callee: src.watch.watcher.visit +- caller: src.extractors.runtime-cycle.probeRecord + callee: src.extractors.runtime-cycle.watched call_type: resolved -- caller: src.watch.watcher.relative - callee: src.watch.watcher.visit +- caller: src.extractors.runtime-cycle.probeRecord + callee: src.extractors.runtime-cycle.tags call_type: resolved -- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - callee: src.watch.watcher.now +- caller: src.extractors.runtime-cycle.probeRecord + callee: src.extractors.runtime-cycle.factsMetadata call_type: resolved -- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - callee: src.watch.watcher.scanTree +- caller: src.extractors.runtime-cycle.violationRecord + callee: src.extractors.runtime-cycle.label call_type: resolved -- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - callee: src.watch.watcher.emit +- caller: src.extractors.runtime-cycle.violationRecord + callee: src.extractors.runtime-cycle.text call_type: resolved -- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - callee: src.watch.watcher.generate +- caller: src.extractors.runtime-cycle.violationRecord + callee: src.extractors.runtime-cycle.watched call_type: resolved -- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - callee: src.watch.watcher.sleep +- caller: src.extractors.runtime-cycle.violationRecord + callee: src.extractors.runtime-cycle.tags call_type: resolved -- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - callee: src.watch.watcher.diffSnapshots +- caller: src.extractors.runtime-cycle.violationRecord + callee: src.extractors.runtime-cycle.jsonScalar call_type: resolved -- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - callee: src.watch.watcher.now +- caller: src.extractors.runtime-cycle.driftRecord + callee: src.extractors.runtime-cycle.text call_type: resolved -- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - callee: src.watch.watcher.scanTree +- caller: src.extractors.runtime-cycle.driftRecord + callee: src.extractors.runtime-cycle.tags call_type: resolved -- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - callee: src.watch.watcher.emit +- caller: src.extractors.runtime-cycle.driftRecord + callee: src.extractors.runtime-cycle.jsonScalar call_type: resolved -- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - callee: src.watch.watcher.generate +- caller: src.extractors.runtime-cycle.proposalRecord + callee: src.extractors.runtime-cycle.text call_type: resolved -- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - callee: src.watch.watcher.sleep +- caller: src.extractors.runtime-cycle.proposalRecord + callee: src.extractors.runtime-cycle.proposalAction call_type: resolved -- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - callee: src.watch.watcher.diffSnapshots +- caller: src.extractors.runtime-cycle.factsMetadata + callee: src.extractors.runtime-cycle.jsonScalar call_type: resolved -- caller: src.watch.watcher.watchRepository - callee: src.watch.watcher.now +- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE + callee: src.extractors.configuration.isConfigurationPath call_type: resolved -- caller: src.watch.watcher.watchRepository - callee: src.watch.watcher.scanTree +- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE + callee: src.extractors.configuration.configurationRecords call_type: resolved -- caller: src.watch.watcher.watchRepository - callee: src.watch.watcher.emit +- caller: src.extractors.configuration.extractConfigurationIntent + callee: src.extractors.configuration.isConfigurationPath call_type: resolved -- caller: src.watch.watcher.watchRepository - callee: src.watch.watcher.generate +- caller: src.extractors.configuration.extractConfigurationIntent + callee: src.extractors.configuration.configurationRecords call_type: resolved -- caller: src.watch.watcher.watchRepository - callee: src.watch.watcher.sleep +- caller: src.extractors.configuration.files + callee: src.extractors.configuration.configurationRecords call_type: resolved -- caller: src.watch.watcher.watchRepository - callee: src.watch.watcher.diffSnapshots +- caller: src.extractors.configuration.relative + callee: src.extractors.configuration.configurationRecords call_type: resolved -- caller: src.watch.watcher.result - callee: src.watch.watcher.emit +- caller: src.extractors.configuration.configurationRecords + callee: src.extractors.configuration.dockerEntries call_type: resolved -- caller: src.watch.watcher.result - callee: src.watch.watcher.now +- caller: src.extractors.configuration.configurationRecords + callee: src.extractors.configuration.jsonEntries call_type: resolved -- caller: src.watch.watcher.snapshot - callee: src.watch.watcher.emit +- caller: src.extractors.configuration.configurationRecords + callee: src.extractors.configuration.tomlEntries call_type: resolved -- caller: src.watch.watcher.lastReportStartedAt - callee: src.watch.watcher.now +- caller: src.extractors.configuration.configurationRecords + callee: src.extractors.configuration.yamlOrAssignmentEntries call_type: resolved -- caller: src.watch.watcher.lastReportStartedAt - callee: src.watch.watcher.generate +- caller: src.extractors.configuration.configurationRecords + callee: src.extractors.configuration.fileAggregate call_type: resolved -- caller: src.watch.watcher.pending - callee: src.watch.watcher.now +- caller: src.extractors.configuration.entries + callee: src.extractors.configuration.fileAggregate call_type: resolved -- caller: src.watch.watcher.pending - callee: src.watch.watcher.generate +- caller: src.extractors.configuration.bounded + callee: src.extractors.configuration.fileAggregate call_type: resolved -- caller: src.watch.watcher.current - callee: src.watch.watcher.describeDelta +- caller: src.extractors.configuration.fileAggregate + callee: src.extractors.configuration.configurationFormat call_type: resolved -- caller: src.watch.watcher.current - callee: src.watch.watcher.emit +- caller: src.extractors.configuration.jsonEntries + callee: src.extractors.configuration.findKeyLine call_type: resolved -- caller: src.watch.watcher.delta - callee: src.watch.watcher.describeDelta +- caller: src.extractors.configuration.parsed + callee: src.extractors.configuration.findKeyLine call_type: resolved -- caller: src.watch.watcher.delta - callee: src.watch.watcher.emit +- caller: src.extractors.configuration.lines + callee: src.extractors.configuration.findKeyLine call_type: resolved -- caller: src.watch.watcher.waitMs - callee: src.watch.watcher.emit +- caller: src.extractors.configuration.tomlEntries + callee: src.extractors.configuration.entries call_type: resolved -- caller: src.watch.watcher.generate - callee: src.watch.watcher.emit +- caller: src.extractors.configuration.tomlEntries + callee: src.extractors.configuration.match call_type: resolved -- caller: src.watch.watcher.generate - callee: src.watch.watcher.now +- caller: src.extractors.configuration.tomlEntries + callee: src.extractors.configuration.entry call_type: resolved -- caller: src.watch.watcher.generate - callee: src.watch.watcher.runReport +- caller: src.extractors.configuration.tomlEntries + callee: src.extractors.configuration.uniqueEntries call_type: resolved -- caller: src.watch.watcher.generate - callee: src.watch.watcher.scanTree +- caller: src.extractors.configuration.line + callee: src.extractors.configuration.entry call_type: resolved -- caller: src.watch.watcher.startedAt - callee: src.watch.watcher.runReport +- caller: src.extractors.configuration.heading + callee: src.extractors.configuration.entry call_type: resolved -- caller: src.watch.watcher.startedAt - callee: src.watch.watcher.emit +- caller: src.extractors.configuration.pair + callee: src.extractors.configuration.entry call_type: resolved -- caller: src.watch.watcher.startedAt - callee: src.watch.watcher.now +- caller: src.extractors.configuration.yamlOrAssignmentEntries + callee: src.extractors.configuration.entries call_type: resolved -- caller: src.watch.watcher.defaultSleep - callee: src.watch.watcher.finish +- caller: src.extractors.configuration.yamlOrAssignmentEntries + callee: src.extractors.configuration.match call_type: resolved -- caller: src.watch.watcher.timer - callee: src.watch.watcher.finish +- caller: src.extractors.configuration.yamlOrAssignmentEntries + callee: src.extractors.configuration.entry call_type: resolved -- caller: src.watch.watcher.onAbort - callee: src.watch.watcher.finish +- caller: src.extractors.configuration.yamlOrAssignmentEntries + callee: src.extractors.configuration.uniqueEntries call_type: resolved -- caller: src.tf.classifier.dynamicImport - callee: src.tf.classifier.importer +- caller: src.extractors.configuration.dockerEntries + callee: src.extractors.configuration.match call_type: resolved -- caller: src.tf.classifier.loadClassifier - callee: src.tf.classifier.dynamicImport +- caller: src.extractors.docs-schema.target + callee: src.extractors.docs-schema.strings call_type: resolved -- caller: src.tf.classifier.loadClassifier - callee: src.tf.classifier.loadAssets +- caller: src.extractors.docs-schema.documentRecord + callee: src.extractors.docs-schema.strings call_type: resolved -- caller: src.tf.classifier.classifyAction - callee: src.tf.classifier.loadClassifier +- caller: src.extractors.docs-schema.documentRecord + callee: src.extractors.docs-schema.target call_type: resolved -- caller: src.tf.classifier.classifyAction - callee: src.tf.classifier.vectorize +- caller: src.extractors.docs-schema.documentResponseSchema + callee: src.extractors.docs-schema.documentResponseContract call_type: resolved -- caller: src.synthesis.validation.validateAndClassifyTodoProposals - callee: src.synthesis.validation.duplicateEvidence +- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited + callee: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions call_type: resolved -- caller: src.synthesis.validation.validateAndClassifyTodoProposals - callee: src.synthesis.validation.dependencyFirstPriorityOrder +- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited + callee: src.extractors.nl-llm.NlAttemptError.markDeterministic call_type: resolved -- caller: src.synthesis.validation.duplicateEvidence - callee: src.synthesis.validation.words +- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited + callee: src.extractors.nl-llm.NlAttemptError.audit call_type: resolved -- caller: src.synthesis.validation.duplicateEvidence - callee: src.synthesis.validation.intersects +- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited + callee: src.extractors.nl-llm.NlAttemptError.fallbackOrThrow call_type: resolved -- caller: src.synthesis.validation.duplicateEvidence - callee: src.synthesis.validation.jaccard +- caller: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions + callee: src.extractors.nl-llm.NlAttemptError.markDeterministic call_type: resolved -- caller: src.synthesis.validation.proposalWords - callee: src.synthesis.validation.words +- caller: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions + callee: src.extractors.nl-llm.NlAttemptError.audit call_type: resolved -- caller: src.synthesis.validation.target - callee: src.synthesis.validation.jaccard +- caller: src.extractors.nl-llm.NlLlmRequiredError.startedAt + callee: src.extractors.nl-llm.NlAttemptError.markDeterministic call_type: resolved -- caller: src.synthesis.validation.target - callee: src.synthesis.validation.words +- caller: src.extractors.nl-llm.NlLlmRequiredError.startedAt + callee: src.extractors.nl-llm.NlAttemptError.audit call_type: resolved -- caller: src.synthesis.validation.sharedTicket - callee: src.synthesis.validation.jaccard +- caller: src.extractors.nl-llm.NlLlmRequiredError.result + callee: src.extractors.nl-llm.NlAttemptError.markDeterministic call_type: resolved -- caller: src.synthesis.validation.sharedTicket - callee: src.synthesis.validation.words +- caller: src.extractors.nl-llm.NlLlmRequiredError.result + callee: src.extractors.nl-llm.NlAttemptError.audit call_type: resolved -- caller: src.synthesis.validation.sharedSymbol - callee: src.synthesis.validation.jaccard +- caller: src.extractors.nl-llm.NlLlmRequiredError.client + callee: src.extractors.nl-llm.NlAttemptError.fallbackOrThrow call_type: resolved -- caller: src.synthesis.validation.sharedSymbol - callee: src.synthesis.validation.words +- caller: src.extractors.nl-llm.NlLlmRequiredError.absolute + callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection call_type: resolved -- caller: src.synthesis.validation.sharedPath - callee: src.synthesis.validation.jaccard +- caller: src.extractors.nl-llm.NlLlmRequiredError.body + callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection call_type: resolved -- caller: src.synthesis.validation.sharedPath - callee: src.synthesis.validation.words +- caller: src.extractors.nl-llm.NlLlmRequiredError.sourcePath + callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection call_type: resolved -- caller: src.synthesis.validation.similarity - callee: src.synthesis.validation.jaccard +- caller: src.extractors.nl-llm.NlLlmRequiredError.maxLine + callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection call_type: resolved -- caller: src.synthesis.validation.similarity - callee: src.synthesis.validation.words +- caller: src.extractors.nl-llm.NlLlmRequiredError.prompt + callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection call_type: resolved -- caller: src.synthesis.todo-patch.createTodoPatch - callee: src.synthesis.todo-patch.sameArray +- caller: src.extractors.nl-llm.NlAttemptError.failedAudit + callee: src.extractors.nl-llm.NlAttemptError.audit call_type: resolved -- caller: src.synthesis.todo-patch.selected - callee: src.synthesis.todo-patch.object +- caller: src.extractors.nl-llm.NlAttemptError.deterministic + callee: src.extractors.nl-llm.NlAttemptError.fallback call_type: resolved -- caller: src.synthesis.todo-patch.selected - callee: src.synthesis.todo-patch.exactKeys +- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord + callee: src.extractors.nl-llm.NlAttemptError.sourceExcerpt call_type: resolved -- caller: src.synthesis.todo-patch.selected - callee: src.synthesis.todo-patch.uniqueIds +- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord + callee: src.extractors.nl-llm.NlAttemptError.resolveAction call_type: resolved -- caller: src.synthesis.todo-patch.selected - callee: src.synthesis.todo-patch.uniqueStrings +- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord + callee: src.extractors.nl-llm.NlAttemptError.nonEmptyText call_type: resolved -- caller: src.synthesis.todo-patch.orderedSelected - callee: src.synthesis.todo-patch.sameArray +- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord + callee: src.extractors.nl-llm.NlAttemptError.resolveObject call_type: resolved -- caller: src.synthesis.todo-patch.markdown - callee: src.synthesis.todo-patch.normalizePath +- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord + callee: src.extractors.nl-llm.NlAttemptError.allowedModality call_type: resolved -- caller: src.synthesis.todo-patch.markdown - callee: src.synthesis.todo-patch.diagnosticReportFingerprint +- caller: src.extractors.nl-llm.NlAttemptError.lines + callee: src.extractors.nl-llm.NlAttemptError.sourceExcerpt call_type: resolved -- caller: src.synthesis.todo-patch.renderTodoPatchMarkdown - callee: src.synthesis.todo-patch.inline +- caller: src.extractors.nl-llm.NlAttemptError.action + callee: src.extractors.nl-llm.NlAttemptError.resolveObject call_type: resolved -- caller: src.synthesis.todo-patch.renderTodoPatchMarkdown - callee: src.synthesis.todo-patch.renderTargets +- caller: src.extractors.nl-llm.NlAttemptError.normalizedText + callee: src.extractors.nl-llm.NlAttemptError.resolveObject call_type: resolved -- caller: src.synthesis.todo-patch.renderTodoPatchMarkdown - callee: src.synthesis.todo-patch.renderIds +- caller: src.extractors.nl-llm.NlAttemptError.statementText + callee: src.extractors.nl-llm.NlAttemptError.allowedModality call_type: resolved -- caller: src.synthesis.todo-patch.writeTodoPatchArtifacts - callee: src.synthesis.todo-patch.createTodoPatch +- caller: src.extractors.nl-llm.NlAttemptError.sourceExcerpt + callee: src.extractors.nl-llm.NlAttemptError.clampLine call_type: resolved -- caller: src.synthesis.todo-patch.applyTodoPatch - callee: src.synthesis.todo-patch.assertTodoPatchArtifact +- caller: src.extractors.nl-llm.NlAttemptError.resolveAction + callee: src.extractors.nl-llm.NlAttemptError.allowedAction call_type: resolved -- caller: src.synthesis.todo-patch.applyTodoPatch - callee: src.synthesis.todo-patch.assertApproval +- caller: src.extractors.nl-llm.NlAttemptError.isPlaceholder + callee: src.extractors.nl-llm.NlAttemptError.nonEmptyText call_type: resolved -- caller: src.synthesis.todo-patch.current - callee: src.synthesis.todo-patch.assertReceipt +- caller: src.extractors.nl-llm.NlAttemptError.resolveObject + callee: src.extractors.nl-llm.NlAttemptError.isPlaceholder call_type: resolved -- caller: src.synthesis.todo-patch.now - callee: src.synthesis.todo-patch.appendPatch +- caller: src.extractors.nl-llm.NlAttemptError.resolveObject + callee: src.extractors.nl-llm.NlAttemptError.nonEmptyText call_type: resolved -- caller: src.synthesis.todo-patch.now - callee: src.synthesis.todo-patch.atomicWrite +- caller: src.extractors.nl-llm.NlAttemptError.NL_RECORD_CONTRACT + callee: src.extractors.nl-llm.NlAttemptError.nlStrings call_type: resolved -- caller: src.synthesis.todo-patch.now - callee: src.synthesis.todo-patch.wasAlreadyAppended +- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent + callee: src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient call_type: resolved -- caller: src.synthesis.todo-patch.currentHash - callee: src.synthesis.todo-patch.appendPatch +- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent + callee: src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks call_type: resolved -- caller: src.synthesis.todo-patch.currentHash - callee: src.synthesis.todo-patch.atomicWrite +- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent + callee: src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget call_type: resolved -- caller: src.synthesis.todo-patch.currentHash - callee: src.synthesis.todo-patch.wasAlreadyAppended +- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent + callee: src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt call_type: resolved -- caller: src.synthesis.todo-patch.result - callee: src.synthesis.todo-patch.appendPatch +- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent + callee: src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk call_type: resolved -- caller: src.synthesis.todo-patch.result - callee: src.synthesis.todo-patch.atomicWrite +- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks + callee: src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage call_type: resolved -- caller: src.synthesis.todo-patch.result - callee: src.synthesis.todo-patch.wasAlreadyAppended +- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.files + callee: src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage call_type: resolved -- caller: src.synthesis.todo-patch.applied - callee: src.synthesis.todo-patch.appendPatch +- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk + callee: src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage call_type: resolved -- caller: src.synthesis.todo-patch.applied - callee: src.synthesis.todo-patch.atomicWrite +- caller: src.extractors.changelog.extractChangelog + callee: src.extractors.changelog.changelogAction call_type: resolved -- caller: src.synthesis.todo-patch.applied - callee: src.synthesis.todo-patch.wasAlreadyAppended +- caller: src.extractors.changelog.body + callee: src.extractors.changelog.changelogAction call_type: resolved -- caller: src.synthesis.todo-patch.recovered - callee: src.synthesis.todo-patch.appendPatch +- caller: src.extractors.changelog.relative + callee: src.extractors.changelog.changelogAction call_type: resolved -- caller: src.synthesis.todo-patch.recovered - callee: src.synthesis.todo-patch.atomicWrite +- caller: src.extractors.changelog.lines + callee: src.extractors.changelog.changelogAction call_type: resolved -- caller: src.synthesis.todo-patch.recovered - callee: src.synthesis.todo-patch.wasAlreadyAppended +- caller: src.extractors.docs-deterministic.extractDocumentationBaseline + callee: src.extractors.docs-deterministic.convertDocument call_type: resolved -- caller: src.synthesis.todo-patch.assertTodoPatchArtifact - callee: src.synthesis.todo-patch.object +- caller: src.extractors.docs-deterministic.extractDocumentationBaseline + callee: src.extractors.docs-deterministic.primePathMapper call_type: resolved -- caller: src.synthesis.todo-patch.assertTodoPatchArtifact - callee: src.synthesis.todo-patch.exactKeys +- caller: src.extractors.docs-deterministic.root + callee: src.extractors.docs-deterministic.convertDocument call_type: resolved -- caller: src.synthesis.todo-patch.assertTodoPatchArtifact - callee: src.synthesis.todo-patch.isoDate +- caller: src.extractors.docs-deterministic.root + callee: src.extractors.docs-deterministic.primePathMapper call_type: resolved -- caller: src.synthesis.todo-patch.assertTodoPatchArtifact - callee: src.synthesis.todo-patch.hash +- caller: src.extractors.docs-deterministic.resolver + callee: src.extractors.docs-deterministic.convertDocument call_type: resolved -- caller: src.synthesis.todo-patch.assertTodoPatchArtifact - callee: src.synthesis.todo-patch.nonBlank +- caller: src.extractors.docs-deterministic.resolver + callee: src.extractors.docs-deterministic.primePathMapper call_type: resolved -- caller: src.synthesis.todo-patch.assertTodoPatchArtifact - callee: src.synthesis.todo-patch.uniqueIds +- caller: src.extractors.docs-deterministic.convertDocument + callee: src.extractors.docs-deterministic.handleDocumentationLine call_type: resolved -- caller: src.synthesis.todo-patch.artifact - callee: src.synthesis.todo-patch.object +- caller: src.extractors.docs-deterministic.handleDocumentationLine + callee: src.extractors.docs-deterministic.parseFenceBlock call_type: resolved -- caller: src.synthesis.todo-patch.artifact - callee: src.synthesis.todo-patch.exactKeys +- caller: src.extractors.docs-deterministic.handleDocumentationLine + callee: src.extractors.docs-deterministic.parseSectionHeading call_type: resolved -- caller: src.synthesis.todo-patch.artifact - callee: src.synthesis.todo-patch.uniqueIds +- caller: src.extractors.docs-deterministic.handleDocumentationLine + callee: src.extractors.docs-deterministic.parseBulletStatement call_type: resolved -- caller: src.synthesis.todo-patch.artifact - callee: src.synthesis.todo-patch.uniqueStrings +- caller: src.extractors.docs-deterministic.handleDocumentationLine + callee: src.extractors.docs-deterministic.parseParagraphStatement call_type: resolved -- caller: src.synthesis.todo-patch.sourceTodo - callee: src.synthesis.todo-patch.object +- caller: src.extractors.docs-deterministic.parseFenceBlock + callee: src.extractors.docs-deterministic.match call_type: resolved -- caller: src.synthesis.todo-patch.sourceTodo - callee: src.synthesis.todo-patch.exactKeys +- caller: src.extractors.docs-deterministic.parseFenceBlock + callee: src.extractors.docs-deterministic.codeBlockRecord call_type: resolved -- caller: src.synthesis.todo-patch.sourceTodo - callee: src.synthesis.todo-patch.uniqueIds +- caller: src.extractors.docs-deterministic.marker + callee: src.extractors.docs-deterministic.codeBlockRecord call_type: resolved -- caller: src.synthesis.todo-patch.sourceTodo - callee: src.synthesis.todo-patch.uniqueStrings +- caller: src.extractors.docs-deterministic.parseSectionHeading + callee: src.extractors.docs-deterministic.match call_type: resolved -- caller: src.synthesis.todo-patch.duplicates - callee: src.synthesis.todo-patch.object +- caller: src.extractors.docs-deterministic.parseSectionHeading + callee: src.extractors.docs-deterministic.statementRecord call_type: resolved -- caller: src.synthesis.todo-patch.duplicates - callee: src.synthesis.todo-patch.exactKeys +- caller: src.extractors.docs-deterministic.heading + callee: src.extractors.docs-deterministic.match call_type: resolved -- caller: src.synthesis.todo-patch.duplicates - callee: src.synthesis.todo-patch.uniqueIds +- caller: src.extractors.docs-deterministic.parseBulletStatement + callee: src.extractors.docs-deterministic.match call_type: resolved -- caller: src.synthesis.todo-patch.duplicates - callee: src.synthesis.todo-patch.uniqueStrings +- caller: src.extractors.docs-deterministic.parseBulletStatement + callee: src.extractors.docs-deterministic.qualifyingStatement call_type: resolved -- caller: src.synthesis.todo-patch.classified - callee: src.synthesis.todo-patch.object +- caller: src.extractors.docs-deterministic.parseParagraphStatement + callee: src.extractors.docs-deterministic.readParagraph call_type: resolved -- caller: src.synthesis.todo-patch.classified - callee: src.synthesis.todo-patch.exactKeys +- caller: src.extractors.docs-deterministic.parseParagraphStatement + callee: src.extractors.docs-deterministic.qualifyingStatement call_type: resolved -- caller: src.synthesis.todo-patch.classified - callee: src.synthesis.todo-patch.uniqueIds +- caller: src.extractors.docs-deterministic.action + callee: src.extractors.docs-deterministic.targetsOf call_type: resolved -- caller: src.synthesis.todo-patch.classified - callee: src.synthesis.todo-patch.uniqueStrings +- caller: src.extractors.markdown-paths.createMarkdownPathResolver + callee: src.extractors.markdown-paths.buildBasenameIndex call_type: resolved -- caller: src.synthesis.todo-patch.assertApproval - callee: src.synthesis.todo-patch.nonBlank +- caller: src.extractors.markdown-paths.createMarkdownPathResolver + callee: src.extractors.markdown-paths.headingScopes call_type: resolved -- caller: src.synthesis.todo-patch.assertReceipt - callee: src.synthesis.todo-patch.sameArray +- caller: src.extractors.markdown-paths.createMarkdownPathResolver + callee: src.extractors.markdown-paths.isRepositoryPath call_type: resolved -- caller: src.synthesis.todo-patch.assertReceipt - callee: src.synthesis.todo-patch.nonBlank +- caller: src.extractors.markdown-paths.createMarkdownPathResolver + callee: src.extractors.markdown-paths.basenames call_type: resolved -- caller: src.synthesis.todo-patch.assertReceipt - callee: src.synthesis.todo-patch.isoDate +- caller: src.extractors.markdown-paths.repositoryRoot + callee: src.extractors.markdown-paths.headingScopes call_type: resolved -- caller: src.synthesis.todo-patch.renderTargets - callee: src.synthesis.todo-patch.inline +- caller: src.extractors.markdown-paths.repositoryRoot + callee: src.extractors.markdown-paths.isRepositoryPath call_type: resolved -- caller: src.synthesis.todo-patch.rendered - callee: src.synthesis.todo-patch.inline +- caller: src.extractors.markdown-paths.repositoryRoot + callee: src.extractors.markdown-paths.basenames call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions +- caller: src.extractors.markdown-paths.basenames + callee: src.extractors.markdown-paths.headingScopes call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.fallbackOrThrow +- caller: src.extractors.markdown-paths.basenames + callee: src.extractors.markdown-paths.isRepositoryPath call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.readPrompt +- caller: src.extractors.markdown-paths.headingDirectories + callee: src.extractors.markdown-paths.isRepositoryPath call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection +- caller: src.extractors.markdown-paths.headingDirectories + callee: src.extractors.markdown-paths.basenames call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions +- caller: src.extractors.markdown-paths.buildBasenameIndex + callee: src.extractors.markdown-paths.createBasenameIndexState call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.client - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.fallbackOrThrow +- caller: src.extractors.markdown-paths.buildBasenameIndex + callee: src.extractors.markdown-paths.readBasenameDirectoryEntries call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection +- caller: src.extractors.markdown-paths.buildBasenameIndex + callee: src.extractors.markdown-paths.isNestedCheckout call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection +- caller: src.extractors.markdown-paths.buildBasenameIndex + callee: src.extractors.markdown-paths.scanDirectoryForBasenames call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.generationMetadata +- caller: src.extractors.markdown-paths.index + callee: src.extractors.markdown-paths.readBasenameDirectoryEntries call_type: resolved -- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.fallbackOrThrow - callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesisAudit +- caller: src.extractors.markdown-paths.index + callee: src.extractors.markdown-paths.isNestedCheckout call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse - callee: src.synthesis.task-synthesis-materialize.normalizeLocalKeys +- caller: src.extractors.markdown-paths.index + callee: src.extractors.markdown-paths.scanDirectoryForBasenames call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.markdown-paths.state + callee: src.extractors.markdown-paths.readBasenameDirectoryEntries call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.markdown-paths.state + callee: src.extractors.markdown-paths.isNestedCheckout call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.parsed - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.markdown-paths.state + callee: src.extractors.markdown-paths.scanDirectoryForBasenames call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.parsed - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.markdown-paths.scanDirectoryForBasenames + callee: src.extractors.markdown-paths.addBasenameIndexMatch call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.proposalKeys - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.docs-record.OBJECT_PLACEHOLDERS + callee: src.extractors.docs-record.resolveObject call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.proposalKeys - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.docs-record.OBJECT_PLACEHOLDERS + callee: src.extractors.docs-record.anchorToSource call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusions - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.docs-record.OBJECT_PLACEHOLDERS + callee: src.extractors.docs-record.resolveTarget call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusions - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.docs-record.OBJECT_PLACEHOLDERS + callee: src.extractors.docs-record.resolveAction call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.diagnosticIds - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.docs-record.OBJECT_PLACEHOLDERS + callee: src.extractors.docs-record.resolveModality call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.docs-record.OBJECT_PLACEHOLDERS + callee: src.extractors.docs-record.allowedLifecycle call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey - callee: src.synthesis.task-synthesis-materialize.normalizeRawTarget +- caller: src.extractors.docs-record.OBJECT_PLACEHOLDERS + callee: src.extractors.docs-record.linesFromChunk call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey - callee: src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria +- caller: src.extractors.docs-record.toDocumentIntentRecord + callee: src.extractors.docs-record.resolveObject call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey - callee: src.synthesis.task-synthesis-materialize.mapKeys +- caller: src.extractors.docs-record.toDocumentIntentRecord + callee: src.extractors.docs-record.anchorToSource call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.docs-record.toDocumentIntentRecord + callee: src.extractors.docs-record.resolveTarget call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionByKey - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.docs-record.toDocumentIntentRecord + callee: src.extractors.docs-record.resolveAction call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionByKey - callee: src.synthesis.task-synthesis-materialize.normalizeRawTarget +- caller: src.extractors.docs-record.toDocumentIntentRecord + callee: src.extractors.docs-record.resolveModality call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionByKey - callee: src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria +- caller: src.extractors.docs-record.toDocumentIntentRecord + callee: src.extractors.docs-record.allowedLifecycle call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionByKey - callee: src.synthesis.task-synthesis-materialize.mapKeys +- caller: src.extractors.docs-record.toDocumentIntentRecord + callee: src.extractors.docs-record.linesFromChunk call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.conclusionByKey - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.docs-record.statementText + callee: src.extractors.docs-record.resolveObject call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.proposalDrafts - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.docs-record.target + callee: src.extractors.docs-record.allowedLifecycle call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.proposalDrafts - callee: src.synthesis.task-synthesis-materialize.normalizeRawTarget +- caller: src.extractors.docs-record.target + callee: src.extractors.docs-record.linesFromChunk call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.proposalDrafts - callee: src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria +- caller: src.extractors.docs-record.action + callee: src.extractors.docs-record.allowedLifecycle call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.proposalDrafts - callee: src.synthesis.task-synthesis-materialize.mapKeys +- caller: src.extractors.docs-record.action + callee: src.extractors.docs-record.linesFromChunk call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.proposalDrafts - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.docs-record.modality + callee: src.extractors.docs-record.allowedLifecycle call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.proposalIdByKey - callee: src.synthesis.task-synthesis-materialize.mapKeys +- caller: src.extractors.docs-record.modality + callee: src.extractors.docs-record.linesFromChunk call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.proposals - callee: src.synthesis.task-synthesis-materialize.mapKeys +- caller: src.extractors.docs-record.resolveObject + callee: src.extractors.docs-record.isPlaceholder call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.keys - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.docs-record.fallback + callee: src.extractors.docs-record.isPlaceholder call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.mapKeys - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.docs-record.anchorToSource + callee: src.extractors.docs-record.clampLine call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.mapKeys - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.docs-record.anchorToSource + callee: src.extractors.docs-record.keywordOverlap call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.sortedUnique - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.docs-record.resolveTarget + callee: src.extractors.docs-record.hasTarget call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.normalizeRawTarget - callee: src.synthesis.task-synthesis-materialize.normalizeStringArray +- caller: src.extractors.docs-record.resolveAction + callee: src.extractors.docs-record.allowedAction call_type: resolved -- caller: src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria - callee: src.synthesis.task-synthesis-materialize.sortedUnique +- caller: src.extractors.docs-record.resolveModality + callee: src.extractors.docs-record.allowedModality call_type: resolved -- caller: src.synthesis.task-synthesis-contract.RAW_CONCLUSION_CONTRACT - callee: src.synthesis.task-synthesis-contract.nonBlank +- caller: src.extractors.todo.extractTodo + callee: src.extractors.todo.match call_type: resolved -- caller: src.synthesis.task-synthesis-contract.RAW_CONCLUSION_CONTRACT - callee: src.synthesis.task-synthesis-contract.taskIds +- caller: src.extractors.todo.body + callee: src.extractors.todo.match call_type: resolved -- caller: src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT - callee: src.synthesis.task-synthesis-contract.nonBlank +- caller: src.extractors.todo.relative + callee: src.extractors.todo.match call_type: resolved -- caller: src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT - callee: src.synthesis.task-synthesis-contract.taskStrings +- caller: src.extractors.todo.lines + callee: src.extractors.todo.match call_type: resolved -- caller: src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT - callee: src.synthesis.task-synthesis-contract.taskIds +- caller: src.extractors.todo.raw + callee: src.extractors.todo.match call_type: resolved -- caller: src.synthesis.code-change-plan.generatedAt - callee: src.synthesis.code-change-plan.createCodeChangeSourcePatch +- caller: src.extractors.todo.heading + callee: src.extractors.todo.match call_type: resolved -- caller: src.synthesis.code-change-plan.conclusions - callee: src.synthesis.code-change-plan.collectTarget +- caller: src.extractors.todo.task + callee: src.extractors.todo.inferOwner call_type: resolved -- caller: src.synthesis.code-change-plan.conclusions - callee: src.synthesis.code-change-plan.buildChanges +- caller: src.extractors.todo.checked + callee: src.extractors.todo.inferOwner call_type: resolved -- caller: src.synthesis.code-change-plan.conclusions - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.todo.block + callee: src.extractors.todo.inferOwner call_type: resolved -- caller: src.synthesis.code-change-plan.conclusions - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.todo.text + callee: src.extractors.todo.inferOwner call_type: resolved -- caller: src.synthesis.code-change-plan.conclusions - callee: src.synthesis.code-change-plan.titleFor +- caller: src.extractors.todo.classified + callee: src.extractors.todo.inferOwner call_type: resolved -- caller: src.synthesis.code-change-plan.conclusions - callee: src.synthesis.code-change-plan.descriptionFor +- caller: src.extractors.todo.action + callee: src.extractors.todo.inferOwner call_type: resolved -- caller: src.synthesis.code-change-plan.proposals - callee: src.synthesis.code-change-plan.collectTarget +- caller: src.extractors.todo.resolvedPaths + callee: src.extractors.todo.inferOwner call_type: resolved -- caller: src.synthesis.code-change-plan.proposals - callee: src.synthesis.code-change-plan.buildChanges +- caller: src.extractors.todo.inferOwner + callee: src.extractors.todo.match call_type: resolved -- caller: src.synthesis.code-change-plan.proposals - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.todo.extractExplicitId + callee: src.extractors.todo.match call_type: resolved -- caller: src.synthesis.code-change-plan.proposals - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.extractCommunicationIntent + callee: src.extractors.communication.extractCommunicationFile call_type: resolved -- caller: src.synthesis.code-change-plan.proposals - callee: src.synthesis.code-change-plan.titleFor +- caller: src.extractors.communication.identityRegistry + callee: src.extractors.communication.extractCommunicationFile call_type: resolved -- caller: src.synthesis.code-change-plan.proposals - callee: src.synthesis.code-change-plan.descriptionFor +- caller: src.extractors.communication.communicationFiles + callee: src.extractors.communication.extractCommunicationFile call_type: resolved -- caller: src.synthesis.code-change-plan.recordsById - callee: src.synthesis.code-change-plan.collectTarget +- caller: src.extractors.communication.extractCommunicationFile + callee: src.extractors.communication.parseEnvelope call_type: resolved -- caller: src.synthesis.code-change-plan.recordsById - callee: src.synthesis.code-change-plan.buildChanges +- caller: src.extractors.communication.extractCommunicationFile + callee: src.extractors.communication.inferIdentity call_type: resolved -- caller: src.synthesis.code-change-plan.recordsById - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.communication.extractCommunicationFile + callee: src.extractors.communication.first call_type: resolved -- caller: src.synthesis.code-change-plan.recordsById - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.extractCommunicationFile + callee: src.extractors.communication.isTicketEvidenceFile call_type: resolved -- caller: src.synthesis.code-change-plan.recordsById - callee: src.synthesis.code-change-plan.titleFor +- caller: src.extractors.communication.envelope + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.recordsById - callee: src.synthesis.code-change-plan.descriptionFor +- caller: src.extractors.communication.inferred + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.proposalsByDiagnostic - callee: src.synthesis.code-change-plan.collectTarget +- caller: src.extractors.communication.explicitEnvelope + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.proposalsByDiagnostic - callee: src.synthesis.code-change-plan.buildChanges +- caller: src.extractors.communication.declaredParticipant + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.proposalsByDiagnostic - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.communication.declaredRole + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.proposalsByDiagnostic - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.declaredParticipantId + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.proposalsByDiagnostic - callee: src.synthesis.code-change-plan.titleFor +- caller: src.extractors.communication.identity + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.proposalsByDiagnostic - callee: src.synthesis.code-change-plan.descriptionFor +- caller: src.extractors.communication.participant + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic - callee: src.synthesis.code-change-plan.collectTarget +- caller: src.extractors.communication.sameStrings + callee: src.extractors.communication.normalize call_type: resolved -- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic - callee: src.synthesis.code-change-plan.buildChanges +- caller: src.extractors.communication.parseEnvelope + callee: src.extractors.communication.match call_type: resolved -- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.communication.parseEnvelope + callee: src.extractors.communication.unquote call_type: resolved -- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.inferIdentity + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic - callee: src.synthesis.code-change-plan.titleFor +- caller: src.extractors.communication.inferIdentity + callee: src.extractors.communication.match call_type: resolved -- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic - callee: src.synthesis.code-change-plan.descriptionFor +- caller: src.extractors.communication.inferIdentity + callee: src.extractors.communication.isCommunicationType call_type: resolved -- caller: src.synthesis.code-change-plan.candidates - callee: src.synthesis.code-change-plan.collectTarget +- caller: src.extractors.communication.fileParts + callee: src.extractors.communication.isCommunicationType call_type: resolved -- caller: src.synthesis.code-change-plan.candidates - callee: src.synthesis.code-change-plan.buildChanges +- caller: src.extractors.communication.nestedRoleIndex + callee: src.extractors.communication.isCommunicationType call_type: resolved -- caller: src.synthesis.code-change-plan.candidates - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.communication.nestedRole + callee: src.extractors.communication.isCommunicationType call_type: resolved -- caller: src.synthesis.code-change-plan.candidates - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.nestedParticipant + callee: src.extractors.communication.isCommunicationType call_type: resolved -- caller: src.synthesis.code-change-plan.candidates - callee: src.synthesis.code-change-plan.titleFor +- caller: src.extractors.communication.isTicketEvidenceFile + callee: src.extractors.communication.basename call_type: resolved -- caller: src.synthesis.code-change-plan.candidates - callee: src.synthesis.code-change-plan.descriptionFor +- caller: src.extractors.communication.communicationSegments + callee: src.extractors.communication.isCommunicationNoise call_type: resolved -- caller: src.synthesis.code-change-plan.relatedRecords - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.communicationSegments + callee: src.extractors.communication.match call_type: resolved -- caller: src.synthesis.code-change-plan.matchingProposals - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.communicationSegments + callee: src.extractors.communication.flush call_type: resolved -- caller: src.synthesis.code-change-plan.matchingConclusions - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.flush + callee: src.extractors.communication.isCommunicationNoise call_type: resolved -- caller: src.synthesis.code-change-plan.target - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.item + callee: src.extractors.communication.isCommunicationNoise call_type: resolved -- caller: src.synthesis.code-change-plan.changes - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.communication.raw + callee: src.extractors.communication.match call_type: resolved -- caller: src.synthesis.code-change-plan.planHash - callee: src.synthesis.code-change-plan.confidenceFor +- caller: src.extractors.communication.heading + callee: src.extractors.communication.match call_type: resolved -- caller: src.synthesis.code-change-plan.planIds - callee: src.synthesis.code-change-plan.evaluateCodeChangeAcceptance +- caller: src.extractors.communication.normalizeType + callee: src.extractors.communication.isCommunicationType call_type: resolved -- caller: src.synthesis.code-change-plan.acceptances - callee: src.synthesis.code-change-plan.evaluateCodeChangeAcceptance +- caller: src.extractors.communication.listValue + callee: src.extractors.communication.unquote call_type: resolved -- caller: src.synthesis.code-change-plan.acceptedCount - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.git.extractGitIntent + callee: src.extractors.git.isGitWorkTree call_type: resolved -- caller: src.synthesis.code-change-plan.indexProposalsByDiagnostic - callee: src.synthesis.code-change-plan.set +- caller: src.extractors.git.extractGitIntent + callee: src.extractors.git.extractRepositoryGitIntent call_type: resolved -- caller: src.synthesis.code-change-plan.index - callee: src.synthesis.code-change-plan.set +- caller: src.extractors.git.extractGitIntent + callee: src.extractors.git.discoverGitRepositories call_type: resolved -- caller: src.synthesis.code-change-plan.indexConclusionsByDiagnostic - callee: src.synthesis.code-change-plan.set +- caller: src.extractors.git.extractGitIntent + callee: src.extractors.git.mapWithConcurrency call_type: resolved -- caller: src.synthesis.code-change-plan.paths - callee: src.synthesis.code-change-plan.exactSourcePatchKeys +- caller: src.extractors.git.root + callee: src.extractors.git.isGitWorkTree call_type: resolved -- caller: src.synthesis.code-change-plan.paths - callee: src.synthesis.code-change-plan.assertSourcePatchStrings +- caller: src.extractors.git.root + callee: src.extractors.git.extractRepositoryGitIntent call_type: resolved -- caller: src.synthesis.code-change-plan.paths - callee: src.synthesis.code-change-plan.normalizeUnifiedDiff +- caller: src.extractors.git.count + callee: src.extractors.git.isGitWorkTree call_type: resolved -- caller: src.synthesis.code-change-plan.buildChanges - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.git.count + callee: src.extractors.git.extractRepositoryGitIntent call_type: resolved -- caller: src.synthesis.code-change-plan.titleFor - callee: src.synthesis.code-change-plan.startsWithImperative +- caller: src.extractors.git.extractRepositoryGitIntent + callee: src.extractors.git.readCommits call_type: resolved -- caller: src.synthesis.code-change-plan.record - callee: src.synthesis.code-change-plan.startsWithImperative +- caller: src.extractors.git.extractRepositoryGitIntent + callee: src.extractors.git.readChangedFiles call_type: resolved -- caller: src.synthesis.code-change-plan.object - callee: src.synthesis.code-change-plan.startsWithImperative +- caller: src.extractors.git.extractRepositoryGitIntent + callee: src.extractors.git.readStats call_type: resolved -- caller: src.synthesis.code-change-plan.acceptanceCriteriaFor - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.git.extractRepositoryGitIntent + callee: src.extractors.git.runGit call_type: resolved -- caller: src.synthesis.code-change-plan.riskFor - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.git.extractRepositoryGitIntent + callee: src.extractors.git.extractChangedSymbols call_type: resolved -- caller: src.synthesis.code-change-plan.rollbackFor - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.git.discoverGitRepositories + callee: src.extractors.git.createDiscoveryState call_type: resolved -- caller: src.synthesis.code-change-plan.createCodeChangeReviewPatch - callee: src.synthesis.code-change-plan.priorityRank +- caller: src.extractors.git.discoverGitRepositories + callee: src.extractors.git.hasMoreDiscoveryWork call_type: resolved -- caller: src.synthesis.code-change-plan.markdown - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.git.discoverGitRepositories + callee: src.extractors.git.takeNextDiscoveryDirectory call_type: resolved -- caller: src.synthesis.code-change-plan.renderCodeChangeReviewMarkdown - callee: src.synthesis.code-change-plan.inline +- caller: src.extractors.git.discoverGitRepositories + callee: src.extractors.git.readDiscoveryEntries call_type: resolved -- caller: src.synthesis.code-change-plan.renderCodeChangeReviewMarkdown - callee: src.synthesis.code-change-plan.renderIds +- caller: src.extractors.git.discoverGitRepositories + callee: src.extractors.git.processDiscoveryDirectory call_type: resolved -- caller: src.synthesis.code-change-plan.rawDiff - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.git.discoverGitRepositories + callee: src.extractors.git.filterDiscoveryChildren call_type: resolved -- caller: src.synthesis.code-change-plan.rawDiff - callee: src.synthesis.code-change-plan.instructionFor +- caller: src.extractors.git.discoverGitRepositories + callee: src.extractors.git.finishDiscovery call_type: resolved -- caller: src.synthesis.code-change-plan.unifiedDiff - callee: src.synthesis.code-change-plan.uniqueSorted +- caller: src.extractors.git.state + callee: src.extractors.git.hasMoreDiscoveryWork call_type: resolved -- caller: src.synthesis.code-change-plan.unifiedDiff - callee: src.synthesis.code-change-plan.instructionFor +- caller: src.extractors.git.state + callee: src.extractors.git.takeNextDiscoveryDirectory call_type: resolved -- caller: src.synthesis.code-change-plan.patchHash - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.git.state + callee: src.extractors.git.readDiscoveryEntries call_type: resolved -- caller: src.synthesis.code-change-plan.createCodeChangeSourcePatchSet - callee: src.synthesis.code-change-plan.createCodeChangeSourcePatch +- caller: src.extractors.git.state + callee: src.extractors.git.processDiscoveryDirectory call_type: resolved -- caller: src.synthesis.code-change-plan.createCodeChangeSourcePatchSet - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.git.state + callee: src.extractors.git.filterDiscoveryChildren call_type: resolved -- caller: src.synthesis.code-change-plan.assertCodeChangeSourcePatch - callee: src.synthesis.code-change-plan.exactSourcePatchKeys +- caller: src.extractors.git.processDiscoveryDirectory + callee: src.extractors.git.resolveDiscoveryPrefix call_type: resolved -- caller: src.synthesis.code-change-plan.assertCodeChangeSourcePatch - callee: src.synthesis.code-change-plan.assertSourcePatchIds +- caller: src.extractors.git.processDiscoveryDirectory + callee: src.extractors.git.gitMarkerState call_type: resolved -- caller: src.synthesis.code-change-plan.assertCodeChangeSourcePatch - callee: src.synthesis.code-change-plan.assertSourcePatchStrings +- caller: src.extractors.git.processDiscoveryDirectory + callee: src.extractors.git.registerDiscoveredRepository call_type: resolved -- caller: src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet - callee: src.synthesis.code-change-plan.exactSourcePatchKeys +- caller: src.extractors.git.registerDiscoveredRepository + callee: src.extractors.git.isGitWorkTree call_type: resolved -- caller: src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet - callee: src.synthesis.code-change-plan.assertCodeChangeSourcePatch +- caller: src.extractors.git.isGitWorkTree + callee: src.extractors.git.runGit call_type: resolved -- caller: src.synthesis.code-change-plan.plansById - callee: src.synthesis.code-change-plan.assertCodeChangeSourcePatch +- caller: src.extractors.git.runGit + callee: src.extractors.git.execFileAsync call_type: resolved -- caller: src.synthesis.code-change-plan.patchIds - callee: src.synthesis.code-change-plan.assertCodeChangeSourcePatch +- caller: src.extractors.git.result + callee: src.extractors.git.execFileAsync call_type: resolved -- caller: src.synthesis.code-change-plan.applyCodeChangeSourcePatch - callee: src.synthesis.code-change-plan.assertCodeChangeSourcePatch +- caller: src.extractors.git.readCommits + callee: src.extractors.git.runGit call_type: resolved -- caller: src.synthesis.code-change-plan.applyCodeChangeSourcePatch - callee: src.synthesis.code-change-plan.assertExistingSourceReceipt +- caller: src.extractors.git.readChangedFiles + callee: src.extractors.git.runGit call_type: resolved -- caller: src.synthesis.code-change-plan.now - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.git.readStats + callee: src.extractors.git.runGit call_type: resolved -- caller: src.synthesis.code-change-plan.fileHashesAfter - callee: src.synthesis.code-change-plan.deterministicGeneration +- caller: src.extractors.docs-chunks.prioritizeDocumentChunks + callee: src.extractors.docs-chunks.chunkPriority call_type: resolved -- caller: src.synthesis.code-change-plan.assertExistingSourceReceipt - callee: src.synthesis.code-change-plan.assertSourceApplyReceipt +- caller: src.extractors.docs-chunks.needles + callee: src.extractors.docs-chunks.chunkPriority call_type: resolved -- caller: src.synthesis.code-change-plan.assertSourceApplyReceipt - callee: src.synthesis.code-change-plan.exactSourcePatchKeys +- caller: src.extractors.docs-chunks.mapConcurrent + callee: src.extractors.docs-chunks.worker call_type: resolved -- caller: src.synthesis.code-change-plan.assertSourceApplyReceipt - callee: src.synthesis.code-change-plan.exactSourcePatchSet +- caller: src.extractors.docs-chunks.index + callee: src.extractors.docs-chunks.worker call_type: resolved -- caller: src.synthesis.code-change-plan.applyUnifiedDiffToText - callee: src.synthesis.code-change-plan.normalizeUnifiedDiff +- caller: src.extractors.docs-chunks.item + callee: src.extractors.docs-chunks.worker call_type: resolved -- caller: src.synthesis.code-change-plan.applyUnifiedDiffToText - callee: src.synthesis.code-change-plan.splitKeep +- caller: src.extractors.docs-chunks.workerCount + callee: src.extractors.docs-chunks.worker call_type: resolved -- caller: src.synthesis.code-change-path.isUsefulCodeChangePath - callee: src.synthesis.code-change-path.isPlannablePath +- caller: src.extractors.docs-chunks.chunkMarkdown + callee: src.extractors.docs-chunks.markdownSections call_type: resolved -- caller: src.summary.summarizer.summarizeGraph - callee: src.summary.summarizer.SummaryAttemptError.assertConclusions +- caller: src.extractors.docs-chunks.chunkMarkdown + callee: src.extractors.docs-chunks.flush call_type: resolved -- caller: src.summary.summarizer.summarizeGraph - callee: src.summary.summarizer.SummaryAttemptError.summaryMode +- caller: src.extractors.docs-chunks.chunkMarkdown + callee: src.extractors.docs-chunks.splitLongSection call_type: resolved -- caller: src.summary.summarizer.summarizeGraph - callee: src.summary.summarizer.SummaryAttemptError.deterministicConclusions +- caller: src.extractors.docs-chunks.sectionLines + callee: src.extractors.docs-chunks.flush call_type: resolved -- caller: src.summary.summarizer.summarizeGraph - callee: src.summary.summarizer.SummaryAttemptError.generationMetadata +- caller: src.extractors.docs-chunks.sectionLines + callee: src.extractors.docs-chunks.splitLongSection call_type: resolved -- caller: src.summary.summarizer.summarizeGraph - callee: src.summary.summarizer.SummaryAttemptError.readPrompt +- caller: src.extractors.docs-chunks.sectionText + callee: src.extractors.docs-chunks.flush call_type: resolved -- caller: src.summary.summarizer.mode - callee: src.summary.summarizer.SummaryAttemptError.deterministicConclusions +- caller: src.extractors.docs-chunks.sectionText + callee: src.extractors.docs-chunks.splitLongSection call_type: resolved -- caller: src.summary.summarizer.mode - callee: src.summary.summarizer.SummaryAttemptError.generationMetadata +- caller: src.extractors.docs-chunks.splitLongSection + callee: src.extractors.docs-chunks.takeLineBatch call_type: resolved -- caller: src.summary.summarizer.client - callee: src.summary.summarizer.SummaryAttemptError.deterministicConclusions +- caller: src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited + callee: src.extractors.markdown-llm.MarkdownAttemptError.stageAudit call_type: resolved -- caller: src.summary.summarizer.client - callee: src.summary.summarizer.SummaryAttemptError.generationMetadata +- caller: src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited + callee: src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic call_type: resolved -- caller: src.summary.summarizer.systemPrompt - callee: src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection +- caller: src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited + callee: src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow call_type: resolved -- caller: src.summary.summarizer.systemPrompt - callee: src.summary.summarizer.SummaryAttemptError.deterministicConclusions +- caller: src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited + callee: src.extractors.markdown-llm.MarkdownAttemptError.readPrompt call_type: resolved -- caller: src.summary.summarizer.systemPrompt - callee: src.summary.summarizer.SummaryAttemptError.generationMetadata +- caller: src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt + callee: src.extractors.markdown-llm.MarkdownAttemptError.stageAudit call_type: resolved -- caller: src.summary.summarizer.payload - callee: src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection +- caller: src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic + callee: src.extractors.markdown-llm.MarkdownAttemptError.stageAudit call_type: resolved -- caller: src.summary.summarizer.payload - callee: src.summary.summarizer.SummaryAttemptError.deterministicConclusions +- caller: src.extractors.markdown-llm.MarkdownLlmRequiredError.client + callee: src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow call_type: resolved -- caller: src.summary.summarizer.payload - callee: src.summary.summarizer.SummaryAttemptError.generationMetadata +- caller: src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes + callee: src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering call_type: resolved -- caller: src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection - callee: src.summary.summarizer.SummaryAttemptError.materializeConclusions +- caller: src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering + callee: src.extractors.markdown-llm.MarkdownAttemptError.enrichMarkdownBatchWithCorrection call_type: resolved -- caller: src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection - callee: src.summary.summarizer.SummaryAttemptError.generationMetadata +- caller: src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering + callee: src.extractors.markdown-llm.MarkdownAttemptError.markdownResponseContract call_type: resolved -- caller: src.summary.summarizer.SummaryAttemptError.conclusions - callee: src.summary.summarizer.SummaryAttemptError.sortedUnique +- caller: src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering + callee: src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch call_type: resolved -- caller: src.summary.summarizer.SummaryAttemptError.materializeConclusions - callee: src.summary.summarizer.SummaryAttemptError.sortedUnique +- caller: src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering + callee: src.extractors.markdown-llm.MarkdownAttemptError.emptyCoverage call_type: resolved -- caller: src.summary.summarizer.SummaryAttemptError.materializeConclusions - callee: src.summary.summarizer.SummaryAttemptError.assertConclusions +- caller: src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch + callee: src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering call_type: resolved -- caller: src.summary.summarizer.SummaryAttemptError.parsed - callee: src.summary.summarizer.SummaryAttemptError.sortedUnique +- caller: src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow + callee: src.extractors.markdown-llm.MarkdownAttemptError.stageAudit call_type: resolved -- caller: src.summary.summarizer.SummaryAttemptError.deterministicConclusions - callee: src.summary.summarizer.SummaryAttemptError.sortedUnique +- caller: src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow + callee: src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic call_type: resolved -- caller: src.summary.summarizer.SummaryAttemptError.deterministicConclusions - callee: src.summary.summarizer.SummaryAttemptError.assertConclusions +- caller: src.extractors.markdown-llm.MarkdownAttemptError.failed + callee: src.extractors.markdown-llm.MarkdownAttemptError.stageAudit call_type: resolved -- caller: src.summary.render.renderSummaryMarkdown - callee: src.summary.render.renderRecords +- caller: src.extractors.markdown-llm.MarkdownAttemptError.markdownResponseContract + callee: src.extractors.markdown-llm.MarkdownAttemptError.strings call_type: resolved -- caller: src.summary.render.renderSummaryMarkdown - callee: src.summary.render.renderConclusion +- caller: src.extractors.markdown-llm.MarkdownAttemptError.enrichment + callee: src.extractors.markdown-llm.MarkdownAttemptError.strings call_type: resolved -- caller: src.summary.render.renderSummaryMarkdown - callee: src.summary.render.recordCitations +- caller: src.extractors.ast.external.runExternalAstAdapter + callee: src.extractors.ast.external.execFileAsync call_type: resolved -- caller: src.summary.render.actions - callee: src.summary.render.recordCitations +- caller: src.extractors.ast.external.result + callee: src.extractors.ast.external.execFileAsync call_type: resolved -- caller: src.summary.render.confidence - callee: src.summary.render.recordCitations +- caller: src.extractors.ast.records.adapterRecords + callee: src.extractors.ast.records.moduleRecords call_type: resolved -- caller: src.summary.render.renderConclusion - callee: src.summary.render.recordCitations +- caller: src.extractors.ast.records.moduleRecords + callee: src.extractors.ast.records.boundedCapabilities call_type: resolved -- caller: src.services.actions.executeAction - callee: src.services.actions.resolveRoot +- caller: src.extractors.ast.records.start + callee: src.extractors.ast.records.moduleTopicText call_type: resolved -- caller: src.services.actions.executeAction - callee: src.services.actions.scopedPath +- caller: src.extractors.ast.records.end + callee: src.extractors.ast.records.moduleTopicText call_type: resolved -- caller: src.services.actions.executeAction - callee: src.services.actions.nlModeValue +- caller: src.extractors.ast.records.capabilities + callee: src.extractors.ast.records.moduleTopicText call_type: resolved -- caller: src.services.actions.executeAction - callee: src.services.actions.numberValue +- caller: src.extractors.ast.typescript.extractTypeScriptFile + callee: src.extractors.ast.typescript.scriptKind call_type: resolved -- caller: src.services.actions.executeAction - callee: src.services.actions.nullableScopedPath +- caller: src.extractors.ast.typescript.extractTypeScriptFile + callee: src.extractors.ast.typescript.add call_type: resolved -- caller: src.services.actions.root - callee: src.services.actions.scopedPath +- caller: src.extractors.ast.typescript.add + callee: src.extractors.ast.typescript.lineRange call_type: resolved -- caller: src.services.actions.root - callee: src.services.actions.nlModeValue +- caller: src.extractors.ast.typescript.add + callee: src.extractors.ast.typescript.excerpt call_type: resolved -- caller: src.services.actions.root - callee: src.services.actions.numberValue +- caller: src.extractors.ast.typescript.add + callee: src.extractors.ast.typescript.languageName call_type: resolved -- caller: src.services.actions.root - callee: src.services.actions.nullableScopedPath +- caller: src.extractors.ast.typescript.symbol + callee: src.extractors.ast.typescript.modifiers call_type: resolved -- caller: src.services.actions.root - callee: src.services.actions.llmModeValue +- caller: src.extractors.ast.typescript.symbol + callee: src.extractors.ast.typescript.add call_type: resolved -- caller: src.services.actions.analysis - callee: src.services.actions.booleanValue +- caller: src.extractors.ast.typescript.visit + callee: src.extractors.ast.typescript.add call_type: resolved -- caller: src.services.actions.graph - callee: src.services.actions.booleanValue +- caller: src.extractors.ast.typescript.symbolModifiers + callee: src.extractors.ast.typescript.add call_type: resolved -- caller: src.services.actions.graph - callee: src.services.actions.numberValue +- caller: src.extractors.ast.typescript.declarationIsCallable + callee: src.extractors.ast.typescript.isTopLevel call_type: resolved -- caller: src.services.actions.diagnostics - callee: src.services.actions.booleanValue +- caller: src.extractors.ast.typescript.declarationIsCallable + callee: src.extractors.ast.typescript.add call_type: resolved -- caller: src.services.actions.diagnostics - callee: src.services.actions.numberValue +- caller: src.extractors.ast.typescript.callee + callee: src.extractors.ast.typescript.add call_type: resolved -- caller: src.services.actions.result - callee: src.services.actions.stringValue +- caller: src.extractors.ast.typescript.capabilities + callee: src.extractors.ast.typescript.add call_type: resolved -- caller: src.services.actions.result - callee: src.services.actions.booleanValue +- caller: src.graph.diff.diffIntentGraphs + callee: src.graph.diff.assertGraph call_type: resolved -- caller: src.services.actions.result - callee: src.services.actions.numberValue +- caller: src.graph.diff.diffIntentGraphs + callee: src.graph.diff.groupRecords call_type: resolved -- caller: src.services.actions.todoPath - callee: src.services.actions.stringValue +- caller: src.graph.diff.beforeGroups + callee: src.graph.diff.changedFieldPaths call_type: resolved -- caller: src.services.actions.receiptPath - callee: src.services.actions.stringValue +- caller: src.graph.diff.beforeGroups + callee: src.graph.diff.normalizeRecord call_type: resolved -- caller: src.services.actions.conclusions - callee: src.services.actions.numberValue +- caller: src.graph.diff.afterGroups + callee: src.graph.diff.changedFieldPaths call_type: resolved -- caller: src.services.actions.proposals - callee: src.services.actions.numberValue +- caller: src.graph.diff.afterGroups + callee: src.graph.diff.normalizeRecord call_type: resolved -- caller: src.services.actions.patch - callee: src.services.actions.stringValue +- caller: src.graph.diff.left + callee: src.graph.diff.changedFieldPaths call_type: resolved -- caller: src.services.actions.beforeGraph - callee: src.services.actions.hasInputValue +- caller: src.graph.diff.left + callee: src.graph.diff.normalizeRecord call_type: resolved -- caller: src.services.actions.beforeDiagnostics - callee: src.services.actions.hasInputValue +- caller: src.graph.diff.right + callee: src.graph.diff.changedFieldPaths call_type: resolved -- caller: src.services.actions.afterGraph - callee: src.services.actions.hasInputValue +- caller: src.graph.diff.right + callee: src.graph.diff.normalizeRecord call_type: resolved -- caller: src.services.actions.afterDiagnostics - callee: src.services.actions.hasInputValue +- caller: src.graph.diff.paired + callee: src.graph.diff.changedFieldPaths call_type: resolved -- caller: src.services.actions.value - callee: src.services.actions.hasInputValue +- caller: src.graph.diff.paired + callee: src.graph.diff.normalizeRecord call_type: resolved -- caller: src.services.actions.beforeInput - callee: src.services.actions.numberValue +- caller: src.graph.diff.beforeRecord + callee: src.graph.diff.changedFieldPaths call_type: resolved -- caller: src.services.actions.afterInput - callee: src.services.actions.numberValue +- caller: src.graph.diff.beforeRecord + callee: src.graph.diff.normalizeRecord call_type: resolved -- caller: src.services.actions.before - callee: src.services.actions.numberValue +- caller: src.graph.diff.afterRecord + callee: src.graph.diff.changedFieldPaths call_type: resolved -- caller: src.services.actions.after - callee: src.services.actions.numberValue +- caller: src.graph.diff.afterRecord + callee: src.graph.diff.normalizeRecord call_type: resolved -- caller: src.services.actions.diff - callee: src.services.actions.stringValue +- caller: src.graph.diff.renderGraphDiffSvg + callee: src.graph.diff.escapeXml call_type: resolved -- caller: src.services.actions.diff - callee: src.services.actions.numberValue +- caller: src.graph.diff.renderGraphDiffSvg + callee: src.graph.diff.truncate call_type: resolved -- caller: src.services.actions.svg - callee: src.services.actions.numberValue +- caller: src.graph.diff.visibleRows + callee: src.graph.diff.escapeXml call_type: resolved -- caller: src.services.actions.beforePath - callee: src.services.actions.stringValue +- caller: src.graph.diff.visibleRows + callee: src.graph.diff.truncate call_type: resolved -- caller: src.services.actions.beforePath - callee: src.services.actions.numberValue +- caller: src.graph.diff.width + callee: src.graph.diff.escapeXml call_type: resolved -- caller: src.services.actions.afterPath - callee: src.services.actions.stringValue +- caller: src.graph.diff.width + callee: src.graph.diff.truncate call_type: resolved -- caller: src.services.actions.afterPath - callee: src.services.actions.numberValue +- caller: src.graph.diff.height + callee: src.graph.diff.escapeXml call_type: resolved -- caller: src.services.actions.view - callee: src.services.actions.booleanValue +- caller: src.graph.diff.height + callee: src.graph.diff.truncate call_type: resolved -- caller: src.services.actions.view - callee: src.services.actions.numberValue +- caller: src.graph.diff.y + callee: src.graph.diff.escapeXml call_type: resolved -- caller: src.services.actions.filterCommunicationGraph - callee: src.services.actions.stringValue +- caller: src.graph.diff.y + callee: src.graph.diff.truncate call_type: resolved -- caller: src.services.actions.filterCommunicationGraph - callee: src.services.actions.booleanValue +- caller: src.graph.diff.groupRecords + callee: src.graph.diff.recordIdentity call_type: resolved -- caller: src.services.actions.nlModeValue - callee: src.services.actions.llmModeValue +- caller: src.graph.diff.groupRecords + callee: src.graph.diff.values call_type: resolved -- caller: src.services.actions.summaryModeValue - callee: src.services.actions.llmModeValue +- caller: src.graph.diff.groups + callee: src.graph.diff.recordIdentity call_type: resolved -- caller: src.services.actions.summaryModeValue - callee: src.services.actions.booleanValue +- caller: src.graph.diff.changedFieldPaths + callee: src.graph.diff.isObject call_type: resolved -- caller: src.services.actions.withTextDiffViews - callee: src.services.actions.stringValue +- caller: src.graph.diff.compareRelations + callee: src.graph.diff.relationKey call_type: resolved -- caller: src.services.actions.withTextDiffViews - callee: src.services.actions.booleanValue +- caller: src.graph.diff.metricCard + callee: src.graph.diff.escapeXml call_type: resolved -- caller: src.services.actions.withTextDiffViews - callee: src.services.actions.numberValue +- caller: src.graph.symbol-resolution.buildSymbolResolutionIndex + callee: src.graph.symbol-resolution.isAstDeclaration call_type: resolved -- caller: src.services.actions.title - callee: src.services.actions.booleanValue +- caller: src.graph.symbol-resolution.buildSymbolResolutionIndex + callee: src.graph.symbol-resolution.values call_type: resolved -- caller: src.services.actions.title - callee: src.services.actions.numberValue +- caller: src.graph.symbol-resolution.byAlias + callee: src.graph.symbol-resolution.isAstDeclaration call_type: resolved -- caller: src.services.actions.scopedPath - callee: src.services.actions.stringValue +- caller: src.graph.symbol-resolution.byNlRecord + callee: src.graph.symbol-resolution.resolveSymbol call_type: resolved -- caller: src.services.actions.nullableScopedPath - callee: src.services.actions.nullableString +- caller: src.graph.symbol-resolution.hasResolvedNlAstSymbolPair + callee: src.graph.symbol-resolution.isAstDeclaration call_type: resolved -- caller: src.services.actions.readRecords - callee: src.services.actions.stringList +- caller: src.graph.symbol-resolution.resolveSymbol + callee: src.graph.symbol-resolution.pathSelects call_type: resolved -- caller: src.semantic.reranker.createSemanticCandidateSet - callee: src.semantic.reranker.requiredText +- caller: src.graph.symbol-resolution.resolveSymbol + callee: src.graph.symbol-resolution.uniquePaths call_type: resolved -- caller: src.semantic.reranker.assertSemanticCandidateSet - callee: src.semantic.reranker.validDate +- caller: src.graph.symbol-resolution.selected + callee: src.graph.symbol-resolution.uniquePaths call_type: resolved -- caller: src.semantic.reranker.assertSemanticCandidateSet - callee: src.semantic.reranker.validateRetrieval +- caller: src.graph.linker.linkIntentRecords + callee: src.graph.linker.deduplicateRecords call_type: resolved -- caller: src.semantic.reranker.records - callee: src.semantic.reranker.roundedConfidence +- caller: src.graph.linker.linkIntentRecords + callee: src.graph.linker.indexKeywords call_type: resolved -- caller: src.semantic.reranker.records - callee: src.semantic.reranker.validateVerdictReason +- caller: src.graph.linker.records + callee: src.graph.linker.scorePair call_type: resolved -- caller: src.semantic.reranker.records - callee: src.semantic.reranker.requiredText +- caller: src.graph.linker.records + callee: src.graph.linker.determineRelation call_type: resolved -- caller: src.semantic.reranker.seenIds - callee: src.semantic.reranker.boundedScore +- caller: src.graph.linker.byId + callee: src.graph.linker.set call_type: resolved -- caller: src.semantic.reranker.seenPairs - callee: src.semantic.reranker.boundedScore +- caller: src.graph.linker.keywordIndex + callee: src.graph.linker.scorePair call_type: resolved -- caller: src.semantic.reranker.byDeclaration - callee: src.semantic.reranker.boundedScore +- caller: src.graph.linker.keywordIndex + callee: src.graph.linker.determineRelation call_type: resolved -- caller: src.semantic.reranker.createSemanticRerankResult - callee: src.semantic.reranker.assertSemanticCandidateSet +- caller: src.graph.linker.symbolResolutionIndex + callee: src.graph.linker.scorePair call_type: resolved -- caller: src.semantic.reranker.createSemanticRerankResult - callee: src.semantic.reranker.requiredText +- caller: src.graph.linker.symbolResolutionIndex + callee: src.graph.linker.determineRelation call_type: resolved -- caller: src.semantic.reranker.createSemanticRerankResult - callee: src.semantic.reranker.roundedConfidence +- caller: src.graph.linker.candidatePairs + callee: src.graph.linker.scorePair call_type: resolved -- caller: src.semantic.reranker.decisions - callee: src.semantic.reranker.roundedConfidence +- caller: src.graph.linker.candidatePairs + callee: src.graph.linker.determineRelation call_type: resolved -- caller: src.semantic.reranker.decisions - callee: src.semantic.reranker.requiredText +- caller: src.graph.linker.resolvableBasenames + callee: src.graph.linker.scorePair call_type: resolved -- caller: src.semantic.reranker.assertSemanticRerankResult - callee: src.semantic.reranker.assertSemanticCandidateSet +- caller: src.graph.linker.resolvableBasenames + callee: src.graph.linker.determineRelation call_type: resolved -- caller: src.semantic.reranker.assertSemanticRerankResult - callee: src.semantic.reranker.validDate +- caller: src.graph.linker.deduplicateRecords + callee: src.graph.linker.set call_type: resolved -- caller: src.semantic.reranker.assertSemanticRerankResult - callee: src.semantic.reranker.validateGeneration +- caller: src.graph.linker.deduplicateRecords + callee: src.graph.linker.values call_type: resolved -- caller: src.semantic.reranker.seenDecisions - callee: src.semantic.reranker.roundedConfidence +- caller: src.graph.linker.collectCandidatePairs + callee: src.graph.linker.indexTargetBuckets call_type: resolved -- caller: src.semantic.reranker.seenDecisions - callee: src.semantic.reranker.validateVerdictReason +- caller: src.graph.linker.collectCandidatePairs + callee: src.graph.linker.indexKeywordBuckets call_type: resolved -- caller: src.semantic.reranker.seenDecisions - callee: src.semantic.reranker.requiredText +- caller: src.graph.linker.collectCandidatePairs + callee: src.graph.linker.isModuleTopicSource call_type: resolved -- caller: src.semantic.reranker.acceptedDeclarations - callee: src.semantic.reranker.roundedConfidence +- caller: src.graph.linker.collectCandidatePairs + callee: src.graph.linker.indexTopicBuckets call_type: resolved -- caller: src.semantic.reranker.acceptedDeclarations - callee: src.semantic.reranker.validateVerdictReason +- caller: src.graph.linker.collectCandidatePairs + callee: src.graph.linker.pairsFromBuckets call_type: resolved -- caller: src.semantic.reranker.acceptedDeclarations - callee: src.semantic.reranker.requiredText +- caller: src.graph.linker.buckets + callee: src.graph.linker.indexTargetBuckets call_type: resolved -- caller: src.semantic.reranker.applyAcceptedSemanticRelations - callee: src.semantic.reranker.assertSemanticRerankResult +- caller: src.graph.linker.buckets + callee: src.graph.linker.indexKeywordBuckets call_type: resolved -- caller: src.semantic.reranker.applyAcceptedSemanticRelations - callee: src.semantic.reranker.values +- caller: src.graph.linker.buckets + callee: src.graph.linker.isModuleTopicSource call_type: resolved -- caller: src.semantic.reranker.validateRetrieval - callee: src.semantic.reranker.requiredText +- caller: src.graph.linker.buckets + callee: src.graph.linker.indexTopicBuckets call_type: resolved -- caller: src.semantic.reranker.validateGeneration - callee: src.semantic.reranker.requiredText +- caller: src.graph.linker.astIds + callee: src.graph.linker.indexTargetBuckets call_type: resolved -- caller: src.semantic.reranker.validateVerdictReason - callee: src.semantic.reranker.assertSemanticVerdictReason +- caller: src.graph.linker.astIds + callee: src.graph.linker.indexKeywordBuckets call_type: resolved -- caller: src.semantic.reranker.assertGroundedQuote - callee: src.semantic.reranker.requiredText +- caller: src.graph.linker.astIds + callee: src.graph.linker.isModuleTopicSource call_type: resolved -- caller: src.semantic.reranker.quote - callee: src.semantic.reranker.requiredText +- caller: src.graph.linker.astIds + callee: src.graph.linker.indexTopicBuckets call_type: resolved -- caller: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates - callee: src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet +- caller: src.graph.linker.moduleAstIds + callee: src.graph.linker.indexTargetBuckets call_type: resolved -- caller: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates - callee: src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult +- caller: src.graph.linker.moduleAstIds + callee: src.graph.linker.indexKeywordBuckets call_type: resolved -- caller: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates - callee: src.semantic.reranker-llm.SemanticRerankerRequiredError.assertTrackedSnapshot +- caller: src.graph.linker.moduleAstIds + callee: src.graph.linker.isModuleTopicSource call_type: resolved -- caller: src.semantic.reranker-llm.SemanticRerankerRequiredError.model - callee: src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult +- caller: src.graph.linker.moduleAstIds + callee: src.graph.linker.indexTopicBuckets call_type: resolved -- caller: src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision - callee: src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult +- caller: src.graph.linker.declarationAstIds + callee: src.graph.linker.indexTargetBuckets call_type: resolved -- caller: src.semantic.reranker-llm.SemanticRerankerRequiredError.payload - callee: src.semantic.reranker-llm.SemanticRerankerRequiredError.projectRecord +- caller: src.graph.linker.declarationAstIds + callee: src.graph.linker.indexKeywordBuckets call_type: resolved -- caller: src.pipeline.run.runPipeline - callee: src.pipeline.run.skippedAudit +- caller: src.graph.linker.declarationAstIds + callee: src.graph.linker.isModuleTopicSource call_type: resolved -- caller: src.pipeline.run.docs - callee: src.pipeline.run.collectTargetHints +- caller: src.graph.linker.declarationAstIds + callee: src.graph.linker.indexTopicBuckets call_type: resolved -- caller: src.pipeline.run.docs - callee: src.pipeline.run.values +- caller: src.graph.linker.configurationIds + callee: src.graph.linker.indexTargetBuckets call_type: resolved -- caller: src.pipeline.run.configurationExtraction - callee: src.pipeline.run.skippedAudit +- caller: src.graph.linker.configurationIds + callee: src.graph.linker.indexKeywordBuckets call_type: resolved -- caller: src.pipeline.run.includeCommunication - callee: src.pipeline.run.skippedAudit +- caller: src.graph.linker.configurationIds + callee: src.graph.linker.isModuleTopicSource call_type: resolved -- caller: src.pipeline.run.communicationStartedAt - callee: src.pipeline.run.skippedAudit +- caller: src.graph.linker.configurationIds + callee: src.graph.linker.indexTopicBuckets call_type: resolved -- caller: src.pipeline.run.communicationAudit - callee: src.pipeline.run.skippedAudit +- caller: src.graph.linker.indexTargetBuckets + callee: src.graph.linker.addToBucket call_type: resolved -- caller: src.pipeline.run.communicationInputPresent - callee: src.pipeline.run.skippedAudit +- caller: src.graph.linker.indexTargetBuckets + callee: src.graph.linker.indexAliases call_type: resolved -- caller: src.pipeline.run.collectTargetHints - callee: src.pipeline.run.values +- caller: src.graph.linker.indexAliases + callee: src.graph.linker.aliases call_type: resolved -- caller: src.pipeline.run.persistFailedRun - callee: src.pipeline.run.skippedAudit +- caller: src.graph.linker.indexAliases + callee: src.graph.linker.addToBucket call_type: resolved -- caller: src.pipeline.run.persistFailedRun - callee: src.pipeline.run.failureCode +- caller: src.graph.linker.indexKeywordBuckets + callee: src.graph.linker.addToBucket call_type: resolved -- caller: src.pipeline.run.persistFailedRun - callee: src.pipeline.run.failedAudit +- caller: src.graph.linker.indexTopicBuckets + callee: src.graph.linker.addToBucket call_type: resolved -- caller: src.pipeline.run.persistFailedRun - callee: src.pipeline.run.aborted +- caller: src.graph.linker.addToBucket + callee: src.graph.linker.set call_type: resolved -- caller: src.pipeline.run.persistFailedRun - callee: src.pipeline.run.stageValue +- caller: src.graph.linker.pairsFromBuckets + callee: src.graph.linker.isSuppressedAstPair call_type: resolved -- caller: src.pipeline.run.persistFailedRun - callee: src.pipeline.run.manifestConfiguration +- caller: src.graph.linker.pairsFromBuckets + callee: src.graph.linker.isSuppressedConfigurationPair call_type: resolved -- caller: src.pipeline.run.aborted - callee: src.pipeline.run.skippedAudit +- caller: src.graph.linker.pairsFromBuckets + callee: src.graph.linker.set call_type: resolved -- caller: src.pipeline.run.message - callee: src.pipeline.run.failureCode +- caller: src.graph.linker.leftId + callee: src.graph.linker.set call_type: resolved -- caller: src.pipeline.run.knownAudit - callee: src.pipeline.run.failureCode +- caller: src.graph.linker.rightId + callee: src.graph.linker.set call_type: resolved -- caller: src.pipeline.run.failedAudit - callee: src.pipeline.run.failureCode +- caller: src.graph.linker.indexResolvableBasenames + callee: src.graph.linker.set call_type: resolved -- caller: src.pipeline.run.stageValue - callee: src.pipeline.run.failedAudit +- caller: src.graph.linker.owners + callee: src.graph.linker.set call_type: resolved -- caller: src.pipeline.run.stageValue - callee: src.pipeline.run.aborted +- caller: src.graph.linker.pathsIntersect + callee: src.graph.linker.expand call_type: resolved -- caller: src.pipeline.run.reason - callee: src.pipeline.run.failureCode +- caller: src.graph.linker.scorePair + callee: src.graph.linker.intersects call_type: resolved -- caller: src.operations.validation.dateString - callee: src.operations.validation.nonBlank +- caller: src.graph.linker.scorePair + callee: src.graph.linker.intersectsAliases call_type: resolved -- caller: src.operations.validation.assertPrincipalList - callee: src.operations.validation.uniqueStrings +- caller: src.graph.linker.scorePair + callee: src.graph.linker.pathsIntersect call_type: resolved -- caller: src.operations.validation.principals - callee: src.operations.validation.uniqueStrings +- caller: src.graph.linker.scorePair + callee: src.graph.linker.isFileAggregateEvidencePair call_type: resolved -- caller: src.operations.validation.assertVariableContract - callee: src.operations.validation.objectValue +- caller: src.graph.linker.scorePair + callee: src.graph.linker.jaccard call_type: resolved -- caller: src.operations.validation.assertVariableContract - callee: src.operations.validation.exactKeys +- caller: src.graph.linker.score + callee: src.graph.linker.intersects call_type: resolved -- caller: src.operations.validation.assertVariableContract - callee: src.operations.validation.nonBlank +- caller: src.graph.linker.leftKeywords + callee: src.graph.linker.intersects call_type: resolved modules: - src.cli: - - src.cli.command - - src.cli.context - - src.cli.controller - - src.cli.diagnostics - - src.cli.diagnosticsPath - - src.cli.diff - - src.cli.doctor - - src.cli.emitExtraction - - src.cli.execFileAsync - - src.cli.extractor - - src.cli.file - - src.cli.formatWatchEvent - - src.cli.handleCommunication - - src.cli.handleDiff - - src.cli.handleExtract - - src.cli.handleReality - - src.cli.handleWatch - - src.cli.html - - src.cli.initProject - - src.cli.invokedPath - - src.cli.isPlanSet - - src.cli.main - - src.cli.maxRows - - src.cli.mode - - src.cli.optionBoolean - - src.cli.optionList - - src.cli.optionLlmMode - - src.cli.optionNlMode - - src.cli.optionNullableString - - src.cli.optionNumber - - src.cli.optionPipelineTaskMode - - src.cli.optionString - - src.cli.optionSummaryMode - - src.cli.optionTaskMode - - src.cli.parseArgs - - src.cli.parsed - - src.cli.printHelp - - src.cli.result - - src.cli.root - - src.cli.stamp - - src.cli.stop - - src.cli.svg - - src.cli.taskFile - - src.cli.view - src.operations.validation: - - src.operations.validation.assertPrincipalList - - src.operations.validation.assertVariableContract - - src.operations.validation.dateString - - src.operations.validation.exactKeys - - src.operations.validation.nonBlank - - src.operations.validation.objectValue - - src.operations.validation.principals - - src.operations.validation.uniqueStrings - src.pipeline.run: - - src.pipeline.run.aborted - - src.pipeline.run.collectTargetHints - - src.pipeline.run.communicationAudit - - src.pipeline.run.communicationInputPresent - - src.pipeline.run.communicationStartedAt - - src.pipeline.run.configurationExtraction - - src.pipeline.run.docs - - src.pipeline.run.failedAudit - - src.pipeline.run.failureCode - - src.pipeline.run.includeCommunication - - src.pipeline.run.knownAudit - - src.pipeline.run.manifestConfiguration - - src.pipeline.run.message - - src.pipeline.run.persistFailedRun - - src.pipeline.run.reason - - src.pipeline.run.runPipeline - - src.pipeline.run.skippedAudit - - src.pipeline.run.stageValue - - src.pipeline.run.values - src.semantic.reranker: - - src.semantic.reranker.acceptedDeclarations - - src.semantic.reranker.applyAcceptedSemanticRelations - - src.semantic.reranker.assertGroundedQuote - - src.semantic.reranker.assertSemanticCandidateSet - - src.semantic.reranker.assertSemanticRerankResult - - src.semantic.reranker.assertSemanticVerdictReason - - src.semantic.reranker.boundedScore - - src.semantic.reranker.byDeclaration - - src.semantic.reranker.createSemanticCandidateSet - - src.semantic.reranker.createSemanticRerankResult - - src.semantic.reranker.decisions - - src.semantic.reranker.quote - - src.semantic.reranker.records - - src.semantic.reranker.requiredText - - src.semantic.reranker.roundedConfidence - - src.semantic.reranker.seenDecisions - - src.semantic.reranker.seenIds - - src.semantic.reranker.seenPairs - - src.semantic.reranker.validDate - - src.semantic.reranker.validateGeneration - - src.semantic.reranker.validateRetrieval - - src.semantic.reranker.validateVerdictReason - - src.semantic.reranker.values - src.semantic.reranker-llm: - - src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet - - src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult - - src.semantic.reranker-llm.SemanticRerankerRequiredError.assertTrackedSnapshot - - src.semantic.reranker-llm.SemanticRerankerRequiredError.model - - src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision - - src.semantic.reranker-llm.SemanticRerankerRequiredError.payload - - src.semantic.reranker-llm.SemanticRerankerRequiredError.projectRecord - - src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates - src.services.actions: - - src.services.actions.after - - src.services.actions.afterDiagnostics - - src.services.actions.afterGraph - - src.services.actions.afterInput - - src.services.actions.afterPath - - src.services.actions.analysis - - src.services.actions.before - - src.services.actions.beforeDiagnostics - - src.services.actions.beforeGraph - - src.services.actions.beforeInput - - src.services.actions.beforePath - - src.services.actions.booleanValue - - src.services.actions.conclusions - - src.services.actions.diagnostics - - src.services.actions.diff - - src.services.actions.executeAction - - src.services.actions.filterCommunicationGraph - - src.services.actions.graph - - src.services.actions.hasInputValue - - src.services.actions.llmModeValue - - src.services.actions.nlModeValue - - src.services.actions.nullableScopedPath - - src.services.actions.nullableString - - src.services.actions.numberValue - - src.services.actions.patch - - src.services.actions.proposals - - src.services.actions.readRecords - - src.services.actions.receiptPath - - src.services.actions.resolveRoot - - src.services.actions.result - - src.services.actions.root - - src.services.actions.scopedPath - - src.services.actions.stringList - - src.services.actions.stringValue - - src.services.actions.summaryModeValue - - src.services.actions.svg - - src.services.actions.title - - src.services.actions.todoPath - - src.services.actions.value - - src.services.actions.view - - src.services.actions.withTextDiffViews - src.summary.render: - - src.summary.render.actions - - src.summary.render.confidence - - src.summary.render.recordCitations - - src.summary.render.renderConclusion - - src.summary.render.renderRecords - - src.summary.render.renderSummaryMarkdown - src.summary.summarizer: - - src.summary.summarizer.SummaryAttemptError.assertConclusions - - src.summary.summarizer.SummaryAttemptError.conclusions - - src.summary.summarizer.SummaryAttemptError.deterministicConclusions - - src.summary.summarizer.SummaryAttemptError.generationMetadata - - src.summary.summarizer.SummaryAttemptError.materializeConclusions - - src.summary.summarizer.SummaryAttemptError.parsed - - src.summary.summarizer.SummaryAttemptError.readPrompt - - src.summary.summarizer.SummaryAttemptError.sortedUnique - - src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection - - src.summary.summarizer.SummaryAttemptError.summaryMode - - src.summary.summarizer.client - - src.summary.summarizer.mode - - src.summary.summarizer.payload - - src.summary.summarizer.summarizeGraph - - src.summary.summarizer.systemPrompt - src.synthesis.code-change-path: - - src.synthesis.code-change-path.isPlannablePath - - src.synthesis.code-change-path.isUsefulCodeChangePath - src.synthesis.code-change-plan: - - src.synthesis.code-change-plan.acceptanceCriteriaFor - - src.synthesis.code-change-plan.acceptances - - src.synthesis.code-change-plan.acceptedCount - - src.synthesis.code-change-plan.applyCodeChangeSourcePatch - - src.synthesis.code-change-plan.applyUnifiedDiffToText - - src.synthesis.code-change-plan.assertCodeChangeSourcePatch - - src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet - - src.synthesis.code-change-plan.assertExistingSourceReceipt - - src.synthesis.code-change-plan.assertSourceApplyReceipt - - src.synthesis.code-change-plan.assertSourcePatchIds - - src.synthesis.code-change-plan.assertSourcePatchStrings - - src.synthesis.code-change-plan.buildChanges - - src.synthesis.code-change-plan.candidates - - src.synthesis.code-change-plan.changes - - src.synthesis.code-change-plan.collectTarget - - src.synthesis.code-change-plan.conclusions - - src.synthesis.code-change-plan.conclusionsByDiagnostic - - src.synthesis.code-change-plan.confidenceFor - - src.synthesis.code-change-plan.createCodeChangeReviewPatch - - src.synthesis.code-change-plan.createCodeChangeSourcePatch - - src.synthesis.code-change-plan.createCodeChangeSourcePatchSet - - src.synthesis.code-change-plan.descriptionFor - - src.synthesis.code-change-plan.deterministicGeneration - - src.synthesis.code-change-plan.evaluateCodeChangeAcceptance - - src.synthesis.code-change-plan.exactSourcePatchKeys - - src.synthesis.code-change-plan.exactSourcePatchSet - - src.synthesis.code-change-plan.fileHashesAfter - - src.synthesis.code-change-plan.generatedAt - - src.synthesis.code-change-plan.index - - src.synthesis.code-change-plan.indexConclusionsByDiagnostic - - src.synthesis.code-change-plan.indexProposalsByDiagnostic - - src.synthesis.code-change-plan.inline - - src.synthesis.code-change-plan.instructionFor - - src.synthesis.code-change-plan.markdown - - src.synthesis.code-change-plan.matchingConclusions - - src.synthesis.code-change-plan.matchingProposals - - src.synthesis.code-change-plan.normalizeUnifiedDiff - - src.synthesis.code-change-plan.now - - src.synthesis.code-change-plan.object - - src.synthesis.code-change-plan.patchHash - - src.synthesis.code-change-plan.patchIds - - src.synthesis.code-change-plan.paths - - src.synthesis.code-change-plan.planHash - - src.synthesis.code-change-plan.planIds - - src.synthesis.code-change-plan.plansById - - src.synthesis.code-change-plan.priorityRank - - src.synthesis.code-change-plan.proposals - - src.synthesis.code-change-plan.proposalsByDiagnostic - - src.synthesis.code-change-plan.rawDiff - - src.synthesis.code-change-plan.record - - src.synthesis.code-change-plan.recordsById - - src.synthesis.code-change-plan.relatedRecords - - src.synthesis.code-change-plan.renderCodeChangeReviewMarkdown - - src.synthesis.code-change-plan.renderIds - - src.synthesis.code-change-plan.riskFor - - src.synthesis.code-change-plan.rollbackFor - - src.synthesis.code-change-plan.set - - src.synthesis.code-change-plan.splitKeep - - src.synthesis.code-change-plan.startsWithImperative - - src.synthesis.code-change-plan.target - - src.synthesis.code-change-plan.titleFor - - src.synthesis.code-change-plan.unifiedDiff - - src.synthesis.code-change-plan.uniqueSorted - src.synthesis.task-synthesis-contract: - - src.synthesis.task-synthesis-contract.RAW_CONCLUSION_CONTRACT - - src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT - - src.synthesis.task-synthesis-contract.nonBlank - - src.synthesis.task-synthesis-contract.taskIds - - src.synthesis.task-synthesis-contract.taskStrings - src.synthesis.task-synthesis-materialize: - - src.synthesis.task-synthesis-materialize.conclusionByKey - - src.synthesis.task-synthesis-materialize.conclusionIdByKey - - src.synthesis.task-synthesis-materialize.conclusions - - src.synthesis.task-synthesis-materialize.diagnosticIds - - src.synthesis.task-synthesis-materialize.keys - - src.synthesis.task-synthesis-materialize.mapKeys - - src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse - - src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria - - src.synthesis.task-synthesis-materialize.normalizeLocalKeys - - src.synthesis.task-synthesis-materialize.normalizeRawTarget - - src.synthesis.task-synthesis-materialize.normalizeStringArray - - src.synthesis.task-synthesis-materialize.parsed - - src.synthesis.task-synthesis-materialize.proposalDrafts - - src.synthesis.task-synthesis-materialize.proposalIdByKey - - src.synthesis.task-synthesis-materialize.proposalKeys - - src.synthesis.task-synthesis-materialize.proposals - - src.synthesis.task-synthesis-materialize.sortedUnique - src.synthesis.tasks-llm: - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.client - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.fallbackOrThrow - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.generationMetadata - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.readPrompt - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesisAudit - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals - - src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection - src.synthesis.todo-patch: - - src.synthesis.todo-patch.appendPatch - - src.synthesis.todo-patch.applied - - src.synthesis.todo-patch.applyTodoPatch - - src.synthesis.todo-patch.artifact - - src.synthesis.todo-patch.assertApproval - - src.synthesis.todo-patch.assertReceipt - - src.synthesis.todo-patch.assertTodoPatchArtifact - - src.synthesis.todo-patch.atomicWrite - - src.synthesis.todo-patch.classified - - src.synthesis.todo-patch.createTodoPatch - - src.synthesis.todo-patch.current - - src.synthesis.todo-patch.currentHash - - src.synthesis.todo-patch.diagnosticReportFingerprint - - src.synthesis.todo-patch.duplicates - - src.synthesis.todo-patch.exactKeys - - src.synthesis.todo-patch.hash - - src.synthesis.todo-patch.inline - - src.synthesis.todo-patch.isoDate - - src.synthesis.todo-patch.markdown - - src.synthesis.todo-patch.nonBlank - - src.synthesis.todo-patch.normalizePath - - src.synthesis.todo-patch.now - - src.synthesis.todo-patch.object - - src.synthesis.todo-patch.orderedSelected - - src.synthesis.todo-patch.recovered - - src.synthesis.todo-patch.renderIds - - src.synthesis.todo-patch.renderTargets - - src.synthesis.todo-patch.renderTodoPatchMarkdown - - src.synthesis.todo-patch.rendered - - src.synthesis.todo-patch.result - - src.synthesis.todo-patch.sameArray - - src.synthesis.todo-patch.selected - - src.synthesis.todo-patch.sourceTodo - - src.synthesis.todo-patch.uniqueIds - - src.synthesis.todo-patch.uniqueStrings - - src.synthesis.todo-patch.wasAlreadyAppended - - src.synthesis.todo-patch.writeTodoPatchArtifacts - src.synthesis.validation: - - src.synthesis.validation.dependencyFirstPriorityOrder - - src.synthesis.validation.duplicateEvidence - - src.synthesis.validation.intersects - - src.synthesis.validation.jaccard - - src.synthesis.validation.proposalWords - - src.synthesis.validation.sharedPath - - src.synthesis.validation.sharedSymbol - - src.synthesis.validation.sharedTicket - - src.synthesis.validation.similarity - - src.synthesis.validation.target - - src.synthesis.validation.validateAndClassifyTodoProposals - - src.synthesis.validation.words - src.tf.classifier: - - src.tf.classifier.classifyAction - - src.tf.classifier.dynamicImport - - src.tf.classifier.importer - - src.tf.classifier.loadAssets - - src.tf.classifier.loadClassifier - - src.tf.classifier.vectorize - src.watch.watcher: - - src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - - src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - - src.watch.watcher.absolute - - src.watch.watcher.absoluteRoot - - src.watch.watcher.current - - src.watch.watcher.defaultSleep - - src.watch.watcher.delta - - src.watch.watcher.describeDelta - - src.watch.watcher.diffSnapshots - - src.watch.watcher.emit - - src.watch.watcher.finish - - src.watch.watcher.generate - - src.watch.watcher.lastReportStartedAt - - src.watch.watcher.maxFiles - - src.watch.watcher.now - - src.watch.watcher.onAbort - - src.watch.watcher.pending - - src.watch.watcher.relative - - src.watch.watcher.result - - src.watch.watcher.runReport - - src.watch.watcher.scanTree - - src.watch.watcher.sleep - - src.watch.watcher.snapshot - - src.watch.watcher.startedAt - - src.watch.watcher.timer - - src.watch.watcher.visit - - src.watch.watcher.waitMs - - src.watch.watcher.watchRepository - src.web.diff-ui: - - src.web.diff-ui.byId - - src.web.diff-ui.compareGraphs - - src.web.diff-ui.diffUiHtml - - src.web.diff-ui.fillSelect - - src.web.diff-ui.formatBytes - - src.web.diff-ui.loadRuns - - src.web.diff-ui.requestHeaders - - src.web.diff-ui.selectedRun - - src.web.diff-ui.updateMeta + examples.backend.src.server: + - examples.backend.src.server.createBackend + - examples.backend.src.server.event + - examples.backend.src.server.handleRequest + - examples.backend.src.server.limit + - examples.backend.src.server.offset + - examples.backend.src.server.readBody + - examples.backend.src.server.sendJson + - examples.backend.src.server.server + - examples.backend.src.server.size + - examples.backend.src.server.startBackend + - examples.backend.src.server.store + - examples.backend.src.server.validation + examples.backend.src.validation: + - examples.backend.src.validation.ALLOWED_ACTIONS + - examples.backend.src.validation.action + - examples.backend.src.validation.agent + - examples.backend.src.validation.invalid + - examples.backend.src.validation.object + - examples.backend.src.validation.record + - examples.backend.src.validation.validateEventPayload + examples.frontend.src.app: + - examples.frontend.src.app.createState + - examples.frontend.src.app.mountPanel + - examples.frontend.src.app.refresh + - examples.frontend.src.app.reload + - examples.frontend.src.app.state + examples.frontend.src.render: + - examples.frontend.src.render.classifyEvent + - examples.frontend.src.render.headerRow + - examples.frontend.src.render.renderTable + - examples.frontend.src.render.toRows + examples.src.runtime: + - examples.src.runtime.executeContract + - examples.src.runtime.validateContract + java.JavaAstExtract: + - java.JavaAstExtract.JavaAstExtract.add + - java.JavaAstExtract.JavaAstExtract.collect + - java.JavaAstExtract.JavaAstExtract.containsIgnored + - java.JavaAstExtract.JavaAstExtract.emit + - java.JavaAstExtract.JavaAstExtract.escape + - java.JavaAstExtract.JavaAstExtract.json + - java.JavaAstExtract.JavaAstExtract.main + - java.JavaAstExtract.JavaAstExtract.map + - java.JavaAstExtract.JavaAstExtract.slash + - java.JavaAstExtract.JavaAstExtract.try + rust-ast.src.main: + - rust-ast.src.main.add + - rust-ast.src.main.arguments + - rust-ast.src.main.collect_files + - rust-ast.src.main.excerpt + - rust-ast.src.main.main + - rust-ast.src.main.modifiers + - rust-ast.src.main.qualified + - rust-ast.src.main.slash + - rust-ast.src.main.type_item + - rust-ast.src.main.visit_expr_call + - rust-ast.src.main.visit_expr_method_call + - rust-ast.src.main.visit_impl_item_fn + - rust-ast.src.main.visit_item_const + - rust-ast.src.main.visit_item_enum + - rust-ast.src.main.visit_item_fn + - rust-ast.src.main.visit_item_mod + - rust-ast.src.main.visit_item_static + - rust-ast.src.main.visit_item_struct + - rust-ast.src.main.visit_item_trait + - rust-ast.src.main.visit_item_type + - rust-ast.src.main.visit_item_use + src.extractors.ast: + - src.extractors.ast.isExtractionResult + - src.extractors.ast.isIntentRecords + src.extractors.ast.external: + - src.extractors.ast.external.execFileAsync + - src.extractors.ast.external.result + - src.extractors.ast.external.runExternalAstAdapter + src.extractors.ast.records: + - src.extractors.ast.records.adapterRecords + - src.extractors.ast.records.boundedCapabilities + - src.extractors.ast.records.capabilities + - src.extractors.ast.records.end + - src.extractors.ast.records.moduleRecords + - src.extractors.ast.records.moduleTopicText + - src.extractors.ast.records.start + src.extractors.ast.typescript: + - src.extractors.ast.typescript.add + - src.extractors.ast.typescript.callee + - src.extractors.ast.typescript.capabilities + - src.extractors.ast.typescript.declarationIsCallable + - src.extractors.ast.typescript.excerpt + - src.extractors.ast.typescript.extractTypeScriptFile + - src.extractors.ast.typescript.isTopLevel + - src.extractors.ast.typescript.languageName + - src.extractors.ast.typescript.lineRange + - src.extractors.ast.typescript.modifiers + - src.extractors.ast.typescript.scriptKind + - src.extractors.ast.typescript.symbol + - src.extractors.ast.typescript.symbolModifiers + - src.extractors.ast.typescript.visit + src.extractors.changelog: + - src.extractors.changelog.body + - src.extractors.changelog.changelogAction + - src.extractors.changelog.extractChangelog + - src.extractors.changelog.lines + - src.extractors.changelog.relative + src.extractors.communication: + - src.extractors.communication.basename + - src.extractors.communication.communicationFiles + - src.extractors.communication.communicationSegments + - src.extractors.communication.declaredParticipant + - src.extractors.communication.declaredParticipantId + - src.extractors.communication.declaredRole + - src.extractors.communication.envelope + - src.extractors.communication.explicitEnvelope + - src.extractors.communication.extractCommunicationFile + - src.extractors.communication.extractCommunicationIntent + - src.extractors.communication.fileParts + - src.extractors.communication.first + - src.extractors.communication.flush + - src.extractors.communication.heading + - src.extractors.communication.identity + - src.extractors.communication.identityRegistry + - src.extractors.communication.inferIdentity + - src.extractors.communication.inferred + - src.extractors.communication.isCommunicationNoise + - src.extractors.communication.isCommunicationType + - src.extractors.communication.isTicketEvidenceFile + - src.extractors.communication.item + - src.extractors.communication.listValue + - src.extractors.communication.match + - src.extractors.communication.nestedParticipant + - src.extractors.communication.nestedRole + - src.extractors.communication.nestedRoleIndex + - src.extractors.communication.normalize + - src.extractors.communication.normalizeType + - src.extractors.communication.parseEnvelope + - src.extractors.communication.participant + - src.extractors.communication.raw + - src.extractors.communication.sameStrings + - src.extractors.communication.unquote + src.extractors.configuration: + - src.extractors.configuration.MAX_ENTRIES_PER_FILE + - src.extractors.configuration.bounded + - src.extractors.configuration.configurationFormat + - src.extractors.configuration.configurationRecords + - src.extractors.configuration.dockerEntries + - src.extractors.configuration.entries + - src.extractors.configuration.entry + - src.extractors.configuration.extractConfigurationIntent + - src.extractors.configuration.fileAggregate + - src.extractors.configuration.files + - src.extractors.configuration.findKeyLine + - src.extractors.configuration.heading + - src.extractors.configuration.isConfigurationPath + - src.extractors.configuration.jsonEntries + - src.extractors.configuration.line + - src.extractors.configuration.lines + - src.extractors.configuration.match + - src.extractors.configuration.pair + - src.extractors.configuration.parsed + - src.extractors.configuration.relative + - src.extractors.configuration.tomlEntries + - src.extractors.configuration.uniqueEntries + - src.extractors.configuration.yamlOrAssignmentEntries + src.extractors.docs-chunks: + - src.extractors.docs-chunks.chunkMarkdown + - src.extractors.docs-chunks.chunkPriority + - src.extractors.docs-chunks.flush + - src.extractors.docs-chunks.index + - src.extractors.docs-chunks.item + - src.extractors.docs-chunks.mapConcurrent + - src.extractors.docs-chunks.markdownSections + - src.extractors.docs-chunks.needles + - src.extractors.docs-chunks.prioritizeDocumentChunks + - src.extractors.docs-chunks.sectionLines + - src.extractors.docs-chunks.sectionText + - src.extractors.docs-chunks.splitLongSection + - src.extractors.docs-chunks.takeLineBatch + - src.extractors.docs-chunks.worker + - src.extractors.docs-chunks.workerCount + src.extractors.docs-deterministic: + - src.extractors.docs-deterministic.action + - src.extractors.docs-deterministic.codeBlockRecord + - src.extractors.docs-deterministic.convertDocument + - src.extractors.docs-deterministic.extractDocumentationBaseline + - src.extractors.docs-deterministic.handleDocumentationLine + - src.extractors.docs-deterministic.heading + - src.extractors.docs-deterministic.marker + - src.extractors.docs-deterministic.match + - src.extractors.docs-deterministic.parseBulletStatement + - src.extractors.docs-deterministic.parseFenceBlock + - src.extractors.docs-deterministic.parseParagraphStatement + - src.extractors.docs-deterministic.parseSectionHeading + - src.extractors.docs-deterministic.primePathMapper + - src.extractors.docs-deterministic.qualifyingStatement + - src.extractors.docs-deterministic.readParagraph + - src.extractors.docs-deterministic.resolver + - src.extractors.docs-deterministic.root + - src.extractors.docs-deterministic.statementRecord + - src.extractors.docs-deterministic.targetsOf + src.extractors.docs-llm: + - src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage + - src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk + - src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent + - src.extractors.docs-llm.DocumentationLlmRequiredError.files + - src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks + - src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt + - src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient + - src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget + src.extractors.docs-record: + - src.extractors.docs-record.OBJECT_PLACEHOLDERS + - src.extractors.docs-record.action + - src.extractors.docs-record.allowedAction + - src.extractors.docs-record.allowedLifecycle + - src.extractors.docs-record.allowedModality + - src.extractors.docs-record.anchorToSource + - src.extractors.docs-record.clampLine + - src.extractors.docs-record.fallback + - src.extractors.docs-record.hasTarget + - src.extractors.docs-record.isPlaceholder + - src.extractors.docs-record.keywordOverlap + - src.extractors.docs-record.linesFromChunk + - src.extractors.docs-record.modality + - src.extractors.docs-record.resolveAction + - src.extractors.docs-record.resolveModality + - src.extractors.docs-record.resolveObject + - src.extractors.docs-record.resolveTarget + - src.extractors.docs-record.statementText + - src.extractors.docs-record.target + - src.extractors.docs-record.toDocumentIntentRecord + src.extractors.docs-schema: + - src.extractors.docs-schema.documentRecord + - src.extractors.docs-schema.documentResponseContract + - src.extractors.docs-schema.documentResponseSchema + - src.extractors.docs-schema.strings + - src.extractors.docs-schema.target + src.extractors.git: + - src.extractors.git.count + - src.extractors.git.createDiscoveryState + - src.extractors.git.discoverGitRepositories + - src.extractors.git.execFileAsync + - src.extractors.git.extractChangedSymbols + - src.extractors.git.extractGitIntent + - src.extractors.git.extractRepositoryGitIntent + - src.extractors.git.filterDiscoveryChildren + - src.extractors.git.finishDiscovery + - src.extractors.git.gitMarkerState + - src.extractors.git.hasMoreDiscoveryWork + - src.extractors.git.isGitWorkTree + - src.extractors.git.mapWithConcurrency + - src.extractors.git.processDiscoveryDirectory + - src.extractors.git.readChangedFiles + - src.extractors.git.readCommits + - src.extractors.git.readDiscoveryEntries + - src.extractors.git.readStats + - src.extractors.git.registerDiscoveredRepository + - src.extractors.git.resolveDiscoveryPrefix + - src.extractors.git.result + - src.extractors.git.root + - src.extractors.git.runGit + - src.extractors.git.state + - src.extractors.git.takeNextDiscoveryDirectory + src.extractors.markdown-llm: + - src.extractors.markdown-llm.MarkdownAttemptError.emptyCoverage + - src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering + - src.extractors.markdown-llm.MarkdownAttemptError.enrichMarkdownBatchWithCorrection + - src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch + - src.extractors.markdown-llm.MarkdownAttemptError.enrichment + - src.extractors.markdown-llm.MarkdownAttemptError.failed + - src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow + - src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic + - src.extractors.markdown-llm.MarkdownAttemptError.markdownResponseContract + - src.extractors.markdown-llm.MarkdownAttemptError.readPrompt + - src.extractors.markdown-llm.MarkdownAttemptError.stageAudit + - src.extractors.markdown-llm.MarkdownAttemptError.strings + - src.extractors.markdown-llm.MarkdownLlmRequiredError.client + - src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic + - src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited + - src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes + - src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt + src.extractors.markdown-paths: + - src.extractors.markdown-paths.addBasenameIndexMatch + - src.extractors.markdown-paths.basenames + - src.extractors.markdown-paths.buildBasenameIndex + - src.extractors.markdown-paths.createBasenameIndexState + - src.extractors.markdown-paths.createMarkdownPathResolver + - src.extractors.markdown-paths.headingDirectories + - src.extractors.markdown-paths.headingScopes + - src.extractors.markdown-paths.index + - src.extractors.markdown-paths.isNestedCheckout + - src.extractors.markdown-paths.isRepositoryPath + - src.extractors.markdown-paths.readBasenameDirectoryEntries + - src.extractors.markdown-paths.repositoryRoot + - src.extractors.markdown-paths.scanDirectoryForBasenames + - src.extractors.markdown-paths.state + src.extractors.nl: + - src.extractors.nl.absolute + - src.extractors.nl.action + - src.extractors.nl.assertNlExtractionOptions + - src.extractors.nl.body + - src.extractors.nl.classified + - src.extractors.nl.confidence + - src.extractors.nl.detectMissingFields + - src.extractors.nl.extractNlIntent + - src.extractors.nl.inferActor + - src.extractors.nl.missing + - src.extractors.nl.object + - src.extractors.nl.sourcePath + src.extractors.nl-llm: + - src.extractors.nl-llm.NlAttemptError.NL_RECORD_CONTRACT + - src.extractors.nl-llm.NlAttemptError.action + - src.extractors.nl-llm.NlAttemptError.allowedAction + - src.extractors.nl-llm.NlAttemptError.allowedModality + - src.extractors.nl-llm.NlAttemptError.audit + - src.extractors.nl-llm.NlAttemptError.clampLine + - src.extractors.nl-llm.NlAttemptError.deterministic + - src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection + - src.extractors.nl-llm.NlAttemptError.failedAudit + - src.extractors.nl-llm.NlAttemptError.fallback + - src.extractors.nl-llm.NlAttemptError.fallbackOrThrow + - src.extractors.nl-llm.NlAttemptError.isPlaceholder + - src.extractors.nl-llm.NlAttemptError.lines + - src.extractors.nl-llm.NlAttemptError.markDeterministic + - src.extractors.nl-llm.NlAttemptError.nlStrings + - src.extractors.nl-llm.NlAttemptError.nonEmptyText + - src.extractors.nl-llm.NlAttemptError.normalizedText + - src.extractors.nl-llm.NlAttemptError.resolveAction + - src.extractors.nl-llm.NlAttemptError.resolveObject + - src.extractors.nl-llm.NlAttemptError.sourceExcerpt + - src.extractors.nl-llm.NlAttemptError.statementText + - src.extractors.nl-llm.NlAttemptError.toIntentRecord + - src.extractors.nl-llm.NlLlmRequiredError.absolute + - src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions + - src.extractors.nl-llm.NlLlmRequiredError.body + - src.extractors.nl-llm.NlLlmRequiredError.client + - src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited + - src.extractors.nl-llm.NlLlmRequiredError.maxLine + - src.extractors.nl-llm.NlLlmRequiredError.prompt + - src.extractors.nl-llm.NlLlmRequiredError.result + - src.extractors.nl-llm.NlLlmRequiredError.sourcePath + - src.extractors.nl-llm.NlLlmRequiredError.startedAt + src.extractors.runtime-cycle: + - src.extractors.runtime-cycle.MAX_PER_SECTION + - src.extractors.runtime-cycle.boundedArray + - src.extractors.runtime-cycle.driftRecord + - src.extractors.runtime-cycle.extractRuntimeCycleIntent + - src.extractors.runtime-cycle.factsMetadata + - src.extractors.runtime-cycle.jsonScalar + - src.extractors.runtime-cycle.label + - src.extractors.runtime-cycle.parseCycle + - src.extractors.runtime-cycle.probeRecord + - src.extractors.runtime-cycle.proposalAction + - src.extractors.runtime-cycle.proposalRecord + - src.extractors.runtime-cycle.results + - src.extractors.runtime-cycle.sourcePathFor + - src.extractors.runtime-cycle.tags + - src.extractors.runtime-cycle.text + - src.extractors.runtime-cycle.violationRecord + - src.extractors.runtime-cycle.watched + src.extractors.todo: + - src.extractors.todo.action + - src.extractors.todo.block + - src.extractors.todo.body + - src.extractors.todo.checked + - src.extractors.todo.classified + - src.extractors.todo.extractExplicitId + - src.extractors.todo.extractTodo + - src.extractors.todo.heading + - src.extractors.todo.inferOwner + - src.extractors.todo.lines + - src.extractors.todo.match + - src.extractors.todo.raw + - src.extractors.todo.relative + - src.extractors.todo.resolvedPaths + - src.extractors.todo.task + - src.extractors.todo.text + src.graph.diff: + - src.graph.diff.afterGroups + - src.graph.diff.afterRecord + - src.graph.diff.assertGraph + - src.graph.diff.beforeGroups + - src.graph.diff.beforeRecord + - src.graph.diff.changedFieldPaths + - src.graph.diff.compareRelations + - src.graph.diff.diffIntentGraphs + - src.graph.diff.escapeXml + - src.graph.diff.groupRecords + - src.graph.diff.groups + - src.graph.diff.height + - src.graph.diff.isObject + - src.graph.diff.left + - src.graph.diff.metricCard + - src.graph.diff.normalizeRecord + - src.graph.diff.paired + - src.graph.diff.recordIdentity + - src.graph.diff.relationKey + - src.graph.diff.renderGraphDiffSvg + - src.graph.diff.right + - src.graph.diff.truncate + - src.graph.diff.values + - src.graph.diff.visibleRows + - src.graph.diff.width + - src.graph.diff.y + src.graph.linker: + - src.graph.linker.addToBucket + - src.graph.linker.aliases + - src.graph.linker.astIds + - src.graph.linker.buckets + - src.graph.linker.byId + - src.graph.linker.candidatePairs + - src.graph.linker.collectCandidatePairs + - src.graph.linker.configurationIds + - src.graph.linker.declarationAstIds + - src.graph.linker.deduplicateRecords + - src.graph.linker.determineRelation + - src.graph.linker.expand + - src.graph.linker.indexAliases + - src.graph.linker.indexKeywordBuckets + - src.graph.linker.indexKeywords + - src.graph.linker.indexResolvableBasenames + - src.graph.linker.indexTargetBuckets + - src.graph.linker.indexTopicBuckets + - src.graph.linker.intersects + - src.graph.linker.intersectsAliases + - src.graph.linker.isFileAggregateEvidencePair + - src.graph.linker.isModuleTopicSource + - src.graph.linker.isSuppressedAstPair + - src.graph.linker.isSuppressedConfigurationPair + - src.graph.linker.jaccard + - src.graph.linker.keywordIndex + - src.graph.linker.leftId + - src.graph.linker.leftKeywords + - src.graph.linker.linkIntentRecords + - src.graph.linker.moduleAstIds + - src.graph.linker.owners + - src.graph.linker.pairsFromBuckets + - src.graph.linker.pathsIntersect + - src.graph.linker.records + - src.graph.linker.resolvableBasenames + - src.graph.linker.rightId + - src.graph.linker.score + - src.graph.linker.scorePair + - src.graph.linker.set + - src.graph.linker.symbolResolutionIndex + - src.graph.linker.values + src.graph.symbol-resolution: + - src.graph.symbol-resolution.buildSymbolResolutionIndex + - src.graph.symbol-resolution.byAlias + - src.graph.symbol-resolution.byNlRecord + - src.graph.symbol-resolution.hasResolvedNlAstSymbolPair + - src.graph.symbol-resolution.isAstDeclaration + - src.graph.symbol-resolution.pathSelects + - src.graph.symbol-resolution.resolveSymbol + - src.graph.symbol-resolution.selected + - src.graph.symbol-resolution.uniquePaths + - src.graph.symbol-resolution.values entry_points: - examples.backend.src.server.MAX_BODY_BYTES - examples.backend.src.server.body @@ -4385,7 +4972,6 @@ entry_points: - examples.frontend.src.api.ApiError.payload - examples.frontend.src.api.ApiError.publishEvent - examples.frontend.src.api.ApiError.response -- examples.frontend.src.api.ApiError.super - examples.frontend.src.api.ApiError.url - examples.frontend.src.app.message - examples.frontend.src.app.mountPanel @@ -4408,6 +4994,9 @@ entry_points: - java.JavaAstExtract.JavaAstExtract.main - php.ast_extract.argumentValue - php.ast_extract.parseFile +- project.cleanup_analysis_snapshot +- project.install_project_package +- project.run_analysis_tool - python.ast_extract.FactVisitor.__init__ - python.ast_extract.FactVisitor.add - python.ast_extract.FactVisitor.add_named_constant @@ -4805,6 +5394,7 @@ entry_points: - sdk.typescript.src.T2CClient.task - sdk.typescript.src.T2CClient.timer - sdk.typescript.src.T2CError.super +- src.cli.absolute - src.cli.actor - src.cli.afterFile - src.cli.afterGraphPath @@ -4813,10 +5403,12 @@ entry_points: - src.cli.audit - src.cli.beforeFile - src.cli.beforeGraphPath +- src.cli.buildDiffPayload - src.cli.command - src.cli.config - src.cli.context - src.cli.controller +- src.cli.cycle - src.cli.diagnostics - src.cli.diagnosticsPath - src.cli.diff @@ -4826,6 +5418,34 @@ entry_points: - src.cli.graphFile - src.cli.graphOut - src.cli.graphPath +- src.cli.handleApplySourcePatch +- src.cli.handleApplyTodo +- src.cli.handleCloseCodeChange +- src.cli.handleCommunication +- src.cli.handleCompareWorkspace +- src.cli.handleDiagnose +- src.cli.handleDiff +- src.cli.handleEvaluateCodeChange +- src.cli.handleExtract +- src.cli.handleExtractAst +- src.cli.handleExtractCommunication +- src.cli.handleExtractConfig +- src.cli.handleExtractDocs +- src.cli.handleExtractGit +- src.cli.handleExtractMarkdown +- src.cli.handleExtractNl +- src.cli.handleExtractRuntime +- src.cli.handleIntake +- src.cli.handleLink +- src.cli.handlePipeline +- src.cli.handleProposeCodeChange +- src.cli.handleProposeSourcePatch +- src.cli.handleProposeTodo +- src.cli.handleReality +- src.cli.handleRenderCodeChange +- src.cli.handleRenderTodo +- src.cli.handleSummarize +- src.cli.handleWatch - src.cli.html - src.cli.inline - src.cli.inputPath @@ -4838,6 +5458,7 @@ entry_points: - src.cli.name - src.cli.next - src.cli.number +- src.cli.operation - src.cli.options - src.cli.out - src.cli.output @@ -4907,46 +5528,130 @@ entry_points: - src.communication.identity.external - src.communication.identity.extra - src.communication.identity.ids +- src.communication.identity.key +- src.communication.identity.kind - src.communication.identity.loadParticipantIdentityRegistry - src.communication.identity.missing - src.communication.identity.normalized - src.communication.identity.owner +- src.communication.identity.participants +- src.communication.identity.principals - src.communication.identity.registry - src.communication.identity.registryPath +- src.communication.identity.v1Path +- src.communication.identity.v2Path - src.communication.identity.values -- src.communication.llm.CommunicationAttemptError.COMMUNICATION_ENRICHMENT_CONTRACT -- src.communication.llm.CommunicationAttemptError.COMMUNICATION_RESPONSE_CONTRACT -- src.communication.llm.CommunicationAttemptError.PARTICIPANT_SYNTHESIS_CONTRACT -- src.communication.llm.CommunicationAttemptError.byKey -- src.communication.llm.CommunicationAttemptError.completion -- src.communication.llm.CommunicationAttemptError.expected -- src.communication.llm.CommunicationAttemptError.failed -- src.communication.llm.CommunicationAttemptError.group -- src.communication.llm.CommunicationAttemptError.grouped -- src.communication.llm.CommunicationAttemptError.key -- src.communication.llm.CommunicationAttemptError.marked -- src.communication.llm.CommunicationAttemptError.output -- src.communication.llm.CommunicationAttemptError.participant -- src.communication.llm.CommunicationAttemptError.permitted -- src.communication.llm.CommunicationAttemptError.promptPath -- src.communication.llm.CommunicationAttemptError.recordIds -- src.communication.llm.CommunicationAttemptError.role -- src.communication.llm.CommunicationAttemptError.seen -- src.communication.llm.CommunicationAttemptError.super -- src.communication.llm.CommunicationLlmRequiredError.client -- src.communication.llm.CommunicationLlmRequiredError.deterministic -- src.communication.llm.CommunicationLlmRequiredError.enrichedByOriginal -- src.communication.llm.CommunicationLlmRequiredError.enrichments -- src.communication.llm.CommunicationLlmRequiredError.extractCommunicationIntentAudited -- src.communication.llm.CommunicationLlmRequiredError.failure -- src.communication.llm.CommunicationLlmRequiredError.generation -- src.communication.llm.CommunicationLlmRequiredError.groups -- src.communication.llm.CommunicationLlmRequiredError.participants -- src.communication.llm.CommunicationLlmRequiredError.records -- src.communication.llm.CommunicationLlmRequiredError.response -- src.communication.llm.CommunicationLlmRequiredError.responses -- src.communication.llm.CommunicationLlmRequiredError.startedAt -- src.communication.llm.CommunicationLlmRequiredError.super +- src.communication.intake-contract.IntakeError.allowed +- src.communication.intake-contract.IntakeError.assertIntakeEnvelope +- src.communication.intake-contract.IntakeError.base +- src.communication.intake-contract.IntakeError.diagnostic +- src.communication.intake-contract.IntakeError.entry +- src.communication.intake-contract.IntakeError.envelope +- src.communication.intake-contract.IntakeError.extra +- src.communication.intake-contract.IntakeError.known +- src.communication.intake-contract.IntakeError.missing +- src.communication.intake-contract.IntakeError.principal +- src.communication.intake-contract.IntakeError.principalKey +- src.communication.intake-contract.IntakeError.record +- src.communication.intake-contract.IntakeError.super +- src.communication.intake-contract.IntakeError.type +- src.communication.intake-protobuf.byte +- src.communication.intake-protobuf.data +- src.communication.intake-protobuf.decodeIntakeEnvelope +- src.communication.intake-protobuf.decodeIntakeResult +- src.communication.intake-protobuf.encodeIntakeEnvelope +- src.communication.intake-protobuf.encodeIntakeResult +- src.communication.intake-protobuf.field +- src.communication.intake-protobuf.fieldStart +- src.communication.intake-protobuf.number +- src.communication.intake-protobuf.numbers +- src.communication.intake-protobuf.offset +- src.communication.intake-protobuf.operation +- src.communication.intake-protobuf.payload +- src.communication.intake-protobuf.raw +- src.communication.intake-protobuf.remaining +- src.communication.intake-protobuf.strings +- src.communication.intake-protobuf.value +- src.communication.intake-protobuf.values +- src.communication.intake-protobuf.wire +- src.communication.intake-service.GovernedIntakeService.actor +- src.communication.intake-service.GovernedIntakeService.actual +- src.communication.intake-service.GovernedIntakeService.appended +- src.communication.intake-service.GovernedIntakeService.assertProjectionWritable +- src.communication.intake-service.GovernedIntakeService.body +- src.communication.intake-service.GovernedIntakeService.candidates +- src.communication.intake-service.GovernedIntakeService.command +- src.communication.intake-service.GovernedIntakeService.commandEnvelope +- src.communication.intake-service.GovernedIntakeService.conflictingFiles +- src.communication.intake-service.GovernedIntakeService.directory +- src.communication.intake-service.GovernedIntakeService.envelope +- src.communication.intake-service.GovernedIntakeService.event +- src.communication.intake-service.GovernedIntakeService.existing +- src.communication.intake-service.GovernedIntakeService.hash +- src.communication.intake-service.GovernedIntakeService.key +- src.communication.intake-service.GovernedIntakeService.messages +- src.communication.intake-service.GovernedIntakeService.participant +- src.communication.intake-service.GovernedIntakeService.participantId +- src.communication.intake-service.GovernedIntakeService.participants +- src.communication.intake-service.GovernedIntakeService.payload +- src.communication.intake-service.GovernedIntakeService.projectionHash +- src.communication.intake-service.GovernedIntakeService.rejectSecrets +- src.communication.intake-service.GovernedIntakeService.roleFiles +- src.communication.intake-service.GovernedIntakeService.slug +- src.communication.intake-service.GovernedIntakeService.stat +- src.communication.intake-service.GovernedIntakeService.state +- src.communication.intake-service.GovernedIntakeService.stream +- src.communication.intake-service.GovernedIntakeService.target +- src.communication.intake-service.GovernedIntakeService.ticketId +- src.communication.intake-service.GovernedIntakeService.updated +- src.communication.intake-service.GovernedIntakeService.writeProjection +- src.communication.intake-store.IntakeEventStore.event +- src.communication.intake-store.IntakeEventStore.eventPath +- src.communication.intake-store.IntakeEventStore.existing +- src.communication.intake-store.IntakeEventStore.lockPath +- src.communication.intake-store.IntakeEventStore.name +- src.communication.intake-store.IntakeEventStore.names +- src.communication.intake-store.IntakeEventStore.projectionPath +- src.communication.intake-store.IntakeEventStore.read +- src.communication.intake-store.IntakeEventStore.safe +- src.communication.intake-store.IntakeEventStore.slug +- src.communication.intake-store.IntakeEventStore.stat +- src.communication.intake-store.IntakeEventStore.stream +- src.communication.intake-store.IntakeEventStore.temp +- src.communication.intake-store.IntakeEventStore.writeRegistry +- src.communication.llm.implementation.CommunicationAttemptError.COMMUNICATION_ENRICHMENT_CONTRACT +- src.communication.llm.implementation.CommunicationAttemptError.COMMUNICATION_RESPONSE_CONTRACT +- src.communication.llm.implementation.CommunicationAttemptError.PARTICIPANT_SYNTHESIS_CONTRACT +- src.communication.llm.implementation.CommunicationAttemptError.byKey +- src.communication.llm.implementation.CommunicationAttemptError.completion +- src.communication.llm.implementation.CommunicationAttemptError.expected +- src.communication.llm.implementation.CommunicationAttemptError.failed +- src.communication.llm.implementation.CommunicationAttemptError.group +- src.communication.llm.implementation.CommunicationAttemptError.grouped +- src.communication.llm.implementation.CommunicationAttemptError.key +- src.communication.llm.implementation.CommunicationAttemptError.marked +- src.communication.llm.implementation.CommunicationAttemptError.output +- src.communication.llm.implementation.CommunicationAttemptError.participant +- src.communication.llm.implementation.CommunicationAttemptError.permitted +- src.communication.llm.implementation.CommunicationAttemptError.promptPath +- src.communication.llm.implementation.CommunicationAttemptError.recordIds +- src.communication.llm.implementation.CommunicationAttemptError.role +- src.communication.llm.implementation.CommunicationAttemptError.seen +- src.communication.llm.implementation.CommunicationAttemptError.super +- src.communication.llm.implementation.CommunicationLlmRequiredError.client +- src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic +- src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal +- src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments +- src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited +- src.communication.llm.implementation.CommunicationLlmRequiredError.failure +- src.communication.llm.implementation.CommunicationLlmRequiredError.generation +- src.communication.llm.implementation.CommunicationLlmRequiredError.groups +- src.communication.llm.implementation.CommunicationLlmRequiredError.participants +- src.communication.llm.implementation.CommunicationLlmRequiredError.records +- src.communication.llm.implementation.CommunicationLlmRequiredError.response +- src.communication.llm.implementation.CommunicationLlmRequiredError.responses +- src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt +- src.communication.llm.implementation.CommunicationLlmRequiredError.super - src.comparison.workspace.absolute - src.comparison.workspace.alignmentRateDelta - src.comparison.workspace.artifacts @@ -5064,88 +5769,115 @@ entry_points: - src.core.record.separator - src.core.record.used - src.core.record.withRecordGeneration -- src.core.schema.ACTIONS -- src.core.schema.CODE_CHANGE_ACTIONS -- src.core.schema.CODE_CHANGE_RISK_LEVELS -- src.core.schema.CONCLUSION_KINDS -- src.core.schema.DIAGNOSTIC_SEVERITIES -- src.core.schema.EPISTEMIC_CLASSES -- src.core.schema.GENERATION_EFFECTIVE_MODES -- src.core.schema.GENERATION_REQUESTED_MODES -- src.core.schema.LIFECYCLES -- src.core.schema.MODALITIES -- src.core.schema.POLARITIES -- src.core.schema.RELATION_TYPES -- src.core.schema.SOURCE_KINDS -- src.core.schema.TODO_PRIORITIES -- src.core.schema.acceptance -- src.core.schema.actual -- src.core.schema.afterKnown -- src.core.schema.assertCodeChangeAcceptance -- src.core.schema.assertCodeChangePlan -- src.core.schema.assertCodeChangePlans -- src.core.schema.assertCodeChangePlansForReview -- src.core.schema.assertConclusion -- src.core.schema.assertIntentGraphDiff -- src.core.schema.assertTodoProposal -- src.core.schema.beforeKnown -- src.core.schema.byId -- src.core.schema.change -- src.core.schema.changePaths -- src.core.schema.conclusion -- src.core.schema.conclusions -- src.core.schema.diagnostic -- src.core.schema.diagnosticIds -- src.core.schema.diff -- src.core.schema.epistemic -- src.core.schema.evidence -- src.core.schema.expectedAccepted -- src.core.schema.expectedBlocking -- src.core.schema.expectedCleared -- src.core.schema.expectedFingerprint -- src.core.schema.expectedGenerator -- src.core.schema.expectedHash -- src.core.schema.expectedId -- src.core.schema.expectedRemaining -- src.core.schema.expectedSet -- src.core.schema.extra -- src.core.schema.generation -- src.core.schema.graph -- src.core.schema.id -- src.core.schema.ids -- src.core.schema.key -- src.core.schema.known -- src.core.schema.lifecycle -- src.core.schema.lines -- src.core.schema.metadata -- src.core.schema.missing -- src.core.schema.normalized -- src.core.schema.normalizedPath -- src.core.schema.plan -- src.core.schema.proposal -- src.core.schema.proposalIds -- src.core.schema.proposals -- src.core.schema.record -- src.core.schema.recordIds -- src.core.schema.records -- src.core.schema.referencedConclusionIds -- src.core.schema.relation -- src.core.schema.relationIds -- src.core.schema.relations -- src.core.schema.report -- src.core.schema.risk -- src.core.schema.semantic -- src.core.schema.separator -- src.core.schema.source -- src.core.schema.start -- src.core.schema.statement -- src.core.schema.stats -- src.core.schema.summary -- src.core.schema.target -- src.core.schema.targetPaths -- src.core.schema.unknown -- src.core.schema.visited -- src.core.schema.visiting +- src.core.schema.code-change.acceptance +- src.core.schema.code-change.afterKnown +- src.core.schema.code-change.assertCodeChangeAcceptance +- src.core.schema.code-change.assertCodeChangePlan +- src.core.schema.code-change.assertCodeChangePlans +- src.core.schema.code-change.assertCodeChangePlansForReview +- src.core.schema.code-change.beforeKnown +- src.core.schema.code-change.change +- src.core.schema.code-change.changePaths +- src.core.schema.code-change.conclusions +- src.core.schema.code-change.evidence +- src.core.schema.code-change.expectedAccepted +- src.core.schema.code-change.expectedBlocking +- src.core.schema.code-change.expectedCleared +- src.core.schema.code-change.expectedHash +- src.core.schema.code-change.expectedId +- src.core.schema.code-change.expectedRemaining +- src.core.schema.code-change.id +- src.core.schema.code-change.ids +- src.core.schema.code-change.known +- src.core.schema.code-change.normalizedPath +- src.core.schema.code-change.plan +- src.core.schema.code-change.proposal +- src.core.schema.code-change.proposalIds +- src.core.schema.code-change.proposals +- src.core.schema.code-change.referencedConclusionIds +- src.core.schema.code-change.risk +- src.core.schema.code-change.semantic +- src.core.schema.code-change.target +- src.core.schema.code-change.targetPaths +- src.core.schema.conclusions.assertConclusion +- src.core.schema.conclusions.assertTodoProposal +- src.core.schema.conclusions.assertTodoProposalReferenceValue +- src.core.schema.conclusions.assertTodoProposals +- src.core.schema.conclusions.conclusion +- src.core.schema.conclusions.diagnostic +- src.core.schema.conclusions.diagnosticIds +- src.core.schema.conclusions.expectedId +- src.core.schema.conclusions.id +- src.core.schema.conclusions.ids +- src.core.schema.conclusions.known +- src.core.schema.conclusions.proposal +- src.core.schema.conclusions.proposalIds +- src.core.schema.conclusions.report +- src.core.schema.conclusions.target +- src.core.schema.constants.ACTIONS +- src.core.schema.constants.CODE_CHANGE_ACTIONS +- src.core.schema.constants.CODE_CHANGE_RISK_LEVELS +- src.core.schema.constants.CONCLUSION_KINDS +- src.core.schema.constants.DIAGNOSTIC_SEVERITIES +- src.core.schema.constants.EPISTEMIC_CLASSES +- src.core.schema.constants.GENERATION_EFFECTIVE_MODES +- src.core.schema.constants.GENERATION_REQUESTED_MODES +- src.core.schema.constants.LIFECYCLES +- src.core.schema.constants.MODALITIES +- src.core.schema.constants.POLARITIES +- src.core.schema.constants.RELATION_TYPES +- src.core.schema.constants.SOURCE_KINDS +- src.core.schema.constants.TODO_PRIORITIES +- src.core.schema.intent.assertIntentGraph +- src.core.schema.intent.assertIntentGraphDiff +- src.core.schema.intent.change +- src.core.schema.intent.diff +- src.core.schema.intent.epistemic +- src.core.schema.intent.expectedFingerprint +- src.core.schema.intent.expectedGenerator +- src.core.schema.intent.generation +- src.core.schema.intent.graph +- src.core.schema.intent.lifecycle +- src.core.schema.intent.lines +- src.core.schema.intent.metadata +- src.core.schema.intent.record +- src.core.schema.intent.recordIds +- src.core.schema.intent.records +- src.core.schema.intent.relation +- src.core.schema.intent.relationIds +- src.core.schema.intent.relations +- src.core.schema.intent.separator +- src.core.schema.intent.source +- src.core.schema.intent.statement +- src.core.schema.intent.stats +- src.core.schema.intent.summary +- src.core.schema.intent.target +- src.core.schema.utils.actual +- src.core.schema.utils.assertAcyclicProposalDependencies +- src.core.schema.utils.assertGroundedGenerationMetadata +- src.core.schema.utils.byId +- src.core.schema.utils.confidence +- src.core.schema.utils.countMap +- src.core.schema.utils.countRecords +- src.core.schema.utils.exactCounts +- src.core.schema.utils.exactStringSet +- src.core.schema.utils.expectedSet +- src.core.schema.utils.extra +- src.core.schema.utils.generation +- src.core.schema.utils.isJsonValue +- src.core.schema.utils.key +- src.core.schema.utils.knownReferences +- src.core.schema.utils.missing +- src.core.schema.utils.nonEmptyString +- src.core.schema.utils.nonEmptyUniqueIdArray +- src.core.schema.utils.nonEmptyUniqueStringArray +- src.core.schema.utils.normalized +- src.core.schema.utils.nullableDate +- src.core.schema.utils.repositoryPath +- src.core.schema.utils.start +- src.core.schema.utils.unknown +- src.core.schema.utils.visited +- src.core.schema.utils.visiting - src.core.security.ancestorReal - src.core.security.assertPathWithinRoot - src.core.security.candidateAbsolute @@ -5262,6 +5994,7 @@ entry_points: - src.diff.reality.path - src.diff.reality.paths - src.diff.reality.pillWidth +- src.diff.reality.raw - src.diff.reality.renderRealityMarkdown - src.diff.reality.renderRealitySvg - src.diff.reality.resolved @@ -5509,6 +6242,7 @@ entry_points: - src.extractors.changelog.versionHeading - src.extractors.communication.action - src.extractors.communication.classified +- src.extractors.communication.classifiedSegments - src.extractors.communication.cleaned - src.extractors.communication.communicationFiles - src.extractors.communication.declaredA2aAgentId @@ -5525,6 +6259,7 @@ entry_points: - src.extractors.communication.explicitSymbols - src.extractors.communication.extractCommunicationIntent - src.extractors.communication.fileParts +- src.extractors.communication.fileResult - src.extractors.communication.files - src.extractors.communication.gitAuthors - src.extractors.communication.governance @@ -5539,6 +6274,7 @@ entry_points: - src.extractors.communication.nestedParticipant - src.extractors.communication.nestedRole - src.extractors.communication.nestedRoleIndex +- src.extractors.communication.newRecords - src.extractors.communication.normalized - src.extractors.communication.parsed - src.extractors.communication.participant @@ -5546,6 +6282,7 @@ entry_points: - src.extractors.communication.pathTicket - src.extractors.communication.projectRoot - src.extractors.communication.raw +- src.extractors.communication.rawTimestamp - src.extractors.communication.recipient - src.extractors.communication.relativeToProject - src.extractors.communication.role @@ -5553,6 +6290,7 @@ entry_points: - src.extractors.communication.segmentType - src.extractors.communication.segments - src.extractors.communication.semantics +- src.extractors.communication.semanticsFor - src.extractors.communication.stripped - src.extractors.communication.ticket - src.extractors.communication.timestamp @@ -5610,24 +6348,28 @@ entry_points: - src.extractors.docs-deterministic.block - src.extractors.docs-deterministic.body - src.extractors.docs-deterministic.bullet +- src.extractors.docs-deterministic.bulletRecord - src.extractors.docs-deterministic.cursor - src.extractors.docs-deterministic.extractDocumentationBaseline -- src.extractors.docs-deterministic.fenceMatch - src.extractors.docs-deterministic.hasCodeSpanIdentifier - src.extractors.docs-deterministic.heading +- src.extractors.docs-deterministic.headingRecord - src.extractors.docs-deterministic.language - src.extractors.docs-deterministic.level - src.extractors.docs-deterministic.line +- src.extractors.docs-deterministic.lineResult - src.extractors.docs-deterministic.lines - src.extractors.docs-deterministic.mapped - src.extractors.docs-deterministic.marker - src.extractors.docs-deterministic.paragraph +- src.extractors.docs-deterministic.paragraphResult - src.extractors.docs-deterministic.raw - src.extractors.docs-deterministic.record - src.extractors.docs-deterministic.relative - src.extractors.docs-deterministic.resolved - src.extractors.docs-deterministic.resolver - src.extractors.docs-deterministic.root +- src.extractors.docs-deterministic.sectionHeading - src.extractors.docs-deterministic.target - src.extractors.docs-deterministic.title - src.extractors.docs-llm.DocumentationLlmRequiredError.body @@ -5674,26 +6416,42 @@ entry_points: - src.extractors.docs-record.wanted - src.extractors.docs-schema.documentRecord - src.extractors.docs-schema.documentResponseSchema +- src.extractors.git.DISCOVERY_EXCLUDED_DIRECTORIES +- src.extractors.git.MAX_DISCOVERED_REPOSITORIES +- src.extractors.git.MAX_DISCOVERY_DIRECTORIES +- src.extractors.git.REPOSITORY_READ_CONCURRENCY - src.extractors.git.additions - src.extractors.git.changedFiles +- src.extractors.git.child - src.extractors.git.classified - src.extractors.git.commit - src.extractors.git.count +- src.extractors.git.current +- src.extractors.git.cursor - src.extractors.git.deletions - src.extractors.git.diff +- src.extractors.git.discovery - src.extractors.git.docOnly +- src.extractors.git.entries - src.extractors.git.extractGitIntent +- src.extractors.git.index - src.extractors.git.inferredSymbols -- src.extractors.git.inside - src.extractors.git.isDocumentationPath +- src.extractors.git.marker - src.extractors.git.message - src.extractors.git.output - src.extractors.git.parts +- src.extractors.git.prefix - src.extractors.git.result +- src.extractors.git.results - src.extractors.git.root +- src.extractors.git.scopedFiles +- src.extractors.git.state - src.extractors.git.stats - src.extractors.git.status - src.extractors.git.symbol +- src.extractors.git.value +- src.extractors.git.workers - src.extractors.markdown-block.cursor - src.extractors.markdown-block.line - src.extractors.markdown-block.readListBlock @@ -5727,16 +6485,16 @@ entry_points: - src.extractors.markdown-paths.MAX_INDEXED_FILES - src.extractors.markdown-paths.PATH_SEARCH_EXCLUDES - src.extractors.markdown-paths.absolute -- src.extractors.markdown-paths.base - src.extractors.markdown-paths.candidate - src.extractors.markdown-paths.createMarkdownPathResolver - src.extractors.markdown-paths.directory +- src.extractors.markdown-paths.entries - src.extractors.markdown-paths.headingDirectories - src.extractors.markdown-paths.index - src.extractors.markdown-paths.matches - src.extractors.markdown-paths.normalized - src.extractors.markdown-paths.repositoryRoot -- src.extractors.markdown-paths.seen +- src.extractors.markdown-paths.state - src.extractors.markdown.changelog - src.extractors.markdown.extractMarkdownIntent - src.extractors.markdown.pathResolver @@ -5748,7 +6506,6 @@ entry_points: - src.extractors.nl-llm.NlAttemptError.completion - src.extractors.nl-llm.NlAttemptError.deterministic - src.extractors.nl-llm.NlAttemptError.end -- src.extractors.nl-llm.NlAttemptError.excerpt - src.extractors.nl-llm.NlAttemptError.failedAudit - src.extractors.nl-llm.NlAttemptError.lines - src.extractors.nl-llm.NlAttemptError.normalizedText @@ -5780,6 +6537,27 @@ entry_points: - src.extractors.nl.missing - src.extractors.nl.object - src.extractors.nl.sourcePath +- src.extractors.runtime-cycle.MAX_PER_SECTION +- src.extractors.runtime-cycle.body +- src.extractors.runtime-cycle.cycle +- src.extractors.runtime-cycle.cyclePath +- src.extractors.runtime-cycle.declared +- src.extractors.runtime-cycle.detail +- src.extractors.runtime-cycle.error +- src.extractors.runtime-cycle.extractRuntimeCycleIntent +- src.extractors.runtime-cycle.fact +- src.extractors.runtime-cycle.failed +- src.extractors.runtime-cycle.host +- src.extractors.runtime-cycle.id +- src.extractors.runtime-cycle.kind +- src.extractors.runtime-cycle.objects +- src.extractors.runtime-cycle.observedAt +- src.extractors.runtime-cycle.outcome +- src.extractors.runtime-cycle.probe +- src.extractors.runtime-cycle.relative +- src.extractors.runtime-cycle.results +- src.extractors.runtime-cycle.root +- src.extractors.runtime-cycle.sourcePath - src.extractors.todo.absolute - src.extractors.todo.action - src.extractors.todo.block @@ -5958,6 +6736,7 @@ entry_points: - src.interfaces.a2a-message.parseCommand - src.interfaces.a2a-message.parseMessage - src.interfaces.a2a-message.parseSendConfiguration +- src.interfaces.a2a-message.protobuf - src.interfaces.a2a-message.qualifier - src.interfaces.a2a-message.raw - src.interfaces.a2a-message.referenceTaskIds @@ -5973,6 +6752,8 @@ entry_points: - src.interfaces.a2a-task-store.cursorTime - src.interfaces.a2a-task-store.deadline - src.interfaces.a2a-task-store.decoded +- src.interfaces.a2a-task-store.diagnostic +- src.interfaces.a2a-task-store.domainResult - src.interfaces.a2a-task-store.effectiveHistoryLength - src.interfaces.a2a-task-store.exact - src.interfaces.a2a-task-store.existing @@ -5989,10 +6770,12 @@ entry_points: - src.interfaces.a2a-task-store.messageTaskIndex - src.interfaces.a2a-task-store.next - src.interfaces.a2a-task-store.page +- src.interfaces.a2a-task-store.pageCursor - src.interfaces.a2a-task-store.pageSize -- src.interfaces.a2a-task-store.pageToken - src.interfaces.a2a-task-store.params - src.interfaces.a2a-task-store.prepared +- src.interfaces.a2a-task-store.protobuf +- src.interfaces.a2a-task-store.record - src.interfaces.a2a-task-store.restored - src.interfaces.a2a-task-store.result - src.interfaces.a2a-task-store.sendConfiguration @@ -6040,6 +6823,18 @@ entry_points: - src.interfaces.a2a.status - src.interfaces.a2a.stringMetadata - src.interfaces.a2a.url +- src.interfaces.a2a.value +- src.interfaces.intake-actions.envelope +- src.interfaces.intake-actions.envelopeInput +- src.interfaces.intake-actions.executeIntakeAction +- src.interfaces.intake-actions.operation +- src.interfaces.intake-actions.projectDir +- src.interfaces.intake-actions.requestedRoot +- src.interfaces.intake-actions.result +- src.interfaces.intake-actions.root +- src.interfaces.intake-actions.service +- src.interfaces.intake-actions.supplied +- src.interfaces.intake_cli.main - src.interfaces.mcp-errors.McpRequestError.normalizeMcpError - src.interfaces.mcp-errors.McpRequestError.super - src.interfaces.mcp-resources.filePath @@ -6270,6 +7065,7 @@ entry_points: - src.pipeline.run.runDirectory - src.pipeline.run.runId - src.pipeline.run.runPipeline +- src.pipeline.run.runtime - src.pipeline.run.summary - src.pipeline.run.summaryConclusionsPath - src.pipeline.run.summaryPath @@ -6321,29 +7117,43 @@ entry_points: - src.semantic.reranker-response.SEMANTIC_RERANK_RESPONSE_SCHEMA - src.semantic.reranker-response.assertSemanticRerankerResponse - src.semantic.reranker-response.response -- src.semantic.reranker.acceptedDeclarations -- src.semantic.reranker.added -- src.semantic.reranker.allowed -- src.semantic.reranker.applyAcceptedSemanticRelations -- src.semantic.reranker.byDeclaration -- src.semantic.reranker.candidate -- src.semantic.reranker.candidates -- src.semantic.reranker.citations -- src.semantic.reranker.comparePair -- src.semantic.reranker.createSemanticCandidateSet -- src.semantic.reranker.createSemanticRerankResult -- src.semantic.reranker.decisions -- src.semantic.reranker.declaration -- src.semantic.reranker.expectedHash -- src.semantic.reranker.grouped -- src.semantic.reranker.module -- src.semantic.reranker.quote -- src.semantic.reranker.reasons -- src.semantic.reranker.record -- src.semantic.reranker.records -- src.semantic.reranker.seenDecisions -- src.semantic.reranker.seenIds -- src.semantic.reranker.seenPairs +- src.semantic.reranker.candidate.byDeclaration +- src.semantic.reranker.candidate.comparePair +- src.semantic.reranker.candidate.createSemanticCandidateSet +- src.semantic.reranker.candidate.declaration +- src.semantic.reranker.candidate.existing +- src.semantic.reranker.candidate.expectedHash +- src.semantic.reranker.candidate.grouped +- src.semantic.reranker.candidate.module +- src.semantic.reranker.candidate.records +- src.semantic.reranker.candidate.seenIds +- src.semantic.reranker.candidate.seenPairs +- src.semantic.reranker.candidate.values +- src.semantic.reranker.result.acceptedDeclarations +- src.semantic.reranker.result.added +- src.semantic.reranker.result.allowedReasons +- src.semantic.reranker.result.allowedVerdicts +- src.semantic.reranker.result.applyAcceptedSemanticRelations +- src.semantic.reranker.result.assertSemanticVerdictReason +- src.semantic.reranker.result.candidate +- src.semantic.reranker.result.candidates +- src.semantic.reranker.result.citations +- src.semantic.reranker.result.createSemanticRerankResult +- src.semantic.reranker.result.decisions +- src.semantic.reranker.result.expectedHash +- src.semantic.reranker.result.record +- src.semantic.reranker.result.records +- src.semantic.reranker.result.seenDecisions +- src.semantic.reranker.validation.allowedReasons +- src.semantic.reranker.validation.allowedVerdicts +- src.semantic.reranker.validation.assertGroundedQuote +- src.semantic.reranker.validation.boundedScore +- src.semantic.reranker.validation.quote +- src.semantic.reranker.validation.roundedConfidence +- src.semantic.reranker.validation.validDate +- src.semantic.reranker.validation.validateGeneration +- src.semantic.reranker.validation.validateRetrieval +- src.semantic.reranker.validation.validateVerdictReason - src.services.actions.after - src.services.actions.afterDiagnostics - src.services.actions.afterGraph @@ -6448,96 +7258,96 @@ entry_points: - src.synthesis.code-change-path.lowerSegments - src.synthesis.code-change-path.normalized - src.synthesis.code-change-path.segments -- src.synthesis.code-change-plan.IMPLEMENTATION_DIAGNOSTIC_CODES -- src.synthesis.code-change-plan.absolute -- src.synthesis.code-change-plan.acceptances -- src.synthesis.code-change-plan.accepted -- src.synthesis.code-change-plan.acceptedCount -- src.synthesis.code-change-plan.actual -- src.synthesis.code-change-plan.after -- src.synthesis.code-change-plan.afterById -- src.synthesis.code-change-plan.afterDiagnostics -- src.synthesis.code-change-plan.allowed -- src.synthesis.code-change-plan.applyCodeChangeSourcePatch -- src.synthesis.code-change-plan.artifact -- src.synthesis.code-change-plan.bare -- src.synthesis.code-change-plan.base -- src.synthesis.code-change-plan.baseLines -- src.synthesis.code-change-plan.before -- src.synthesis.code-change-plan.beforeIds -- src.synthesis.code-change-plan.body -- src.synthesis.code-change-plan.candidates -- src.synthesis.code-change-plan.changes -- src.synthesis.code-change-plan.clearedDiagnosticIds -- src.synthesis.code-change-plan.closeCodeChanges -- src.synthesis.code-change-plan.conclusions -- src.synthesis.code-change-plan.conclusionsByDiagnostic -- src.synthesis.code-change-plan.createCodeChangeReviewPatch -- src.synthesis.code-change-plan.createCodeChangeSourcePatchSet -- src.synthesis.code-change-plan.createRepositoryPathProbe -- src.synthesis.code-change-plan.createdAt -- src.synthesis.code-change-plan.criteria -- src.synthesis.code-change-plan.current -- src.synthesis.code-change-plan.cursor -- src.synthesis.code-change-plan.diffLines -- src.synthesis.code-change-plan.diffs -- src.synthesis.code-change-plan.editPath -- src.synthesis.code-change-plan.evaluatedAt -- src.synthesis.code-change-plan.existing -- src.synthesis.code-change-plan.exists -- src.synthesis.code-change-plan.expectedChanges -- src.synthesis.code-change-plan.expectedHash -- src.synthesis.code-change-plan.expectedPaths -- src.synthesis.code-change-plan.fileHashesAfter -- src.synthesis.code-change-plan.generatedAt -- src.synthesis.code-change-plan.generation -- src.synthesis.code-change-plan.graphFingerprint -- src.synthesis.code-change-plan.hashPaths -- src.synthesis.code-change-plan.index -- src.synthesis.code-change-plan.level -- src.synthesis.code-change-plan.lines -- src.synthesis.code-change-plan.mark -- src.synthesis.code-change-plan.markdown -- src.synthesis.code-change-plan.matchingConclusions -- src.synthesis.code-change-plan.matchingProposals -- src.synthesis.code-change-plan.maxPlans -- src.synthesis.code-change-plan.newBlockingDiagnosticIds -- src.synthesis.code-change-plan.newCount -- src.synthesis.code-change-plan.normalized -- src.synthesis.code-change-plan.normalizedDiff -- src.synthesis.code-change-plan.now -- src.synthesis.code-change-plan.object -- src.synthesis.code-change-plan.oldCount -- src.synthesis.code-change-plan.oldIndex -- src.synthesis.code-change-plan.patch -- src.synthesis.code-change-plan.patchHash -- src.synthesis.code-change-plan.patchIds -- src.synthesis.code-change-plan.path -- src.synthesis.code-change-plan.paths -- src.synthesis.code-change-plan.plan -- src.synthesis.code-change-plan.planHash -- src.synthesis.code-change-plan.planIds -- src.synthesis.code-change-plan.plansById -- src.synthesis.code-change-plan.proposals -- src.synthesis.code-change-plan.proposalsByDiagnostic -- src.synthesis.code-change-plan.proposeCodeChangePlans -- src.synthesis.code-change-plan.rationale -- src.synthesis.code-change-plan.rawDiff -- src.synthesis.code-change-plan.receiptPath -- src.synthesis.code-change-plan.record -- src.synthesis.code-change-plan.recordsById -- src.synthesis.code-change-plan.relatedRecords -- src.synthesis.code-change-plan.relative -- src.synthesis.code-change-plan.remainingDiagnosticIds -- src.synthesis.code-change-plan.root -- src.synthesis.code-change-plan.sourceIntents -- src.synthesis.code-change-plan.stripped -- src.synthesis.code-change-plan.symbols -- src.synthesis.code-change-plan.target -- src.synthesis.code-change-plan.targeted -- src.synthesis.code-change-plan.tickets -- src.synthesis.code-change-plan.unifiedDiff -- src.synthesis.code-change-plan.versions +- src.synthesis.code-change-plan.implementation.IMPLEMENTATION_DIAGNOSTIC_CODES +- src.synthesis.code-change-plan.implementation.absolute +- src.synthesis.code-change-plan.implementation.acceptances +- src.synthesis.code-change-plan.implementation.accepted +- src.synthesis.code-change-plan.implementation.acceptedCount +- src.synthesis.code-change-plan.implementation.actual +- src.synthesis.code-change-plan.implementation.after +- src.synthesis.code-change-plan.implementation.afterById +- src.synthesis.code-change-plan.implementation.afterDiagnostics +- src.synthesis.code-change-plan.implementation.allowed +- src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch +- src.synthesis.code-change-plan.implementation.artifact +- src.synthesis.code-change-plan.implementation.bare +- src.synthesis.code-change-plan.implementation.base +- src.synthesis.code-change-plan.implementation.baseLines +- src.synthesis.code-change-plan.implementation.before +- src.synthesis.code-change-plan.implementation.beforeIds +- src.synthesis.code-change-plan.implementation.body +- src.synthesis.code-change-plan.implementation.candidates +- src.synthesis.code-change-plan.implementation.changes +- src.synthesis.code-change-plan.implementation.clearedDiagnosticIds +- src.synthesis.code-change-plan.implementation.closeCodeChanges +- src.synthesis.code-change-plan.implementation.conclusions +- src.synthesis.code-change-plan.implementation.conclusionsByDiagnostic +- src.synthesis.code-change-plan.implementation.createCodeChangeReviewPatch +- src.synthesis.code-change-plan.implementation.createCodeChangeSourcePatchSet +- src.synthesis.code-change-plan.implementation.createRepositoryPathProbe +- src.synthesis.code-change-plan.implementation.createdAt +- src.synthesis.code-change-plan.implementation.criteria +- src.synthesis.code-change-plan.implementation.current +- src.synthesis.code-change-plan.implementation.cursor +- src.synthesis.code-change-plan.implementation.diffLines +- src.synthesis.code-change-plan.implementation.diffs +- src.synthesis.code-change-plan.implementation.editPath +- src.synthesis.code-change-plan.implementation.evaluatedAt +- src.synthesis.code-change-plan.implementation.existing +- src.synthesis.code-change-plan.implementation.exists +- src.synthesis.code-change-plan.implementation.expectedChanges +- src.synthesis.code-change-plan.implementation.expectedHash +- src.synthesis.code-change-plan.implementation.expectedPaths +- src.synthesis.code-change-plan.implementation.fileHashesAfter +- src.synthesis.code-change-plan.implementation.generatedAt +- src.synthesis.code-change-plan.implementation.generation +- src.synthesis.code-change-plan.implementation.graphFingerprint +- src.synthesis.code-change-plan.implementation.hashPaths +- src.synthesis.code-change-plan.implementation.index +- src.synthesis.code-change-plan.implementation.level +- src.synthesis.code-change-plan.implementation.lines +- src.synthesis.code-change-plan.implementation.mark +- src.synthesis.code-change-plan.implementation.markdown +- src.synthesis.code-change-plan.implementation.matchingConclusions +- src.synthesis.code-change-plan.implementation.matchingProposals +- src.synthesis.code-change-plan.implementation.maxPlans +- src.synthesis.code-change-plan.implementation.newBlockingDiagnosticIds +- src.synthesis.code-change-plan.implementation.newCount +- src.synthesis.code-change-plan.implementation.normalized +- src.synthesis.code-change-plan.implementation.normalizedDiff +- src.synthesis.code-change-plan.implementation.now +- src.synthesis.code-change-plan.implementation.object +- src.synthesis.code-change-plan.implementation.oldCount +- src.synthesis.code-change-plan.implementation.oldIndex +- src.synthesis.code-change-plan.implementation.patch +- src.synthesis.code-change-plan.implementation.patchHash +- src.synthesis.code-change-plan.implementation.patchIds +- src.synthesis.code-change-plan.implementation.path +- src.synthesis.code-change-plan.implementation.paths +- src.synthesis.code-change-plan.implementation.plan +- src.synthesis.code-change-plan.implementation.planHash +- src.synthesis.code-change-plan.implementation.planIds +- src.synthesis.code-change-plan.implementation.plansById +- src.synthesis.code-change-plan.implementation.proposals +- src.synthesis.code-change-plan.implementation.proposalsByDiagnostic +- src.synthesis.code-change-plan.implementation.proposeCodeChangePlans +- src.synthesis.code-change-plan.implementation.rationale +- src.synthesis.code-change-plan.implementation.rawDiff +- src.synthesis.code-change-plan.implementation.receiptPath +- src.synthesis.code-change-plan.implementation.record +- src.synthesis.code-change-plan.implementation.recordsById +- src.synthesis.code-change-plan.implementation.relatedRecords +- src.synthesis.code-change-plan.implementation.relative +- src.synthesis.code-change-plan.implementation.remainingDiagnosticIds +- src.synthesis.code-change-plan.implementation.root +- src.synthesis.code-change-plan.implementation.sourceIntents +- src.synthesis.code-change-plan.implementation.stripped +- src.synthesis.code-change-plan.implementation.symbols +- src.synthesis.code-change-plan.implementation.target +- src.synthesis.code-change-plan.implementation.targeted +- src.synthesis.code-change-plan.implementation.tickets +- src.synthesis.code-change-plan.implementation.unifiedDiff +- src.synthesis.code-change-plan.implementation.versions - src.synthesis.task-synthesis-contract.RAW_CONCLUSION_CONTRACT - src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT - src.synthesis.task-synthesis-contract.TASK_SYNTHESIS_RESPONSE_CONTRACT @@ -6592,6 +7402,7 @@ entry_points: - src.synthesis.tasks-llm.TaskSynthesisAttemptError.super - src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals - src.synthesis.tasks-llm.TaskSynthesisAttemptError.wrapped +- src.synthesis.tasks-llm.TaskSynthesisRequiredError.super - src.synthesis.todo-patch.applied - src.synthesis.todo-patch.applyTodoPatch - src.synthesis.todo-patch.artifact diff --git a/project/compact_flow.mmd b/project/compact_flow.mmd index 808d246..c4ff200 100644 --- a/project/compact_flow.mmd +++ b/project/compact_flow.mmd @@ -1,16 +1,21 @@ flowchart TD %% generated in 0.04s + examples__frontend["examples.frontend
25 funcs"] + java__JavaAstExtract["java.JavaAstExtract
12 funcs"] python__ast_extract["python.ast_extract
18 funcs"] scripts__research["scripts.research
71 funcs"] sdk__python["sdk.python
68 funcs"] - src__diff["src.diff
182 funcs"] + src__diff["src.diff
183 funcs"] src__graph["src.graph
192 funcs"] src__live["src.live
60 funcs"] src__synthesis["src.synthesis
292 funcs"] scripts__research ==>|7| src__live - sdk__python ==>|6| src__synthesis python__ast_extract ==>|4| src__diff - sdk__python -->|2| src__graph - scripts__research -->|2| src__synthesis + sdk__python ==>|4| src__synthesis scripts__research -->|2| src__diff - python__ast_extract -->|1| src__synthesis + sdk__python -->|2| java__JavaAstExtract + scripts__research -->|1| src__synthesis + scripts__research -->|1| src__graph + python__ast_extract -->|1| src__graph + sdk__python -->|1| src__graph + sdk__python -->|1| examples__frontend diff --git a/project/compact_flow.png b/project/compact_flow.png index 6e6aed7dda7a2282165267aa2e1db3fb3cee5265..d40b8a654a52ee136981e39604180c09e023a8d6 100644 GIT binary patch literal 37467 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�>RJWS_UQ!5YvG+f^}dbK1Eh< zL2oPk#BXXJHid+=pY5%dw3}i{sz*npHR!Q73UJL`sT7v4b>x2D7%q5`k*^IW_U5{*eGy}!P;7^X(_PQ%i-z0@Wpz1!$OJ2R3kq(YkPKQIt&PX)U>I!h3EN3*MPLdmSkka9Bw2mHf=- z4?K@ZW7VAo1CblrKWDO>(zzMlFpxYeno@k4C;Lbu?SxCe)myT~d0EZQ(L$-Ld#SYC zui{-!5GTKD6-X8N*wP((boS^`$K={R(G{X!N(xSJJT1rzsd8d`t%XdnJT7_RtGJQIaP1 zL#Z5W!J`t@5{qi-SN&^5p0<2^S(kHW`C}`!te1Jq$ixRHjm@#=no8_yM6>~$PKy$O z?JCpY(U;3)QzcC*>tahx)gPX9c}XsEg4YAWW2SSEZ`LK8>??(t#uh->J@sdx>nyV?-#|E60o=Qx#Y*zvZ2z`_vVd;h*O+*KXUXRByz{yKUvCWzA`CllKbZ}yZ zaXRZ&9{3d{qIK$gS&}ho`^HJt$jGe2riQO6*OI4_#yN$6U3P*H_rFQ|>^oeZYN8)SW{Cye3bjx50P%{0S^?6qi(3 zJ1vahZMDJPBU=T?O<1Mn3)~VGRW_>hh&aN$y_Y2=(Lh?z29>Th2x*qOuOE1>(^D}I z9{iy^qrvclwlSV6N#u04K#(njPyO~NF?|UC4WkE0Q^&>6kL(>dlI5ed_#1$+z(rV3 zF=|Vv&Ys!Q5N&d2c!RJ0|^JBrW0J%TK!iS9?tTp)EpeBwb@`yXTBqkHxaHzW9yV%xL@=LOZ5a zfgi!6Qq|g@JK@aCtZ|zom<%(u5l7O`RC`ZHCIgwVInRr-@kg5)`i;x+gbP2N4lmdz z3h;x+a#$sWD?SoUJRde9Y-XB8f*;fBrGbnh?zYD5PH`&Mvo@Sh zEgHxY>^GygQpkD8>fCm6_5=DP`12jV`>nI=mbHt@+uVea27cCv*3TmLSlV&P_Fv9R z6y(>nRu{j)1lzO;==w1&Ym`G<-+4)CH}OufcKoHH_~_Y&f3m>eRf91NFVX*3 z*5JRjmHs`7@LPq@LI3kdIYrlo@PX{_+YIqvq@#JWH}xym2;cmr14qE>)oq^t2Q+a* A@c;k- diff --git a/project/context.md b/project/context.md index 8849663..abe7fb6 100644 --- a/project/context.md +++ b/project/context.md @@ -3,48 +3,53 @@ ## Overview -- **Project**: +- **Project**: /home/tom/github/semcod/todo2code - **Primary Language**: typescript -- **Languages**: typescript: 117, md: 52, json: 32, python: 15, javascript: 15 +- **Languages**: typescript: 138, json: 40, python: 16, javascript: 15, shell: 8 - **Analysis Mode**: static -- **Total Functions**: 3285 -- **Total Classes**: 348 -- **Modules**: 262 -- **Entry Points**: 2336 +- **Total Functions**: 3592 +- **Total Classes**: 367 +- **Modules**: 246 +- **Entry Points**: 2560 ## Architecture by Module ### src.cli -- **Functions**: 152 +- **Functions**: 202 - **Classes**: 1 - **File**: `cli.ts` -### src.core.schema -- **Functions**: 151 -- **Classes**: 4 -- **File**: `schema.ts` - -### src.synthesis.code-change-plan +### src.synthesis.code-change-plan.implementation - **Functions**: 148 - **Classes**: 10 -- **File**: `code-change-plan.ts` +- **File**: `implementation.ts` ### src.services.actions - **Functions**: 113 - **File**: `actions.ts` ### src.interfaces.a2a-task-store -- **Functions**: 92 +- **Functions**: 101 - **Classes**: 3 - **File**: `a2a-task-store.ts` +### src.communication.intake-service +- **Functions**: 82 +- **Classes**: 2 +- **File**: `intake-service.ts` + +### src.extractors.communication +- **Functions**: 80 +- **Classes**: 5 +- **File**: `communication.ts` + ### src.communication.analyzer - **Functions**: 79 - **Classes**: 3 - **File**: `analyzer.ts` ### src.diff.reality -- **Functions**: 77 +- **Functions**: 78 - **Classes**: 3 - **File**: `reality.ts` @@ -53,16 +58,16 @@ - **Classes**: 4 - **File**: `linker.ts` -### src.extractors.communication -- **Functions**: 75 -- **Classes**: 4 -- **File**: `communication.ts` - ### src.pipeline.run -- **Functions**: 64 +- **Functions**: 65 - **Classes**: 1 - **File**: `run.ts` +### src.extractors.git +- **Functions**: 64 +- **Classes**: 6 +- **File**: `git.ts` + ### src.evaluation.gold-cases - **Functions**: 57 - **Classes**: 4 @@ -73,14 +78,14 @@ - **File**: `text.ts` ### src.comparison.workspace -- **Functions**: 55 +- **Functions**: 56 - **Classes**: 3 - **File**: `workspace.ts` -### src.communication.llm +### src.communication.llm.implementation - **Functions**: 55 - **Classes**: 8 -- **File**: `llm.ts` +- **File**: `implementation.ts` ### src.synthesis.todo-patch - **Functions**: 53 @@ -97,19 +102,15 @@ - **Classes**: 7 - **File**: `openrouter.ts` +### src.interfaces.a2a +- **Functions**: 48 +- **File**: `a2a.ts` + ### sdk.typescript.src - **Functions**: 48 - **Classes**: 14 - **File**: `index.ts` -### src.operations.validation -- **Functions**: 47 -- **File**: `validation.ts` - -### src.interfaces.a2a -- **Functions**: 46 -- **File**: `a2a.ts` - ## Key Entry Points Main execution flows into the system: @@ -129,9 +130,6 @@ Main execution flows into the system: ### src.extractors.ast.typescript.extractTypeScriptFile - **Calls**: src.extractors.ast.typescript.relativePosix, src.extractors.ast.typescript.createSourceFile, src.extractors.ast.typescript.scriptKind, src.extractors.ast.typescript.getLineAndCharacterOfPosition, src.extractors.ast.typescript.getStart, src.extractors.ast.typescript.getEnd, src.extractors.ast.typescript.getText, src.extractors.ast.typescript.slice -### src.extractors.communication.extractCommunicationIntent -- **Calls**: src.extractors.communication.resolve, src.extractors.communication.assertPathWithinRoot, src.extractors.communication.pathExists, src.extractors.communication.relativePosix, src.extractors.communication.walkFiles, src.extractors.communication.loadParticipantIdentityRegistry, src.extractors.communication.split, src.extractors.communication.toLowerCase - ### scripts.research.rank-intent-graph-embeddings.main - **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode @@ -141,36 +139,33 @@ Main execution flows into the system: ### src.comparison.workspace.compareWorkspaceIntent - **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory -### src.extractors.communication.identityRegistry -- **Calls**: src.extractors.communication.relativePosix, src.extractors.communication.split, src.extractors.communication.toLowerCase, src.extractors.communication.readText, src.extractors.communication.push, src.extractors.communication.String, src.extractors.communication.parseEnvelope, src.extractors.communication.inferIdentity - -### src.extractors.communication.communicationFiles -- **Calls**: src.extractors.communication.relativePosix, src.extractors.communication.split, src.extractors.communication.toLowerCase, src.extractors.communication.readText, src.extractors.communication.push, src.extractors.communication.String, src.extractors.communication.parseEnvelope, src.extractors.communication.inferIdentity - -### src.synthesis.code-change-plan.applyCodeChangeSourcePatch -- **Calls**: src.synthesis.code-change-plan.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.trim, src.synthesis.code-change-plan.Error, src.synthesis.code-change-plan.resolve, src.synthesis.code-change-plan.assertPathWithinRoot, src.synthesis.code-change-plan.ensureDir, src.synthesis.code-change-plan.dirname, src.synthesis.code-change-plan.open +### src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch +- **Calls**: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.implementation.trim, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.resolve, src.synthesis.code-change-plan.implementation.assertPathWithinRoot, src.synthesis.code-change-plan.implementation.ensureDir, src.synthesis.code-change-plan.implementation.dirname, src.synthesis.code-change-plan.implementation.open ### src.communication.analyzer.analyzeCommunication - **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set -### src.synthesis.code-change-plan.proposeCodeChangePlans -- **Calls**: src.synthesis.code-change-plan.assertIntentGraph, src.synthesis.code-change-plan.assertConclusions, src.synthesis.code-change-plan.Date, src.synthesis.code-change-plan.toISOString, src.synthesis.code-change-plan.isNaN, src.synthesis.code-change-plan.parse, src.synthesis.code-change-plan.Error, src.synthesis.code-change-plan.isInteger +### src.synthesis.code-change-plan.implementation.proposeCodeChangePlans +- **Calls**: src.synthesis.code-change-plan.implementation.assertIntentGraph, src.synthesis.code-change-plan.implementation.assertConclusions, src.synthesis.code-change-plan.implementation.Date, src.synthesis.code-change-plan.implementation.toISOString, src.synthesis.code-change-plan.implementation.isNaN, src.synthesis.code-change-plan.implementation.parse, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.isInteger + +### src.interfaces.a2a-message.parseCommand +- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim ### src.graph.diagnostics.diagnoseGraph - **Calls**: src.graph.diagnostics.Date, src.graph.diagnostics.toISOString, src.graph.diagnostics.assertIntentGraph, src.graph.diagnostics.buildNeighbors, src.graph.diagnostics.Map, src.graph.diagnostics.map, src.graph.diagnostics.indexGroundedImplementationEvidence, src.graph.diagnostics.indexImplementedPaths -### src.interfaces.a2a-message.parseCommand -- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim, src.interfaces.a2a-message.startsWith, src.interfaces.a2a-message.parse - ### src.core.text.inferObject - **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa ### scripts.research.evaluate-embedding-pairs.main -- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text +- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text ### src.core.text.normalized - **Calls**: src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa, src.core.text.napraw, src.core.text.popraw +### src.interfaces.intake_cli.main +- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument + ### src.operations.validation.assertOperationPlan - **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration @@ -189,21 +184,27 @@ Main execution flows into the system: ### python.ast_extract.main - **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print -### src.communication.llm.CommunicationLlmRequiredError.extractCommunicationIntentAudited -- **Calls**: src.communication.llm.now, src.communication.llm.extractCommunicationIntent, src.communication.llm.CommunicationAttemptError.audit, src.communication.llm.CommunicationAttemptError.markDeterministic, src.communication.llm.CommunicationAttemptError.deterministicSyntheses, src.communication.llm.CommunicationAttemptError.deterministicGeneration, src.communication.llm.OpenRouterClient, src.communication.llm.isConfigured - -### src.graph.linker.linkIntentRecords -- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map +### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited +- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.CommunicationAttemptError.audit, src.communication.llm.implementation.CommunicationAttemptError.markDeterministic, src.communication.llm.implementation.CommunicationAttemptError.deterministicSyntheses, src.communication.llm.implementation.CommunicationAttemptError.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured ### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited - **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.audit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow +### src.graph.linker.linkIntentRecords +- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map + ### scripts.live-model-comparison.main - **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map +### rust-ast.src.main.main +- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata + ### src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited - **Calls**: src.extractors.markdown-llm.now, src.extractors.markdown-llm.extractMarkdownIntent, src.extractors.markdown-llm.MarkdownAttemptError.stageAudit, src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic, src.extractors.markdown-llm.OpenRouterClient, src.extractors.markdown-llm.isConfigured, src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow, src.extractors.markdown-llm.MarkdownAttemptError.readPrompt +### sdk.typescript.examples.basic.baseUrl +- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error + ## Process Flows Key execution flows identified: @@ -238,35 +239,40 @@ runPipeline [src.pipeline.run] extractTypeScriptFile [src.extractors.ast.typescript] ``` -### Flow 6: extractCommunicationIntent -``` -extractCommunicationIntent [src.extractors.communication] -``` - -### Flow 7: diffUiHtml +### Flow 6: diffUiHtml ``` diffUiHtml [src.web.diff-ui] ``` -### Flow 8: compareWorkspaceIntent +### Flow 7: compareWorkspaceIntent ``` compareWorkspaceIntent [src.comparison.workspace] └─> git └─> execFileAsync ``` -### Flow 9: identityRegistry +### Flow 8: applyCodeChangeSourcePatch ``` -identityRegistry [src.extractors.communication] +applyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation] + └─> assertCodeChangeSourcePatch ``` -### Flow 10: communicationFiles +### Flow 9: analyzeCommunication ``` -communicationFiles [src.extractors.communication] +analyzeCommunication [src.communication.analyzer] +``` + +### Flow 10: proposeCodeChangePlans +``` +proposeCodeChangePlans [src.synthesis.code-change-plan.implementation] ``` ## Key Classes +### src.communication.intake-service.GovernedIntakeService +- **Methods**: 82 +- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId + ### src.llm.openrouter.OpenRouterClient - **Methods**: 48 - **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response @@ -275,9 +281,13 @@ communicationFiles [src.extractors.communication] - **Methods**: 46 - **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask -### src.communication.llm.CommunicationAttemptError +### src.communication.intake-contract.IntakeError +- **Methods**: 44 +- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base + +### src.communication.llm.implementation.CommunicationAttemptError - **Methods**: 40 -- **Key Methods**: src.communication.llm.CommunicationAttemptError.super, src.communication.llm.CommunicationAttemptError.enrichWithCorrection, src.communication.llm.CommunicationAttemptError.completion, src.communication.llm.CommunicationAttemptError.fallbackOrThrow, src.communication.llm.CommunicationAttemptError.failed, src.communication.llm.CommunicationAttemptError.marked, src.communication.llm.CommunicationAttemptError.participantGroups, src.communication.llm.CommunicationAttemptError.grouped, src.communication.llm.CommunicationAttemptError.participant, src.communication.llm.CommunicationAttemptError.role +- **Key Methods**: src.communication.llm.implementation.CommunicationAttemptError.super, src.communication.llm.implementation.CommunicationAttemptError.enrichWithCorrection, src.communication.llm.implementation.CommunicationAttemptError.completion, src.communication.llm.implementation.CommunicationAttemptError.fallbackOrThrow, src.communication.llm.implementation.CommunicationAttemptError.failed, src.communication.llm.implementation.CommunicationAttemptError.marked, src.communication.llm.implementation.CommunicationAttemptError.participantGroups, src.communication.llm.implementation.CommunicationAttemptError.grouped, src.communication.llm.implementation.CommunicationAttemptError.participant, src.communication.llm.implementation.CommunicationAttemptError.role ### src.llm.structured-schema.StructuredResponseError - **Methods**: 37 @@ -292,17 +302,17 @@ Example: - **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace ### src.extractors.nl-llm.NlAttemptError -- **Methods**: 30 -- **Key Methods**: src.extractors.nl-llm.NlAttemptError.super, src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm.NlAttemptError.completion, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow, src.extractors.nl-llm.NlAttemptError.failedAudit, src.extractors.nl-llm.NlAttemptError.deterministic, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.toIntentRecord, src.extractors.nl-llm.NlAttemptError.start, src.extractors.nl-llm.NlAttemptError.end - -### src.semantic.reranker-llm.SemanticRerankerRequiredError -- **Methods**: 29 -- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response +- **Methods**: 31 +- **Key Methods**: src.extractors.nl-llm.NlAttemptError.super, src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm.NlAttemptError.completion, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow, src.extractors.nl-llm.NlAttemptError.failedAudit, src.extractors.nl-llm.NlAttemptError.deterministic, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.toIntentRecord, src.extractors.nl-llm.NlAttemptError.lines, src.extractors.nl-llm.NlAttemptError.action ### src.extractors.docs-llm.DocumentationLlmRequiredError - **Methods**: 29 - **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results +### src.semantic.reranker-llm.SemanticRerankerRequiredError +- **Methods**: 29 +- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response + ### sdk.php.src.Client.Todo2Code.Client - **Methods**: 27 - **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs @@ -323,6 +333,10 @@ Example: - **Methods**: 21 - **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions +### src.communication.intake-store.IntakeEventStore +- **Methods**: 19 +- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry + ### src.sdk.typescript.Todo2CodeClient - **Methods**: 16 - **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange @@ -331,104 +345,90 @@ Example: - **Methods**: 15 - **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine -### src.communication.llm.CommunicationLlmRequiredError +### src.communication.llm.implementation.CommunicationLlmRequiredError - **Methods**: 15 -- **Key Methods**: src.communication.llm.CommunicationLlmRequiredError.super, src.communication.llm.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.CommunicationLlmRequiredError.startedAt, src.communication.llm.CommunicationLlmRequiredError.deterministic, src.communication.llm.CommunicationLlmRequiredError.records, src.communication.llm.CommunicationLlmRequiredError.client, src.communication.llm.CommunicationLlmRequiredError.groups, src.communication.llm.CommunicationLlmRequiredError.response, src.communication.llm.CommunicationLlmRequiredError.enrichments, src.communication.llm.CommunicationLlmRequiredError.enrichedByOriginal +- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal ### src.extractors.markdown-llm.MarkdownLlmRequiredError - **Methods**: 13 - **Key Methods**: src.extractors.markdown-llm.MarkdownLlmRequiredError.super, src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited, src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt, src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic, src.extractors.markdown-llm.MarkdownLlmRequiredError.client, src.extractors.markdown-llm.MarkdownLlmRequiredError.prompt, src.extractors.markdown-llm.MarkdownLlmRequiredError.enrichments, src.extractors.markdown-llm.MarkdownLlmRequiredError.responseByRecord, src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes, src.extractors.markdown-llm.MarkdownLlmRequiredError.corrected -### src.core.content-cache.ContentCache -- **Methods**: 13 -- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory - -### python.ast_extract.FactVisitor -- **Methods**: 13 -- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign -- **Inherits**: ast.NodeVisitor - -### src.interfaces.a2a-types.BodyTooLargeError -- **Methods**: 11 -- **Key Methods**: src.interfaces.a2a-types.BodyTooLargeError.stringParam, src.interfaces.a2a-types.BodyTooLargeError.optionalString, src.interfaces.a2a-types.BodyTooLargeError.optionalStringArray, src.interfaces.a2a-types.BodyTooLargeError.optionalInteger, src.interfaces.a2a-types.BodyTooLargeError.parsed, src.interfaces.a2a-types.BodyTooLargeError.optionalBoolean, src.interfaces.a2a-types.BodyTooLargeError.optionalTimestamp, src.interfaces.a2a-types.BodyTooLargeError.timestamp, src.interfaces.a2a-types.BodyTooLargeError.optionalTaskState, src.interfaces.a2a-types.BodyTooLargeError.recordParam - ## Data Transformation Functions Key functions that process and transform data: -### src.cli.parsed -- **Output to**: src.cli.printHelp +### examples.backend.src.validation.validateEventPayload +- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join -### src.cli.formatWatchEvent -- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change +### examples.src.runtime.validateContract +- **Output to**: examples.src.runtime.Error -### src.cli.parseArgs -- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set +### java.JavaAstExtract.JavaAstExtract.parseFile -### src.web.diff-ui.formatBytes -- **Output to**: src.web.diff-ui.selectedRun, src.web.diff-ui.byId +### src.extractors.runtime-cycle.parseCycle +- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray -### src.synthesis.validation.validateAndClassifyTodoProposals -- **Output to**: src.synthesis.validation.assertTodoProposals, src.synthesis.validation.filter, src.synthesis.validation.map, src.synthesis.validation.duplicateEvidence, src.synthesis.validation.Boolean +### src.extractors.configuration.format +- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim -### src.synthesis.task-synthesis-materialize.parsed -- **Output to**: src.synthesis.task-synthesis-materialize.map, src.synthesis.task-synthesis-materialize.sortedUnique, src.synthesis.task-synthesis-materialize.groundRecordIdsByDiagnostics, src.synthesis.task-synthesis-materialize.normalizeStringArray, src.synthesis.task-synthesis-materialize.createConclusionId +### src.extractors.configuration.configurationFormat +- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith -### src.summary.summarizer.SummaryAttemptError.parsed -- **Output to**: src.summary.summarizer.map, src.summary.summarizer.SummaryAttemptError.sortedUnique, src.summary.summarizer.groundRecordIdsByDiagnostics, src.summary.summarizer.createConclusionId +### src.extractors.configuration.parsed +- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine -### src.semantic.reranker.validateRetrieval -- **Output to**: src.semantic.reranker.requiredText, src.semantic.reranker.test, src.semantic.reranker.Error +### src.extractors.docs-deterministic.convertDocument +- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push -### src.semantic.reranker.validateGeneration -- **Output to**: src.semantic.reranker.Error, src.semantic.reranker.requiredText, src.semantic.reranker.test +### src.extractors.docs-deterministic.parseFenceBlock +- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice -### src.semantic.reranker.validateVerdictReason -- **Output to**: src.semantic.reranker.assertSemanticVerdictReason +### src.extractors.docs-deterministic.parseSectionHeading +- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord -### src.operations.subactor.compileSubactorProcessEnvelope -- **Output to**: src.operations.subactor.assertOperationPlan, src.operations.subactor.trim, src.operations.subactor.Error, src.operations.subactor.Map, src.operations.subactor.map +### src.extractors.docs-deterministic.parseBulletStatement +- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement -### src.llm.structured-schema.StructuredResponseError.parse -- **Output to**: src.llm.structured-schema.validate +### src.extractors.docs-deterministic.parseParagraphStatement +- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement -### src.llm.structured-schema.StructuredResponseError.parsed -- **Output to**: src.llm.structured-schema.map, src.llm.structured-schema.StructuredResponseError.parse +### src.extractors.communication.parseEnvelope +- **Output to**: src.extractors.communication.split, src.extractors.communication.trim, src.extractors.communication.slice, src.extractors.communication.findIndex, src.extractors.communication.match -### src.llm.openrouter.OpenRouterClient.formatInvalidModelError -- **Output to**: src.llm.openrouter.models, src.llm.openrouter.n, src.llm.openrouter.map, src.llm.openrouter.join +### src.extractors.communication.parsed -### src.llm.openrouter.OpenRouterClient.parseJsonContent -- **Output to**: src.llm.openrouter.trim, src.llm.openrouter.replace, src.llm.openrouter.parse, src.llm.openrouter.indexOf, src.llm.openrouter.lastIndexOf +### src.extractors.git.processDiscoveryDirectory +- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository -### src.llm.openrouter.OpenRouterClient.parseJsonResponse -- **Output to**: src.llm.openrouter.OpenRouterClient.responseMetadata, src.llm.openrouter.OpenRouterClient.extractContent, src.llm.openrouter.String, src.llm.openrouter.StructuredResponseError +### src.extractors.markdown-llm.MarkdownAttemptError.validateEnrichments +- **Output to**: src.extractors.markdown-llm.isArray, src.extractors.markdown-llm.Error, src.extractors.markdown-llm.Set, src.extractors.markdown-llm.map, src.extractors.markdown-llm.has -### src.interfaces.mcp.parsed -- **Output to**: src.interfaces.mcp.send +### src.extractors.ast.external.parsed +- **Output to**: src.extractors.ast.external.adapterRecords -### src.interfaces.mcp.validateModernRequest -- **Output to**: src.interfaces.mcp.McpRequestError, src.interfaces.mcp.isArray, src.interfaces.mcp.validateModernMetadata +### src.core.ignore.parseIgnoreFile +- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter -### src.interfaces.mcp.validateModernMetadata -- **Output to**: src.interfaces.mcp.McpRequestError, src.interfaces.mcp.isArray +### src.core.schema.code-change.validateCodeChangePlanContext +- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue -### src.interfaces.mcp.parseRequestLine +### src.core.schema.conclusions.validateGroundedContext +- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test -### src.interfaces.a2a.parseRpcRequest -- **Output to**: src.interfaces.a2a.parse, src.interfaces.a2a.readBody, src.interfaces.a2a.sendJson, src.interfaces.a2a.rpcError, src.interfaces.a2a.errorMessage +### src.core.schema.conclusions.validateTodoProposalContext +- **Output to**: src.core.schema.conclusions.validateGroundedContext, src.core.schema.conclusions.assertConclusions, src.core.schema.conclusions.Set, src.core.schema.conclusions.map -### src.interfaces.a2a-types.BodyTooLargeError.parsed -- **Output to**: src.interfaces.a2a-types.isInteger, src.interfaces.a2a-types.A2ARequestError +### src.web.diff-ui.formatBytes +- **Output to**: src.web.diff-ui.selectedRun, src.web.diff-ui.byId -### src.interfaces.a2a-task-store.encodeCursor -- **Output to**: src.interfaces.a2a-task-store.from, src.interfaces.a2a-task-store.stringify, src.interfaces.a2a-task-store.toString +### src.semantic.reranker.validation.validateRetrieval +- **Output to**: src.semantic.reranker.validation.requiredText, src.semantic.reranker.validation.test, src.semantic.reranker.validation.Error -### src.interfaces.a2a-task-store.decodeCursor -- **Output to**: src.interfaces.a2a-task-store.parse, src.interfaces.a2a-task-store.from, src.interfaces.a2a-task-store.toString, src.interfaces.a2a-task-store.isFinite, src.interfaces.a2a-task-store.Error +### src.semantic.reranker.validation.validateGeneration +- **Output to**: src.semantic.reranker.validation.Error, src.semantic.reranker.validation.requiredText, src.semantic.reranker.validation.test -### src.interfaces.a2a-task-store.decoded -- **Output to**: src.interfaces.a2a-task-store.isFinite, src.interfaces.a2a-task-store.parse, src.interfaces.a2a-task-store.Error +### src.semantic.reranker.validation.validateVerdictReason +- **Output to**: src.semantic.reranker.validation.Set, src.semantic.reranker.validation.has, src.semantic.reranker.validation.Error ## Behavioral Patterns @@ -437,6 +437,11 @@ Key functions that process and transform data: - **Confidence**: 0.90 - **Functions**: python.ast_extract.dotted_name +### state_machine_GovernedIntakeService +- **Type**: state_machine +- **Confidence**: 0.70 +- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event + ## Public API Surface Functions exposed as public API (no underscore prefix): @@ -444,41 +449,41 @@ Functions exposed as public API (no underscore prefix): - `src.services.actions.executeAction` - 65 calls - `src.services.actions.root` - 64 calls - `sdk.python.examples.basic.main` - 62 calls -- `src.pipeline.run.runPipeline` - 54 calls -- `src.cli.main` - 44 calls +- `src.pipeline.run.runPipeline` - 56 calls - `src.extractors.ast.typescript.extractTypeScriptFile` - 44 calls -- `src.extractors.communication.extractCommunicationIntent` - 43 calls - `scripts.research.rank-intent-graph-embeddings.main` - 43 calls - `src.web.diff-ui.diffUiHtml` - 42 calls - `src.comparison.workspace.compareWorkspaceIntent` - 40 calls -- `src.extractors.communication.identityRegistry` - 37 calls -- `src.extractors.communication.communicationFiles` - 37 calls - `sdk.rust.src.client.parse_http_response` - 37 calls -- `src.synthesis.code-change-plan.applyCodeChangeSourcePatch` - 35 calls +- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls - `src.communication.analyzer.analyzeCommunication` - 35 calls -- `src.synthesis.code-change-plan.proposeCodeChangePlans` - 34 calls +- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls +- `src.interfaces.a2a-message.parseCommand` - 33 calls - `sdk.rust.examples.basic.run` - 33 calls - `src.graph.diagnostics.diagnoseGraph` - 32 calls -- `src.interfaces.a2a-message.parseCommand` - 31 calls - `src.core.text.inferObject` - 31 calls - `scripts.research.evaluate-embedding-pairs.main` - 30 calls - `src.core.text.normalized` - 29 calls +- `src.interfaces.intake_cli.main` - 29 calls - `src.operations.validation.assertOperationPlan` - 28 calls -- `src.synthesis.code-change-plan.assertCodeChangeSourcePatch` - 26 calls - `src.extractors.ast.typescript.visit` - 26 calls +- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls - `src.comparison.workspace.temporaryParent` - 25 calls - `src.comparison.workspace.baseWorktree` - 25 calls - `sdk.go.examples.basic.main.run` - 25 calls - `src.extractors.todo.extractTodo` - 24 calls +- `src.extractors.communication.extractCommunicationFile` - 24 calls - `scripts.verify-env-contract.makefile` - 24 calls - `python.ast_extract.main` - 24 calls -- `src.communication.llm.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls -- `src.graph.linker.linkIntentRecords` - 22 calls +- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls - `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls +- `src.graph.linker.linkIntentRecords` - 22 calls - `scripts.live-model-comparison.main` - 22 calls -- `src.semantic.reranker.assertSemanticRerankResult` - 21 calls +- `rust-ast.src.main.main` - 21 calls +- `src.extractors.git.extractRepositoryGitIntent` - 21 calls - `src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited` - 21 calls -- `src.extractors.git.extractGitIntent` - 21 calls +- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls +- `python.ast_extract.iter_python_files` - 21 calls - `sdk.typescript.examples.basic.baseUrl` - 21 calls - `sdk.typescript.examples.basic.token` - 21 calls @@ -511,13 +516,13 @@ graph TD extractTypeScriptFil --> scriptKind extractTypeScriptFil --> getLineAndCharacterO extractTypeScriptFil --> getStart - extractCommunication --> resolve - extractCommunication --> assertPathWithinRoot - extractCommunication --> pathExists - extractCommunication --> relativePosix - extractCommunication --> walkFiles main --> parse_args main --> read_bytes + main --> loads + main --> sorted + diffUiHtml --> gradient + diffUiHtml --> min + diffUiHtml --> clamp ``` ## Reverse Engineering Guidelines diff --git a/project/evolution.toon.yaml b/project/evolution.toon.yaml index f414e49..b9929bd 100644 --- a/project/evolution.toon.yaml +++ b/project/evolution.toon.yaml @@ -1,14 +1,14 @@ -# code2llm/evolution | 2976 func | 118f | 2026-08-01 +# code2llm/evolution | 3283 func | 132f | 2026-08-04 # generated in 0.01s NEXT[10] (ranked by impact): - [1] !! SPLIT src/synthesis/code-change-plan.ts + [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts WHY: 1310L, 10 classes, max CC=47 EFFORT: ~4h IMPACT: 61570 - [2] !! SPLIT src/core/schema.ts - WHY: 922L, 4 classes, max CC=23 - EFFORT: ~4h IMPACT: 21206 + [2] !! SPLIT src/cli.ts + WHY: 935L, 1 classes, max CC=13 + EFFORT: ~4h IMPACT: 12155 [3] !! SPLIT-FUNC executeAction CC=83 fan=65 WHY: CC=83 exceeds 15 @@ -18,41 +18,41 @@ NEXT[10] (ranked by impact): WHY: CC=83 exceeds 15 EFFORT: ~1h IMPACT: 5312 - [5] !! SPLIT-FUNC main CC=95 fan=44 - WHY: CC=95 exceeds 15 - EFFORT: ~1h IMPACT: 4180 + [5] !! SPLIT-FUNC runPipeline CC=56 fan=56 + WHY: CC=56 exceeds 15 + EFFORT: ~1h IMPACT: 3136 - [6] !! SPLIT-FUNC extractCommunicationIntent CC=76 fan=43 - WHY: CC=76 exceeds 15 - EFFORT: ~1h IMPACT: 3268 + [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28 + WHY: CC=84 exceeds 15 + EFFORT: ~1h IMPACT: 2352 - [7] !! SPLIT-FUNC runPipeline CC=53 fan=54 - WHY: CC=53 exceeds 15 - EFFORT: ~1h IMPACT: 2862 + [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42 + WHY: CC=52 exceeds 15 + EFFORT: ~1h IMPACT: 2184 - [8] !! SPLIT-FUNC identityRegistry CC=72 fan=37 - WHY: CC=72 exceeds 15 - EFFORT: ~1h IMPACT: 2664 + [8] !! SPLIT-FUNC parseCommand CC=63 fan=33 + WHY: CC=63 exceeds 15 + EFFORT: ~1h IMPACT: 2079 - [9] !! SPLIT-FUNC communicationFiles CC=72 fan=37 - WHY: CC=72 exceeds 15 - EFFORT: ~1h IMPACT: 2664 + [9] !! SPLIT-FUNC extractTypeScriptFile CC=43 fan=44 + WHY: CC=43 exceeds 15 + EFFORT: ~1h IMPACT: 1892 - [10] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28 - WHY: CC=84 exceeds 15 - EFFORT: ~1h IMPACT: 2352 + [10] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 + WHY: CC=48 exceeds 15 + EFFORT: ~1h IMPACT: 1680 RISKS[3]: ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths - ⚠ Splitting src/synthesis/code-change-plan.ts may break 127 import paths - ⚠ Splitting src/core/schema.ts may break 124 import paths + ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths + ⚠ Splitting src/cli.ts may break 124 import paths METRICS-TARGET: - CC̄: 4.0 → ≤2.8 - max-CC: 95 → ≤20 - god-modules: 19 → 0 - high-CC(≥15): 109 → ≤54 + CC̄: 3.9 → ≤2.7 + max-CC: 84 → ≤20 + god-modules: 13 → 0 + high-CC(≥15): 99 → ≤49 hub-types: 0 → ≤0 PATTERNS (language parser shared logic): @@ -80,4 +80,4 @@ PATTERNS (language parser shared logic): - Standardized FunctionInfo/ClassInfo models HISTORY: - (first run — no previous data) + prev CC̄=3.9 → now CC̄=3.9 diff --git a/project/flow.mmd b/project/flow.mmd index a8550c2..4443849 100644 --- a/project/flow.mmd +++ b/project/flow.mmd @@ -10,36 +10,36 @@ flowchart TD src__cli__parsed["parsed"] src__cli__command["command"] src__cli__config["config"] + src__cli__handler["handler"] + src__cli__commandHandlers["commandHandlers"] + src__cli__resolveMainCommand["resolveMainCommand"] + src__cli__handleLink["handleLink"] src__cli__files["files"] src__cli__records["records"] src__cli__graph["graph"] + src__cli__handleDiagnose["handleDiagnose"] src__cli__graphFile["graphFile"] - src__cli__diagnosticsPath["diagnosticsPath"] - src__cli__diagnostics["diagnostics"] - src__cli__result["result"] - src__cli__out["out"] - src__cli__graphPath["graphPath"] - src__cli__output["output"] - ...["+68 more"] + src__cli__handleSummarize["handleSummarize"] + ...["+103 more"] end subgraph Core - src__web__diff_ui__diffUiHtml["diffUiHtml"] - src__web__diff_ui__compareGraphs{{compareGraphs CC=15}} - src__watch__watcher__maxFiles["maxFiles"] - src__watch__watcher__absoluteRoot["absoluteRoot"] - src__watch__watcher__absolute["absolute"] - src__watch__watcher__previous["previous"] - src__watch__watcher__shown["shown"] - src__watch__watcher__rest["rest"] - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS["DEFAULT_MIN_INTERVAL_MS"] - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS["DEFAULT_SCAN_INTERVAL_MS"] - src__watch__watcher__watchRepository["watchRepository"] - src__watch__watcher__root["root"] - src__watch__watcher__minIntervalMs["minIntervalMs"] - src__watch__watcher__scanIntervalMs["scanIntervalMs"] - src__watch__watcher__signal["signal"] - ...["+2130 more"] + project__install_project_package["install_project_package"] + project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"] + project__run_analysis_tool["run_analysis_tool"] + rust_ast__src__main__main["main"] + rust_ast__src__main__new["new"] + rust_ast__src__main__visit_item_mod["visit_item_mod"] + rust_ast__src__main__visit_item_use["visit_item_use"] + rust_ast__src__main__visit_item_struct["visit_item_struct"] + rust_ast__src__main__visit_item_enum["visit_item_enum"] + rust_ast__src__main__visit_item_trait["visit_item_trait"] + rust_ast__src__main__visit_item_type["visit_item_type"] + rust_ast__src__main__visit_item_const["visit_item_const"] + rust_ast__src__main__visit_item_static["visit_item_static"] + rust_ast__src__main__visit_item_fn["visit_item_fn"] + rust_ast__src__main__visit_item_impl["visit_item_impl"] + ...["+2324 more"] end - class src__cli__execFileAsync,src__cli__main,src__cli__parsed,src__cli__command,src__cli__config,src__cli__files,src__cli__records,src__cli__graph,src__cli__graphFile,src__cli__diagnosticsPath entry + class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry diff --git a/project/flow.png b/project/flow.png index be26b36efa2cd44cf1b2d8f48fa0d76c9f0f64b8..25da449a889076e2b7e8c1c17fd5f18796ab947c 100644 GIT binary patch literal 13038 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�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 literal 17313 zcmZsDbyOTp({Dn8I|R4j?iw`c;_mJai@O959^4_gySuvu_gx$ocbA*z{l4d%``&Zw zkLjN3s_vSZmg$=MO}L^w02u)v;lqay$WoGG${#+!EB?)M!9o2!79=$DeE5L&K}t+m z)g$v{16fz)zLVz-NIV4}FD8}u`Hv+<5-ehFQcH40vI~(*X9;~F{es$YLH(bU%{S=t zcT~{3%tLq8MK|VI*0S1BS^XR&wkq+Bt^#X`Yl5)?^8`+w*cOf8b6&inbKd^$){DFd z)RyodK9oz&eP^|Ne8R5x)cv)uAgXOd9@<}f{)-IljmiFt@%N-B6B^O)|7A`X*@A^= z#sdE3|2QXv2?}|E4W0fU&W|2Lmed>nv(}YV=KSu$9pV1Bv1Vue*DFovahGeEQS(kjQ^DHc11O~z4j1%RbT?U1|Foqj>mA^Y$_4>>32-I)ok7i z@TBBCtaB|akPnhHrHaNk+0lCq0l5i3{nPAUVqu>UjW)LmWt(?JCdr9J3;)aeVbw48 zPg$zGZxDq7hm%px-b=X9UGdxV^RR(}?c>F+IDrUhX$YST_h*|s8?n~G^X^x|;@qy` zh=0`np$R+nNIV0EKJ>qNv=0s;B!5$u&Icb39!ueV?&}8aCm1Ewc`_6*HjxpZS;yo7 zBgPgFo5ArB30uz7gJSkAE%m`}g`w3I>Cy z-&TvHV*wg`uy|zX))2fp2~FN-7Kn;)P(Q&Xj(7;*g8R)S>x=x`|8{~O=b!y7$^0%0 z_N~|1N%ynqO+EfII*O1P9{yJTVa_J^s`yc$n`y1Ce+*t~y=Jcw`F&CO@^}fOnqrHSf9}xSmBVmaBBkg>B9dhWY&;?Z0Fgvtzzntd@AX;(>M`leC7Q_OoMF zQFp#?_|m~_s+;t$NKY*87xCzq+=b-vz5nTB|0q77K+fJ&8T^vR^`c(H%3lk0-!T8} zxpT7Rm2u;UXRUac|J%$z8vjH444N1JKGA=9hA2VMLjRupo9?sx{{&6)Vco7_o_5`% zLLyl?_|}_vQiN;`E@{$Hni*BcEeL~g;i3kORU$~@Paxre^~gV40%|qc9hQOUF=4xI zT7h7{C)Dn|fpH#7rmvN%hZq?z@Vm_E2_yEyN~W(m{Ff%MSD5X{ zz7N<4dc1ny*p`9sTQIN&o6Y@ip!eS_kWYn+M#cMxqXWgS$rNqYb?ZH;43_9Gp}h_j zo>M^Km=|=e&9k3CLdV#(l%W^;rg)WM)76}ZTFl2$L!sNH*i_P7)YUyUJX?h#6)4uL zl>4^~1RcTqtEui*lhy$F$s(hfSNt~X{Mb;I34go$8!>2cC7v)@>5THz>ZX(ze`_F< zHp_i_F-z5JH`_kBkk!LMr2+S);+ELHG5jb?`j@oBQvPWA>h$+y~KR^>z(4flL-qp9~OJe z^BLhSHmJH)@5fj6?wroEHs13huQ87Jfe*Zf6%^>)N@`I6o z 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 l<@Wt~$(69A$subKb= diff --git a/project/index.html b/project/index.html index 3fe6ec7..2b38973 100644 --- a/project/index.html +++ b/project/index.html @@ -1,5 +1,5 @@ - + @@ -481,7 +481,7 @@

Analysis Results

// Initialize mermaid mermaid.initialize({ startOnLoad: false, theme: 'dark' }); - const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "132.2KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "23.3KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "16.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-01 \n**Total Functions**: 3285 \n**Total Classes**: 348 \n**Modules**: 262 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "33.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: \n- **Primary Language**: typescript\n- **Languages**: typescript: 117, md: 52, json: 32, python: 15, javascript: 15\n- **Analysis Mode**: static\n- **Total Functions**: 3285\n- **Total Classes**: 348\n- **Modules**: 262\n- **Entry Points**: 2336\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 152\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.core.schema\n- **Functions**: 151\n- **Classes**: 4\n- **File**: `schema.ts`\n\n### src.synthesis.code-change-plan\n- **Functions**: 148\n- **Classes**: 10\n- **File**: `code-change-plan.ts`\n\n### src.services.actions\n- **Functions**: 113\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 92\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 77\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.graph.linker\n- **Functions**: 75\n- **Classes**: 4\n- **File**: `linker.ts`\n\n### src.extractors.communication\n- **Functions**: 75\n- **Classes**: 4\n- **File**: `communication.ts`\n\n### src.pipeline.run\n- **Functions**: 64\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.core.text\n- **Functions**: 56\n- **File**: `text.ts`\n\n### src.comparison.workspace\n- **Functions**: 55\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.communication.llm\n- **Functions**: 55\n- **Classes**: 8\n- **File**: `llm.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n### src.operations.validation\n- **Functions**: 47\n- **File**: `validation.ts`\n\n### src.interfaces.a2a\n- **Functions**: 46\n- **File**: `a2a.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### src.services.actions.executeAction\n- **Calls**: src.services.actions.resolveRoot, src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent\n\n### src.services.actions.root\n- **Calls**: src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent, src.services.actions.extractMarkdownIntentAudited\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### src.extractors.ast.typescript.extractTypeScriptFile\n- **Calls**: src.extractors.ast.typescript.relativePosix, src.extractors.ast.typescript.createSourceFile, src.extractors.ast.typescript.scriptKind, src.extractors.ast.typescript.getLineAndCharacterOfPosition, src.extractors.ast.typescript.getStart, src.extractors.ast.typescript.getEnd, src.extractors.ast.typescript.getText, src.extractors.ast.typescript.slice\n\n### src.extractors.communication.extractCommunicationIntent\n- **Calls**: src.extractors.communication.resolve, src.extractors.communication.assertPathWithinRoot, src.extractors.communication.pathExists, src.extractors.communication.relativePosix, src.extractors.communication.walkFiles, src.extractors.communication.loadParticipantIdentityRegistry, src.extractors.communication.split, src.extractors.communication.toLowerCase\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.web.diff-ui.diffUiHtml\n- **Calls**: src.web.diff-ui.gradient, src.web.diff-ui.min, src.web.diff-ui.clamp, src.web.diff-ui.not, src.web.diff-ui.media, src.web.diff-ui.token, src.web.diff-ui.getElementById, src.web.diff-ui.byId\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.extractors.communication.identityRegistry\n- **Calls**: src.extractors.communication.relativePosix, src.extractors.communication.split, src.extractors.communication.toLowerCase, src.extractors.communication.readText, src.extractors.communication.push, src.extractors.communication.String, src.extractors.communication.parseEnvelope, src.extractors.communication.inferIdentity\n\n### src.extractors.communication.communicationFiles\n- **Calls**: src.extractors.communication.relativePosix, src.extractors.communication.split, src.extractors.communication.toLowerCase, src.extractors.communication.readText, src.extractors.communication.push, src.extractors.communication.String, src.extractors.communication.parseEnvelope, src.extractors.communication.inferIdentity\n\n### src.synthesis.code-change-plan.applyCodeChangeSourcePatch\n- **Calls**: src.synthesis.code-change-plan.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.trim, src.synthesis.code-change-plan.Error, src.synthesis.code-change-plan.resolve, src.synthesis.code-change-plan.assertPathWithinRoot, src.synthesis.code-change-plan.ensureDir, src.synthesis.code-change-plan.dirname, src.synthesis.code-change-plan.open\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.synthesis.code-change-plan.proposeCodeChangePlans\n- **Calls**: src.synthesis.code-change-plan.assertIntentGraph, src.synthesis.code-change-plan.assertConclusions, src.synthesis.code-change-plan.Date, src.synthesis.code-change-plan.toISOString, src.synthesis.code-change-plan.isNaN, src.synthesis.code-change-plan.parse, src.synthesis.code-change-plan.Error, src.synthesis.code-change-plan.isInteger\n\n### src.graph.diagnostics.diagnoseGraph\n- **Calls**: src.graph.diagnostics.Date, src.graph.diagnostics.toISOString, src.graph.diagnostics.assertIntentGraph, src.graph.diagnostics.buildNeighbors, src.graph.diagnostics.Map, src.graph.diagnostics.map, src.graph.diagnostics.indexGroundedImplementationEvidence, src.graph.diagnostics.indexImplementedPaths\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim, src.interfaces.a2a-message.startsWith, src.interfaces.a2a-message.parse\n\n### src.core.text.inferObject\n- **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.core.text.normalized\n- **Calls**: src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa, src.core.text.napraw, src.core.text.popraw\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.now, src.communication.llm.extractCommunicationIntent, src.communication.llm.CommunicationAttemptError.audit, src.communication.llm.CommunicationAttemptError.markDeterministic, src.communication.llm.CommunicationAttemptError.deterministicSyntheses, src.communication.llm.CommunicationAttemptError.deterministicGeneration, src.communication.llm.OpenRouterClient, src.communication.llm.isConfigured\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.audit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n- **Calls**: src.extractors.markdown-llm.now, src.extractors.markdown-llm.extractMarkdownIntent, src.extractors.markdown-llm.MarkdownAttemptError.stageAudit, src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic, src.extractors.markdown-llm.OpenRouterClient, src.extractors.markdown-llm.isConfigured, src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow, src.extractors.markdown-llm.MarkdownAttemptError.readPrompt\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: executeAction\n```\nexecuteAction [src.services.actions]\n └─> resolveRoot\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 2: root\n```\nroot [src.services.actions]\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 3: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 4: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 5: extractTypeScriptFile\n```\nextractTypeScriptFile [src.extractors.ast.typescript]\n```\n\n### Flow 6: extractCommunicationIntent\n```\nextractCommunicationIntent [src.extractors.communication]\n```\n\n### Flow 7: diffUiHtml\n```\ndiffUiHtml [src.web.diff-ui]\n```\n\n### Flow 8: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 9: identityRegistry\n```\nidentityRegistry [src.extractors.communication]\n```\n\n### Flow 10: communicationFiles\n```\ncommunicationFiles [src.extractors.communication]\n```\n\n## Key Classes\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.llm.CommunicationAttemptError\n- **Methods**: 40\n- **Key Methods**: src.communication.llm.CommunicationAttemptError.super, src.communication.llm.CommunicationAttemptError.enrichWithCorrection, src.communication.llm.CommunicationAttemptError.completion, src.communication.llm.CommunicationAttemptError.fallbackOrThrow, src.communication.llm.CommunicationAttemptError.failed, src.communication.llm.CommunicationAttemptError.marked, src.communication.llm.CommunicationAttemptError.participantGroups, src.communication.llm.CommunicationAttemptError.grouped, src.communication.llm.CommunicationAttemptError.participant, src.communication.llm.CommunicationAttemptError.role\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.nl-llm.NlAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.nl-llm.NlAttemptError.super, src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm.NlAttemptError.completion, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow, src.extractors.nl-llm.NlAttemptError.failedAudit, src.extractors.nl-llm.NlAttemptError.deterministic, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.toIntentRecord, src.extractors.nl-llm.NlAttemptError.start, src.extractors.nl-llm.NlAttemptError.end\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 29\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.extractors.markdown-llm.MarkdownAttemptError\n- **Methods**: 24\n- **Key Methods**: src.extractors.markdown-llm.MarkdownAttemptError.super, src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering, src.extractors.markdown-llm.MarkdownAttemptError.metadataByRecord, src.extractors.markdown-llm.MarkdownAttemptError.uncovered, src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch, src.extractors.markdown-llm.MarkdownAttemptError.half, src.extractors.markdown-llm.MarkdownAttemptError.emptyCoverage, src.extractors.markdown-llm.MarkdownAttemptError.enrichMarkdownBatchWithCorrection, src.extractors.markdown-llm.MarkdownAttemptError.completion, src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.llm.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.CommunicationLlmRequiredError.super, src.communication.llm.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.CommunicationLlmRequiredError.startedAt, src.communication.llm.CommunicationLlmRequiredError.deterministic, src.communication.llm.CommunicationLlmRequiredError.records, src.communication.llm.CommunicationLlmRequiredError.client, src.communication.llm.CommunicationLlmRequiredError.groups, src.communication.llm.CommunicationLlmRequiredError.response, src.communication.llm.CommunicationLlmRequiredError.enrichments, src.communication.llm.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.extractors.markdown-llm.MarkdownLlmRequiredError\n- **Methods**: 13\n- **Key Methods**: src.extractors.markdown-llm.MarkdownLlmRequiredError.super, src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited, src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt, src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic, src.extractors.markdown-llm.MarkdownLlmRequiredError.client, src.extractors.markdown-llm.MarkdownLlmRequiredError.prompt, src.extractors.markdown-llm.MarkdownLlmRequiredError.enrichments, src.extractors.markdown-llm.MarkdownLlmRequiredError.responseByRecord, src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes, src.extractors.markdown-llm.MarkdownLlmRequiredError.corrected\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n### src.interfaces.a2a-types.BodyTooLargeError\n- **Methods**: 11\n- **Key Methods**: src.interfaces.a2a-types.BodyTooLargeError.stringParam, src.interfaces.a2a-types.BodyTooLargeError.optionalString, src.interfaces.a2a-types.BodyTooLargeError.optionalStringArray, src.interfaces.a2a-types.BodyTooLargeError.optionalInteger, src.interfaces.a2a-types.BodyTooLargeError.parsed, src.interfaces.a2a-types.BodyTooLargeError.optionalBoolean, src.interfaces.a2a-types.BodyTooLargeError.optionalTimestamp, src.interfaces.a2a-types.BodyTooLargeError.timestamp, src.interfaces.a2a-types.BodyTooLargeError.optionalTaskState, src.interfaces.a2a-types.BodyTooLargeError.recordParam\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### src.cli.parsed\n- **Output to**: src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.web.diff-ui.formatBytes\n- **Output to**: src.web.diff-ui.selectedRun, src.web.diff-ui.byId\n\n### src.synthesis.validation.validateAndClassifyTodoProposals\n- **Output to**: src.synthesis.validation.assertTodoProposals, src.synthesis.validation.filter, src.synthesis.validation.map, src.synthesis.validation.duplicateEvidence, src.synthesis.validation.Boolean\n\n### src.synthesis.task-synthesis-materialize.parsed\n- **Output to**: src.synthesis.task-synthesis-materialize.map, src.synthesis.task-synthesis-materialize.sortedUnique, src.synthesis.task-synthesis-materialize.groundRecordIdsByDiagnostics, src.synthesis.task-synthesis-materialize.normalizeStringArray, src.synthesis.task-synthesis-materialize.createConclusionId\n\n### src.summary.summarizer.SummaryAttemptError.parsed\n- **Output to**: src.summary.summarizer.map, src.summary.summarizer.SummaryAttemptError.sortedUnique, src.summary.summarizer.groundRecordIdsByDiagnostics, src.summary.summarizer.createConclusionId\n\n### src.semantic.reranker.validateRetrieval\n- **Output to**: src.semantic.reranker.requiredText, src.semantic.reranker.test, src.semantic.reranker.Error\n\n### src.semantic.reranker.validateGeneration\n- **Output to**: src.semantic.reranker.Error, src.semantic.reranker.requiredText, src.semantic.reranker.test\n\n### src.semantic.reranker.validateVerdictReason\n- **Output to**: src.semantic.reranker.assertSemanticVerdictReason\n\n### src.operations.subactor.compileSubactorProcessEnvelope\n- **Output to**: src.operations.subactor.assertOperationPlan, src.operations.subactor.trim, src.operations.subactor.Error, src.operations.subactor.Map, src.operations.subactor.map\n\n### src.llm.structured-schema.StructuredResponseError.parse\n- **Output to**: src.llm.structured-schema.validate\n\n### src.llm.structured-schema.StructuredResponseError.parsed\n- **Output to**: src.llm.structured-schema.map, src.llm.structured-schema.StructuredResponseError.parse\n\n### src.llm.openrouter.OpenRouterClient.formatInvalidModelError\n- **Output to**: src.llm.openrouter.models, src.llm.openrouter.n, src.llm.openrouter.map, src.llm.openrouter.join\n\n### src.llm.openrouter.OpenRouterClient.parseJsonContent\n- **Output to**: src.llm.openrouter.trim, src.llm.openrouter.replace, src.llm.openrouter.parse, src.llm.openrouter.indexOf, src.llm.openrouter.lastIndexOf\n\n### src.llm.openrouter.OpenRouterClient.parseJsonResponse\n- **Output to**: src.llm.openrouter.OpenRouterClient.responseMetadata, src.llm.openrouter.OpenRouterClient.extractContent, src.llm.openrouter.String, src.llm.openrouter.StructuredResponseError\n\n### src.interfaces.mcp.parsed\n- **Output to**: src.interfaces.mcp.send\n\n### src.interfaces.mcp.validateModernRequest\n- **Output to**: src.interfaces.mcp.McpRequestError, src.interfaces.mcp.isArray, src.interfaces.mcp.validateModernMetadata\n\n### src.interfaces.mcp.validateModernMetadata\n- **Output to**: src.interfaces.mcp.McpRequestError, src.interfaces.mcp.isArray\n\n### src.interfaces.mcp.parseRequestLine\n\n### src.interfaces.a2a.parseRpcRequest\n- **Output to**: src.interfaces.a2a.parse, src.interfaces.a2a.readBody, src.interfaces.a2a.sendJson, src.interfaces.a2a.rpcError, src.interfaces.a2a.errorMessage\n\n### src.interfaces.a2a-types.BodyTooLargeError.parsed\n- **Output to**: src.interfaces.a2a-types.isInteger, src.interfaces.a2a-types.A2ARequestError\n\n### src.interfaces.a2a-task-store.encodeCursor\n- **Output to**: src.interfaces.a2a-task-store.from, src.interfaces.a2a-task-store.stringify, src.interfaces.a2a-task-store.toString\n\n### src.interfaces.a2a-task-store.decodeCursor\n- **Output to**: src.interfaces.a2a-task-store.parse, src.interfaces.a2a-task-store.from, src.interfaces.a2a-task-store.toString, src.interfaces.a2a-task-store.isFinite, src.interfaces.a2a-task-store.Error\n\n### src.interfaces.a2a-task-store.decoded\n- **Output to**: src.interfaces.a2a-task-store.isFinite, src.interfaces.a2a-task-store.parse, src.interfaces.a2a-task-store.Error\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `src.services.actions.executeAction` - 65 calls\n- `src.services.actions.root` - 64 calls\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 54 calls\n- `src.cli.main` - 44 calls\n- `src.extractors.ast.typescript.extractTypeScriptFile` - 44 calls\n- `src.extractors.communication.extractCommunicationIntent` - 43 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.web.diff-ui.diffUiHtml` - 42 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `src.extractors.communication.identityRegistry` - 37 calls\n- `src.extractors.communication.communicationFiles` - 37 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.synthesis.code-change-plan.applyCodeChangeSourcePatch` - 35 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.synthesis.code-change-plan.proposeCodeChangePlans` - 34 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `src.graph.diagnostics.diagnoseGraph` - 32 calls\n- `src.interfaces.a2a-message.parseCommand` - 31 calls\n- `src.core.text.inferObject` - 31 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.core.text.normalized` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.synthesis.code-change-plan.assertCodeChangeSourcePatch` - 26 calls\n- `src.extractors.ast.typescript.visit` - 26 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `src.semantic.reranker.assertSemanticRerankResult` - 21 calls\n- `src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited` - 21 calls\n- `src.extractors.git.extractGitIntent` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n executeAction --> resolveRoot\n executeAction --> scopedPath\n executeAction --> extractNlIntentAudit\n executeAction --> nlModeValue\n executeAction --> extractGitIntent\n root --> scopedPath\n root --> extractNlIntentAudit\n root --> nlModeValue\n root --> extractGitIntent\n root --> numberValue\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n extractTypeScriptFil --> relativePosix\n extractTypeScriptFil --> createSourceFile\n extractTypeScriptFil --> scriptKind\n extractTypeScriptFil --> getLineAndCharacterO\n extractTypeScriptFil --> getStart\n extractCommunication --> resolve\n extractCommunication --> assertPathWithinRoot\n extractCommunication --> pathExists\n extractCommunication --> relativePosix\n extractCommunication --> walkFiles\n main --> parse_args\n main --> read_bytes\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "67.0KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph src__cli\n src__cli__handleExtract["handleExtract"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__maxRows["maxRows"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__diff["diff"]\n src__cli__handleWatch["handleWatch"]\n src__cli__file["file"]\n src__cli__initProject["initProject"]\n src__cli__taskFile["taskFile"]\n src__cli__optionNumber["optionNumber"]\n src__cli__printHelp["printHelp"]\n src__cli__invokedPath["invokedPath"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__svg["svg"]\n src__cli__handleReality["handleReality"]\n src__cli__stamp["stamp"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__result["result"]\n src__cli__parsed["parsed"]\n src__cli__mode["mode"]\n src__cli__main["main"]\n src__cli__extractor["extractor"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__optionNullableString["optionNullableString"]\n src__cli__html["html"]\n src__cli__doctor["doctor"]\n src__cli__optionNlMode["optionNlMode"]\n src__cli__command["command"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__parseArgs["parseArgs"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__stop["stop"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__root["root"]\n src__cli__handleDiff["handleDiff"]\n src__cli__optionList["optionList"]\n src__cli__optionString["optionString"]\n src__cli__optionTaskMode["optionTaskMode"]\n src__cli__diagnostics["diagnostics"]\n src__cli__context["context"]\n src__cli__controller["controller"]\n src__cli__view["view"]\n end\n subgraph src__operations\n src__operations__validation__dateString["dateString"]\n src__operations__validation__exactKeys["exactKeys"]\n src__operations__validation__principals["principals"]\n src__operations__validation__objectValue["objectValue"]\n src__operations__validation__nonBlank["nonBlank"]\n src__operations__validation__uniqueStrings["uniqueStrings"]\n src__operations__validation__assertVariableContract["assertVariableContract"]\n src__operations__validation__assertPrincipalList["assertPrincipalList"]\n end\n subgraph src__pipeline\n src__pipeline__run__docs["docs"]\n src__pipeline__run__configurationExtraction["configurationExtraction"]\n src__pipeline__run__reason["reason"]\n src__pipeline__run__persistFailedRun["persistFailedRun"]\n src__pipeline__run__manifestConfiguration["manifestConfiguration"]\n src__pipeline__run__stageValue["stageValue"]\n src__pipeline__run__runPipeline["runPipeline"]\n src__pipeline__run__failedAudit["failedAudit"]\n src__pipeline__run__communicationInputPresent["communicationInputPresent"]\n src__pipeline__run__communicationStartedAt["communicationStartedAt"]\n src__pipeline__run__communicationAudit["communicationAudit"]\n src__pipeline__run__values["values"]\n src__pipeline__run__message["message"]\n src__pipeline__run__knownAudit["knownAudit"]\n src__pipeline__run__aborted["aborted"]\n src__pipeline__run__failureCode["failureCode"]\n src__pipeline__run__includeCommunication["includeCommunication"]\n src__pipeline__run__skippedAudit["skippedAudit"]\n src__pipeline__run__collectTargetHints["collectTargetHints"]\n end\n subgraph src__semantic\n src__semantic__reranker__validDate["validDate"]\n src__semantic__reranker__createSemanticCandidateSet["createSemanticCandidateSet"]\n src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticCandidateSet["assertSemanticCandidateSet"]\n src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates["rerankSemanticCandidates"]\n src__semantic__reranker__assertSemanticVerdictReason["assertSemanticVerdictReason"]\n src__semantic__reranker__roundedConfidence["roundedConfidence"]\n src__semantic__reranker_llm__SemanticRerankerRequiredError__projectRecord["projectRecord"]\n src__semantic__reranker__values["values"]\n src__semantic__reranker__requiredText["requiredText"]\n src__semantic__reranker__acceptedDeclarations["acceptedDeclarations"]\n src__semantic__reranker__records["records"]\n src__semantic__reranker_llm__SemanticRerankerRequiredError__model["model"]\n src__semantic__reranker__validateGeneration["validateGeneration"]\n src__semantic__reranker__validateRetrieval["validateRetrieval"]\n src__semantic__reranker__validateVerdictReason["validateVerdictReason"]\n src__semantic__reranker__assertGroundedQuote["assertGroundedQuote"]\n src__semantic__reranker__seenIds["seenIds"]\n src__semantic__reranker__quote["quote"]\n src__semantic__reranker__applyAcceptedSemanticRelations["applyAcceptedSemanticRelations"]\n src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult["assertSemanticRerankResult"]\n src__semantic__reranker__assertSemanticRerankResult["assertSemanticRerankResult"]\n src__semantic__reranker__byDeclaration["byDeclaration"]\n src__semantic__reranker_llm__SemanticRerankerRequiredError__payload["payload"]\n src__semantic__reranker__seenDecisions["seenDecisions"]\n src__semantic__reranker_llm__SemanticRerankerRequiredError__modelRevision["modelRevision"]\n src__semantic__reranker__decisions["decisions"]\n src__semantic__reranker__assertSemanticCandidateSet["assertSemanticCandidateSet"]\n src__semantic__reranker__createSemanticRerankResult["createSemanticRerankResult"]\n src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshot["assertTrackedSnapshot"]\n src__semantic__reranker__seenPairs["seenPairs"]\n src__semantic__reranker__boundedScore["boundedScore"]\n end\n subgraph src__services\n src__services__actions__value["value"]\n src__services__actions__patch["patch"]\n src__services__actions__afterPath["afterPath"]\n src__services__actions__beforeInput["beforeInput"]\n src__services__actions__graph["graph"]\n src__services__actions__numberValue["numberValue"]\n src__services__actions__llmModeValue["llmModeValue"]\n src__services__actions__scopedPath["scopedPath"]\n src__services__actions__root["root"]\n src__services__actions__afterDiagnostics["afterDiagnostics"]\n src__services__actions__analysis["analysis"]\n src__services__actions__conclusions["conclusions"]\n src__services__actions__executeAction["executeAction"]\n src__services__actions__nullableString["nullableString"]\n src__services__actions__title["title"]\n src__services__actions__booleanValue["booleanValue"]\n src__services__actions__nlModeValue["nlModeValue"]\n src__services__actions__before["before"]\n src__services__actions__beforeDiagnostics["beforeDiagnostics"]\n src__services__actions__todoPath["todoPath"]\n src__services__actions__stringValue["stringValue"]\n src__services__actions__resolveRoot["resolveRoot"]\n src__services__actions__receiptPath["receiptPath"]\n src__services__actions__after["after"]\n src__services__actions__filterCommunicationGraph["filterCommunicationGraph"]\n src__services__actions__afterInput["afterInput"]\n src__services__actions__svg["svg"]\n src__services__actions__result["result"]\n src__services__actions__proposals["proposals"]\n src__services__actions__diff["diff"]\n src__services__actions__readRecords["readRecords"]\n src__services__actions__diagnostics["diagnostics"]\n src__services__actions__afterGraph["afterGraph"]\n src__services__actions__summaryModeValue["summaryModeValue"]\n src__services__actions__nullableScopedPath["nullableScopedPath"]\n src__services__actions__stringList["stringList"]\n src__services__actions__view["view"]\n src__services__actions__withTextDiffViews["withTextDiffViews"]\n src__services__actions__beforeGraph["beforeGraph"]\n src__services__actions__hasInputValue["hasInputValue"]\n src__services__actions__beforePath["beforePath"]\n end\n subgraph src__summary\n src__summary__summarizer__client["client"]\n src__summary__summarizer__SummaryAttemptError__conclusions["conclusions"]\n src__summary__render__renderConclusion["renderConclusion"]\n src__summary__render__actions["actions"]\n src__summary__summarizer__SummaryAttemptError__readPrompt["readPrompt"]\n src__summary__render__renderRecords["renderRecords"]\n src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection["summarizeWithCorrection"]\n src__summary__render__confidence["confidence"]\n src__summary__summarizer__systemPrompt["systemPrompt"]\n src__summary__summarizer__SummaryAttemptError__deterministicConclusions["deterministicConclusions"]\n src__summary__render__recordCitations["recordCitations"]\n src__summary__summarizer__SummaryAttemptError__summaryMode["summaryMode"]\n src__summary__summarizer__SummaryAttemptError__materializeConclusions["materializeConclusions"]\n src__summary__summarizer__payload["payload"]\n src__summary__summarizer__SummaryAttemptError__parsed["parsed"]\n src__summary__summarizer__SummaryAttemptError__sortedUnique["sortedUnique"]\n src__summary__summarizer__mode["mode"]\n src__summary__summarizer__summarizeGraph["summarizeGraph"]\n src__summary__summarizer__SummaryAttemptError__generationMetadata["generationMetadata"]\n src__summary__render__renderSummaryMarkdown["renderSummaryMarkdown"]\n src__summary__summarizer__SummaryAttemptError__assertConclusions["assertConclusions"]\n end\n subgraph src__synthesis\n src__synthesis__code_change_plan__buildChanges["buildChanges"]\n src__synthesis__task_synthesis_contract__taskIds["taskIds"]\n src__synthesis__task_synthesis_materialize__proposalKeys["proposalKeys"]\n src__synthesis__code_change_plan__assertSourcePatchStrings["assertSourcePatchStrings"]\n src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse["materializeTaskSynthesisRespon"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__assertConclusions["assertConclusions"]\n src__synthesis__todo_patch__uniqueStrings["uniqueStrings"]\n src__synthesis__code_change_plan__relatedRecords["relatedRecords"]\n src__synthesis__task_synthesis_materialize__normalizeLocalKeys["normalizeLocalKeys"]\n src__synthesis__todo_patch__result["result"]\n src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria["normalizeAcceptanceCriteria"]\n src__synthesis__task_synthesis_materialize__proposalDrafts["proposalDrafts"]\n src__synthesis__task_synthesis_materialize__conclusionByKey["conclusionByKey"]\n src__synthesis__todo_patch__orderedSelected["orderedSelected"]\n src__synthesis__code_change_plan__fileHashesAfter["fileHashesAfter"]\n src__synthesis__todo_patch__diagnosticReportFingerprint["diagnosticReportFingerprint"]\n src__synthesis__validation__dependencyFirstPriorityOrder["dependencyFirstPriorityOrder"]\n src__synthesis__code_change_plan__collectTarget["collectTarget"]\n src__synthesis__validation__sharedTicket["sharedTicket"]\n src__synthesis__task_synthesis_materialize__diagnosticIds["diagnosticIds"]\n src__synthesis__todo_patch__inline["inline"]\n src__synthesis__code_change_plan__planHash["planHash"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals["synthesizeTodoProposals"]\n src__synthesis__code_change_plan__assertExistingSourceReceipt["assertExistingSourceReceipt"]\n src__synthesis__task_synthesis_contract__nonBlank["nonBlank"]\n src__synthesis__todo_patch__selected["selected"]\n src__synthesis__code_change_plan__assertCodeChangeSourcePatch["assertCodeChangeSourcePatch"]\n src__synthesis__code_change_plan__conclusionsByDiagnostic["conclusionsByDiagnostic"]\n src__synthesis__code_change_plan__descriptionFor["descriptionFor"]\n src__synthesis__code_change_plan__applyUnifiedDiffToText["applyUnifiedDiffToText"]\n src__synthesis__code_change_plan__changes["changes"]\n src__synthesis__todo_patch__applyTodoPatch["applyTodoPatch"]\n src__synthesis__task_synthesis_materialize__sortedUnique["sortedUnique"]\n src__synthesis__code_change_plan__rollbackFor["rollbackFor"]\n src__synthesis__todo_patch__markdown["markdown"]\n src__synthesis__code_change_plan__instructionFor["instructionFor"]\n src__synthesis__code_change_path__isPlannablePath["isPlannablePath"]\n src__synthesis__task_synthesis_materialize__normalizeRawTarget["normalizeRawTarget"]\n src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown["renderCodeChangeReviewMarkdown"]\n src__synthesis__code_change_plan__applyCodeChangeSourcePatch["applyCodeChangeSourcePatch"]\n src__synthesis__code_change_plan__createCodeChangeReviewPatch["createCodeChangeReviewPatch"]\n src__synthesis__code_change_plan__unifiedDiff["unifiedDiff"]\n src__synthesis__todo_patch__applied["applied"]\n src__synthesis__code_change_plan__index["index"]\n src__synthesis__code_change_plan__planIds["planIds"]\n src__synthesis__code_change_plan__confidenceFor["confidenceFor"]\n src__synthesis__code_change_plan__candidates["candidates"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__client["client"]\n src__synthesis__todo_patch__renderTodoPatchMarkdown["renderTodoPatchMarkdown"]\n src__synthesis__todo_patch__sourceTodo["sourceTodo"]\n src__synthesis__code_change_plan__priorityRank["priorityRank"]\n src__synthesis__todo_patch__current["current"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow["fallbackOrThrow"]\n src__synthesis__todo_patch__renderTargets["renderTargets"]\n src__synthesis__todo_patch__assertReceipt["assertReceipt"]\n src__synthesis__validation__duplicateEvidence["duplicateEvidence"]\n src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT["RAW_PROPOSAL_CONTRACT"]\n src__synthesis__todo_patch__uniqueIds["uniqueIds"]\n src__synthesis__code_change_plan__rawDiff["rawDiff"]\n src__synthesis__code_change_plan__deterministicGeneration["deterministicGeneration"]\n src__synthesis__code_change_plan__patchHash["patchHash"]\n src__synthesis__code_change_plan__proposalsByDiagnostic["proposalsByDiagnostic"]\n src__synthesis__todo_patch__wasAlreadyAppended["wasAlreadyAppended"]\n src__synthesis__task_synthesis_materialize__proposals["proposals"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__startedAt["startedAt"]\n src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet["assertCodeChangeSourcePatchSet"]\n src__synthesis__todo_patch__duplicates["duplicates"]\n src__synthesis__task_synthesis_materialize__proposalIdByKey["proposalIdByKey"]\n src__synthesis__code_change_plan__acceptedCount["acceptedCount"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__payload["payload"]\n src__synthesis__code_change_plan__indexProposalsByDiagnostic["indexProposalsByDiagnostic"]\n src__synthesis__todo_patch__classified["classified"]\n src__synthesis__code_change_plan__object["object"]\n src__synthesis__code_change_plan__patchIds["patchIds"]\n src__synthesis__code_change_path__isUsefulCodeChangePath["isUsefulCodeChangePath"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__generationMetadata["generationMetadata"]\n src__synthesis__task_synthesis_materialize__conclusions["conclusions"]\n src__synthesis__code_change_plan__conclusions["conclusions"]\n src__synthesis__code_change_plan__set["set"]\n src__synthesis__validation__intersects["intersects"]\n src__synthesis__validation__target["target"]\n src__synthesis__code_change_plan__uniqueSorted["uniqueSorted"]\n src__synthesis__todo_patch__renderIds["renderIds"]\n src__synthesis__code_change_plan__startsWithImperative["startsWithImperative"]\n src__synthesis__code_change_plan__assertSourcePatchIds["assertSourcePatchIds"]\n src__synthesis__validation__sharedPath["sharedPath"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesisAudit["synthesisAudit"]\n src__synthesis__code_change_plan__createCodeChangeSourcePatch["createCodeChangeSourcePatch"]\n src__synthesis__code_change_plan__recordsById["recordsById"]\n src__synthesis__task_synthesis_contract__taskStrings["taskStrings"]\n src__synthesis__code_change_plan__now["now"]\n src__synthesis__task_synthesis_materialize__keys["keys"]\n src__synthesis__code_change_plan__target["target"]\n src__synthesis__todo_patch__isoDate["isoDate"]\n src__synthesis__code_change_plan__acceptances["acceptances"]\n src__synthesis__todo_patch__currentHash["currentHash"]\n src__synthesis__validation__validateAndClassifyTodoProposals["validateAndClassifyTodoProposa"]\n src__synthesis__todo_patch__createTodoPatch["createTodoPatch"]\n src__synthesis__code_change_plan__markdown["markdown"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__readPrompt["readPrompt"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__prompt["prompt"]\n src__synthesis__todo_patch__normalizePath["normalizePath"]\n src__synthesis__code_change_plan__plansById["plansById"]\n src__synthesis__todo_patch__hash["hash"]\n src__synthesis__todo_patch__rendered["rendered"]\n src__synthesis__code_change_plan__record["record"]\n src__synthesis__task_synthesis_materialize__conclusionIdByKey["conclusionIdByKey"]\n src__synthesis__code_change_plan__normalizeUnifiedDiff["normalizeUnifiedDiff"]\n src__synthesis__validation__proposalWords["proposalWords"]\n src__synthesis__code_change_plan__titleFor["titleFor"]\n src__synthesis__todo_patch__writeTodoPatchArtifacts["writeTodoPatchArtifacts"]\n src__synthesis__code_change_plan__acceptanceCriteriaFor["acceptanceCriteriaFor"]\n src__synthesis__code_change_plan__paths["paths"]\n src__synthesis__validation__similarity["similarity"]\n src__synthesis__code_change_plan__assertSourceApplyReceipt["assertSourceApplyReceipt"]\n src__synthesis__todo_patch__assertApproval["assertApproval"]\n src__synthesis__todo_patch__artifact["artifact"]\n src__synthesis__todo_patch__appendPatch["appendPatch"]\n src__synthesis__code_change_plan__indexConclusionsByDiagnostic["indexConclusionsByDiagnostic"]\n src__synthesis__code_change_plan__exactSourcePatchKeys["exactSourcePatchKeys"]\n src__synthesis__code_change_plan__exactSourcePatchSet["exactSourcePatchSet"]\n src__synthesis__code_change_plan__splitKeep["splitKeep"]\n src__synthesis__task_synthesis_contract__RAW_CONCLUSION_CONTRACT["RAW_CONCLUSION_CONTRACT"]\n src__synthesis__task_synthesis_materialize__parsed["parsed"]\n src__synthesis__code_change_plan__riskFor["riskFor"]\n src__synthesis__todo_patch__now["now"]\n src__synthesis__task_synthesis_materialize__normalizeStringArray["normalizeStringArray"]\n src__synthesis__todo_patch__recovered["recovered"]\n src__synthesis__validation__jaccard["jaccard"]\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection["synthesizeWithCorrection"]\n src__synthesis__todo_patch__object["object"]\n src__synthesis__todo_patch__exactKeys["exactKeys"]\n src__synthesis__code_change_plan__createCodeChangeSourcePatchSet["createCodeChangeSourcePatchSet"]\n src__synthesis__code_change_plan__renderIds["renderIds"]\n src__synthesis__validation__words["words"]\n src__synthesis__todo_patch__nonBlank["nonBlank"]\n src__synthesis__task_synthesis_materialize__mapKeys["mapKeys"]\n src__synthesis__code_change_plan__evaluateCodeChangeAcceptance["evaluateCodeChangeAcceptance"]\n src__synthesis__validation__sharedSymbol["sharedSymbol"]\n src__synthesis__todo_patch__assertTodoPatchArtifact["assertTodoPatchArtifact"]\n src__synthesis__code_change_plan__proposals["proposals"]\n src__synthesis__code_change_plan__generatedAt["generatedAt"]\n src__synthesis__todo_patch__sameArray["sameArray"]\n src__synthesis__code_change_plan__matchingConclusions["matchingConclusions"]\n src__synthesis__todo_patch__atomicWrite["atomicWrite"]\n src__synthesis__code_change_plan__inline["inline"]\n src__synthesis__code_change_plan__matchingProposals["matchingProposals"]\n end\n subgraph src__tf\n src__tf__classifier__classifyAction["classifyAction"]\n src__tf__classifier__dynamicImport["dynamicImport"]\n src__tf__classifier__vectorize["vectorize"]\n src__tf__classifier__importer["importer"]\n src__tf__classifier__loadClassifier["loadClassifier"]\n src__tf__classifier__loadAssets["loadAssets"]\n end\n subgraph src__watch\n src__watch__watcher__waitMs["waitMs"]\n src__watch__watcher__diffSnapshots["diffSnapshots"]\n src__watch__watcher__emit["emit"]\n src__watch__watcher__snapshot["snapshot"]\n src__watch__watcher__describeDelta["describeDelta"]\n src__watch__watcher__visit["visit"]\n src__watch__watcher__relative["relative"]\n src__watch__watcher__sleep["sleep"]\n src__watch__watcher__lastReportStartedAt["lastReportStartedAt"]\n src__watch__watcher__current["current"]\n src__watch__watcher__defaultSleep["defaultSleep"]\n src__watch__watcher__pending["pending"]\n src__watch__watcher__onAbort["onAbort"]\n src__watch__watcher__generate["generate"]\n src__watch__watcher__watchRepository["watchRepository"]\n src__watch__watcher__absolute["absolute"]\n src__watch__watcher__finish["finish"]\n src__watch__watcher__result["result"]\n src__watch__watcher__now["now"]\n src__watch__watcher__maxFiles["maxFiles"]\n src__watch__watcher__DEFAULT_MIN_INTERVAL_MS["DEFAULT_MIN_INTERVAL_MS"]\n src__watch__watcher__scanTree["scanTree"]\n src__watch__watcher__delta["delta"]\n src__watch__watcher__absoluteRoot["absoluteRoot"]\n src__watch__watcher__runReport["runReport"]\n src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS["DEFAULT_SCAN_INTERVAL_MS"]\n src__watch__watcher__timer["timer"]\n src__watch__watcher__startedAt["startedAt"]\n end\n subgraph src__web\n src__web__diff_ui__loadRuns["loadRuns"]\n src__web__diff_ui__fillSelect["fillSelect"]\n src__web__diff_ui__requestHeaders["requestHeaders"]\n src__web__diff_ui__compareGraphs["compareGraphs"]\n src__web__diff_ui__byId["byId"]\n src__web__diff_ui__selectedRun["selectedRun"]\n src__web__diff_ui__diffUiHtml["diffUiHtml"]\n src__web__diff_ui__updateMeta["updateMeta"]\n src__web__diff_ui__formatBytes["formatBytes"]\n end\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__initProject\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handleWatch --> src__cli__optionNullableString\n src__cli__handleWatch --> src__cli__optionList\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__handleWatch --> src__cli__optionString\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionNlMode\n src__cli__taskFile --> src__cli__optionNullableString\n src__cli__taskFile --> src__cli__optionList\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionString\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionNlMode\n src__cli__taskFile --> src__cli__optionLlmMode\n src__cli__taskFile --> src__cli__optionPipelineTaskMode\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__mode --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__html --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__maxRows --> src__cli__optionString\n src__cli__maxRows --> src__cli__optionBoolean\n src__cli__maxRows --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__optionNlMode\n src__cli__handleExtract --> src__cli__emitExtraction\n src__cli__handleExtract --> src__cli__optionNumber\n src__cli__extractor --> src__cli__optionString\n src__cli__extractor --> src__cli__optionNlMode\n src__cli__extractor --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__web__diff_ui__diffUiHtml --> src__web__diff_ui__byId\n src__web__diff_ui__requestHeaders --> src__web__diff_ui__byId\n src__web__diff_ui__formatBytes --> src__web__diff_ui__selectedRun\n src__web__diff_ui__formatBytes --> src__web__diff_ui__byId\n src__web__diff_ui__selectedRun --> src__web__diff_ui__byId\n src__web__diff_ui__selectedRun --> src__web__diff_ui__formatBytes\n src__web__diff_ui__updateMeta --> src__web__diff_ui__selectedRun\n src__web__diff_ui__updateMeta --> src__web__diff_ui__byId\n src__web__diff_ui__updateMeta --> src__web__diff_ui__formatBytes\n src__web__diff_ui__fillSelect --> src__web__diff_ui__byId\n src__web__diff_ui__fillSelect --> src__web__diff_ui__updateMeta\n src__web__diff_ui__loadRuns --> src__web__diff_ui__byId\n src__web__diff_ui__loadRuns --> src__web__diff_ui__requestHeaders\n src__web__diff_ui__compareGraphs --> src__web__diff_ui__byId\n src__web__diff_ui__compareGraphs --> src__web__diff_ui__requestHeaders\n src__watch__watcher__scanTree --> src__watch__watcher__relative\n src__watch__watcher__maxFiles --> src__watch__watcher__relative\n src__watch__watcher__maxFiles --> src__watch__watcher__visit\n src__watch__watcher__absoluteRoot --> src__watch__watcher__relative\n src__watch__watcher__absoluteRoot --> src__watch__watcher__visit\n src__watch__watcher__visit --> src__watch__watcher__relative\n src__watch__watcher__absolute --> src__watch__watcher__visit\n src__watch__watcher__relative --> src__watch__watcher__visit\n src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__now\n src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__scanTree\n src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__emit\n src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__generate\n src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__sleep\n src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__diffSnapshots\n src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__now\n src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__scanTree\n src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__emit\n src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__generate\n src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__sleep\n src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__diffSnapshots\n src__watch__watcher__watchRepository --> src__watch__watcher__now\n src__watch__watcher__watchRepository --> src__watch__watcher__scanTree\n src__watch__watcher__watchRepository --> src__watch__watcher__emit\n src__watch__watcher__watchRepository --> src__watch__watcher__generate\n src__watch__watcher__watchRepository --> src__watch__watcher__sleep\n src__watch__watcher__watchRepository --> src__watch__watcher__diffSnapshots\n src__watch__watcher__result --> src__watch__watcher__emit\n src__watch__watcher__result --> src__watch__watcher__now\n src__watch__watcher__snapshot --> src__watch__watcher__emit\n src__watch__watcher__lastReportStartedAt --> src__watch__watcher__now\n src__watch__watcher__lastReportStartedAt --> src__watch__watcher__generate\n src__watch__watcher__pending --> src__watch__watcher__now\n src__watch__watcher__pending --> src__watch__watcher__generate\n src__watch__watcher__current --> src__watch__watcher__describeDelta\n src__watch__watcher__current --> src__watch__watcher__emit\n src__watch__watcher__delta --> src__watch__watcher__describeDelta\n src__watch__watcher__delta --> src__watch__watcher__emit\n src__watch__watcher__waitMs --> src__watch__watcher__emit\n src__watch__watcher__generate --> src__watch__watcher__emit\n src__watch__watcher__generate --> src__watch__watcher__now\n src__watch__watcher__generate --> src__watch__watcher__runReport\n src__watch__watcher__generate --> src__watch__watcher__scanTree\n src__watch__watcher__startedAt --> src__watch__watcher__runReport\n src__watch__watcher__startedAt --> src__watch__watcher__emit\n src__watch__watcher__startedAt --> src__watch__watcher__now\n src__watch__watcher__defaultSleep --> src__watch__watcher__finish\n src__watch__watcher__timer --> src__watch__watcher__finish\n src__watch__watcher__onAbort --> src__watch__watcher__finish\n src__tf__classifier__dynamicImport --> src__tf__classifier__importer\n src__tf__classifier__loadClassifier --> src__tf__classifier__dynamicImport\n src__tf__classifier__loadClassifier --> src__tf__classifier__loadAssets\n src__tf__classifier__classifyAction --> src__tf__classifier__loadClassifier\n src__tf__classifier__classifyAction --> src__tf__classifier__vectorize\n src__synthesis__validation__validateAndClassifyTodoProposals --> src__synthesis__validation__duplicateEvidence\n src__synthesis__validation__validateAndClassifyTodoProposals --> src__synthesis__validation__dependencyFirstPriorityOrder\n src__synthesis__validation__duplicateEvidence --> src__synthesis__validation__words\n src__synthesis__validation__duplicateEvidence --> src__synthesis__validation__intersects\n src__synthesis__validation__duplicateEvidence --> src__synthesis__validation__jaccard\n src__synthesis__validation__proposalWords --> src__synthesis__validation__words\n src__synthesis__validation__target --> src__synthesis__validation__jaccard\n src__synthesis__validation__target --> src__synthesis__validation__words\n src__synthesis__validation__sharedTicket --> src__synthesis__validation__jaccard\n src__synthesis__validation__sharedTicket --> src__synthesis__validation__words\n src__synthesis__validation__sharedSymbol --> src__synthesis__validation__jaccard\n src__synthesis__validation__sharedSymbol --> src__synthesis__validation__words\n src__synthesis__validation__sharedPath --> src__synthesis__validation__jaccard\n src__synthesis__validation__sharedPath --> src__synthesis__validation__words\n src__synthesis__validation__similarity --> src__synthesis__validation__jaccard\n src__synthesis__validation__similarity --> src__synthesis__validation__words\n src__synthesis__todo_patch__createTodoPatch --> src__synthesis__todo_patch__sameArray\n src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__object\n src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__exactKeys\n src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__uniqueIds\n src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__uniqueStrings\n src__synthesis__todo_patch__orderedSelected --> src__synthesis__todo_patch__sameArray\n src__synthesis__todo_patch__markdown --> src__synthesis__todo_patch__normalizePath\n src__synthesis__todo_patch__markdown --> src__synthesis__todo_patch__diagnosticReportFingerprint\n src__synthesis__todo_patch__renderTodoPatchMarkdown --> src__synthesis__todo_patch__inline\n src__synthesis__todo_patch__renderTodoPatchMarkdown --> src__synthesis__todo_patch__renderTargets\n src__synthesis__todo_patch__renderTodoPatchMarkdown --> src__synthesis__todo_patch__renderIds\n src__synthesis__todo_patch__writeTodoPatchArtifacts --> src__synthesis__todo_patch__createTodoPatch\n src__synthesis__todo_patch__applyTodoPatch --> src__synthesis__todo_patch__assertTodoPatchArtifact\n src__synthesis__todo_patch__applyTodoPatch --> src__synthesis__todo_patch__assertApproval\n src__synthesis__todo_patch__current --> src__synthesis__todo_patch__assertReceipt\n src__synthesis__todo_patch__now --> src__synthesis__todo_patch__appendPatch\n src__synthesis__todo_patch__now --> src__synthesis__todo_patch__atomicWrite\n src__synthesis__todo_patch__now --> src__synthesis__todo_patch__wasAlreadyAppended\n src__synthesis__todo_patch__currentHash --> src__synthesis__todo_patch__appendPatch\n src__synthesis__todo_patch__currentHash --> src__synthesis__todo_patch__atomicWrite\n src__synthesis__todo_patch__currentHash --> src__synthesis__todo_patch__wasAlreadyAppended\n src__synthesis__todo_patch__result --> src__synthesis__todo_patch__appendPatch\n src__synthesis__todo_patch__result --> src__synthesis__todo_patch__atomicWrite\n src__synthesis__todo_patch__result --> src__synthesis__todo_patch__wasAlreadyAppended\n src__synthesis__todo_patch__applied --> src__synthesis__todo_patch__appendPatch\n src__synthesis__todo_patch__applied --> src__synthesis__todo_patch__atomicWrite\n src__synthesis__todo_patch__applied --> src__synthesis__todo_patch__wasAlreadyAppended\n src__synthesis__todo_patch__recovered --> src__synthesis__todo_patch__appendPatch\n src__synthesis__todo_patch__recovered --> src__synthesis__todo_patch__atomicWrite\n src__synthesis__todo_patch__recovered --> src__synthesis__todo_patch__wasAlreadyAppended\n src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__object\n src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__exactKeys\n src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__isoDate\n src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__hash\n src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__nonBlank\n src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__uniqueIds\n src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__object\n src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__exactKeys\n src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__uniqueIds\n src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__uniqueStrings\n src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__object\n src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__exactKeys\n src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__uniqueIds\n src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__uniqueStrings\n src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__object\n src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__exactKeys\n src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__uniqueIds\n src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__uniqueStrings\n src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__object\n src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__exactKeys\n src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__uniqueIds\n src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__uniqueStrings\n src__synthesis__todo_patch__assertApproval --> src__synthesis__todo_patch__nonBlank\n src__synthesis__todo_patch__assertReceipt --> src__synthesis__todo_patch__sameArray\n src__synthesis__todo_patch__assertReceipt --> src__synthesis__todo_patch__nonBlank\n src__synthesis__todo_patch__assertReceipt --> src__synthesis__todo_patch__isoDate\n src__synthesis__todo_patch__renderTargets --> src__synthesis__todo_patch__inline\n src__synthesis__todo_patch__rendered --> src__synthesis__todo_patch__inline\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__assertConclusions\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__readPrompt\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__startedAt --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__assertConclusions\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__client --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__prompt --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__payload --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__generationMetadata\n src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesisAudit\n src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__normalizeLocalKeys\n src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__parsed --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_materialize__parsed --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__proposalKeys --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_materialize__proposalKeys --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__conclusions --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_materialize__conclusions --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__diagnosticIds --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__normalizeRawTarget\n src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria\n src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__mapKeys\n src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__normalizeRawTarget\n src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria\n src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__mapKeys\n src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__normalizeRawTarget\n src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria\n src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__mapKeys\n src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_materialize__proposalIdByKey --> src__synthesis__task_synthesis_materialize__mapKeys\n src__synthesis__task_synthesis_materialize__proposals --> src__synthesis__task_synthesis_materialize__mapKeys\n src__synthesis__task_synthesis_materialize__keys --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_materialize__mapKeys --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__mapKeys --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_materialize__sortedUnique --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__normalizeRawTarget --> src__synthesis__task_synthesis_materialize__normalizeStringArray\n src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria --> src__synthesis__task_synthesis_materialize__sortedUnique\n src__synthesis__task_synthesis_contract__RAW_CONCLUSION_CONTRACT --> src__synthesis__task_synthesis_contract__nonBlank\n src__synthesis__task_synthesis_contract__RAW_CONCLUSION_CONTRACT --> src__synthesis__task_synthesis_contract__taskIds\n src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT --> src__synthesis__task_synthesis_contract__nonBlank\n src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT --> src__synthesis__task_synthesis_contract__taskStrings\n src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT --> src__synthesis__task_synthesis_contract__taskIds\n src__synthesis__code_change_plan__generatedAt --> src__synthesis__code_change_plan__createCodeChangeSourcePatch\n src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__collectTarget\n src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__buildChanges\n src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__titleFor\n src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__descriptionFor\n src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__collectTarget\n src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__buildChanges\n src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__titleFor\n src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__descriptionFor\n src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__collectTarget\n src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__buildChanges\n src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__titleFor\n src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__descriptionFor\n src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__collectTarget\n src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__buildChanges\n src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__titleFor\n src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__descriptionFor\n src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__collectTarget\n src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__buildChanges\n src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__titleFor\n src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__descriptionFor\n src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__collectTarget\n src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__buildChanges\n src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__titleFor\n src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__descriptionFor\n src__synthesis__code_change_plan__relatedRecords --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__matchingProposals --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__matchingConclusions --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__target --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__changes --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__planHash --> src__synthesis__code_change_plan__confidenceFor\n src__synthesis__code_change_plan__planIds --> src__synthesis__code_change_plan__evaluateCodeChangeAcceptance\n src__synthesis__code_change_plan__acceptances --> src__synthesis__code_change_plan__evaluateCodeChangeAcceptance\n src__synthesis__code_change_plan__acceptedCount --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__indexProposalsByDiagnostic --> src__synthesis__code_change_plan__set\n src__synthesis__code_change_plan__index --> src__synthesis__code_change_plan__set\n src__synthesis__code_change_plan__indexConclusionsByDiagnostic --> src__synthesis__code_change_plan__set\n src__synthesis__code_change_plan__paths --> src__synthesis__code_change_plan__exactSourcePatchKeys\n src__synthesis__code_change_plan__paths --> src__synthesis__code_change_plan__assertSourcePatchStrings\n src__synthesis__code_change_plan__paths --> src__synthesis__code_change_plan__normalizeUnifiedDiff\n src__synthesis__code_change_plan__buildChanges --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__titleFor --> src__synthesis__code_change_plan__startsWithImperative\n src__synthesis__code_change_plan__record --> src__synthesis__code_change_plan__startsWithImperative\n src__synthesis__code_change_plan__object --> src__synthesis__code_change_plan__startsWithImperative\n src__synthesis__code_change_plan__acceptanceCriteriaFor --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__riskFor --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__rollbackFor --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__createCodeChangeReviewPatch --> src__synthesis__code_change_plan__priorityRank\n src__synthesis__code_change_plan__markdown --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown --> src__synthesis__code_change_plan__inline\n src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown --> src__synthesis__code_change_plan__renderIds\n src__synthesis__code_change_plan__rawDiff --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__rawDiff --> src__synthesis__code_change_plan__instructionFor\n src__synthesis__code_change_plan__unifiedDiff --> src__synthesis__code_change_plan__uniqueSorted\n src__synthesis__code_change_plan__unifiedDiff --> src__synthesis__code_change_plan__instructionFor\n src__synthesis__code_change_plan__patchHash --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__createCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__createCodeChangeSourcePatch\n src__synthesis__code_change_plan__createCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__exactSourcePatchKeys\n src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertSourcePatchIds\n src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertSourcePatchStrings\n src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__exactSourcePatchKeys\n src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch\n src__synthesis__code_change_plan__plansById --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch\n src__synthesis__code_change_plan__patchIds --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch\n src__synthesis__code_change_plan__applyCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch\n src__synthesis__code_change_plan__applyCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertExistingSourceReceipt\n src__synthesis__code_change_plan__now --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__fileHashesAfter --> src__synthesis__code_change_plan__deterministicGeneration\n src__synthesis__code_change_plan__assertExistingSourceReceipt --> src__synthesis__code_change_plan__assertSourceApplyReceipt\n src__synthesis__code_change_plan__assertSourceApplyReceipt --> src__synthesis__code_change_plan__exactSourcePatchKeys\n src__synthesis__code_change_plan__assertSourceApplyReceipt --> src__synthesis__code_change_plan__exactSourcePatchSet\n src__synthesis__code_change_plan__applyUnifiedDiffToText --> src__synthesis__code_change_plan__normalizeUnifiedDiff\n src__synthesis__code_change_plan__applyUnifiedDiffToText --> src__synthesis__code_change_plan__splitKeep\n src__synthesis__code_change_path__isUsefulCodeChangePath --> src__synthesis__code_change_path__isPlannablePath\n src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__assertConclusions\n src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__summaryMode\n src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions\n src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__generationMetadata\n src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__readPrompt\n src__summary__summarizer__mode --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions\n src__summary__summarizer__mode --> src__summary__summarizer__SummaryAttemptError__generationMetadata\n src__summary__summarizer__client --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions\n src__summary__summarizer__client --> src__summary__summarizer__SummaryAttemptError__generationMetadata\n src__summary__summarizer__systemPrompt --> src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection\n src__summary__summarizer__systemPrompt --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions\n src__summary__summarizer__systemPrompt --> src__summary__summarizer__SummaryAttemptError__generationMetadata\n src__summary__summarizer__payload --> src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection\n src__summary__summarizer__payload --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions\n src__summary__summarizer__payload --> src__summary__summarizer__SummaryAttemptError__generationMetadata\n src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection --> src__summary__summarizer__SummaryAttemptError__materializeConclusions\n src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection --> src__summary__summarizer__SummaryAttemptError__generationMetadata\n src__summary__summarizer__SummaryAttemptError__conclusions --> src__summary__summarizer__SummaryAttemptError__sortedUnique\n src__summary__summarizer__SummaryAttemptError__materializeConclusions --> src__summary__summarizer__SummaryAttemptError__sortedUnique\n src__summary__summarizer__SummaryAttemptError__materializeConclusions --> src__summary__summarizer__SummaryAttemptError__assertConclusions\n src__summary__summarizer__SummaryAttemptError__parsed --> src__summary__summarizer__SummaryAttemptError__sortedUnique\n src__summary__summarizer__SummaryAttemptError__deterministicConclusions --> src__summary__summarizer__SummaryAttemptError__sortedUnique\n src__summary__summarizer__SummaryAttemptError__deterministicConclusions --> src__summary__summarizer__SummaryAttemptError__assertConclusions\n src__summary__render__renderSummaryMarkdown --> src__summary__render__renderRecords\n src__summary__render__renderSummaryMarkdown --> src__summary__render__renderConclusion\n src__summary__render__renderSummaryMarkdown --> src__summary__render__recordCitations\n src__summary__render__actions --> src__summary__render__recordCitations\n src__summary__render__confidence --> src__summary__render__recordCitations\n src__summary__render__renderConclusion --> src__summary__render__recordCitations\n src__services__actions__executeAction --> src__services__actions__resolveRoot\n src__services__actions__executeAction --> src__services__actions__scopedPath\n src__services__actions__executeAction --> src__services__actions__nlModeValue\n src__services__actions__executeAction --> src__services__actions__numberValue\n src__services__actions__executeAction --> src__services__actions__nullableScopedPath\n src__services__actions__root --> src__services__actions__scopedPath\n src__services__actions__root --> src__services__actions__nlModeValue\n src__services__actions__root --> src__services__actions__numberValue\n src__services__actions__root --> src__services__actions__nullableScopedPath\n src__services__actions__root --> src__services__actions__llmModeValue\n src__services__actions__analysis --> src__services__actions__booleanValue\n src__services__actions__graph --> src__services__actions__booleanValue\n src__services__actions__graph --> src__services__actions__numberValue\n src__services__actions__diagnostics --> src__services__actions__booleanValue\n src__services__actions__diagnostics --> src__services__actions__numberValue\n src__services__actions__result --> src__services__actions__stringValue\n src__services__actions__result --> src__services__actions__booleanValue\n src__services__actions__result --> src__services__actions__numberValue\n src__services__actions__todoPath --> src__services__actions__stringValue\n src__services__actions__receiptPath --> src__services__actions__stringValue\n src__services__actions__conclusions --> src__services__actions__numberValue\n src__services__actions__proposals --> src__services__actions__numberValue\n src__services__actions__patch --> src__services__actions__stringValue\n src__services__actions__beforeGraph --> src__services__actions__hasInputValue\n src__services__actions__beforeDiagnostics --> src__services__actions__hasInputValue\n src__services__actions__afterGraph --> src__services__actions__hasInputValue\n src__services__actions__afterDiagnostics --> src__services__actions__hasInputValue\n src__services__actions__value --> src__services__actions__hasInputValue\n src__services__actions__beforeInput --> src__services__actions__numberValue\n src__services__actions__afterInput --> src__services__actions__numberValue\n src__services__actions__before --> src__services__actions__numberValue\n src__services__actions__after --> src__services__actions__numberValue\n src__services__actions__diff --> src__services__actions__stringValue\n src__services__actions__diff --> src__services__actions__numberValue\n src__services__actions__svg --> src__services__actions__numberValue\n src__services__actions__beforePath --> src__services__actions__stringValue\n src__services__actions__beforePath --> src__services__actions__numberValue\n src__services__actions__afterPath --> src__services__actions__stringValue\n src__services__actions__afterPath --> src__services__actions__numberValue\n src__services__actions__view --> src__services__actions__booleanValue\n src__services__actions__view --> src__services__actions__numberValue\n src__services__actions__filterCommunicationGraph --> src__services__actions__stringValue\n src__services__actions__filterCommunicationGraph --> src__services__actions__booleanValue\n src__services__actions__nlModeValue --> src__services__actions__llmModeValue\n src__services__actions__summaryModeValue --> src__services__actions__llmModeValue\n src__services__actions__summaryModeValue --> src__services__actions__booleanValue\n src__services__actions__withTextDiffViews --> src__services__actions__stringValue\n src__services__actions__withTextDiffViews --> src__services__actions__booleanValue\n src__services__actions__withTextDiffViews --> src__services__actions__numberValue\n src__services__actions__title --> src__services__actions__booleanValue\n src__services__actions__title --> src__services__actions__numberValue\n src__services__actions__scopedPath --> src__services__actions__stringValue\n src__services__actions__nullableScopedPath --> src__services__actions__nullableString\n src__services__actions__readRecords --> src__services__actions__stringList\n src__semantic__reranker__createSemanticCandidateSet --> src__semantic__reranker__requiredText\n src__semantic__reranker__assertSemanticCandidateSet --> src__semantic__reranker__validDate\n src__semantic__reranker__assertSemanticCandidateSet --> src__semantic__reranker__validateRetrieval\n src__semantic__reranker__records --> src__semantic__reranker__roundedConfidence\n src__semantic__reranker__records --> src__semantic__reranker__validateVerdictReason\n src__semantic__reranker__records --> src__semantic__reranker__requiredText\n src__semantic__reranker__seenIds --> src__semantic__reranker__boundedScore\n src__semantic__reranker__seenPairs --> src__semantic__reranker__boundedScore\n src__semantic__reranker__byDeclaration --> src__semantic__reranker__boundedScore\n src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__assertSemanticCandidateSet\n src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__requiredText\n src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__roundedConfidence\n src__semantic__reranker__decisions --> src__semantic__reranker__roundedConfidence\n src__semantic__reranker__decisions --> src__semantic__reranker__requiredText\n src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__assertSemanticCandidateSet\n src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__validDate\n src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__validateGeneration\n src__semantic__reranker__seenDecisions --> src__semantic__reranker__roundedConfidence\n src__semantic__reranker__seenDecisions --> src__semantic__reranker__validateVerdictReason\n src__semantic__reranker__seenDecisions --> src__semantic__reranker__requiredText\n src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__roundedConfidence\n src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__validateVerdictReason\n src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__requiredText\n src__semantic__reranker__applyAcceptedSemanticRelations --> src__semantic__reranker__assertSemanticRerankResult\n src__semantic__reranker__applyAcceptedSemanticRelations --> src__semantic__reranker__values\n src__semantic__reranker__validateRetrieval --> src__semantic__reranker__requiredText\n src__semantic__reranker__validateGeneration --> src__semantic__reranker__requiredText\n src__semantic__reranker__validateVerdictReason --> src__semantic__reranker__assertSemanticVerdictReason\n src__semantic__reranker__assertGroundedQuote --> src__semantic__reranker__requiredText\n src__semantic__reranker__quote --> src__semantic__reranker__requiredText\n src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticCandidateSet\n src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult\n src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshot\n src__semantic__reranker_llm__SemanticRerankerRequiredError__model --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult\n src__semantic__reranker_llm__SemanticRerankerRequiredError__modelRevision --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult\n src__semantic__reranker_llm__SemanticRerankerRequiredError__payload --> src__semantic__reranker_llm__SemanticRerankerRequiredError__projectRecord\n src__pipeline__run__runPipeline --> src__pipeline__run__skippedAudit\n src__pipeline__run__docs --> src__pipeline__run__collectTargetHints\n src__pipeline__run__docs --> src__pipeline__run__values\n src__pipeline__run__configurationExtraction --> src__pipeline__run__skippedAudit\n src__pipeline__run__includeCommunication --> src__pipeline__run__skippedAudit\n src__pipeline__run__communicationStartedAt --> src__pipeline__run__skippedAudit\n src__pipeline__run__communicationAudit --> src__pipeline__run__skippedAudit\n src__pipeline__run__communicationInputPresent --> src__pipeline__run__skippedAudit\n src__pipeline__run__collectTargetHints --> src__pipeline__run__values\n src__pipeline__run__persistFailedRun --> src__pipeline__run__skippedAudit\n src__pipeline__run__persistFailedRun --> src__pipeline__run__failureCode\n src__pipeline__run__persistFailedRun --> src__pipeline__run__failedAudit\n src__pipeline__run__persistFailedRun --> src__pipeline__run__aborted\n src__pipeline__run__persistFailedRun --> src__pipeline__run__stageValue\n src__pipeline__run__persistFailedRun --> src__pipeline__run__manifestConfiguration\n src__pipeline__run__aborted --> src__pipeline__run__skippedAudit\n src__pipeline__run__message --> src__pipeline__run__failureCode\n src__pipeline__run__knownAudit --> src__pipeline__run__failureCode\n src__pipeline__run__failedAudit --> src__pipeline__run__failureCode\n src__pipeline__run__stageValue --> src__pipeline__run__failedAudit\n src__pipeline__run__stageValue --> src__pipeline__run__aborted\n src__pipeline__run__reason --> src__pipeline__run__failureCode\n src__operations__validation__dateString --> src__operations__validation__nonBlank\n src__operations__validation__assertPrincipalList --> src__operations__validation__uniqueStrings\n src__operations__validation__principals --> src__operations__validation__uniqueStrings\n src__operations__validation__assertVariableContract --> src__operations__validation__objectValue\n src__operations__validation__assertVariableContract --> src__operations__validation__exactKeys\n src__operations__validation__assertVariableContract --> src__operations__validation__nonBlank\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "644B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>182 funcs"]\n src__graph["src.graph<br/>192 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>292 funcs"]\n scripts__research ==>|7| src__live\n sdk__python ==>|6| src__synthesis\n python__ast_extract ==>|4| src__diff\n sdk__python -->|2| src__graph\n scripts__research -->|2| src__synthesis\n scripts__research -->|2| src__diff\n python__ast_extract -->|1| src__synthesis\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "1.8KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__graphFile["graphFile"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__diagnostics["diagnostics"]\n src__cli__result["result"]\n src__cli__out["out"]\n src__cli__graphPath["graphPath"]\n src__cli__output["output"]\n ...["+68 more"]\n end\n\n subgraph Core\n src__web__diff_ui__diffUiHtml["diffUiHtml"]\n src__web__diff_ui__compareGraphs{{compareGraphs CC=15}}\n src__watch__watcher__maxFiles["maxFiles"]\n src__watch__watcher__absoluteRoot["absoluteRoot"]\n src__watch__watcher__absolute["absolute"]\n src__watch__watcher__previous["previous"]\n src__watch__watcher__shown["shown"]\n src__watch__watcher__rest["rest"]\n src__watch__watcher__DEFAULT_MIN_INTERVAL_MS["DEFAULT_MIN_INTERVAL_MS"]\n src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS["DEFAULT_SCAN_INTERVAL_MS"]\n src__watch__watcher__watchRepository["watchRepository"]\n src__watch__watcher__root["root"]\n src__watch__watcher__minIntervalMs["minIntervalMs"]\n src__watch__watcher__scanIntervalMs["scanIntervalMs"]\n src__watch__watcher__signal["signal"]\n ...["+2130 more"]\n end\n\n class src__cli__execFileAsync,src__cli__main,src__cli__parsed,src__cli__command,src__cli__config,src__cli__files,src__cli__records,src__cli__graph,src__cli__graphFile,src__cli__diagnosticsPath entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [24KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [136KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [33KB]\n\nMissing files (not generated in this run):\n- README.md\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "163.2KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "24.2KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 262f 45160L | typescript:117,md:52,json:32,python:15,javascript:15,rust:7,go:6,shell:6,php:4,yml:2,toml:2,txt:1,java:1 | 2026-08-01\n# generated in 0.21s\n# CC̅=4.0 | critical:120/3285 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/synthesis/code-change-plan.ts = 1310L, 10 classes, 127m, max CC=47\n 🔴 GOD src/semantic/reranker.ts = 509L, 11 classes, 35m, max CC=27\n 🔴 GOD src/core/schema.ts = 922L, 4 classes, 124m, max CC=23\n 🔴 GOD src/communication/llm.ts = 514L, 8 classes, 53m, max CC=12\n 🔴 GOD src/core/types.ts = 673L, 41 classes, 0m, max CC=0.0\n 🟡 CC main CC=95 (limit:15)\n 🟡 CC handleDiff CC=24 (limit:15)\n 🟡 CC handleExtract CC=16 (limit:15)\n 🟡 CC diffUiHtml CC=52 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC DEFAULT_MIN_INTERVAL_MS CC=19 (limit:15)\n 🟡 CC DEFAULT_SCAN_INTERVAL_MS CC=19 (limit:15)\n 🟡 CC watchRepository CC=19 (limit:15)\n 🟡 CC classifyAction CC=17 (limit:15)\n 🟡 CC proposeCodeChangePlans CC=17 (limit:15)\n 🟡 CC paths CC=16 (limit:15)\n 🟡 CC assertCodeChangeReviewPatch CC=23 (limit:15)\n 🟡 CC assertCodeChangeSourcePatch CC=47 (limit:15)\n 🟡 CC assertCodeChangeSourcePatchSet CC=18 (limit:15)\n 🟡 CC normalizeUnifiedDiff CC=17 (limit:15)\n\nREFACTOR[6]:\n 1. split src/synthesis/code-change-plan.ts (god module)\n 2. split src/semantic/reranker.ts (god module)\n 3. split src/core/schema.ts (god module)\n 4. split src/communication/llm.ts (god module)\n 5. split src/core/types.ts (god module)\n 6. split 15 high-CC methods (CC>15)\n\nPIPELINES[1882]:\n [1] Src [parsed]: parsed → printHelp\n PURITY: 100% pure\n [2] Src [command]: command → printHelp\n PURITY: 100% pure\n [3] Src [config]: config\n PURITY: 100% pure\n [4] Src [graphFile]: graphFile\n PURITY: 100% pure\n [5] Src [diagnosticsPath]: diagnosticsPath → optionNumber → optionString\n PURITY: 100% pure\n [6] Src [diagnostics]: diagnostics → optionNumber → optionString\n PURITY: 100% pure\n [7] Src [result]: result → execFileAsync\n PURITY: 100% pure\n [8] Src [graphPath]: graphPath\n PURITY: 100% pure\n [9] Src [output]: output\n PURITY: 100% pure\n [10] Src [synthesisPath]: synthesisPath\n PURITY: 100% pure\n [11] Src [patch]: patch\n PURITY: 100% pure\n [12] Src [audit]: audit\n PURITY: 100% pure\n [13] Src [receipt]: receipt\n PURITY: 100% pure\n [14] Src [actor]: actor\n PURITY: 100% pure\n [15] Src [approvalHash]: approvalHash\n PURITY: 100% pure\n [16] Src [plansPath]: plansPath\n PURITY: 100% pure\n [17] Src [inputPath]: inputPath\n PURITY: 100% pure\n [18] Src [isPlanSet]: isPlanSet → optionString\n PURITY: 100% pure\n [19] Src [patchPath]: patchPath\n PURITY: 100% pure\n [20] Src [planPath]: planPath\n PURITY: 100% pure\n [21] Src [beforeGraphPath]: beforeGraphPath\n PURITY: 100% pure\n [22] Src [afterGraphPath]: afterGraphPath\n PURITY: 100% pure\n [23] Src [root]: root → optionString\n PURITY: 100% pure\n [24] Src [taskFile]: taskFile → optionNullableString\n PURITY: 100% pure\n [25] Src [controller]: controller → optionNumber → optionString\n PURITY: 100% pure\n [26] Src [stop]: stop → optionNumber → optionString\n PURITY: 100% pure\n [27] Src [stamp]: stamp → file\n PURITY: 100% pure\n [28] Src [mode]: mode → optionNumber → optionString\n PURITY: 100% pure\n [29] Src [svg]: svg → optionNumber → optionString\n PURITY: 100% pure\n [30] Src [html]: html → optionNumber → optionString\n PURITY: 100% pure\n [31] Src [beforeFile]: beforeFile\n PURITY: 100% pure\n [32] Src [afterFile]: afterFile\n PURITY: 100% pure\n [33] Src [diff]: diff → optionNumber → optionString\n PURITY: 100% pure\n [34] Src [context]: context → optionString\n PURITY: 100% pure\n [35] Src [maxRows]: maxRows → optionString\n PURITY: 100% pure\n [36] Src [view]: view → optionNumber → optionString\n PURITY: 100% pure\n [37] Src [extractor]: extractor → optionString\n PURITY: 100% pure\n [38] Src [moduleRoot]: moduleRoot\n PURITY: 100% pure\n [39] Src [sourceEnv]: sourceEnv\n PURITY: 100% pure\n [40] Src [targetEnv]: targetEnv\n PURITY: 100% pure\n [41] Src [task]: task\n PURITY: 100% pure\n [42] Src [sourceIgnore]: sourceIgnore\n PURITY: 100% pure\n [43] Src [targetIgnore]: targetIgnore\n PURITY: 100% pure\n [44] Src [options]: options\n PURITY: 100% pure\n [45] Src [next]: next\n PURITY: 100% pure\n [46] Src [name]: name\n PURITY: 100% pure\n [47] Src [number]: number\n PURITY: 100% pure\n [48] Src [invokedPath]: invokedPath → main → printHelp\n PURITY: 100% pure\n [49] Src [diffUiHtml]: diffUiHtml → byId\n PURITY: 100% pure\n [50] Src [maxFiles]: maxFiles → relative → visit\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n src/ CC̄=4.2 ←in:0 →out:0\n │ !! code-change-plan.ts 1310L 10C 127m CC=47 ←6\n │ !! schema.ts 922L 4C 124m CC=23 ←0\n │ !! cli.ts 827L 1C 83m CC=95 ←0\n │ !! actions.ts 700L 0C 74m CC=83 ←0\n │ !! types.ts 673L 41C 0m CC=0.0 ←0\n │ !! reality.ts 609L 3C 73m CC=26 ←0\n │ !! run.ts 602L 1C 64m CC=53 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! llm.ts 514L 8C 53m CC=12 ←0\n │ !! a2a-task-store.ts 513L 3C 81m CC=11 ←0\n │ !! reranker.ts 509L 11C 35m CC=27 ←0\n │ !! text.ts 491L 0C 51m CC=34 ←0\n │ !! linker.ts 489L 4C 72m CC=18 ←0\n │ !! markdown-llm.ts 458L 6C 38m CC=19 ←0\n │ !! communication.ts 422L 4C 70m CC=76 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ !! diagnostics.ts 361L 0C 40m CC=40 ←1\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ workspace.ts 327L 3C 54m CC=12 ←0\n │ a2a.ts 320L 0C 45m CC=9 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←0\n │ !! nl-llm.ts 316L 5C 45m CC=18 ←0\n │ mcp-tools.ts 307L 1C 10m CC=8 ←0\n │ !! docs-deterministic.ts 304L 1C 33m CC=18 ←0\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←1\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ env.ts 227L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←2\n │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ !! code-change-path.ts 204L 0C 14m CC=38 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ !! a2a-message.ts 184L 0C 33m CC=57 ←0\n │ git.ts 180L 3C 26m CC=13 ←0\n │ !! io.ts 177L 1C 32m CC=15 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ !! record.ts 172L 2C 9m CC=18 ←0\n │ a2a-card.ts 169L 0C 7m CC=3 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ !! typescript.ts 166L 0C 19m CC=43 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ a2a-types.ts 160L 9C 14m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ !! markdown-paths.ts 122L 1C 17m CC=17 ←0\n │ !! symbol-resolution.ts 120L 3C 16m CC=15 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ !! identity.ts 100L 3C 14m CC=30 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ !! classifier.ts 96L 4C 27m CC=17 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ !! diff-ui.ts 48L 0C 9m CC=52 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ normalize-generated-analysis-roots.mjs 34L 0C 7m CC=4 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ README.md 27L 0C 0m CC=0.0 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:0 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←0\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ README.md 107L 0C 0m CC=0.0 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ README.md 68L 0C 0m CC=0.0 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ package.json 28L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ README.md 24L 0C 0m CC=0.0 ←0\n │ README.md 23L 0C 0m CC=0.0 ←0\n │ README.md 21L 0C 0m CC=0.0 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ README.md 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←0\n │ store.ts 48L 3C 4m CC=1 ←0\n │ README.md 46L 0C 0m CC=0.0 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ README.md 35L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ task.md 18L 0C 0m CC=0.0 ←0\n │ task.md 17L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ CHANGELOG.md 11L 0C 0m CC=0.0 ←0\n │ CHANGELOG.md 11L 0C 0m CC=0.0 ←0\n │ CHANGELOG.md 11L 0C 0m CC=0.0 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │ task.md 9L 0C 0m CC=0.0 ←0\n │ ARCHITECTURE.md 9L 0C 0m CC=0.0 ←0\n │ TODO.md 8L 0C 0m CC=0.0 ←0\n │ TODO.md 7L 0C 0m CC=0.0 ←0\n │ TODO.md 7L 0C 0m CC=0.0 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! README.md 871L 0C 0m CC=0.0 ←0\n │ !! CHANGELOG.md 670L 0C 0m CC=0.0 ←0\n │ TODO.md 391L 0C 0m CC=0.0 ←0\n │ Makefile 129L 0C 0m CC=0.0 ←0\n │ package.json 48L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ CONTRIBUTION.md 37L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ TASK.md 10L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n prompts/ CC̄=0.0 ←in:0 →out:0\n │ tasks-from-dsl.system.md 52L 0C 0m CC=0.0 ←0\n │ summarize.system.md 51L 0C 0m CC=0.0 ←0\n │ docs-to-intent.system.md 23L 0C 0m CC=0.0 ←0\n │ nl-to-intent.system.md 15L 0C 0m CC=0.0 ←0\n │ communication-to-intent.system.md 7L 0C 0m CC=0.0 ←0\n │ markdown-to-intent.system.md 5L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │ README.md 87L 0C 0m CC=0.0 ←0\n │\n docs/ CC̄=0.0 ←in:0 →out:0\n │ !! SYSTEM_MONITOROWANIA_INTENCJI_I_PRACY_AGENTOW.md 872L 0C 0m CC=0.0 ←0\n │ !! original-monitoring-design.md 872L 0C 0m CC=0.0 ←0\n │ !! TEST_REPORT.md 587L 0C 0m CC=0.0 ←0\n │ PIPELINE_DSL_NL.md 464L 0C 0m CC=0.0 ←0\n │ DSL.md 457L 0C 0m CC=0.0 ←0\n │ READINESS.md 442L 0C 0m CC=0.0 ←0\n │ ALL_DIAGRAMS.md 410L 0C 0m CC=0.0 ←0\n │ CLI_GUIDE.md 328L 0C 0m CC=0.0 ←0\n │ GROK-PLAN.md 269L 0C 0m CC=0.0 ←0\n │ TEAM_COMMUNICATION.md 268L 0C 0m CC=0.0 ←0\n │ OPTIMIZATION.md 249L 0C 0m CC=0.0 ←0\n │ ARCHITECTURE.md 200L 0C 0m CC=0.0 ←0\n │ VALIDATION.md 198L 0C 0m CC=0.0 ←0\n │ DEMOLLM.md 175L 0C 0m CC=0.0 ←0\n │ CODE_CHANGE_PLANS.md 173L 0C 0m CC=0.0 ←0\n │ PROTOCOLS.md 124L 0C 0m CC=0.0 ←0\n │ E2E.md 52L 0C 0m CC=0.0 ←0\n │ SECURITY.md 50L 0C 0m CC=0.0 ←0\n │ REQUIREMENTS.md 39L 0C 0m CC=0.0 ←0\n │ SUBACTOR_OPERATION_DSL.md 33L 0C 0m CC=0.0 ←0\n │ README.md 22L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 10L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research src.synthesis sdk.python src.live src.diff python src.graph\n scripts.research ── 2 7 2 !! fan-out\n src.synthesis ←2 ── ←6 ←1 hub\n sdk.python 6 ── 2 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 1 4 ── \n src.graph ←2 ──\n CYCLES: none\n HUB: src.diff/ (fan-in=6)\n HUB: src.synthesis/ (fan-in=9)\n HUB: src.live/ (fan-in=7)\n SMELL: sdk.python/ fan-out=8 → split needed\n SMELL: scripts.research/ fan-out=11 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "9.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | \n# generated in 0.21s\n# nodes: 354 | edges: 500 | modules: 18\n# CC̄=4.0\n\nHUBS[20]:\n src.services.actions.executeAction\n CC=83 in:0 out:65 total:65\n src.services.actions.root\n CC=83 in:0 out:64 total:64\n src.pipeline.run.runPipeline\n CC=53 in:0 out:54 total:54\n src.cli.main\n CC=95 in:1 out:44 total:45\n src.web.diff-ui.diffUiHtml\n CC=52 in:0 out:42 total:42\n src.synthesis.code-change-plan.applyCodeChangeSourcePatch\n CC=41 in:0 out:35 total:35\n src.synthesis.code-change-plan.assertCodeChangeSourcePatch\n CC=47 in:5 out:26 total:31\n src.synthesis.code-change-plan.uniqueSorted\n CC=1 in:20 out:5 total:25\n src.cli.optionNumber\n CC=5 in:18 out:5 total:23\n src.semantic.reranker.assertSemanticRerankResult\n CC=21 in:2 out:21 total:23\n src.services.actions.numberValue\n CC=6 in:18 out:4 total:22\n src.synthesis.code-change-plan.createCodeChangeSourcePatch\n CC=13 in:2 out:20 total:22\n src.synthesis.code-change-plan.deterministicGeneration\n CC=1 in:18 out:3 total:21\n src.synthesis.todo-patch.createTodoPatch\n CC=8 in:1 out:20 total:21\n src.semantic.reranker.assertSemanticCandidateSet\n CC=27 in:3 out:18 total:21\n src.watch.watcher.scanTree\n CC=12 in:4 out:17 total:21\n src.synthesis.code-change-plan.evaluateCodeChangeAcceptance\n CC=9 in:3 out:18 total:21\n src.synthesis.todo-patch.applyTodoPatch\n CC=12 in:0 out:20 total:20\n src.cli.handleDiff\n CC=24 in:1 out:19 total:20\n src.cli.handleExtract\n CC=16 in:1 out:18 total:19\n\nMODULES:\n src.cli [44 funcs]\n command CC=4 out:1\n context CC=9 out:10\n controller CC=1 out:5\n diagnostics CC=2 out:5\n diagnosticsPath CC=2 out:5\n diff CC=2 out:4\n doctor CC=6 out:7\n emitExtraction CC=4 out:4\n execFileAsync CC=2 out:2\n extractor CC=6 out:6\n src.operations.validation [8 funcs]\n assertPrincipalList CC=2 out:4\n assertVariableContract CC=20 out:14\n dateString CC=2 out:4\n exactKeys CC=2 out:5\n nonBlank CC=3 out:2\n objectValue CC=4 out:2\n principals CC=1 out:1\n uniqueStrings CC=8 out:5\n src.pipeline.run [19 funcs]\n aborted CC=1 out:1\n collectTargetHints CC=1 out:4\n communicationAudit CC=10 out:5\n communicationInputPresent CC=10 out:5\n communicationStartedAt CC=10 out:5\n configurationExtraction CC=10 out:5\n docs CC=2 out:4\n failedAudit CC=9 out:2\n failureCode CC=1 out:2\n includeCommunication CC=10 out:5\n src.semantic.reranker [23 funcs]\n acceptedDeclarations CC=16 out:15\n applyAcceptedSemanticRelations CC=2 out:13\n assertGroundedQuote CC=3 out:7\n assertSemanticCandidateSet CC=27 out:18\n assertSemanticRerankResult CC=21 out:21\n assertSemanticVerdictReason CC=7 out:2\n boundedScore CC=4 out:3\n byDeclaration CC=14 out:9\n createSemanticCandidateSet CC=8 out:17\n createSemanticRerankResult CC=4 out:11\n src.semantic.reranker-llm [8 funcs]\n assertSemanticCandidateSet CC=2 out:1\n assertSemanticRerankResult CC=2 out:1\n assertTrackedSnapshot CC=1 out:0\n model CC=4 out:2\n modelRevision CC=4 out:2\n payload CC=1 out:3\n projectRecord CC=3 out:3\n rerankSemanticCandidates CC=25 out:19\n src.services.actions [41 funcs]\n after CC=2 out:2\n afterDiagnostics CC=8 out:2\n afterGraph CC=8 out:2\n afterInput CC=2 out:2\n afterPath CC=1 out:4\n analysis CC=2 out:4\n before CC=2 out:2\n beforeDiagnostics CC=8 out:2\n beforeGraph CC=8 out:2\n beforeInput CC=2 out:2\n src.summary.render [6 funcs]\n actions CC=2 out:2\n confidence CC=1 out:2\n recordCitations CC=1 out:1\n renderConclusion CC=1 out:3\n renderRecords CC=2 out:3\n renderSummaryMarkdown CC=10 out:9\n src.summary.summarizer [15 funcs]\n assertConclusions CC=1 out:0\n conclusions CC=3 out:3\n deterministicConclusions CC=4 out:7\n generationMetadata CC=9 out:5\n materializeConclusions CC=1 out:7\n parsed CC=1 out:4\n readPrompt CC=2 out:6\n sortedUnique CC=2 out:5\n summarizeWithCorrection CC=10 out:7\n summaryMode CC=7 out:1\n src.synthesis.code-change-path [2 funcs]\n isPlannablePath CC=38 out:13\n isUsefulCodeChangePath CC=1 out:1\n src.synthesis.code-change-plan [63 funcs]\n acceptanceCriteriaFor CC=4 out:3\n acceptances CC=1 out:2\n acceptedCount CC=2 out:1\n applyCodeChangeSourcePatch CC=41 out:35\n applyUnifiedDiffToText CC=47 out:13\n assertCodeChangeSourcePatch CC=47 out:26\n assertCodeChangeSourcePatchSet CC=18 out:14\n assertExistingSourceReceipt CC=8 out:10\n assertSourceApplyReceipt CC=11 out:13\n assertSourcePatchIds CC=6 out:5\n src.synthesis.task-synthesis-contract [5 funcs]\n RAW_CONCLUSION_CONTRACT CC=1 out:5\n RAW_PROPOSAL_CONTRACT CC=1 out:6\n nonBlank CC=1 out:1\n taskIds CC=1 out:2\n taskStrings CC=1 out:2\n src.synthesis.task-synthesis-materialize [17 funcs]\n conclusionByKey CC=2 out:10\n conclusionIdByKey CC=2 out:10\n conclusions CC=1 out:5\n diagnosticIds CC=1 out:2\n keys CC=2 out:4\n mapKeys CC=2 out:5\n materializeTaskSynthesisResponse CC=2 out:18\n normalizeAcceptanceCriteria CC=4 out:2\n normalizeLocalKeys CC=1 out:0\n normalizeRawTarget CC=3 out:2\n src.synthesis.tasks-llm [11 funcs]\n assertConclusions CC=1 out:0\n client CC=2 out:2\n fallbackOrThrow CC=2 out:6\n generationMetadata CC=3 out:5\n payload CC=1 out:1\n prompt CC=1 out:1\n readPrompt CC=2 out:6\n startedAt CC=1 out:1\n synthesisAudit CC=1 out:1\n synthesizeTodoProposals CC=5 out:12\n src.synthesis.todo-patch [37 funcs]\n appendPatch CC=2 out:1\n applied CC=5 out:4\n applyTodoPatch CC=12 out:20\n artifact CC=6 out:8\n assertApproval CC=3 out:2\n assertReceipt CC=7 out:4\n assertTodoPatchArtifact CC=11 out:16\n atomicWrite CC=5 out:13\n classified CC=6 out:8\n createTodoPatch CC=8 out:20\n src.synthesis.validation [12 funcs]\n dependencyFirstPriorityOrder CC=11 out:10\n duplicateEvidence CC=11 out:9\n intersects CC=1 out:5\n jaccard CC=5 out:1\n proposalWords CC=1 out:1\n sharedPath CC=1 out:2\n sharedSymbol CC=1 out:2\n sharedTicket CC=1 out:2\n similarity CC=1 out:2\n target CC=1 out:2\n src.tf.classifier [6 funcs]\n classifyAction CC=17 out:12\n dynamicImport CC=1 out:3\n importer CC=1 out:0\n loadAssets CC=2 out:6\n loadClassifier CC=6 out:5\n vectorize CC=6 out:5\n src.watch.watcher [28 funcs]\n DEFAULT_MIN_INTERVAL_MS CC=19 out:14\n DEFAULT_SCAN_INTERVAL_MS CC=19 out:14\n absolute CC=3 out:3\n absoluteRoot CC=11 out:14\n current CC=2 out:2\n defaultSleep CC=6 out:7\n delta CC=2 out:2\n describeDelta CC=2 out:4\n diffSnapshots CC=6 out:5\n emit CC=2 out:0\n src.web.diff-ui [9 funcs]\n byId CC=1 out:0\n compareGraphs CC=15 out:13\n diffUiHtml CC=52 out:42\n fillSelect CC=6 out:9\n formatBytes CC=7 out:2\n loadRuns CC=12 out:14\n requestHeaders CC=3 out:2\n selectedRun CC=7 out:2\n updateMeta CC=7 out:3\n\nEDGES:\n src.cli.main → src.cli.printHelp\n src.cli.main → src.cli.parseArgs\n src.cli.main → src.cli.initProject\n src.cli.parsed → src.cli.printHelp\n src.cli.command → src.cli.printHelp\n src.cli.diagnosticsPath → src.cli.optionNumber\n src.cli.diagnosticsPath → src.cli.optionBoolean\n src.cli.diagnostics → src.cli.optionNumber\n src.cli.diagnostics → src.cli.optionBoolean\n src.cli.result → src.cli.execFileAsync\n src.cli.isPlanSet → src.cli.optionString\n src.cli.root → src.cli.optionString\n src.cli.root → src.cli.optionNullableString\n src.cli.root → src.cli.optionLlmMode\n src.cli.handleWatch → src.cli.optionNullableString\n src.cli.handleWatch → src.cli.optionList\n src.cli.handleWatch → src.cli.optionBoolean\n src.cli.handleWatch → src.cli.optionString\n src.cli.handleWatch → src.cli.optionNumber\n src.cli.handleWatch → src.cli.optionNlMode\n src.cli.taskFile → src.cli.optionNullableString\n src.cli.taskFile → src.cli.optionList\n src.cli.taskFile → src.cli.optionBoolean\n src.cli.taskFile → src.cli.optionString\n src.cli.taskFile → src.cli.optionNumber\n src.cli.taskFile → src.cli.optionNlMode\n src.cli.taskFile → src.cli.optionLlmMode\n src.cli.taskFile → src.cli.optionPipelineTaskMode\n src.cli.controller → src.cli.optionNumber\n src.cli.controller → src.cli.optionBoolean\n src.cli.controller → src.cli.formatWatchEvent\n src.cli.stop → src.cli.optionNumber\n src.cli.stop → src.cli.optionBoolean\n src.cli.stop → src.cli.formatWatchEvent\n src.cli.formatWatchEvent → src.cli.file\n src.cli.stamp → src.cli.file\n src.cli.handleDiff → src.cli.optionString\n src.cli.handleDiff → src.cli.optionNumber\n src.cli.mode → src.cli.optionNumber\n src.cli.svg → src.cli.optionNumber\n src.cli.svg → src.cli.optionBoolean\n src.cli.html → src.cli.optionNumber\n src.cli.diff → src.cli.optionNumber\n src.cli.context → src.cli.optionString\n src.cli.context → src.cli.optionBoolean\n src.cli.context → src.cli.optionNumber\n src.cli.maxRows → src.cli.optionString\n src.cli.maxRows → src.cli.optionBoolean\n src.cli.maxRows → src.cli.optionNumber\n src.cli.handleReality → src.cli.optionString\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "223.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: \ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 354\n total_edges: 500\n modules_count: 18\nnodes:\n src.synthesis.code-change-plan.buildChanges:\n name: buildChanges\n module: src.synthesis.code-change-plan\n line: 380\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 7\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 518\n cyclomatic_complexity: 16\n calls_out: 18\n calls_in: 1\n src.synthesis.task-synthesis-contract.taskIds:\n name: taskIds\n module: src.synthesis.task-synthesis-contract\n line: 35\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 741\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.synthesis.task-synthesis-materialize.proposalKeys:\n name: proposalKeys\n module: src.synthesis.task-synthesis-materialize\n line: 26\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.web.diff-ui.loadRuns:\n name: loadRuns\n module: src.web.diff-ui\n line: 43\n cyclomatic_complexity: 12\n calls_out: 14\n calls_in: 1\n src.synthesis.code-change-plan.assertSourcePatchStrings:\n name: assertSourcePatchStrings\n module: src.synthesis.code-change-plan\n line: 953\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 2\n src.web.diff-ui.fillSelect:\n name: fillSelect\n module: src.web.diff-ui\n line: 42\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 2\n src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse:\n name: materializeTaskSynthesisResponse\n module: src.synthesis.task-synthesis-materialize\n line: 14\n cyclomatic_complexity: 2\n calls_out: 18\n calls_in: 0\n src.services.actions.value:\n name: value\n module: src.services.actions\n line: 369\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions:\n name: assertConclusions\n module: src.synthesis.tasks-llm\n line: 71\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.synthesis.todo-patch.uniqueStrings:\n name: uniqueStrings\n module: src.synthesis.todo-patch\n line: 366\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 6\n src.synthesis.code-change-plan.relatedRecords:\n name: relatedRecords\n module: src.synthesis.code-change-plan\n line: 136\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.pipeline.run.docs:\n name: docs\n module: src.pipeline.run\n line: 146\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.maxRows:\n name: maxRows\n module: src.cli\n line: 452\n cyclomatic_complexity: 9\n calls_out: 10\n calls_in: 0\n src.tf.classifier.classifyAction:\n name: classifyAction\n module: src.tf.classifier\n line: 69\n cyclomatic_complexity: 17\n calls_out: 12\n calls_in: 0\n src.pipeline.run.configurationExtraction:\n name: configurationExtraction\n module: src.pipeline.run\n line: 182\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.summary.summarizer.client:\n name: client\n module: src.summary.summarizer\n line: 85\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.semantic.reranker.validDate:\n name: validDate\n module: src.semantic.reranker\n line: 499\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.services.actions.patch:\n name: patch\n module: src.services.actions\n line: 302\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.services.actions.afterPath:\n name: afterPath\n module: src.services.actions\n line: 428\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.watch.watcher.waitMs:\n name: waitMs\n module: src.watch.watcher\n line: 192\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 717\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 15\n src.watch.watcher.diffSnapshots:\n name: diffSnapshots\n module: src.watch.watcher\n line: 80\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 3\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 763\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.synthesis.task-synthesis-materialize.normalizeLocalKeys:\n name: normalizeLocalKeys\n module: src.synthesis.task-synthesis-materialize\n line: 92\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.summary.summarizer.SummaryAttemptError.conclusions:\n name: conclusions\n module: src.summary.summarizer\n line: 264\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.semantic.reranker.createSemanticCandidateSet:\n name: createSemanticCandidateSet\n module: src.semantic.reranker\n line: 113\n cyclomatic_complexity: 8\n calls_out: 17\n calls_in: 0\n src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet:\n name: assertSemanticCandidateSet\n module: src.semantic.reranker-llm\n line: 44\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.synthesis.todo-patch.result:\n name: result\n module: src.synthesis.todo-patch\n line: 188\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 0\n src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates:\n name: rerankSemanticCandidates\n module: src.semantic.reranker-llm\n line: 38\n cyclomatic_complexity: 25\n calls_out: 19\n calls_in: 0\n src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria:\n name: normalizeAcceptanceCriteria\n module: src.synthesis.task-synthesis-materialize\n line: 152\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 4\n src.synthesis.task-synthesis-materialize.proposalDrafts:\n name: proposalDrafts\n module: src.synthesis.task-synthesis-materialize\n line: 49\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.synthesis.task-synthesis-materialize.conclusionByKey:\n name: conclusionByKey\n module: src.synthesis.task-synthesis-materialize\n line: 47\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 408\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 3\n src.pipeline.run.reason:\n name: reason\n module: src.pipeline.run\n line: 549\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.semantic.reranker.assertSemanticVerdictReason:\n name: assertSemanticVerdictReason\n module: src.semantic.reranker\n line: 443\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 1\n src.cli.diff:\n name: diff\n module: src.cli\n line: 444\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.semantic.reranker.roundedConfidence:\n name: roundedConfidence\n module: src.semantic.reranker\n line: 487\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 6\n src.summary.render.renderConclusion:\n name: renderConclusion\n module: src.summary.render\n line: 54\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 366\n cyclomatic_complexity: 6\n calls_out: 18\n calls_in: 1\n src.pipeline.run.persistFailedRun:\n name: persistFailedRun\n module: src.pipeline.run\n line: 497\n cyclomatic_complexity: 19\n calls_out: 12\n calls_in: 1\n src.watch.watcher.emit:\n name: emit\n module: src.watch.watcher\n line: 151\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 10\n src.pipeline.run.manifestConfiguration:\n name: manifestConfiguration\n module: src.pipeline.run\n line: 433\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n src.services.actions.beforeInput:\n name: beforeInput\n module: src.services.actions\n line: 400\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.synthesis.todo-patch.orderedSelected:\n name: orderedSelected\n module: src.synthesis.todo-patch\n line: 91\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.cli.file:\n name: file\n module: src.cli\n line: 523\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.synthesis.code-change-plan.fileHashesAfter:\n name: fileHashesAfter\n module: src.synthesis.code-change-plan\n line: 1100\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.synthesis.todo-patch.diagnosticReportFingerprint:\n name: diagnosticReportFingerprint\n module: src.synthesis.todo-patch\n line: 60\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 2\n src.summary.render.actions:\n name: actions\n module: src.summary.render\n line: 32\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.services.actions.graph:\n name: graph\n module: src.services.actions\n line: 452\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.synthesis.validation.dependencyFirstPriorityOrder:\n name: dependencyFirstPriorityOrder\n module: src.synthesis.validation\n line: 64\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 1\n src.semantic.reranker-llm.SemanticRerankerRequiredError.projectRecord:\n name: projectRecord\n module: src.semantic.reranker-llm\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.synthesis.code-change-plan.collectTarget:\n name: collectTarget\n module: src.synthesis.code-change-plan\n line: 355\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 7\n src.synthesis.validation.sharedTicket:\n name: sharedTicket\n module: src.synthesis.validation\n line: 44\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.summary.summarizer.SummaryAttemptError.readPrompt:\n name: readPrompt\n module: src.summary.summarizer\n line: 329\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.pipeline.run.stageValue:\n name: stageValue\n module: src.pipeline.run\n line: 535\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.web.diff-ui.requestHeaders:\n name: requestHeaders\n module: src.web.diff-ui\n line: 38\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.synthesis.task-synthesis-materialize.diagnosticIds:\n name: diagnosticIds\n module: src.synthesis.task-synthesis-materialize\n line: 32\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 623\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.semantic.reranker.values:\n name: values\n module: src.semantic.reranker\n line: 226\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 1\n src.synthesis.todo-patch.inline:\n name: inline\n module: src.synthesis.todo-patch\n line: 321\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.pipeline.run.runPipeline:\n name: runPipeline\n module: src.pipeline.run\n line: 55\n cyclomatic_complexity: 53\n calls_out: 54\n calls_in: 0\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 368\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 0\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 724\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 18\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 777\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.operations.validation.dateString:\n name: dateString\n module: src.operations.validation\n line: 35\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.synthesis.code-change-plan.planHash:\n name: planHash\n module: src.synthesis.code-change-plan\n line: 166\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals:\n name: synthesizeTodoProposals\n module: src.synthesis.tasks-llm\n line: 62\n cyclomatic_complexity: 5\n calls_out: 12\n calls_in: 0\n src.services.actions.numberValue:\n name: numberValue\n module: src.services.actions\n line: 651\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 18\n src.semantic.reranker.requiredText:\n name: requiredText\n module: src.semantic.reranker\n line: 494\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 11\n src.synthesis.code-change-plan.assertExistingSourceReceipt:\n name: assertExistingSourceReceipt\n module: src.synthesis.code-change-plan\n line: 1152\n cyclomatic_complexity: 8\n calls_out: 10\n calls_in: 1\n src.web.diff-ui.compareGraphs:\n name: compareGraphs\n module: src.web.diff-ui\n line: 45\n cyclomatic_complexity: 15\n calls_out: 13\n calls_in: 2\n src.synthesis.task-synthesis-contract.nonBlank:\n name: nonBlank\n module: src.synthesis.task-synthesis-contract\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.synthesis.todo-patch.selected:\n name: selected\n module: src.synthesis.todo-patch\n line: 238\n cyclomatic_complexity: 6\n calls_out: 8\n calls_in: 0\n src.synthesis.code-change-plan.assertCodeChangeSourcePatch:\n name: assertCodeChangeSourcePatch\n module: src.synthesis.code-change-plan\n line: 790\n cyclomatic_complexity: 47\n calls_out: 26\n calls_in: 5\n src.synthesis.code-change-plan.conclusionsByDiagnostic:\n name: conclusionsByDiagnostic\n module: src.synthesis.code-change-plan\n line: 122\n cyclomatic_complexity: 7\n calls_out: 18\n calls_in: 0\n src.synthesis.code-change-plan.descriptionFor:\n name: descriptionFor\n module: src.synthesis.code-change-plan\n line: 444\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 7\n src.watch.watcher.snapshot:\n name: snapshot\n module: src.watch.watcher\n line: 163\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.synthesis.code-change-plan.applyUnifiedDiffToText:\n name: applyUnifiedDiffToText\n module: src.synthesis.code-change-plan\n line: 1222\n cyclomatic_complexity: 47\n calls_out: 13\n calls_in: 1\n src.synthesis.code-change-plan.changes:\n name: changes\n module: src.synthesis.code-change-plan\n line: 144\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.operations.validation.exactKeys:\n name: exactKeys\n module: src.operations.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 12\n src.synthesis.todo-patch.applyTodoPatch:\n name: applyTodoPatch\n module: src.synthesis.todo-patch\n line: 160\n cyclomatic_complexity: 12\n calls_out: 20\n calls_in: 0\n src.semantic.reranker.acceptedDeclarations:\n name: acceptedDeclarations\n module: src.semantic.reranker\n line: 328\n cyclomatic_complexity: 16\n calls_out: 15\n calls_in: 0\n src.synthesis.task-synthesis-materialize.sortedUnique:\n name: sortedUnique\n module: src.synthesis.task-synthesis-materialize\n line: 130\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 10\n src.synthesis.code-change-plan.rollbackFor:\n name: rollbackFor\n module: src.synthesis.code-change-plan\n line: 500\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 7\n src.semantic.reranker.records:\n name: records\n module: src.semantic.reranker\n line: 326\n cyclomatic_complexity: 16\n calls_out: 15\n calls_in: 0\n src.summary.render.renderRecords:\n name: renderRecords\n module: src.summary.render\n line: 46\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.services.actions.llmModeValue:\n name: llmModeValue\n module: src.services.actions\n line: 532\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 4\n src.operations.validation.principals:\n name: principals\n module: src.operations.validation\n line: 50\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.synthesis.todo-patch.markdown:\n name: markdown\n module: src.synthesis.todo-patch\n line: 95\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.pipeline.run.failedAudit:\n name: failedAudit\n module: src.pipeline.run\n line: 519\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 2\n src.synthesis.code-change-plan.instructionFor:\n name: instructionFor\n module: src.synthesis.code-change-plan\n line: 969\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 3\n src.synthesis.code-change-path.isPlannablePath:\n name: isPlannablePath\n module: src.synthesis.code-change-path\n line: 138\n cyclomatic_complexity: 38\n calls_out: 13\n calls_in: 1\n src.services.actions.scopedPath:\n name: scopedPath\n module: src.services.actions\n line: 603\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.synthesis.task-synthesis-materialize.normalizeRawTarget:\n name: normalizeRawTarget\n module: src.synthesis.task-synthesis-materialize\n line: 142\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 4\n src.semantic.reranker-llm.SemanticRerankerRequiredError.model:\n name: model\n module: src.semantic.reranker-llm\n line: 51\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.watch.watcher.describeDelta:\n name: describeDelta\n module: src.watch.watcher\n line: 100\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 5\n src.synthesis.code-change-plan.renderCodeChangeReviewMarkdown:\n name: renderCodeChangeReviewMarkdown\n module: src.synthesis.code-change-plan\n line: 572\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 1\n src.synthesis.code-change-plan.applyCodeChangeSourcePatch:\n name: applyCodeChangeSourcePatch\n module: src.synthesis.code-change-plan\n line: 1031\n cyclomatic_complexity: 41\n calls_out: 35\n calls_in: 0\n src.synthesis.code-change-plan.createCodeChangeReviewPatch:\n name: createCodeChangeReviewPatch\n module: src.synthesis.code-change-plan\n line: 547\n cyclomatic_complexity: 6\n calls_out: 15\n calls_in: 0\n src.semantic.reranker.validateGeneration:\n name: validateGeneration\n module: src.semantic.reranker\n line: 422\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.synthesis.code-change-plan.unifiedDiff:\n name: unifiedDiff\n module: src.synthesis.code-change-plan\n line: 724\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.todo-patch.applied:\n name: applied\n module: src.synthesis.todo-patch\n line: 189\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 0\n src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection:\n name: summarizeWithCorrection\n module: src.summary.summarizer\n line: 169\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 3\n src.synthesis.code-change-plan.index:\n name: index\n module: src.synthesis.code-change-plan\n line: 344\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.synthesis.code-change-plan.planIds:\n name: planIds\n module: src.synthesis.code-change-plan\n line: 306\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.summary.render.confidence:\n name: confidence\n module: src.summary.render\n line: 55\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 821\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.synthesis.code-change-plan.confidenceFor:\n name: confidenceFor\n module: src.synthesis.code-change-plan\n line: 480\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 8\n src.watch.watcher.visit:\n name: visit\n module: src.watch.watcher\n line: 42\n cyclomatic_complexity: 11\n calls_out: 13\n calls_in: 5\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 753\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.summary.summarizer.systemPrompt:\n name: systemPrompt\n module: src.summary.summarizer\n line: 103\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.cli.svg:\n name: svg\n module: src.cli\n line: 505\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.synthesis.code-change-plan.candidates:\n name: candidates\n module: src.synthesis.code-change-plan\n line: 124\n cyclomatic_complexity: 7\n calls_out: 18\n calls_in: 0\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.client:\n name: client\n module: src.synthesis.tasks-llm\n line: 72\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.watch.watcher.relative:\n name: relative\n module: src.watch.watcher\n line: 55\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 4\n src.synthesis.todo-patch.renderTodoPatchMarkdown:\n name: renderTodoPatchMarkdown\n module: src.synthesis.todo-patch\n line: 119\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.synthesis.todo-patch.sourceTodo:\n name: sourceTodo\n module: src.synthesis.todo-patch\n line: 232\n cyclomatic_complexity: 6\n calls_out: 8\n calls_in: 0\n src.synthesis.code-change-plan.priorityRank:\n name: priorityRank\n module: src.synthesis.code-change-plan\n line: 672\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.watch.watcher.sleep:\n name: sleep\n module: src.watch.watcher\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.synthesis.todo-patch.current:\n name: current\n module: src.synthesis.todo-patch\n line: 179\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.watch.watcher.lastReportStartedAt:\n name: lastReportStartedAt\n module: src.watch.watcher\n line: 168\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.synthesis.tasks-llm\n line: 177\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 2\n src.semantic.reranker.validateRetrieval:\n name: validateRetrieval\n module: src.semantic.reranker\n line: 414\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.services.actions.root:\n name: root\n module: src.services.actions\n line: 73\n cyclomatic_complexity: 83\n calls_out: 64\n calls_in: 0\n src.synthesis.todo-patch.renderTargets:\n name: renderTargets\n module: src.synthesis.todo-patch\n line: 307\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.synthesis.todo-patch.assertReceipt:\n name: assertReceipt\n module: src.synthesis.todo-patch\n line: 262\n cyclomatic_complexity: 7\n calls_out: 4\n calls_in: 2\n src.synthesis.validation.duplicateEvidence:\n name: duplicateEvidence\n module: src.synthesis.validation\n line: 38\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 1\n src.summary.summarizer.SummaryAttemptError.deterministicConclusions:\n name: deterministicConclusions\n module: src.summary.summarizer\n line: 259\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 5\n src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT:\n name: RAW_PROPOSAL_CONTRACT\n module: src.synthesis.task-synthesis-contract\n line: 49\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.synthesis.todo-patch.uniqueIds:\n name: uniqueIds\n module: src.synthesis.todo-patch\n line: 358\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 6\n src.pipeline.run.communicationInputPresent:\n name: communicationInputPresent\n module: src.pipeline.run\n line: 189\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.tf.classifier.dynamicImport:\n name: dynamicImport\n module: src.tf.classifier\n line: 29\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.synthesis.code-change-plan.rawDiff:\n name: rawDiff\n module: src.synthesis.code-change-plan\n line: 723\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.code-change-plan.deterministicGeneration:\n name: deterministicGeneration\n module: src.synthesis.code-change-plan\n line: 504\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 18\n src.synthesis.code-change-plan.patchHash:\n name: patchHash\n module: src.synthesis.code-change-plan\n line: 745\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.code-change-plan.proposalsByDiagnostic:\n name: proposalsByDiagnostic\n module: src.synthesis.code-change-plan\n line: 121\n cyclomatic_complexity: 7\n calls_out: 18\n calls_in: 0\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 492\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n src.synthesis.todo-patch.wasAlreadyAppended:\n name: wasAlreadyAppended\n module: src.synthesis.todo-patch\n line: 299\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 6\n src.services.actions.afterDiagnostics:\n name: afterDiagnostics\n module: src.services.actions\n line: 361\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 0\n src.synthesis.task-synthesis-materialize.proposals:\n name: proposals\n module: src.synthesis.task-synthesis-materialize\n line: 77\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt:\n name: startedAt\n module: src.synthesis.tasks-llm\n line: 68\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet:\n name: assertCodeChangeSourcePatchSet\n module: src.synthesis.code-change-plan\n line: 896\n cyclomatic_complexity: 18\n calls_out: 14\n calls_in: 1\n src.synthesis.todo-patch.duplicates:\n name: duplicates\n module: src.synthesis.todo-patch\n line: 239\n cyclomatic_complexity: 6\n calls_out: 8\n calls_in: 0\n src.synthesis.task-synthesis-materialize.proposalIdByKey:\n name: proposalIdByKey\n module: src.synthesis.task-synthesis-materialize\n line: 76\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.code-change-plan.acceptedCount:\n name: acceptedCount\n module: src.synthesis.code-change-plan\n line: 316\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.services.actions.analysis:\n name: analysis\n module: src.services.actions\n line: 130\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload:\n name: payload\n module: src.synthesis.tasks-llm\n line: 82\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.semantic.reranker.validateVerdictReason:\n name: validateVerdictReason\n module: src.semantic.reranker\n line: 435\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 4\n src.pipeline.run.communicationStartedAt:\n name: communicationStartedAt\n module: src.pipeline.run\n line: 187\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.synthesis.code-change-plan.indexProposalsByDiagnostic:\n name: indexProposalsByDiagnostic\n module: src.synthesis.code-change-plan\n line: 331\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.services.actions.conclusions:\n name: conclusions\n module: src.services.actions\n line: 223\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.services.actions.executeAction:\n name: executeAction\n module: src.services.actions\n line: 72\n cyclomatic_complexity: 83\n calls_out: 65\n calls_in: 0\n src.watch.watcher.current:\n name: current\n module: src.watch.watcher\n line: 181\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.services.actions.nullableString:\n name: nullableString\n module: src.services.actions\n line: 640\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 3\n src.operations.validation.objectValue:\n name: objectValue\n module: src.operations.validation\n line: 18\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 16\n src.synthesis.todo-patch.classified:\n name: classified\n module: src.synthesis.todo-patch\n line: 242\n cyclomatic_complexity: 6\n calls_out: 8\n calls_in: 0\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 409\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.services.actions.title:\n name: title\n module: src.services.actions\n line: 557\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.watch.watcher.defaultSleep:\n name: defaultSleep\n module: src.watch.watcher\n line: 226\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.synthesis.code-change-plan.object:\n name: object\n module: src.synthesis.code-change-plan\n line: 426\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.summary.render.recordCitations:\n name: recordCitations\n module: src.summary.render\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 4\n src.synthesis.code-change-plan.patchIds:\n name: patchIds\n module: src.synthesis.code-change-plan\n line: 918\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.services.actions.booleanValue:\n name: booleanValue\n module: src.services.actions\n line: 675\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 11\n src.watch.watcher.pending:\n name: pending\n module: src.watch.watcher\n line: 169\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.synthesis.code-change-path.isUsefulCodeChangePath:\n name: isUsefulCodeChangePath\n module: src.synthesis.code-change-path\n line: 202\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.services.actions.nlModeValue:\n name: nlModeValue\n module: src.services.actions\n line: 528\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.summary.summarizer.SummaryAttemptError.summaryMode:\n name: summaryMode\n module: src.summary.summarizer\n line: 313\n cyclomatic_complexity: 7\n calls_out: 1\n calls_in: 1\n src.services.actions.before:\n name: before\n module: src.services.actions\n line: 402\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.semantic.reranker.assertGroundedQuote:\n name: assertGroundedQuote\n module: src.semantic.reranker\n line: 460\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 4\n src.web.diff-ui.byId:\n name: byId\n module: src.web.diff-ui\n line: 36\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.operations.validation.nonBlank:\n name: nonBlank\n module: src.operations.validation\n line: 31\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 12\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.generationMetadata:\n name: generationMetadata\n module: src.synthesis.tasks-llm\n line: 213\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.synthesis.task-synthesis-materialize.conclusions:\n name: conclusions\n module: src.synthesis.task-synthesis-materialize\n line: 31\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.synthesis.code-change-plan.conclusions:\n name: conclusions\n module: src.synthesis.code-change-plan\n line: 118\n cyclomatic_complexity: 7\n calls_out: 18\n calls_in: 0\n src.synthesis.code-change-plan.set:\n name: set\n module: src.synthesis.code-change-plan\n line: 903\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 6\n src.semantic.reranker.seenIds:\n name: seenIds\n module: src.semantic.reranker\n line: 203\n cyclomatic_complexity: 14\n calls_out: 9\n calls_in: 0\n src.watch.watcher.onAbort:\n name: onAbort\n module: src.watch.watcher\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.validation.intersects:\n name: intersects\n module: src.synthesis.validation\n line: 110\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.synthesis.validation.target:\n name: target\n module: src.synthesis.validation\n line: 43\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.code-change-plan.uniqueSorted:\n name: uniqueSorted\n module: src.synthesis.code-change-plan\n line: 525\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 20\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 583\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 1\n src.synthesis.todo-patch.renderIds:\n name: renderIds\n module: src.synthesis.todo-patch\n line: 317\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.synthesis.code-change-plan.startsWithImperative:\n name: startsWithImperative\n module: src.synthesis.code-change-plan\n line: 439\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 3\n src.synthesis.code-change-plan.assertSourcePatchIds:\n name: assertSourcePatchIds\n module: src.synthesis.code-change-plan\n line: 945\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.synthesis.validation.sharedPath:\n name: sharedPath\n module: src.synthesis.validation\n line: 46\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.services.actions.beforeDiagnostics:\n name: beforeDiagnostics\n module: src.services.actions\n line: 353\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 0\n src.services.actions.todoPath:\n name: todoPath\n module: src.services.actions\n line: 201\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesisAudit:\n name: synthesisAudit\n module: src.synthesis.tasks-llm\n line: 235\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.semantic.reranker.quote:\n name: quote\n module: src.semantic.reranker\n line: 465\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.synthesis.code-change-plan.createCodeChangeSourcePatch:\n name: createCodeChangeSourcePatch\n module: src.synthesis.code-change-plan\n line: 698\n cyclomatic_complexity: 13\n calls_out: 20\n calls_in: 2\n src.cli.result:\n name: result\n module: src.cli\n line: 657\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.pipeline.run.communicationAudit:\n name: communicationAudit\n module: src.pipeline.run\n line: 188\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.summary.summarizer.SummaryAttemptError.materializeConclusions:\n name: materializeConclusions\n module: src.summary.summarizer\n line: 233\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.services.actions.stringValue:\n name: stringValue\n module: src.services.actions\n line: 636\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 12\n src.semantic.reranker.applyAcceptedSemanticRelations:\n name: applyAcceptedSemanticRelations\n module: src.semantic.reranker\n line: 372\n cyclomatic_complexity: 2\n calls_out: 13\n calls_in: 0\n src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult:\n name: assertSemanticRerankResult\n module: src.semantic.reranker-llm\n line: 55\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.watch.watcher.generate:\n name: generate\n module: src.watch.watcher\n line: 207\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 5\n src.synthesis.code-change-plan.recordsById:\n name: recordsById\n module: src.synthesis.code-change-plan\n line: 120\n cyclomatic_complexity: 7\n calls_out: 18\n calls_in: 0\n src.semantic.reranker.assertSemanticRerankResult:\n name: assertSemanticRerankResult\n module: src.semantic.reranker\n line: 311\n cyclomatic_complexity: 21\n calls_out: 21\n calls_in: 2\n src.synthesis.task-synthesis-contract.taskStrings:\n name: taskStrings\n module: src.synthesis.task-synthesis-contract\n line: 34\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.synthesis.code-change-plan.now:\n name: now\n module: src.synthesis.code-change-plan\n line: 1099\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.pipeline.run.values:\n name: values\n module: src.pipeline.run\n line: 486\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 63\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 0\n src.services.actions.resolveRoot:\n name: resolveRoot\n module: src.services.actions\n line: 598\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.pipeline.run.message:\n name: message\n module: src.pipeline.run\n line: 511\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 0\n src.tf.classifier.vectorize:\n name: vectorize\n module: src.tf.classifier\n line: 60\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.semantic.reranker.byDeclaration:\n name: byDeclaration\n module: src.semantic.reranker\n line: 205\n cyclomatic_complexity: 14\n calls_out: 9\n calls_in: 0\n src.watch.watcher.watchRepository:\n name: watchRepository\n module: src.watch.watcher\n line: 147\n cyclomatic_complexity: 19\n calls_out: 14\n calls_in: 0\n src.watch.watcher.absolute:\n name: absolute\n module: src.watch.watcher\n line: 54\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.pipeline.run.knownAudit:\n name: knownAudit\n module: src.pipeline.run\n line: 512\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 0\n src.synthesis.task-synthesis-materialize.keys:\n name: keys\n module: src.synthesis.task-synthesis-materialize\n line: 122\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.synthesis.code-change-plan.target:\n name: target\n module: src.synthesis.code-change-plan\n line: 143\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.watch.watcher.finish:\n name: finish\n module: src.watch.watcher\n line: 238\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.summary.summarizer.payload:\n name: payload\n module: src.summary.summarizer\n line: 104\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.synthesis.todo-patch.isoDate:\n name: isoDate\n module: src.synthesis.todo-patch\n line: 354\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.synthesis.code-change-plan.acceptances:\n name: acceptances\n module: src.synthesis.code-change-plan\n line: 309\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.summary.summarizer.SummaryAttemptError.parsed:\n name: parsed\n module: src.summary.summarizer\n line: 239\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.semantic.reranker-llm.SemanticRerankerRequiredError.payload:\n name: payload\n module: src.semantic.reranker-llm\n line: 73\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.semantic.reranker.seenDecisions:\n name: seenDecisions\n module: src.semantic.reranker\n line: 327\n cyclomatic_complexity: 16\n calls_out: 15\n calls_in: 0\n src.synthesis.todo-patch.currentHash:\n name: currentHash\n module: src.synthesis.todo-patch\n line: 187\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 0\n src.synthesis.validation.validateAndClassifyTodoProposals:\n name: validateAndClassifyTodoProposals\n module: src.synthesis.validation\n line: 17\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 0\n src.tf.classifier.importer:\n name: importer\n module: src.tf.classifier\n line: 30\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.summary.summarizer.SummaryAttemptError.sortedUnique:\n name: sortedUnique\n module: src.summary.summarizer\n line: 324\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 4\n src.synthesis.todo-patch.createTodoPatch:\n name: createTodoPatch\n module: src.synthesis.todo-patch\n line: 69\n cyclomatic_complexity: 8\n calls_out: 20\n calls_in: 1\n src.synthesis.code-change-plan.markdown:\n name: markdown\n module: src.synthesis.code-change-plan\n line: 558\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.services.actions.receiptPath:\n name: receiptPath\n module: src.services.actions\n line: 303\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.web.diff-ui.selectedRun:\n name: selectedRun\n module: src.web.diff-ui\n line: 40\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 3\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.readPrompt:\n name: readPrompt\n module: src.synthesis.tasks-llm\n line: 262\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.services.actions.after:\n name: after\n module: src.services.actions\n line: 403\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt:\n name: prompt\n module: src.synthesis.tasks-llm\n line: 81\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.mode:\n name: mode\n module: src.cli\n line: 429\n cyclomatic_complexity: 8\n calls_out: 10\n calls_in: 0\n src.web.diff-ui.diffUiHtml:\n name: diffUiHtml\n module: src.web.diff-ui\n line: 1\n cyclomatic_complexity: 52\n calls_out: 42\n calls_in: 0\n src.cli.main:\n name: main\n module: src.cli\n line: 53\n cyclomatic_complexity: 95\n calls_out: 44\n calls_in: 1\n src.cli.extractor:\n name: extractor\n module: src.cli\n line: 519\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.synthesis.todo-patch.normalizePath:\n name: normalizePath\n module: src.synthesis.todo-patch\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.synthesis.code-change-plan.plansById:\n name: plansById\n module: src.synthesis.code-change-plan\n line: 917\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.services.actions.filterCommunicationGraph:\n name: filterCommunicationGraph\n module: src.services.actions\n line: 511\n cyclomatic_complexity: 17\n calls_out: 7\n calls_in: 2\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 39\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.pipeline.run.aborted:\n name: aborted\n module: src.pipeline.run\n line: 507\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 710\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 6\n src.cli.html:\n name: html\n module: src.cli\n line: 432\n cyclomatic_complexity: 8\n calls_out: 10\n calls_in: 0\n src.synthesis.todo-patch.hash:\n name: hash\n module: src.synthesis.todo-patch\n line: 350\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.synthesis.todo-patch.rendered:\n name: rendered\n module: src.synthesis.todo-patch\n line: 312\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.pipeline.run.failureCode:\n name: failureCode\n module: src.pipeline.run\n line: 575\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.synthesis.code-change-plan.record:\n name: record\n module: src.synthesis.code-change-plan\n line: 425\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.watch.watcher.result:\n name: result\n module: src.watch.watcher\n line: 211\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.synthesis.task-synthesis-materialize.conclusionIdByKey:\n name: conclusionIdByKey\n module: src.synthesis.task-synthesis-materialize\n line: 46\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.synthesis.code-change-plan.normalizeUnifiedDiff:\n name: normalizeUnifiedDiff\n module: src.synthesis.code-change-plan\n line: 983\n cyclomatic_complexity: 17\n calls_out: 9\n calls_in: 4\n src.synthesis.validation.proposalWords:\n name: proposalWords\n module: src.synthesis.validation\n line: 40\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.synthesis.code-change-plan.titleFor:\n name: titleFor\n module: src.synthesis.code-change-plan\n line: 424\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 7\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 644\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n src.tf.classifier.loadClassifier:\n name: loadClassifier\n module: src.tf.classifier\n line: 47\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 737\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.pipeline.run.includeCommunication:\n name: includeCommunication\n module: src.pipeline.run\n line: 186\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.cli.command:\n name: command\n module: src.cli\n line: 64\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 0\n src.services.actions.afterInput:\n name: afterInput\n module: src.services.actions\n line: 401\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.synthesis.todo-patch.writeTodoPatchArtifacts:\n name: writeTodoPatchArtifacts\n module: src.synthesis.todo-patch\n line: 152\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.synthesis.code-change-plan.acceptanceCriteriaFor:\n name: acceptanceCriteriaFor\n module: src.synthesis.code-change-plan\n line: 459\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 7\n src.synthesis.code-change-plan.paths:\n name: paths\n module: src.synthesis.code-change-plan\n line: 830\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 0\n src.services.actions.svg:\n name: svg\n module: src.services.actions\n line: 405\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.services.actions.result:\n name: result\n module: src.services.actions\n line: 442\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.synthesis.validation.similarity:\n name: similarity\n module: src.synthesis.validation\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 608\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 2\n src.synthesis.code-change-plan.assertSourceApplyReceipt:\n name: assertSourceApplyReceipt\n module: src.synthesis.code-change-plan\n line: 1180\n cyclomatic_complexity: 11\n calls_out: 13\n calls_in: 2\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 666\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.synthesis.todo-patch.assertApproval:\n name: assertApproval\n module: src.synthesis.todo-patch\n line: 256\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision:\n name: modelRevision\n module: src.semantic.reranker-llm\n line: 52\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 246\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.services.actions.proposals:\n name: proposals\n module: src.services.actions\n line: 226\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.cli.stop:\n name: stop\n module: src.cli\n line: 393\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.watch.watcher.now:\n name: now\n module: src.watch.watcher\n line: 152\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 8\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 498\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.synthesis.todo-patch.artifact:\n name: artifact\n module: src.synthesis.todo-patch\n line: 222\n cyclomatic_complexity: 6\n calls_out: 8\n calls_in: 0\n src.synthesis.todo-patch.appendPatch:\n name: appendPatch\n module: src.synthesis.todo-patch\n line: 294\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 6\n src.cli.root:\n name: root\n module: src.cli\n line: 584\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.services.actions.diff:\n name: diff\n module: src.services.actions\n line: 433\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.synthesis.code-change-plan.indexConclusionsByDiagnostic:\n name: indexConclusionsByDiagnostic\n module: src.synthesis.code-change-plan\n line: 343\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.summary.summarizer.mode:\n name: mode\n module: src.summary.summarizer\n line: 66\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.operations.validation.uniqueStrings:\n name: uniqueStrings\n module: src.operations.validation\n line: 40\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 13\n src.synthesis.code-change-plan.exactSourcePatchKeys:\n name: exactSourcePatchKeys\n module: src.synthesis.code-change-plan\n line: 937\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 4\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 428\n cyclomatic_complexity: 24\n calls_out: 19\n calls_in: 1\n src.services.actions.readRecords:\n name: readRecords\n module: src.services.actions\n line: 624\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 2\n src.synthesis.code-change-plan.exactSourcePatchSet:\n name: exactSourcePatchSet\n module: src.synthesis.code-change-plan\n line: 961\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.watch.watcher.maxFiles:\n name: maxFiles\n module: src.watch.watcher\n line: 38\n cyclomatic_complexity: 11\n calls_out: 14\n calls_in: 0\n src.synthesis.code-change-plan.splitKeep:\n name: splitKeep\n module: src.synthesis.code-change-plan\n line: 1305\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.semantic.reranker.decisions:\n name: decisions\n module: src.semantic.reranker\n line: 274\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.services.actions.diagnostics:\n name: diagnostics\n module: src.services.actions\n line: 453\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.services.actions.afterGraph:\n name: afterGraph\n module: src.services.actions\n line: 358\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 0\n src.watch.watcher.DEFAULT_MIN_INTERVAL_MS:\n name: DEFAULT_MIN_INTERVAL_MS\n module: src.watch.watcher\n line: 144\n cyclomatic_complexity: 19\n calls_out: 14\n calls_in: 0\n src.synthesis.task-synthesis-contract.RAW_CONCLUSION_CONTRACT:\n name: RAW_CONCLUSION_CONTRACT\n module: src.synthesis.task-synthesis-contract\n line: 38\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.synthesis.task-synthesis-materialize.parsed:\n name: parsed\n module: src.synthesis.task-synthesis-materialize\n line: 20\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 732\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 4\n src.web.diff-ui.updateMeta:\n name: updateMeta\n module: src.web.diff-ui\n line: 41\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 2\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 705\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 17\n src.pipeline.run.skippedAudit:\n name: skippedAudit\n module: src.pipeline.run\n line: 579\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.synthesis.code-change-plan.riskFor:\n name: riskFor\n module: src.synthesis.code-change-plan\n line: 489\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 7\n src.services.actions.summaryModeValue:\n name: summaryModeValue\n module: src.services.actions\n line: 544\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 2\n src.services.actions.nullableScopedPath:\n name: nullableScopedPath\n module: src.services.actions\n line: 613\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.pipeline.run.collectTargetHints:\n name: collectTargetHints\n module: src.pipeline.run\n line: 485\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 2\n src.semantic.reranker.assertSemanticCandidateSet:\n name: assertSemanticCandidateSet\n module: src.semantic.reranker\n line: 184\n cyclomatic_complexity: 27\n calls_out: 18\n calls_in: 3\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 747\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.summary.summarizer.summarizeGraph:\n name: summarizeGraph\n module: src.summary.summarizer\n line: 57\n cyclomatic_complexity: 10\n calls_out: 13\n calls_in: 0\n src.watch.watcher.scanTree:\n name: scanTree\n module: src.watch.watcher\n line: 37\n cyclomatic_complexity: 12\n calls_out: 17\n calls_in: 4\n src.watch.watcher.delta:\n name: delta\n module: src.watch.watcher\n line: 182\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.semantic.reranker.createSemanticRerankResult:\n name: createSemanticRerankResult\n module: src.semantic.reranker\n line: 251\n cyclomatic_complexity: 4\n calls_out: 11\n calls_in: 0\n src.synthesis.todo-patch.now:\n name: now\n module: src.synthesis.todo-patch\n line: 186\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 0\n src.synthesis.task-synthesis-materialize.normalizeStringArray:\n name: normalizeStringArray\n module: src.synthesis.task-synthesis-materialize\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 11\n src.synthesis.todo-patch.recovered:\n name: recovered\n module: src.synthesis.todo-patch\n line: 190\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 0\n src.synthesis.validation.jaccard:\n name: jaccard\n module: src.synthesis.validation\n line: 103\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 6\n src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection:\n name: synthesizeWithCorrection\n module: src.synthesis.tasks-llm\n line: 117\n cyclomatic_complexity: 11\n calls_out: 8\n calls_in: 3\n src.operations.validation.assertVariableContract:\n name: assertVariableContract\n module: src.operations.validation\n line: 62\n cyclomatic_complexity: 20\n calls_out: 14\n calls_in: 0\n src.synthesis.todo-patch.object:\n name: object\n module: src.synthesis.todo-patch\n line: 333\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 6\n src.summary.summarizer.SummaryAttemptError.generationMetadata:\n name: generationMetadata\n module: src.summary.summarizer\n line: 285\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 6\n src.synthesis.todo-patch.exactKeys:\n name: exactKeys\n module: src.synthesis.todo-patch\n line: 338\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 6\n src.synthesis.code-change-plan.createCodeChangeSourcePatchSet:\n name: createCodeChangeSourcePatchSet\n module: src.synthesis.code-change-plan\n line: 759\n cyclomatic_complexity: 8\n calls_out: 11\n calls_in: 0\n src.services.actions.stringList:\n name: stringList\n module: src.services.actions\n line: 645\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.watch.watcher.absoluteRoot:\n name: absoluteRoot\n module: src.watch.watcher\n line: 40\n cyclomatic_complexity: 11\n calls_out: 14\n calls_in: 0\n src.synthesis.code-change-plan.renderIds:\n name: renderIds\n module: src.synthesis.code-change-plan\n line: 680\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.services.actions.view:\n name: view\n module: src.services.actions\n line: 456\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.services.actions.withTextDiffViews:\n name: withTextDiffViews\n module: src.services.actions\n line: 556\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 2\n src.synthesis.validation.words:\n name: words\n module: src.synthesis.validation\n line: 99\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 7\n src.semantic.reranker-llm.SemanticRerankerRequiredError.assertTrackedSnapshot:\n name: assertTrackedSnapshot\n module: src.semantic.reranker-llm\n line: 140\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 499\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.synthesis.todo-patch.nonBlank:\n name: nonBlank\n module: src.synthesis.todo-patch\n line: 346\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.watch.watcher.runReport:\n name: runReport\n module: src.watch.watcher\n line: 157\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.semantic.reranker.seenPairs:\n name: seenPairs\n module: src.semantic.reranker\n line: 204\n cyclomatic_complexity: 14\n calls_out: 9\n calls_in: 0\n src.cli.context:\n name: context\n module: src.cli\n line: 451\n cyclomatic_complexity: 9\n calls_out: 10\n calls_in: 0\n src.services.actions.beforeGraph:\n name: beforeGraph\n module: src.services.actions\n line: 350\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 0\n src.synthesis.task-synthesis-materialize.mapKeys:\n name: mapKeys\n module: src.synthesis.task-synthesis-materialize\n line: 121\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 6\n src.synthesis.code-change-plan.evaluateCodeChangeAcceptance:\n name: evaluateCodeChangeAcceptance\n module: src.synthesis.code-change-plan\n line: 224\n cyclomatic_complexity: 9\n calls_out: 18\n calls_in: 3\n src.synthesis.validation.sharedSymbol:\n name: sharedSymbol\n module: src.synthesis.validation\n line: 45\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.web.diff-ui.formatBytes:\n name: formatBytes\n module: src.web.diff-ui\n line: 39\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 3\n src.synthesis.todo-patch.assertTodoPatchArtifact:\n name: assertTodoPatchArtifact\n module: src.synthesis.todo-patch\n line: 221\n cyclomatic_complexity: 11\n calls_out: 16\n calls_in: 2\n src.services.actions.hasInputValue:\n name: hasInputValue\n module: src.services.actions\n line: 657\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 7\n src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS:\n name: DEFAULT_SCAN_INTERVAL_MS\n module: src.watch.watcher\n line: 145\n cyclomatic_complexity: 19\n calls_out: 14\n calls_in: 0\n src.synthesis.code-change-plan.proposals:\n name: proposals\n module: src.synthesis.code-change-plan\n line: 119\n cyclomatic_complexity: 7\n calls_out: 18\n calls_in: 0\n src.synthesis.code-change-plan.generatedAt:\n name: generatedAt\n module: src.synthesis.code-change-plan\n line: 769\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.summary.render.renderSummaryMarkdown:\n name: renderSummaryMarkdown\n module: src.summary.render\n line: 3\n cyclomatic_complexity: 10\n calls_out: 9\n calls_in: 0\n src.operations.validation.assertPrincipalList:\n name: assertPrincipalList\n module: src.operations.validation\n line: 49\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 3\n src.semantic.reranker.boundedScore:\n name: boundedScore\n module: src.semantic.reranker\n line: 480\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 5\n src.tf.classifier.loadAssets:\n name: loadAssets\n module: src.tf.classifier\n line: 34\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.cli.controller:\n name: controller\n module: src.cli\n line: 392\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.synthesis.todo-patch.sameArray:\n name: sameArray\n module: src.synthesis.todo-patch\n line: 329\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.services.actions.beforePath:\n name: beforePath\n module: src.services.actions\n line: 427\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.synthesis.code-change-plan.matchingConclusions:\n name: matchingConclusions\n module: src.synthesis.code-change-plan\n line: 142\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.watch.watcher.timer:\n name: timer\n module: src.watch.watcher\n line: 232\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.watch.watcher.startedAt:\n name: startedAt\n module: src.watch.watcher\n line: 209\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.synthesis.todo-patch.atomicWrite:\n name: atomicWrite\n module: src.synthesis.todo-patch\n line: 274\n cyclomatic_complexity: 5\n calls_out: 13\n calls_in: 6\n src.summary.summarizer.SummaryAttemptError.assertConclusions:\n name: assertConclusions\n module: src.summary.summarizer\n line: 281\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.synthesis.code-change-plan.inline:\n name: inline\n module: src.synthesis.code-change-plan\n line: 676\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.synthesis.code-change-plan.matchingProposals:\n name: matchingProposals\n module: src.synthesis.code-change-plan\n line: 141\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.view:\n name: view\n module: src.cli\n line: 502\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\nedges:\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.mode\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.html\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.maxRows\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.maxRows\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.maxRows\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.extractor\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.extractor\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.extractor\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.web.diff-ui.diffUiHtml\n callee: src.web.diff-ui.byId\n call_type: resolved\n- caller: src.web.diff-ui.requestHeaders\n callee: src.web.diff-ui.byId\n call_type: resolved\n- caller: src.web.diff-ui.formatBytes\n callee: src.web.diff-ui.selectedRun\n call_type: resolved\n- caller: src.web.diff-ui.formatBytes\n callee: src.web.diff-ui.byId\n call_type: resolved\n- caller: src.web.diff-ui.selectedRun\n callee: src.web.diff-ui.byId\n call_type: resolved\n- caller: src.web.diff-ui.selectedRun\n callee: src.web.diff-ui.formatBytes\n call_type: resolved\n- caller: src.web.diff-ui.updateMeta\n callee: src.web.diff-ui.selectedRun\n call_type: resolved\n- caller: src.web.diff-ui.updateMeta\n callee: src.web.diff-ui.byId\n call_type: resolved\n- caller: src.web.diff-ui.updateMeta\n callee: src.web.diff-ui.formatBytes\n call_type: resolved\n- caller: src.web.diff-ui.fillSelect\n callee: src.web.diff-ui.byId\n call_type: resolved\n- caller: src.web.diff-ui.fillSelect\n callee: src.web.diff-ui.updateMeta\n call_type: resolved\n- caller: src.web.diff-ui.loadRuns\n callee: src.web.diff-ui.byId\n call_type: resolved\n- caller: src.web.diff-ui.loadRuns\n callee: src.web.diff-ui.requestHeaders\n call_type: resolved\n- caller: src.web.diff-ui.compareGraphs\n callee: src.web.diff-ui.byId\n call_type: resolved\n- caller: src.web.diff-ui.compareGraphs\n callee: src.web.diff-ui.requestHeaders\n call_type: resolved\n- caller: src.watch.watcher.scanTree\n callee: src.watch.watcher.relative\n call_type: resolved\n- caller: src.watch.watcher.maxFiles\n callee: src.watch.watcher.relative\n call_type: resolved\n- caller: src.watch.watcher.maxFiles\n callee: src.watch.watcher.visit\n call_type: resolved\n- caller: src.watch.watcher.absoluteRoot\n callee: src.watch.watcher.relative\n call_type: resolved\n- caller: src.watch.watcher.absoluteRoot\n callee: src.watch.watcher.visit\n call_type: resolved\n- caller: src.watch.watcher.visit\n callee: src.watch.watcher.relative\n call_type: resolved\n- caller: src.watch.watcher.absolute\n callee: src.watch.watcher.visit\n call_type: resolved\n- caller: src.watch.watcher.relative\n callee: src.watch.watcher.visit\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n callee: src.watch.watcher.now\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n callee: src.watch.watcher.scanTree\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n callee: src.watch.watcher.generate\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n callee: src.watch.watcher.sleep\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n callee: src.watch.watcher.diffSnapshots\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n callee: src.watch.watcher.now\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n callee: src.watch.watcher.scanTree\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n callee: src.watch.watcher.generate\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n callee: src.watch.watcher.sleep\n call_type: resolved\n- caller: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n callee: src.watch.watcher.diffSnapshots\n call_type: resolved\n- caller: src.watch.watcher.watchRepository\n callee: src.watch.watcher.now\n call_type: resolved\n- caller: src.watch.watcher.watchRepository\n callee: src.watch.watcher.scanTree\n call_type: resolved\n- caller: src.watch.watcher.watchRepository\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.watchRepository\n callee: src.watch.watcher.generate\n call_type: resolved\n- caller: src.watch.watcher.watchRepository\n callee: src.watch.watcher.sleep\n call_type: resolved\n- caller: src.watch.watcher.watchRepository\n callee: src.watch.watcher.diffSnapshots\n call_type: resolved\n- caller: src.watch.watcher.result\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.result\n callee: src.watch.watcher.now\n call_type: resolved\n- caller: src.watch.watcher.snapshot\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.lastReportStartedAt\n callee: src.watch.watcher.now\n call_type: resolved\n- caller: src.watch.watcher.lastReportStartedAt\n callee: src.watch.watcher.generate\n call_type: resolved\n- caller: src.watch.watcher.pending\n callee: src.watch.watcher.now\n call_type: resolved\n- caller: src.watch.watcher.pending\n callee: src.watch.watcher.generate\n call_type: resolved\n- caller: src.watch.watcher.current\n callee: src.watch.watcher.describeDelta\n call_type: resolved\n- caller: src.watch.watcher.current\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.delta\n callee: src.watch.watcher.describeDelta\n call_type: resolved\n- caller: src.watch.watcher.delta\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.waitMs\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.generate\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.generate\n callee: src.watch.watcher.now\n call_type: resolved\n- caller: src.watch.watcher.generate\n callee: src.watch.watcher.runReport\n call_type: resolved\n- caller: src.watch.watcher.generate\n callee: src.watch.watcher.scanTree\n call_type: resolved\n- caller: src.watch.watcher.startedAt\n callee: src.watch.watcher.runReport\n call_type: resolved\n- caller: src.watch.watcher.startedAt\n callee: src.watch.watcher.emit\n call_type: resolved\n- caller: src.watch.watcher.startedAt\n callee: src.watch.watcher.now\n call_type: resolved\n- caller: src.watch.watcher.defaultSleep\n callee: src.watch.watcher.finish\n call_type: resolved\n- caller: src.watch.watcher.timer\n callee: src.watch.watcher.finish\n call_type: resolved\n- caller: src.watch.watcher.onAbort\n callee: src.watch.watcher.finish\n call_type: resolved\n- caller: src.tf.classifier.dynamicImport\n callee: src.tf.classifier.importer\n call_type: resolved\n- caller: src.tf.classifier.loadClassifier\n callee: src.tf.classifier.dynamicImport\n call_type: resolved\n- caller: src.tf.classifier.loadClassifier\n callee: src.tf.classifier.loadAssets\n call_type: resolved\n- caller: src.tf.classifier.classifyAction\n callee: src.tf.classifier.loadClassifier\n call_type: resolved\n- caller: src.tf.classifier.classifyAction\n callee: src.tf.classifier.vectorize\n call_type: resolved\n- caller: src.synthesis.validation.validateAndClassifyTodoProposals\n callee: src.synthesis.validation.duplicateEvidence\n call_type: resolved\n- caller: src.synthesis.validation.validateAndClassifyTodoProposals\n callee: src.synthesis.validation.dependencyFirstPriorityOrder\n call_type: resolved\n- caller: src.synthesis.validation.duplicateEvidence\n callee: src.synthesis.validation.words\n call_type: resolved\n- caller: src.synthesis.validation.duplicateEvidence\n callee: src.synthesis.validation.intersects\n call_type: resolved\n- caller: src.synthesis.validation.duplicateEvidence\n callee: src.synthesis.validation.jaccard\n call_type: resolved\n- caller: src.synthesis.validation.proposalWords\n callee: src.synthesis.validation.words\n call_type: resolved\n- caller: src.synthesis.validation.target\n callee: src.synthesis.validation.jaccard\n call_type: resolved\n- caller: src.synthesis.validation.target\n callee: src.synthesis.validation.words\n call_type: resolved\n- caller: src.synthesis.validation.sharedTicket\n callee: src.synthesis.validation.jaccard\n call_type: resolved\n- caller: src.synthesis.validation.sharedTicket\n callee: src.synthesis.validation.words\n call_type: resolved\n- caller: src.synthesis.validation.sharedSymbol\n callee: src.synthesis.validation.jaccard\n call_type: resolved\n- caller: src.synthesis.validation.sharedSymbol\n callee: src.synthesis.validation.words\n call_type: resolved\n- caller: src.synthesis.validation.sharedPath\n callee: src.synthesis.validation.jaccard\n call_type: resolved\n- caller: src.synthesis.validation.sharedPath\n callee: src.synthesis.validation.words\n call_type: resolved\n- caller: src.synthesis.validation.similarity\n callee: src.synthesis.validation.jaccard\n call_type: resolved\n- caller: src.synthesis.validation.similarity\n callee: src.synthesis.validation.words\n call_type: resolved\n- caller: src.synthesis.todo-patch.createTodoPatch\n callee: src.synthesis.todo-patch.sameArray\n call_type: resolved\n- caller: src.synthesis.todo-patch.selected\n callee: src.synthesis.todo-patch.object\n call_type: resolved\n- caller: src.synthesis.todo-patch.selected\n callee: src.synthesis.todo-patch.exactKeys\n call_type: resolved\n- caller: src.synthesis.todo-patch.selected\n callee: src.synthesis.todo-patch.uniqueIds\n call_type: resolved\n- caller: src.synthesis.todo-patch.selected\n callee: src.synthesis.todo-patch.uniqueStrings\n call_type: resolved\n- caller: src.synthesis.todo-patch.orderedSelected\n callee: src.synthesis.todo-patch.sameArray\n call_type: resolved\n- caller: src.synthesis.todo-patch.markdown\n callee: src.synthesis.todo-patch.normalizePath\n call_type: resolved\n- caller: src.synthesis.todo-patch.markdown\n callee: src.synthesis.todo-patch.diagnosticReportFingerprint\n call_type: resolved\n- caller: src.synthesis.todo-patch.renderTodoPatchMarkdown\n callee: src.synthesis.todo-patch.inline\n call_type: resolved\n- caller: src.synthesis.todo-patch.renderTodoPatchMarkdown\n callee: src.synthesis.todo-patch.renderTargets\n call_type: resolved\n- caller: src.synthesis.todo-patch.renderTodoPatchMarkdown\n callee: src.synthesis.todo-patch.renderIds\n call_type: resolved\n- caller: src.synthesis.todo-patch.writeTodoPatchArtifacts\n callee: src.synthesis.todo-patch.createTodoPatch\n call_type: resolved\n- caller: src.synthesis.todo-patch.applyTodoPatch\n callee: src.synthesis.todo-patch.assertTodoPatchArtifact\n call_type: resolved\n- caller: src.synthesis.todo-patch.applyTodoPatch\n callee: src.synthesis.todo-patch.assertApproval\n call_type: resolved\n- caller: src.synthesis.todo-patch.current\n callee: src.synthesis.todo-patch.assertReceipt\n call_type: resolved\n- caller: src.synthesis.todo-patch.now\n callee: src.synthesis.todo-patch.appendPatch\n call_type: resolved\n- caller: src.synthesis.todo-patch.now\n callee: src.synthesis.todo-patch.atomicWrite\n call_type: resolved\n- caller: src.synthesis.todo-patch.now\n callee: src.synthesis.todo-patch.wasAlreadyAppended\n call_type: resolved\n- caller: src.synthesis.todo-patch.currentHash\n callee: src.synthesis.todo-patch.appendPatch\n call_type: resolved\n- caller: src.synthesis.todo-patch.currentHash\n callee: src.synthesis.todo-patch.atomicWrite\n call_type: resolved\n- caller: src.synthesis.todo-patch.currentHash\n callee: src.synthesis.todo-patch.wasAlreadyAppended\n call_type: resolved\n- caller: src.synthesis.todo-patch.result\n callee: src.synthesis.todo-patch.appendPatch\n call_type: resolved\n- caller: src.synthesis.todo-patch.result\n callee: src.synthesis.todo-patch.atomicWrite\n call_type: resolved\n- caller: src.synthesis.todo-patch.result\n callee: src.synthesis.todo-patch.wasAlreadyAppended\n call_type: resolved\n- caller: src.synthesis.todo-patch.applied\n callee: src.synthesis.todo-patch.appendPatch\n call_type: resolved\n- caller: src.synthesis.todo-patch.applied\n callee: src.synthesis.todo-patch.atomicWrite\n call_type: resolved\n- caller: src.synthesis.todo-patch.applied\n callee: src.synthesis.todo-patch.wasAlreadyAppended\n call_type: resolved\n- caller: src.synthesis.todo-patch.recovered\n callee: src.synthesis.todo-patch.appendPatch\n call_type: resolved\n- caller: src.synthesis.todo-patch.recovered\n callee: src.synthesis.todo-patch.atomicWrite\n call_type: resolved\n- caller: src.synthesis.todo-patch.recovered\n callee: src.synthesis.todo-patch.wasAlreadyAppended\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertTodoPatchArtifact\n callee: src.synthesis.todo-patch.object\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertTodoPatchArtifact\n callee: src.synthesis.todo-patch.exactKeys\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertTodoPatchArtifact\n callee: src.synthesis.todo-patch.isoDate\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertTodoPatchArtifact\n callee: src.synthesis.todo-patch.hash\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertTodoPatchArtifact\n callee: src.synthesis.todo-patch.nonBlank\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertTodoPatchArtifact\n callee: src.synthesis.todo-patch.uniqueIds\n call_type: resolved\n- caller: src.synthesis.todo-patch.artifact\n callee: src.synthesis.todo-patch.object\n call_type: resolved\n- caller: src.synthesis.todo-patch.artifact\n callee: src.synthesis.todo-patch.exactKeys\n call_type: resolved\n- caller: src.synthesis.todo-patch.artifact\n callee: src.synthesis.todo-patch.uniqueIds\n call_type: resolved\n- caller: src.synthesis.todo-patch.artifact\n callee: src.synthesis.todo-patch.uniqueStrings\n call_type: resolved\n- caller: src.synthesis.todo-patch.sourceTodo\n callee: src.synthesis.todo-patch.object\n call_type: resolved\n- caller: src.synthesis.todo-patch.sourceTodo\n callee: src.synthesis.todo-patch.exactKeys\n call_type: resolved\n- caller: src.synthesis.todo-patch.sourceTodo\n callee: src.synthesis.todo-patch.uniqueIds\n call_type: resolved\n- caller: src.synthesis.todo-patch.sourceTodo\n callee: src.synthesis.todo-patch.uniqueStrings\n call_type: resolved\n- caller: src.synthesis.todo-patch.duplicates\n callee: src.synthesis.todo-patch.object\n call_type: resolved\n- caller: src.synthesis.todo-patch.duplicates\n callee: src.synthesis.todo-patch.exactKeys\n call_type: resolved\n- caller: src.synthesis.todo-patch.duplicates\n callee: src.synthesis.todo-patch.uniqueIds\n call_type: resolved\n- caller: src.synthesis.todo-patch.duplicates\n callee: src.synthesis.todo-patch.uniqueStrings\n call_type: resolved\n- caller: src.synthesis.todo-patch.classified\n callee: src.synthesis.todo-patch.object\n call_type: resolved\n- caller: src.synthesis.todo-patch.classified\n callee: src.synthesis.todo-patch.exactKeys\n call_type: resolved\n- caller: src.synthesis.todo-patch.classified\n callee: src.synthesis.todo-patch.uniqueIds\n call_type: resolved\n- caller: src.synthesis.todo-patch.classified\n callee: src.synthesis.todo-patch.uniqueStrings\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertApproval\n callee: src.synthesis.todo-patch.nonBlank\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertReceipt\n callee: src.synthesis.todo-patch.sameArray\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertReceipt\n callee: src.synthesis.todo-patch.nonBlank\n call_type: resolved\n- caller: src.synthesis.todo-patch.assertReceipt\n callee: src.synthesis.todo-patch.isoDate\n call_type: resolved\n- caller: src.synthesis.todo-patch.renderTargets\n callee: src.synthesis.todo-patch.inline\n call_type: resolved\n- caller: src.synthesis.todo-patch.rendered\n callee: src.synthesis.todo-patch.inline\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.fallbackOrThrow\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.readPrompt\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.client\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.fallbackOrThrow\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.generationMetadata\n call_type: resolved\n- caller: src.synthesis.tasks-llm.TaskSynthesisAttemptError.fallbackOrThrow\n callee: src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesisAudit\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse\n callee: src.synthesis.task-synthesis-materialize.normalizeLocalKeys\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.parsed\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.parsed\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.proposalKeys\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.proposalKeys\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusions\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusions\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.diagnosticIds\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey\n callee: src.synthesis.task-synthesis-materialize.normalizeRawTarget\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey\n callee: src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey\n callee: src.synthesis.task-synthesis-materialize.mapKeys\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionIdByKey\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionByKey\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionByKey\n callee: src.synthesis.task-synthesis-materialize.normalizeRawTarget\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionByKey\n callee: src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionByKey\n callee: src.synthesis.task-synthesis-materialize.mapKeys\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.conclusionByKey\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.proposalDrafts\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.proposalDrafts\n callee: src.synthesis.task-synthesis-materialize.normalizeRawTarget\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.proposalDrafts\n callee: src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.proposalDrafts\n callee: src.synthesis.task-synthesis-materialize.mapKeys\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.proposalDrafts\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.proposalIdByKey\n callee: src.synthesis.task-synthesis-materialize.mapKeys\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.proposals\n callee: src.synthesis.task-synthesis-materialize.mapKeys\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.keys\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.mapKeys\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.mapKeys\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.sortedUnique\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.normalizeRawTarget\n callee: src.synthesis.task-synthesis-materialize.normalizeStringArray\n call_type: resolved\n- caller: src.synthesis.task-synthesis-materialize.normalizeAcceptanceCriteria\n callee: src.synthesis.task-synthesis-materialize.sortedUnique\n call_type: resolved\n- caller: src.synthesis.task-synthesis-contract.RAW_CONCLUSION_CONTRACT\n callee: src.synthesis.task-synthesis-contract.nonBlank\n call_type: resolved\n- caller: src.synthesis.task-synthesis-contract.RAW_CONCLUSION_CONTRACT\n callee: src.synthesis.task-synthesis-contract.taskIds\n call_type: resolved\n- caller: src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT\n callee: src.synthesis.task-synthesis-contract.nonBlank\n call_type: resolved\n- caller: src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT\n callee: src.synthesis.task-synthesis-contract.taskStrings\n call_type: resolved\n- caller: src.synthesis.task-synthesis-contract.RAW_PROPOSAL_CONTRACT\n callee: src.synthesis.task-synthesis-contract.taskIds\n call_type: resolved\n- caller: src.synthesis.code-change-plan.generatedAt\n callee: src.synthesis.code-change-plan.createCodeChangeSourcePatch\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusions\n callee: src.synthesis.code-change-plan.collectTarget\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusions\n callee: src.synthesis.code-change-plan.buildChanges\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusions\n callee: src.synthesis.code-change-plan.deterministicGeneration\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusions\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusions\n callee: src.synthesis.code-change-plan.titleFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusions\n callee: src.synthesis.code-change-plan.descriptionFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposals\n callee: src.synthesis.code-change-plan.collectTarget\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposals\n callee: src.synthesis.code-change-plan.buildChanges\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposals\n callee: src.synthesis.code-change-plan.deterministicGeneration\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposals\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposals\n callee: src.synthesis.code-change-plan.titleFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposals\n callee: src.synthesis.code-change-plan.descriptionFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.recordsById\n callee: src.synthesis.code-change-plan.collectTarget\n call_type: resolved\n- caller: src.synthesis.code-change-plan.recordsById\n callee: src.synthesis.code-change-plan.buildChanges\n call_type: resolved\n- caller: src.synthesis.code-change-plan.recordsById\n callee: src.synthesis.code-change-plan.deterministicGeneration\n call_type: resolved\n- caller: src.synthesis.code-change-plan.recordsById\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.recordsById\n callee: src.synthesis.code-change-plan.titleFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.recordsById\n callee: src.synthesis.code-change-plan.descriptionFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposalsByDiagnostic\n callee: src.synthesis.code-change-plan.collectTarget\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposalsByDiagnostic\n callee: src.synthesis.code-change-plan.buildChanges\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposalsByDiagnostic\n callee: src.synthesis.code-change-plan.deterministicGeneration\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposalsByDiagnostic\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposalsByDiagnostic\n callee: src.synthesis.code-change-plan.titleFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.proposalsByDiagnostic\n callee: src.synthesis.code-change-plan.descriptionFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic\n callee: src.synthesis.code-change-plan.collectTarget\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic\n callee: src.synthesis.code-change-plan.buildChanges\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic\n callee: src.synthesis.code-change-plan.deterministicGeneration\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic\n callee: src.synthesis.code-change-plan.titleFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.conclusionsByDiagnostic\n callee: src.synthesis.code-change-plan.descriptionFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.candidates\n callee: src.synthesis.code-change-plan.collectTarget\n call_type: resolved\n- caller: src.synthesis.code-change-plan.candidates\n callee: src.synthesis.code-change-plan.buildChanges\n call_type: resolved\n- caller: src.synthesis.code-change-plan.candidates\n callee: src.synthesis.code-change-plan.deterministicGeneration\n call_type: resolved\n- caller: src.synthesis.code-change-plan.candidates\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.candidates\n callee: src.synthesis.code-change-plan.titleFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.candidates\n callee: src.synthesis.code-change-plan.descriptionFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.relatedRecords\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.matchingProposals\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.matchingConclusions\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.target\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.changes\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.planHash\n callee: src.synthesis.code-change-plan.confidenceFor\n call_type: resolved\n- caller: src.synthesis.code-change-plan.planIds\n callee: src.synthesis.code-change-plan.evaluateCodeChangeAcceptance\n call_type: resolved\n- caller: src.synthesis.code-change-plan.acceptances\n callee: src.synthesis.code-change-plan.evaluateCodeChangeAcceptance\n call_type: resolved\n- caller: src.synthesis.code-change-plan.acceptedCount\n callee: src.synthesis.code-change-plan.deterministicGeneration\n call_type: resolved\n- caller: src.synthesis.code-change-plan.indexProposalsByDiagnostic\n callee: src.synthesis.code-change-plan.set\n call_type: resolved\n- caller: src.synthesis.code-change-plan.index\n callee: src.synthesis.code-change-plan.set\n call_type: resolved\n- caller: src.synthesis.code-change-plan.indexConclusionsByDiagnostic\n callee: src.synthesis.code-change-plan.set\n call_type: resolved\n- caller: src.synthesis.code-change-plan.paths\n callee: src.synthesis.code-change-plan.exactSourcePatchKeys\n call_type: resolved\n- caller: src.synthesis.code-change-plan.paths\n callee: src.synthesis.code-change-plan.assertSourcePatchStrings\n call_type: resolved\n- caller: src.synthesis.code-change-plan.paths\n callee: src.synthesis.code-change-plan.normalizeUnifiedDiff\n call_type: resolved\n- caller: src.synthesis.code-change-plan.buildChanges\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.titleFor\n callee: src.synthesis.code-change-plan.startsWithImperative\n call_type: resolved\n- caller: src.synthesis.code-change-plan.record\n callee: src.synthesis.code-change-plan.startsWithImperative\n call_type: resolved\n- caller: src.synthesis.code-change-plan.object\n callee: src.synthesis.code-change-plan.startsWithImperative\n call_type: resolved\n- caller: src.synthesis.code-change-plan.acceptanceCriteriaFor\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.riskFor\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.rollbackFor\n callee: src.synthesis.code-change-plan.uniqueSorted\n call_type: resolved\n- caller: src.synthesis.code-change-plan.createCodeChangeReviewPatch\n callee: src.synthesis.code-change-plan.priorityRank\n call_type: resolved\n- caller: src.synthesis.code-change-plan.markdown\n callee: src.synthesis.code-change-plan.deterministicGeneration\n call_type: resolved\n- caller: src.synthesis.code-change-plan.renderCodeChangeReviewMarkdown\n callee: src.synthesis.code-change-pla\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 2976 func | 118f | 2026-08-01\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan.ts\n WHY: 1310L, 10 classes, max CC=47\n EFFORT: ~4h IMPACT: 61570\n\n [2] !! SPLIT src/core/schema.ts\n WHY: 922L, 4 classes, max CC=23\n EFFORT: ~4h IMPACT: 21206\n\n [3] !! SPLIT-FUNC executeAction CC=83 fan=65\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5395\n\n [4] !! SPLIT-FUNC root CC=83 fan=64\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5312\n\n [5] !! SPLIT-FUNC main CC=95 fan=44\n WHY: CC=95 exceeds 15\n EFFORT: ~1h IMPACT: 4180\n\n [6] !! SPLIT-FUNC extractCommunicationIntent CC=76 fan=43\n WHY: CC=76 exceeds 15\n EFFORT: ~1h IMPACT: 3268\n\n [7] !! SPLIT-FUNC runPipeline CC=53 fan=54\n WHY: CC=53 exceeds 15\n EFFORT: ~1h IMPACT: 2862\n\n [8] !! SPLIT-FUNC identityRegistry CC=72 fan=37\n WHY: CC=72 exceeds 15\n EFFORT: ~1h IMPACT: 2664\n\n [9] !! SPLIT-FUNC communicationFiles CC=72 fan=37\n WHY: CC=72 exceeds 15\n EFFORT: ~1h IMPACT: 2664\n\n [10] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan.ts may break 127 import paths\n ⚠ Splitting src/core/schema.ts may break 124 import paths\n\nMETRICS-TARGET:\n CC̄: 4.0 → ≤2.8\n max-CC: 95 → ≤20\n god-modules: 19 → 0\n high-CC(≥15): 109 → ≤54\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n (first run — no previous data)\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "136.2KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 262f 45160L | json:32,yml:2,md:52,typescript:117,python:15,toml:2,rust:7,php:4,go:6,javascript:15,shell:6,txt:1,java:1 | 2026-08-01\n# generated in 0.03s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3285 func | 0 cls | 262 mod | CC̄=4.0 | critical:120 | cycles:0\n# alerts[5]: CC main=95; CC assertOperationPlan=84; CC executeAction=83; CC root=83; CC extractCommunicationIntent=76\n# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=54; main fan=44; extractTypeScriptFile fan=44\n# evolution: baseline\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[262]:\n CHANGELOG.md,670\n CONTRIBUTION.md,37\n Dockerfile,45\n Makefile,129\n README.md,871\n TASK.md,10\n TODO.md,391\n adapters/tensorflow/package.json,10\n compose.e2e.yml,27\n docker-compose.yml,18\n docs/ARCHITECTURE.md,200\n docs/CLI_GUIDE.md,328\n docs/CODE_CHANGE_PLANS.md,173\n docs/DEMOLLM.md,175\n docs/DSL.md,457\n docs/E2E.md,52\n docs/GROK-PLAN.md,269\n docs/OPTIMIZATION.md,249\n docs/PIPELINE_DSL_NL.md,464\n docs/PROTOCOLS.md,124\n docs/READINESS.md,442\n docs/REQUIREMENTS.md,39\n docs/SECURITY.md,50\n docs/SUBACTOR_OPERATION_DSL.md,33\n docs/SYSTEM_MONITOROWANIA_INTENCJI_I_PRACY_AGENTOW.md,872\n docs/TEAM_COMMUNICATION.md,268\n docs/TEST_REPORT.md,587\n docs/VALIDATION.md,198\n docs/intent-guard-diagrams/ALL_DIAGRAMS.md,410\n docs/intent-guard-diagrams/README.md,22\n docs/reference/original-monitoring-design.md,872\n evaluation/gold/README.md,87\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/CHANGELOG.md,11\n examples/TODO.md,7\n examples/backend/CHANGELOG.md,11\n examples/backend/README.md,46\n examples/backend/TODO.md,8\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/task.md,18\n examples/backend/tsconfig.json,14\n examples/docs/ARCHITECTURE.md,9\n examples/frontend/CHANGELOG.md,11\n examples/frontend/README.md,35\n examples/frontend/TODO.md,7\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/task.md,17\n examples/frontend/tsconfig.json,15\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n examples/task.md,9\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n package.json,48\n php/ast_extract.php,233\n prompts/communication-to-intent.system.md,7\n prompts/docs-to-intent.system.md,23\n prompts/markdown-to-intent.system.md,5\n prompts/nl-to-intent.system.md,15\n prompts/summarize.system.md,51\n prompts/tasks-from-dsl.system.md,52\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,34\n scripts/package.py,25\n scripts/research/README.md,27\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/README.md,107\n sdk/go/README.md,20\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/README.md,21\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/README.md,68\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/README.md,24\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/README.md,23\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,28\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,827\n src/communication/analyzer.ts,542\n src/communication/identity.ts,100\n src/communication/llm.ts,514\n src/comparison/workspace.ts,327\n src/config/env.ts,227\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,177\n src/core/record.ts,172\n src/core/schema.ts,922\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,491\n src/core/types.ts,673\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,609\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,166\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,422\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,304\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,180\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,458\n src/extractors/markdown-paths.ts,122\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,316\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,361\n src/graph/diff.ts,235\n src/graph/linker.ts,489\n src/graph/symbol-resolution.ts,120\n src/interfaces/a2a.ts,320\n src/interfaces/a2a-card.ts,169\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,184\n src/interfaces/a2a-task-store.ts,513\n src/interfaces/a2a-types.ts,160\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,307\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,602\n src/sdk/typescript.ts,172\n src/semantic/reranker.ts,509\n src/semantic/reranker-llm.ts,210\n src/semantic/reranker-response.ts,42\n src/services/actions.ts,700\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,204\n src/synthesis/code-change-plan.ts,1310\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,96\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,48\n tsconfig.json,23\nD:\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,files,records,graph,graphFile,graph,graphFile,graph,diagnosticsPath,diagnostics,result,out,graphPath,diagnosticsPath,output,result,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,patch,audit,receipt,actor,approvalHash,result,graphPath,diagnosticsPath,output,result,plansPath,patch,audit,result,inputPath,output,isPlanSet,result,patchPath,actor,approvalHash,receipt,result,planPath,beforeGraphPath,afterGraphPath,output,result,inputPath,beforeGraphPath,afterGraphPath,output,result,root,result,root,result,handleWatch,root,taskFile,controller,stop,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,beforeFile,afterFile,diff,context,maxRows,beforeFile,afterFile,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,file,inline,result,result,result,result,result,result,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n files()\n records()\n graph()\n graphFile()\n graph()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n graphPath()\n diagnosticsPath()\n output()\n result()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n graphPath()\n diagnosticsPath()\n output()\n result()\n plansPath()\n patch()\n audit()\n result()\n inputPath()\n output()\n isPlanSet()\n result()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n root()\n result()\n root()\n result()\n handleWatch()\n root()\n taskFile()\n controller()\n stop()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n beforeFile()\n afterFile()\n diff()\n context()\n maxRows()\n beforeFile()\n afterFile()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n file()\n inline()\n result()\n result()\n result()\n result()\n result()\n result()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,participant,role,ticket,communicationOnly,records,isCommunication,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n executeAction()\n root()\n file()\n text()\n analysis()\n records()\n graph()\n graph()\n diagnostics()\n graph()\n diagnostics()\n result()\n output()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n planSet()\n review()\n patchPath()\n auditPath()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n patch()\n receiptPath()\n result()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n beforePath()\n afterPath()\n diff()\n result()\n graph()\n diagnostics()\n view()\n filterCommunicationGraph()\n participant()\n role()\n ticket()\n communicationOnly()\n records()\n isCommunication()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/extractors/communication.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/security.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationExtractionOptions,CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,relativeToProject,parts,pathTicket,envelope,inferred,explicitEnvelope,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,timestamp,declaredGitAuthors,gitAuthors,declaredA2aAgentId,explicitPaths,explicitSymbols,segments,segmentType,semantics,classified,action,line,resolveIdentity,sameStrings,normalize,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governance,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,isCommunicationNoise,normalized,governanceSectionType,normalized,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,semanticsFor,first,listValue,stripped,unquote,validTimestamp,parsed\n CommunicationExtractionOptions:\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n extractCommunicationIntent()\n root()\n projectRoot()\n files()\n identityRegistry()\n communicationFiles()\n relativeToProject()\n parts()\n pathTicket()\n envelope()\n inferred()\n explicitEnvelope()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n declaredA2aAgentId()\n explicitPaths()\n explicitSymbols()\n segments()\n segmentType()\n semantics()\n classified()\n action()\n line()\n resolveIdentity()\n sameStrings()\n normalize()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governance()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n semanticsFor()\n first()\n listValue()\n stripped()\n unquote()\n validTimestamp()\n parsed()\n src/interfaces/a2a-message.ts:\n i: ../services/actions.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/web/diff-ui.ts:\n e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs\n diffUiHtml()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/synthesis/code-change-plan.ts:\n i: ../core/io.js,../core/security.js,../core/target.js,../graph/diagnostics.js,../version.js,./code-change-path.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n CreateCodeChangeReviewOptions:\n CreatedCodeChangeReview:\n CreateCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n PreparedSourceEdit:\n IMPLEMENTATION_DIAGNOSTIC_CODES()\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n conclusions()\n proposals()\n recordsById()\n proposalsByDiagnostic()\n conclusionsByDiagnostic()\n candidates()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n generation()\n planHash()\n createRepositoryPathProbe()\n base()\n absolute()\n implementationDiagnosticRank()\n evaluateCodeChangeAcceptance()\n afterDiagnostics()\n beforeIds()\n afterById()\n targeted()\n clearedDiagnosticIds()\n remainingDiagnosticIds()\n newBlockingDiagnosticIds()\n accepted()\n evaluatedAt()\n closeCodeChanges()\n evaluatedAt()\n afterDiagnostics()\n planIds()\n acceptances()\n acceptedCount()\n indexProposalsByDiagnostic()\n index()\n list()\n indexConclusionsByDiagnostic()\n index()\n list()\n collectTarget()\n paths()\n symbols()\n tickets()\n versions()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n titleFor()\n record()\n object()\n startsWithImperative()\n descriptionFor()\n acceptanceCriteriaFor()\n priorityFor()\n confidenceFor()\n riskFor()\n level()\n rollbackFor()\n deterministicGeneration()\n uniqueSorted()\n createCodeChangeReviewPatch()\n createdAt()\n markdown()\n renderCodeChangeReviewMarkdown()\n symbols()\n assertCodeChangeReviewPatch()\n artifact()\n generation()\n priorityRank()\n inline()\n renderIds()\n createCodeChangeSourcePatch()\n plan()\n graphFingerprint()\n createdAt()\n allowed()\n diffs()\n normalized()\n path()\n rawDiff()\n unifiedDiff()\n patchHash()\n createCodeChangeSourcePatchSet()\n generatedAt()\n assertCodeChangeSourcePatch()\n patch()\n paths()\n path()\n expectedHash()\n allowed()\n expectedChanges()\n editPath()\n assertCodeChangeSourcePatchSet()\n set()\n plansById()\n patchIds()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n instructionFor()\n symbols()\n criteria()\n normalizeUnifiedDiff()\n normalized()\n path()\n bare()\n stripped()\n applyCodeChangeSourcePatch()\n root()\n receiptPath()\n existing()\n relative()\n absolute()\n exists()\n before()\n after()\n now()\n fileHashesAfter()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n expectedPaths()\n hashPaths()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n normalizedDiff()\n baseLines()\n diffLines()\n cursor()\n oldIndex()\n oldCount()\n newCount()\n mark()\n body()\n splitKeep()\n lines()\n src/extractors/ast/typescript.ts:\n i: ../../core/io.js,../../core/record.js,../../core/types.js,./records.js,node:path,typescript\n e: extractTypeScriptFile,relative,sourceFile,moduleCapabilities,lineRange,excerpt,add,symbol,nameOf,modifiers,visit,symbol,symbolModifiers,declarationIsCallable,callee,capabilities,isTopLevel,scriptKind,extension,languageName,extension\n extractTypeScriptFile()\n relative()\n sourceFile()\n moduleCapabilities()\n lineRange()\n excerpt()\n add()\n symbol()\n nameOf()\n modifiers()\n visit()\n symbol()\n symbolModifiers()\n declarationIsCallable()\n callee()\n capabilities()\n isTopLevel()\n scriptKind()\n extension()\n languageName()\n extension()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: diagnoseGraph,neighbors,recordsById,groundedImplementation,implementedPaths,documentedPaths,symbolResolutionIndex,related,evidenced,hasLocationOnlyEvidence,missingFields,symbolIssues,detail,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n diagnoseGraph()\n neighbors()\n recordsById()\n groundedImplementation()\n implementedPaths()\n documentedPaths()\n symbolResolutionIndex()\n related()\n evidenced()\n hasLocationOnlyEvidence()\n missingFields()\n symbolIssues()\n detail()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n lowerBasename()\n dot()\n ext()\n isUsefulCodeChangePath()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,classifyActionHeuristically,conventional,prose,searchable,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n classifyActionHeuristically()\n conventional()\n prose()\n searchable()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n result()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,registryPath,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n registryPath()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n src/semantic/reranker.ts:\n i: ../core/id.js,../core/schema.js,../core/types.js,../version.js\n e: SemanticRetrievalIdentity,SemanticCandidate,SemanticCandidateSet,SemanticCandidateInput,SemanticRetrievalInput,SemanticEvidenceCitation,SemanticRerankDecisionInput,SemanticRerankDecision,SemanticRerankGeneration,SemanticRerankResult,SemanticRerankGenerationInput,createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,values,expectedHash,createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,validateRetrieval,validateGeneration,validateVerdictReason,assertSemanticVerdictReason,allowed,reasons,assertGroundedQuote,quote,boundedScore,roundedConfidence,requiredText,validDate,comparePair\n SemanticRetrievalIdentity:\n SemanticCandidate:\n SemanticCandidateSet:\n SemanticCandidateInput:\n SemanticRetrievalInput:\n SemanticEvidenceCitation:\n SemanticRerankDecisionInput:\n SemanticRerankDecision:\n SemanticRerankGeneration:\n SemanticRerankResult:\n SemanticRerankGenerationInput:\n createSemanticCandidateSet()\n grouped()\n values()\n assertSemanticCandidateSet()\n records()\n seenIds()\n seenPairs()\n byDeclaration()\n declaration()\n module()\n values()\n expectedHash()\n createSemanticRerankResult()\n decisions()\n assertSemanticRerankResult()\n candidates()\n records()\n seenDecisions()\n acceptedDeclarations()\n candidate()\n citations()\n record()\n expectedHash()\n applyAcceptedSemanticRelations()\n candidates()\n added()\n candidate()\n validateRetrieval()\n validateGeneration()\n validateVerdictReason()\n assertSemanticVerdictReason()\n allowed()\n reasons()\n assertGroundedQuote()\n quote()\n boundedScore()\n roundedConfidence()\n requiredText()\n validDate()\n comparePair()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/semantic/reranker-llm.ts:\n i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util\n e: SemanticRerankerOptions,SemanticRerankerRequiredError\n SemanticRerankerOptions:\n SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1)\n src/core/schema.ts:\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,ACTIONS,MODALITIES,POLARITIES,LIFECYCLES,SOURCE_KINDS,EPISTEMIC_CLASSES,RELATION_TYPES,CONCLUSION_KINDS,DIAGNOSTIC_SEVERITIES,TODO_PRIORITIES,GENERATION_REQUESTED_MODES,GENERATION_EFFECTIVE_MODES,CODE_CHANGE_ACTIONS,CODE_CHANGE_RISK_LEVELS,assertIntentRecord,record,statement,target,lifecycle,source,lines,epistemic,metadata,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertConclusion,known,assertConclusions,known,ids,id,assertTodoProposal,known,assertTodoProposals,known,proposalIds,id,assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertPlanGraphFingerprint,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertConclusionValue,conclusion,expectedId,assertTodoProposalValue,proposal,target,expectedId,assertGroundedGenerationMetadata,generation,validateGroundedContext,report,diagnosticIds,diagnostic,validateTodoProposalContext,known,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,assertRelation,relation,objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n ACTIONS()\n MODALITIES()\n POLARITIES()\n LIFECYCLES()\n SOURCE_KINDS()\n EPISTEMIC_CLASSES()\n RELATION_TYPES()\n CONCLUSION_KINDS()\n DIAGNOSTIC_SEVERITIES()\n TODO_PRIORITIES()\n GENERATION_REQUESTED_MODES()\n GENERATION_EFFECTIVE_MODES()\n CODE_CHANGE_ACTIONS()\n CODE_CHANGE_RISK_LEVELS()\n assertIntentRecord()\n record()\n statement()\n target()\n lifecycle()\n source()\n lines()\n epistemic()\n metadata()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertConclusion()\n known()\n assertConclusions()\n known()\n ids()\n id()\n assertTodoProposal()\n known()\n assertTodoProposals()\n known()\n proposalIds()\n id()\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertPlanGraphFingerprint()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertConclusionValue()\n conclusion()\n expectedId()\n assertTodoProposalValue()\n proposal()\n target()\n expectedId()\n assertGroundedGenerationMetadata()\n generation()\n validateGroundedContext()\n report()\n diagnosticIds()\n diagnostic()\n validateTodoProposalContext()\n known()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n assertRelation()\n relation()\n objectValue()\n exactKeys()\n expectedSet()\n missing()\n extra()\n nonEmptyString()\n nonBlankString()\n nullableString()\n enumValue()\n stringArray()\n nonEmptyUniqueStringArray()\n repositoryPath()\n normalized()\n exactStringSet()\n uniqueIdArray()\n nonEmptyUniqueIdArray()\n knownReferences()\n unknown()\n confidence()\n assertAcyclicProposalDependencies()\n byId()\n visiting()\n visited()\n visit()\n start()\n dateString()\n nullableDate()\n fingerprint()\n nonNegativeInteger()\n countMap()\n map()\n countRecords()\n key()\n exactCounts()\n actual()\n isJsonValue()\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/extractors/markdown-llm.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./markdown.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,AuditedMarkdownExtractionResult,MarkdownLlmRequiredError,MarkdownAttemptError,CoveredBatch,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n AuditedMarkdownExtractionResult:\n MarkdownLlmRequiredError: super(-1),extractMarkdownIntentAudited(-1),startedAt(-1),deterministic(-1),client(-1),prompt(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),failure(-1),failedResponses(-1)\n MarkdownAttemptError: super(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n CoveredBatch:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/graph/linker.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js,./symbol-resolution.js\n e: PairEvidence,RecordKeywords,DirectedRelation,SourceRelationRule,indexKeywords,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,isSuppressedConfigurationPair,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,resolvedNlAstSymbol,capabilityOverlap,objectSimilarity,sharedTopics,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation,intersects,set,intersectsAliases,set,countBy,key\n PairEvidence:\n RecordKeywords:\n DirectedRelation:\n SourceRelationRule:\n indexKeywords()\n jaccard()\n intersection()\n linkIntentRecords()\n records()\n byId()\n keywordIndex()\n symbolResolutionIndex()\n candidatePairs()\n resolvableBasenames()\n left()\n right()\n evidence()\n directed()\n deduplicateRecords()\n byId()\n existing()\n collectCandidatePairs()\n buckets()\n astIds()\n moduleAstIds()\n declarationAstIds()\n configurationIds()\n isModuleTopicSource()\n indexTargetBuckets()\n indexAliases()\n indexKeywordBuckets()\n indexTopicBuckets()\n addToBucket()\n values()\n isSuppressedConfigurationPair()\n pairsFromBuckets()\n output()\n leftId()\n rightId()\n isSuppressedAstPair()\n leftAst()\n rightAst()\n astId()\n indexResolvableBasenames()\n owners()\n normalized()\n basename()\n paths()\n pathsIntersect()\n expand()\n output()\n aliases()\n full()\n leftSet()\n scorePair()\n score()\n leftKeywords()\n rightKeywords()\n resolvedNlAstSymbol()\n capabilityOverlap()\n objectSimilarity()\n sharedTopics()\n intersectionSize()\n size()\n isFileAggregateEvidencePair()\n isModuleTopicEvidencePair()\n determineRelation()\n textScore()\n sourceRelation()\n relationForSourceKinds()\n relation()\n matchSourceRule()\n orientRelation()\n intersects()\n set()\n intersectsAliases()\n set()\n countBy()\n key()\n src/extractors/nl-llm.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./nl.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,AuditedNlExtractionResult,NlLlmRequiredError,NlAttemptError\n RawNlRecord:\n NlResponse:\n AuditedNlExtractionResult:\n NlLlmRequiredError: super(-1),extractNlIntentAudited(-1),assertNlExtractionOptions(-1),startedAt(-1),result(-1),client(-1),absolute(-1),body(-1),sourcePath(-1),maxLine(-1),prompt(-1),response(-1),records(-1),failure(-1),responses(-1)\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failedAudit(-1),deterministic(-1),markDeterministic(-1),toIntentRecord(-1),start(-1),end(-1),lines(-1),excerpt(-1),action(-1),normalizedText(-1),statementText(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),audit(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),readPrompt(-1),promptPath(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,fenceMatch,marker,language,record,heading,level,title,bullet,block,record,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n fenceMatch()\n marker()\n language()\n record()\n heading()\n level()\n title()\n bullet()\n block()\n record()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,withRecordGeneration,generationMetadata,used,extractorIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n withRecordGeneration()\n generationMetadata()\n used()\n extractorIdentity()\n separator()\n clamp()\n sourcePrefix()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/tf/classifier.ts:\n i: ../config/env.js,../core/text.js,../core/types.js,node:fs,node:path,node:url\n e: TfTensor,TfModel,TfModule,ModelAssets,dynamicImport,importer,loadAssets,directory,vocabularyPath,labels,loadClassifier,modelPath,modulePath,moduleValue,absolute,model,assets,vectorize,values,index,classifyAction,fallback,loaded,vector,input,predictionValue,prediction,probabilities,bestIndex,action,confidence\n TfTensor:\n TfModel:\n TfModule:\n ModelAssets:\n dynamicImport()\n importer()\n loadAssets()\n directory()\n vocabularyPath()\n labels()\n loadClassifier()\n modelPath()\n modulePath()\n moduleValue()\n absolute()\n model()\n assets()\n vectorize()\n values()\n index()\n classifyAction()\n fallback()\n loaded()\n vector()\n input()\n predictionValue()\n prediction()\n probabilities()\n bestIndex()\n action()\n confidence()\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,base,seen,directory,absolute,matches\n MarkdownPathResolver:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n base()\n seen()\n directory()\n absolute()\n matches()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n src/graph/symbol-resolution.ts:\n i: ../core/target.js,../core/types.js\n e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,values,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration\n AstSymbolCandidate:\n NlSymbolResolution:\n SymbolResolutionIndex:\n buildSymbolResolutionIndex()\n byAlias()\n values()\n byNlRecord()\n hasResolvedNlAstSymbolPair()\n nl()\n ast()\n resolveSymbol()\n matched()\n selected()\n paths()\n pathSelects()\n normalized()\n candidatePath()\n uniquePaths()\n isAstDeclaration()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n ignored()\n extensions()\n maxFiles()\n matcher()\n base()\n visit()\n entries()\n absolute()\n relative()\n extension()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,execFileAsync,extractGitIntent,root,count,inside,message,commit,changedFiles,stats,diff,classified,inferredSymbols,docOnly,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n execFileAsync()\n extractGitIntent()\n root()\n count()\n inside()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n docOnly()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/communication/llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawCommunicationEnrichment,RawParticipantSynthesis,RawCommunicationResponse,ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError,ParticipantGroup\n RawCommunicationEnrichment:\n RawParticipantSynthesis:\n RawCommunicationResponse:\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1),participantGroups(-1),grouped(-1),participant(-1),role(-1),key(-1),values(-1),promptPayload(-1),validateEnrichments(-1),expected(-1),output(-1),materializeSyntheses(-1),byKey(-1),seen(-1),output(-1),group(-1),permitted(-1),recordIds(-1),enrichRecord(-1),deterministicSyntheses(-1),synthesis(-1),markDeterministic(-1),marked(-1),deterministicGeneration(-1),fallbackGeneration(-1),llmGeneration(-1),audit(-1),roleOf(-1),sortedUnique(-1),readPrompt(-1),promptPath(-1),communicationStrings(-1),COMMUNICATION_ENRICHMENT_CONTRACT(-1),PARTICIPANT_SYNTHESIS_CONTRACT(-1),COMMUNICATION_RESPONSE_CONTRACT(-1)\n ParticipantGroup:\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,currentTaskState,completeTask,message,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageToken,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskStore()\n removeTemporaryFile()\n prepareTask()\n key()\n indexedTask()\n taskForMessage()\n indexedTaskId()\n task()\n continueTask()\n existing()\n continuationError()\n message()\n createTask()\n taskId()\n contextId()\n executeMessage()\n command()\n result()\n currentTaskState()\n completeTask()\n message()\n failTask()\n message()\n agentMessage()\n listTasks()\n contextId()\n status()\n pageSize()\n historyLength()\n includeArtifacts()\n statusTimestampAfter()\n filter()\n filtered()\n pageToken()\n start()\n page()\n last()\n filteredTasks()\n compareTasksByUpdate()\n timestampOrder()\n indexAfterCursor()\n exact()\n cursorTime()\n next()\n taskTime()\n encodeCursor()\n decodeCursor()\n decoded()\n taskView()\n effectiveHistoryLength()\n history()\n cloneArtifact()\n ownedTask()\n task()\n messageKey()\n errorMessage()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n sdk/python/examples/basic.py:\n e: main\n main()\n sdk/php/src/Client.php:\n e: Client\n Client:\n scripts/verify-workflow-yaml.mjs:\n i: node:fs,node:path\n e: explicit,files,body,seen,match,key,previous,workflowFiles,directory\n explicit()\n files()\n body()\n seen()\n match()\n key()\n previous()\n workflowFiles()\n directory()\n scripts/research/audit-changelog-sample.mjs:\n i: node:child_process,node:fs,node:path\n e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,classification,labelCounts,labelRepositories,stratifiedSample,groups,values,added,record,targetClass,target,classify,text,file,exactFileUpdate,match,candidate,basename,pathOwners,file,countBy,item,readJson,parseArgs,value,index,limitIndex,limit,intentDirectoryIndex,intentDirectory\n options()\n entries()\n root()\n latest()\n runDirectory()\n diagnostics()\n graph()\n recordsById()\n findings()\n selected()\n trackedFiles()\n classification()\n labelCounts()\n labelRepositories()\n stratifiedSample()\n groups()\n values()\n added()\n record()\n targetClass()\n target()\n classify()\n text()\n file()\n exactFileUpdate()\n match()\n candidate()\n basename()\n pathOwners()\n file()\n countBy()\n item()\n readJson()\n parseArgs()\n value()\n index()\n limitIndex()\n limit()\n intentDirectoryIndex()\n intentDirectory()\n src/summary/summarizer.ts:\n i: ../config/env.js,../core/grounding.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./payload.js,./render.js,node:fs,node:path,node:url\n e: SummaryResult,SummaryOptions,RawConclusion,RawSummaryResponse,SummaryAttemptError,summarizeGraph,mode,conclusions,client,conclusions,systemPrompt,payload,failure,responses,conclusions,SUMMARY_CONCLUSION_CONTRACT,SUMMARY_RESPONSE_CONTRACT\n SummaryResult:\n SummaryOptions:\n RawConclusion:\n RawSummaryResponse:\n SummaryAttemptError: super(-1),summarizeWithCorrection(-1),conclusions(-1),generationMetadata(-1),message(-1),materializeConclusions(-1),parsed(-1),conclusions(-1),diagnosticIds(-1),assertConclusions(-1),deterministicConclusions(-1),conclusions(-1),assertConclusions(-1),generationMetadata(-1),effectiveMode(-1),degraded(-1),configuration(-1),summaryMode(-1),sortedUnique(-1),readPrompt(-1),promptPath(-1)\n summarizeGraph()\n mode()\n conclusions()\n client()\n conclusions()\n systemPrompt()\n payload()\n failure()\n responses()\n conclusions()\n SUMMARY_CONCLUSION_CONTRACT()\n SUMMARY_RESPONSE_CONTRACT()\n src/summary/render.ts:\n i: ../core/types.js\n e: renderSummaryMarkdown,plans,git,moduleFacts,facts,releases,communication,actions,compareConclusions,renderRecords,confidence,renderConclusion,confidence,recordCitations\n renderSummaryMarkdown()\n plans()\n git()\n moduleFacts()\n facts()\n releases()\n communication()\n actions()\n compareConclusions()\n renderRecords()\n confidence()\n renderConclusion()\n confidence()\n recordCitations()\n src/operations/compile-cli.ts:\n i: ./artifact.js\n e: argumentsByName,key,value,allowed,unknown,main,args\n argumentsByName()\n key()\n value()\n allowed()\n unknown()\n main()\n args()\n src/llm/structured-schema.ts:\n i: ../core/types.js\n e: StructuredSchema,StructuredResponseError,StringOptions,NumberOptions,ArrayOptions\n StructuredSchema:\n StructuredResponseError: super(-1),schema(-1),parse(-1),string(-1),pattern(-1),fail(-1),fail(-1),nullableString(-1),base(-1),number(-1),fail(-1),checkNumberBounds(-1),integer(-1),numeric(-1),parsed(-1),enumValue(-1),allowed(-1),fail(-1),array(-1),fail(-1),fail(-1),parsed(-1),identities(-1),object(-1),keys(-1),allowed(-1),fail(-1),candidate(-1),unknown(-1),missing(-1),checkNumberBounds(-1),fail(-1),fail(-1),jsonIdentity(-1),record(-1),describe(-1),fail(-1)\n StringOptions:\n NumberOptions:\n ArrayOptions:\n src/interfaces/a2a-types.ts:\n i: ../services/actions.js\n e: JsonRpcRequest,A2APart,A2AMessage,A2AArtifact,A2ATask,St\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "191.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.17s\nschema: code2llm.planfile_tickets.v1\nproject_root: \ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.cli.main (CC=95)'\n description: 'code2llm reports `src.cli.main` at `src/cli.ts:53` with cyclomatic\n complexity 95 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/cli.ts\n dedupe_key: code2llm:cc:src/cli.ts:src.cli.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:51` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:58`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:57`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:53`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)'\n description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:440`\n with cyclomatic complexity 34 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)'\n description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:441`\n with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.ast.typescript.extractTypeScriptFile\n (CC=43)'\n description: 'code2llm reports `src.extractors.ast.typescript.extractTypeScriptFile`\n at `src/extractors/ast/typescript.ts:11` with cyclomatic complexity 43 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/ast/typescript.ts\n dedupe_key: code2llm:cc:src/extractors/ast/typescript.ts:src.extractors.ast.typescript.extractTypeScriptFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.ast.typescript.visit (CC=25)'\n description: 'code2llm reports `src.extractors.ast.typescript.visit` at `src/extractors/ast/typescript.ts:77`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/ast/typescript.ts\n dedupe_key: code2llm:cc:src/extractors/ast/typescript.ts:src.extractors.ast.typescript.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication.communicationFiles\n (CC=72)'\n description: 'code2llm reports `src.extractors.communication.communicationFiles`\n at `src/extractors/communication.ts:74` with cyclomatic complexity 72 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.communicationFiles\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication.extractCommunicationIntent\n (CC=76)'\n description: 'code2llm reports `src.extractors.communication.extractCommunicationIntent`\n at `src/extractors/communication.ts:54` with cyclomatic complexity 76 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.extractCommunicationIntent\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication.identityRegistry\n (CC=72)'\n description: 'code2llm reports `src.extractors.communication.identityRegistry` at\n `src/extractors/communication.ts:69` with cyclomatic complexity 72 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.identityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.diagnoseGraph (CC=40)'\n description: 'code2llm reports `src.graph.diagnostics.diagnoseGraph` at `src/graph/diagnostics.ts:16`\n with cyclomatic complexity 40 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.diagnoseGraph\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.documentedPaths (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.documentedPaths` at `src/graph/diagnostics.ts:23`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.documentedPaths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.groundedImplementation\n (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.groundedImplementation` at\n `src/graph/diagnostics.ts:21` with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.groundedImplementation\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.implementedPaths (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.implementedPaths` at `src/graph/diagnostics.ts:22`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.implementedPaths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.neighbors (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.neighbors` at `src/graph/diagnostics.ts:19`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.neighbors\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.recordsById (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.recordsById` at `src/graph/diagnostics.ts:20`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.recordsById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.symbolResolutionIndex\n (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.symbolResolutionIndex` at\n `src/graph/diagnostics.ts:24` with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.symbolResolutionIndex\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=57)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:41`\n with cyclomatic complexity 57 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=53)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:55`\n with cyclomatic complexity 53 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n (CC=25)'\n description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates`\n at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker-llm.ts\n dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.assertSemanticCandidateSet\n (CC=27)'\n description: 'code2llm reports `src.semantic.reranker.assertSemanticCandidateSet`\n at `src/semantic/reranker.ts:184` with cyclomatic complexity 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker.ts\n dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.assertSemanticCandidateSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)'\n description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)'\n description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS`\n at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES`\n at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES`\n at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS`\n at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES`\n at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath`\n at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.applyCodeChangeSourcePatch\n (CC=41)'\n description: 'code2llm reports `src.synthesis.code-change-plan.applyCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan.ts:1031` with cyclomatic complexity 41 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.applyCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.applyUnifiedDiffToText\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.applyUnifiedDiffToText`\n at `src/synthesis/code-change-plan.ts:1222` with cyclomatic complexity 47 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.applyUnifiedDiffToText\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.assertCodeChangeSourcePatch\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.assertCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan.ts:790` with cyclomatic complexity 47 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.assertCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.cursor (CC=25)'\n description: 'code2llm reports `src.synthesis.code-change-plan.cursor` at `src/synthesis/code-change-plan.ts:1256`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.cursor\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)'\n description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1`\n with cyclomatic complexity 52 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml\n- signal: code2llm_god\n title: 'Split god module: src/communication/llm.ts'\n description: 'code2llm reports `src/communication/llm.ts` as a large module (514\n lines, 8 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/communication/llm.ts\n dedupe_key: code2llm:god:src/communication/llm.ts\n- signal: code2llm_god\n title: 'Split god module: src/core/schema.ts'\n description: 'code2llm reports `src/core/schema.ts` as a large module (922 lines,\n 4 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/core/schema.ts\n dedupe_key: code2llm:god:src/core/schema.ts\n- signal: code2llm_god\n title: 'Split god module: src/core/types.ts'\n description: 'code2llm reports `src/core/types.ts` as a large module (673 lines,\n 41 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/core/types.ts\n dedupe_key: code2llm:god:src/core/types.ts\n- signal: code2llm_god\n title: 'Split god module: src/semantic/reranker.ts'\n description: 'code2llm reports `src/semantic/reranker.ts` as a large module (509\n lines, 11 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/semantic/reranker.ts\n dedupe_key: code2llm:god:src/semantic/reranker.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan.ts` as a large module\n (1310 lines, 10 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (152 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.core.schema'\n description: 'code2llm reports `God Module: src.core.schema` in `src/core/schema.ts:1`.\n\n\n Module ''src.core.schema'' is too large (151 functions, 4 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:1:God Module: src.core.schema'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.core.types'\n description: 'code2llm reports `God Module: src.core.types` in `src/core/types.ts:1`.\n\n\n Module ''src.core.types'' is too large (0 functions, 41 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/types.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/types.ts:1:God Module: src.core.types'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan` in `src/synthesis/code-change-plan.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan'' is too large (148 functions, 10 classes).\n Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:1:God\n Module: src.synthesis.code-change-plan'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.cli.handleDiff (CC=24)'\n description: 'code2llm reports `src.cli.handleDiff` at `src/cli.ts:428` with cyclomatic\n complexity 24 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/cli.ts\n dedupe_key: code2llm:cc:src/cli.ts:src.cli.handleDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.cli.handleExtract (CC=16)'\n description: 'code2llm reports `src.cli.handleExtract` at `src/cli.ts:518` with\n cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/cli.ts\n dedupe_key: code2llm:cc:src/cli.ts:src.cli.handleExtract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)'\n description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/io.ts\n dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.buildRecord (CC=18)'\n description: 'code2llm reports `src.core.record.buildRecord` at `src/core/record.ts:57`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.buildRecord\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=15)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:125`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.schema.assertGroundedGenerationMetadata\n (CC=23)'\n description: 'code2llm reports `src.core.schema.assertGroundedGenerationMetadata`\n at `src/core/schema.ts:533` with cyclomatic complexity 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/schema.ts\n dedupe_key: code2llm:cc:src/core/schema.ts:src.core.schema.assertGroundedGenerationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.schema.assertIntentRecord (CC=23)'\n description: 'code2llm reports `src.core.schema.assertIntentRecord` at `src/core/schema.ts:74`\n with cyclomatic complexity 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/schema.ts\n dedupe_key: code2llm:cc:src/core/schema.ts:src.core.schema.assertIntentRecord\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.STOP_WORDS (CC=17)'\n description: 'code2llm reports `src.core.text.STOP_WORDS` at `src/core/text.ts:30`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.STOP_WORDS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.classifyActionHeuristically\n (CC=17)'\n description: 'code2llm reports `src.core.text.classifyActionHeuristically` at `src/core/text.ts:40`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.classifyActionHeuristically\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:493`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:439`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication.inferIdentity\n (CC=15)'\n description: 'code2llm reports `src.extractors.communication.inferIdentity` at `src/extractors/communication.ts:244`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.inferIdentity\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.docs-deterministic.convertDocument\n (CC=18)'\n description: 'code2llm reports `src.extractors.docs-deterministic.convertDocument`\n at `src/extractors/docs-deterministic.ts:100` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/docs-deterministic.ts\n dedupe_key: code2llm:cc:src/extractors/docs-deterministic.ts:src.extractors.docs-deterministic.convertDocument\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.docs-deterministic.lines (CC=17)'\n description: 'code2llm reports `src.extractors.docs-deterministic.lines` at `src/extractors/docs-deterministic.ts:102`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/docs-deterministic.ts\n dedupe_key: code2llm:cc:src/extractors/docs-deterministic.ts:src.extractors.docs-deterministic.lines\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.docs-deterministic.relative\n (CC=17)'\n description: 'code2llm reports `src.extractors.docs-deterministic.relative` at `src/extractors/docs-deterministic.ts:101`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/docs-deterministic.ts\n dedupe_key: code2llm:cc:src/extractors/docs-deterministic.ts:src.extractors.docs-deterministic.relative\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n (CC=19)'\n description: 'code2llm reports `src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited`\n at `src/extractors/markdown-llm.ts:55` with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: code2llm:cc:src/extractors/markdown-llm.ts:src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.markdown-paths.base (CC=16)'\n description: 'code2llm reports `src.extractors.markdown-paths.base` at `src/extractors/markdown-paths.ts:86`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: code2llm:cc:src/extractors/markdown-paths.ts:src.extractors.markdown-paths.base\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.markdown-paths.buildBasenameIndex\n (CC=17)'\n description: 'code2llm reports `src.extractors.markdown-paths.buildBasenameIndex`\n at `src/extractors/markdown-paths.ts:84` with cyclomatic complexity 17 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: code2llm:cc:src/extractors/markdown-paths.ts:src.extractors.markdown-paths.buildBasenameIndex\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.markdown-paths.index (CC=16)'\n description: 'code2llm reports `src.extractors.markdown-paths.index` at `src/extractors/markdown-paths.ts:85`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: code2llm:cc:src/extractors/markdown-paths.ts:src.extractors.markdown-paths.index\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.markdown-paths.seen (CC=16)'\n description: 'code2llm reports `src.extractors.markdown-paths.seen` at `src/extractors/markdown-paths.ts:88`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: code2llm:cc:src/extractors/markdown-paths.ts:src.extractors.markdown-paths.seen\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n (CC=18)'\n description: 'code2llm reports `src.extractors.nl-llm.NlAttemptError.toIntentRecord`\n at `src/extractors/nl-llm.ts:175` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/nl-llm.ts\n dedupe_key: code2llm:cc:src/extractors/nl-llm.ts:src.extractors.nl-llm.NlAttemptError.toIntentRecord\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.linker.scorePair (CC=18)'\n description: 'code2llm reports `src.graph.linker.scorePair` at `src/graph/linker.ts:342`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/linker.ts\n dedupe_key: code2llm:cc:src/graph/linker.ts:src.graph.linker.scorePair\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.symbol-resolution.buildSymbolResolutionIndex\n (CC=15)'\n description: 'code2llm reports `src.graph.symbol-resolution.buildSymbolResolutionIndex`\n at `src/graph/symbol-resolution.ts:22` with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/symbol-resolution.ts\n dedupe_key: code2llm:cc:src/graph/symbol-resolution.ts:src.graph.symbol-resolution.buildSymbolResolutionIndex\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:497`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.acceptedDeclarations\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.acceptedDeclarations` at `src/semantic/reranker.ts:328`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker.ts\n dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.acceptedDeclarations\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.assertSemanticRerankResult\n (CC=21)'\n description: 'code2llm reports `src.semantic.reranker.assertSemanticRerankResult`\n at `src/semantic/reranker.ts:311` with cyclomatic complexity 21 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker.ts\n dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.assertSemanticRerankResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.records (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.records` at `src/semantic/reranker.ts:326`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker.ts\n dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.seenDecisions (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.seenDecisions` at `src/semantic/reranker.ts:327`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker.ts\n dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.seenDecisions\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.filterCommunicationGraph\n (CC=17)'\n description: 'code2llm reports `src.services.actions.filterCommunicationGraph` at\n `src/services/actions.ts:511` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.filterCommunicationGraph\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.assertCodeChangeReviewPatch\n (CC=23)'\n description: 'code2llm reports `src.synthesis.code-change-plan.assertCodeChangeReviewPatch`\n at `src/synthesis/code-change-plan.ts:626` with cyclomatic complexity 23 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.assertCodeChangeReviewPatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet\n (CC=18)'\n description: 'code2llm reports `src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet`\n at `src/synthesis/code-change-plan.ts:896` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.normalizeUnifiedDiff\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.normalizeUnifiedDiff`\n at `src/synthesis/code-change-plan.ts:983` with cyclomatic complexity 17 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.normalizeUnifiedDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.paths (CC=16)'\n description: 'code2llm reports `src.synthesis.code-change-plan.paths` at `src/synthesis/code-change-plan.ts:830`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.paths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.proposeCodeChangePlans\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.proposeCodeChangePlans`\n at `src/synthesis/code-change-plan.ts:109` with cyclomatic complexity 17 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.proposeCodeChangePlans\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.tf.classifier.classifyAction (CC=17)'\n description: 'code2llm reports `src.tf.classifier.classifyAction` at `src/tf/classifier.ts:69`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/tf/classifier.ts\n dedupe_key: code2llm:cc:src/tf/classifier.ts:src.tf.classifier.classifyAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo'\n description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self,\n todo` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n root, markdown_mode, changelog, self, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo'\n description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self,\n todo` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n root, markdown_mode, changelog, self, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, excludes, patterns'\n description: 'code2llm reports `Data Clump: self, root, excludes, patterns` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (self, root, excludes, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n self, root, excludes, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, excludes, patterns'\n description: 'code2llm reports `Data Clump: self, root, excludes, patterns` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (self, root, excludes, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n self, root, excludes, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, nl_mode, file'\n description: 'code2llm reports `Data Clump: self, root, nl_mode, file` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (self, root, nl_mode, file) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n self, root, nl_mode, file'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, nl_mode, file'\n description: 'code2llm reports `Data Clump: self, root, nl_mode, file` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (self, root, nl_mode, file) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n self, root, nl_mode, file'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_INDEXED_FILES'\n description: 'code2llm reports `God Function: MAX_INDEXED_FILES` in `src/extractors/markdown-paths.ts:31`.\n\n\n Function ''MAX_INDEXED_FILES'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:31:God\n Function: MAX_INDEXED_FILES'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:343`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:343:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_SEARCH_EXCLUDES'\n description: 'code2llm reports `God Function: PATH_SEARCH_EXCLUDES` in `src/extractors/markdown-paths.ts:25`.\n\n\n Function ''PATH_SEARCH_EXCLUDES'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:25:God\n Function: PATH_SEARCH_EXCLUDES'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: add'\n description: 'code2llm reports `God Function: add` in `src/extractors/ast/typescript.ts:29`.\n\n\n Function ''add'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/typescript.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/typescript.ts:29:God\n Function: add'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker.ts:372`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker.ts:372:God Function:\n applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema.ts:853`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:853:God Function: assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema.ts:408`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:408:God Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema.ts:462`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:462:God Function: assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema.ts:194`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:194:God Function: assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema.ts:223`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:223:God Function: assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertSourceApplyReceipt'\n description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan.ts:1180`.\n\n\n Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:1180:God\n Function: assertSourceApplyReceipt'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema.ts:489`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:489:God Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: base'\n description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`.\n\n\n Function ''base'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local t\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3285 func | 152f | 45160L | typescript | 2026-08-01\n# generated in 0.00s\n\nHEALTH:\n CC̄=4.0 critical=276 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded main = 95 (limit:15)\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded executeAction = 83 (limit:15)\n !!! cc_exceeded root = 83 (limit:15)\n !!! cc_exceeded extractCommunicationIntent = 76 (limit:15)\n !!! cc_exceeded identityRegistry = 72 (limit:15)\n !!! cc_exceeded communicationFiles = 72 (limit:15)\n !!! high_fan_out executeAction = 65 (limit:10)\n !!! high_fan_out root = 64 (limit:10)\n !!! cc_exceeded parseCommand = 57 (limit:15)\n\nMODULES[262] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/synthesis/code-change-plan.ts] 1310L C:10 F:127 CC↑47 D:6 (typescript)\n M[src/core/schema.ts] 922L C:4 F:124 CC↑23 D:0 (typescript)\n M[docs/SYSTEM_MONITOROWANIA_INTENCJI_I_PRACY_AGENTOW.md] 872L C:0 F:0 CC↑0 D:0 (md)\n M[docs/reference/original-monitoring-design.md] 872L C:0 F:0 CC↑0 D:0 (md)\n M[README.md] 871L C:0 F:0 CC↑0 D:0 (md)\n M[src/cli.ts] 827L C:1 F:83 CC↑95 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/services/actions.ts] 700L C:0 F:74 CC↑83 D:0 (typescript)\n M[src/core/types.ts] 673L C:41 F:0 CC↑0 D:0 (typescript)\n M[CHANGELOG.md] 670L C:0 F:0 CC↑0 D:0 (md)\n M[src/diff/reality.ts] 609L C:3 F:73 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 602L C:1 F:64 CC↑53 D:0 (typescript)\n M[docs/TEST_REPORT.md] 587L C:0 F:0 CC↑0 D:0 (md)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n LANGS: typescript:117/md:52/json:32/javascript:15/python:15/rust:7/go:6/shell:6/php:4/other:2/yml:2/toml:2/java:1/txt:1\n\nHOTSPOTS[10]:\n ★ executeAction fan=65 // Orchestrates 65 calls\n ★ root fan=64 // Orchestrates 64 calls\n ★ runPipeline fan=54 // Orchestrates 54 calls\n ★ main fan=44 // Orchestrates 44 calls\n ★ extractTypeScriptFile fan=44 // Orchestrates 44 calls\n\nREFACTOR[15]:\n [1] H/L Split main (CC=95)\n [2] H/L Split diffUiHtml (CC=52)\n [3] H/L Split assertCodeChangeSourcePatch (CC=47)\n [4] H/L Split applyCodeChangeSourcePatch (CC=41)\n [5] H/L Split applyUnifiedDiffToText (CC=47)\n\nEVOLUTION:\n 2026-08-01 CC̄=4.0 crit=276 45160L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: \n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; + const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "78.4KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.6KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "12.7KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3586 \n**Total Classes**: 367 \n**Modules**: 246 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "35.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 138, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3586\n- **Total Classes**: 367\n- **Modules**: 246\n- **Entry Points**: 2560\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 195\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.synthesis.code-change-plan.implementation\n- **Functions**: 148\n- **Classes**: 10\n- **File**: `implementation.ts`\n\n### src.services.actions\n- **Functions**: 113\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.extractors.communication\n- **Functions**: 80\n- **Classes**: 5\n- **File**: `communication.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.graph.linker\n- **Functions**: 75\n- **Classes**: 4\n- **File**: `linker.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.core.text\n- **Functions**: 56\n- **File**: `text.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.communication.llm.implementation\n- **Functions**: 55\n- **Classes**: 8\n- **File**: `implementation.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### src.services.actions.executeAction\n- **Calls**: src.services.actions.resolveRoot, src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent\n\n### src.services.actions.root\n- **Calls**: src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent, src.services.actions.extractMarkdownIntentAudited\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### src.extractors.ast.typescript.extractTypeScriptFile\n- **Calls**: src.extractors.ast.typescript.relativePosix, src.extractors.ast.typescript.createSourceFile, src.extractors.ast.typescript.scriptKind, src.extractors.ast.typescript.getLineAndCharacterOfPosition, src.extractors.ast.typescript.getStart, src.extractors.ast.typescript.getEnd, src.extractors.ast.typescript.getText, src.extractors.ast.typescript.slice\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.web.diff-ui.diffUiHtml\n- **Calls**: src.web.diff-ui.gradient, src.web.diff-ui.min, src.web.diff-ui.clamp, src.web.diff-ui.not, src.web.diff-ui.media, src.web.diff-ui.token, src.web.diff-ui.getElementById, src.web.diff-ui.byId\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- **Calls**: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.implementation.trim, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.resolve, src.synthesis.code-change-plan.implementation.assertPathWithinRoot, src.synthesis.code-change-plan.implementation.ensureDir, src.synthesis.code-change-plan.implementation.dirname, src.synthesis.code-change-plan.implementation.open\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- **Calls**: src.synthesis.code-change-plan.implementation.assertIntentGraph, src.synthesis.code-change-plan.implementation.assertConclusions, src.synthesis.code-change-plan.implementation.Date, src.synthesis.code-change-plan.implementation.toISOString, src.synthesis.code-change-plan.implementation.isNaN, src.synthesis.code-change-plan.implementation.parse, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.isInteger\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### src.graph.diagnostics.diagnoseGraph\n- **Calls**: src.graph.diagnostics.Date, src.graph.diagnostics.toISOString, src.graph.diagnostics.assertIntentGraph, src.graph.diagnostics.buildNeighbors, src.graph.diagnostics.Map, src.graph.diagnostics.map, src.graph.diagnostics.indexGroundedImplementationEvidence, src.graph.diagnostics.indexImplementedPaths\n\n### src.core.text.inferObject\n- **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.core.text.normalized\n- **Calls**: src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa, src.core.text.napraw, src.core.text.popraw\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.CommunicationAttemptError.audit, src.communication.llm.implementation.CommunicationAttemptError.markDeterministic, src.communication.llm.implementation.CommunicationAttemptError.deterministicSyntheses, src.communication.llm.implementation.CommunicationAttemptError.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.audit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n- **Calls**: src.extractors.markdown-llm.now, src.extractors.markdown-llm.extractMarkdownIntent, src.extractors.markdown-llm.MarkdownAttemptError.stageAudit, src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic, src.extractors.markdown-llm.OpenRouterClient, src.extractors.markdown-llm.isConfigured, src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow, src.extractors.markdown-llm.MarkdownAttemptError.readPrompt\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: executeAction\n```\nexecuteAction [src.services.actions]\n └─> resolveRoot\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 2: root\n```\nroot [src.services.actions]\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 3: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 4: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 5: extractTypeScriptFile\n```\nextractTypeScriptFile [src.extractors.ast.typescript]\n```\n\n### Flow 6: diffUiHtml\n```\ndiffUiHtml [src.web.diff-ui]\n```\n\n### Flow 7: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 8: applyCodeChangeSourcePatch\n```\napplyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation]\n └─> assertCodeChangeSourcePatch\n```\n\n### Flow 9: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 10: proposeCodeChangePlans\n```\nproposeCodeChangePlans [src.synthesis.code-change-plan.implementation]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.communication.llm.implementation.CommunicationAttemptError\n- **Methods**: 40\n- **Key Methods**: src.communication.llm.implementation.CommunicationAttemptError.super, src.communication.llm.implementation.CommunicationAttemptError.enrichWithCorrection, src.communication.llm.implementation.CommunicationAttemptError.completion, src.communication.llm.implementation.CommunicationAttemptError.fallbackOrThrow, src.communication.llm.implementation.CommunicationAttemptError.failed, src.communication.llm.implementation.CommunicationAttemptError.marked, src.communication.llm.implementation.CommunicationAttemptError.participantGroups, src.communication.llm.implementation.CommunicationAttemptError.grouped, src.communication.llm.implementation.CommunicationAttemptError.participant, src.communication.llm.implementation.CommunicationAttemptError.role\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.nl-llm.NlAttemptError\n- **Methods**: 31\n- **Key Methods**: src.extractors.nl-llm.NlAttemptError.super, src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm.NlAttemptError.completion, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow, src.extractors.nl-llm.NlAttemptError.failedAudit, src.extractors.nl-llm.NlAttemptError.deterministic, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.toIntentRecord, src.extractors.nl-llm.NlAttemptError.lines, src.extractors.nl-llm.NlAttemptError.action\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 29\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.extractors.markdown-llm.MarkdownAttemptError\n- **Methods**: 24\n- **Key Methods**: src.extractors.markdown-llm.MarkdownAttemptError.super, src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering, src.extractors.markdown-llm.MarkdownAttemptError.metadataByRecord, src.extractors.markdown-llm.MarkdownAttemptError.uncovered, src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch, src.extractors.markdown-llm.MarkdownAttemptError.half, src.extractors.markdown-llm.MarkdownAttemptError.emptyCoverage, src.extractors.markdown-llm.MarkdownAttemptError.enrichMarkdownBatchWithCorrection, src.extractors.markdown-llm.MarkdownAttemptError.completion, src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.extractors.markdown-llm.MarkdownLlmRequiredError\n- **Methods**: 13\n- **Key Methods**: src.extractors.markdown-llm.MarkdownLlmRequiredError.super, src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited, src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt, src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic, src.extractors.markdown-llm.MarkdownLlmRequiredError.client, src.extractors.markdown-llm.MarkdownLlmRequiredError.prompt, src.extractors.markdown-llm.MarkdownLlmRequiredError.enrichments, src.extractors.markdown-llm.MarkdownLlmRequiredError.responseByRecord, src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes, src.extractors.markdown-llm.MarkdownLlmRequiredError.corrected\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.communication.parseEnvelope\n- **Output to**: src.extractors.communication.split, src.extractors.communication.trim, src.extractors.communication.slice, src.extractors.communication.findIndex, src.extractors.communication.match\n\n### src.extractors.communication.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.markdown-llm.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm.isArray, src.extractors.markdown-llm.Error, src.extractors.markdown-llm.Set, src.extractors.markdown-llm.map, src.extractors.markdown-llm.has\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n### src.core.schema.conclusions.validateTodoProposalContext\n- **Output to**: src.core.schema.conclusions.validateGroundedContext, src.core.schema.conclusions.assertConclusions, src.core.schema.conclusions.Set, src.core.schema.conclusions.map\n\n### src.web.diff-ui.formatBytes\n- **Output to**: src.web.diff-ui.selectedRun, src.web.diff-ui.byId\n\n### src.semantic.reranker.validation.validateRetrieval\n- **Output to**: src.semantic.reranker.validation.requiredText, src.semantic.reranker.validation.test, src.semantic.reranker.validation.Error\n\n### src.semantic.reranker.validation.validateGeneration\n- **Output to**: src.semantic.reranker.validation.Error, src.semantic.reranker.validation.requiredText, src.semantic.reranker.validation.test\n\n### src.semantic.reranker.validation.validateVerdictReason\n- **Output to**: src.semantic.reranker.validation.Set, src.semantic.reranker.validation.has, src.semantic.reranker.validation.Error\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `src.services.actions.executeAction` - 65 calls\n- `src.services.actions.root` - 64 calls\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `src.extractors.ast.typescript.extractTypeScriptFile` - 44 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.web.diff-ui.diffUiHtml` - 42 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `src.graph.diagnostics.diagnoseGraph` - 32 calls\n- `src.core.text.inferObject` - 31 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.core.text.normalized` - 29 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.extractors.ast.typescript.visit` - 26 calls\n- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `src.extractors.communication.extractCommunicationFile` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited` - 21 calls\n- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n executeAction --> resolveRoot\n executeAction --> scopedPath\n executeAction --> extractNlIntentAudit\n executeAction --> nlModeValue\n executeAction --> extractGitIntent\n root --> scopedPath\n root --> extractNlIntentAudit\n root --> nlModeValue\n root --> extractGitIntent\n root --> numberValue\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n extractTypeScriptFil --> relativePosix\n extractTypeScriptFil --> createSourceFile\n extractTypeScriptFil --> scriptKind\n extractTypeScriptFil --> getLineAndCharacterO\n extractTypeScriptFil --> getStart\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n diffUiHtml --> gradient\n diffUiHtml --> min\n diffUiHtml --> clamp\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "74.9KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__event["event"]\n examples__backend__src__validation__agent["agent"]\n examples__backend__src__server__store["store"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__limit["limit"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__server__server["server"]\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__server__offset["offset"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__app__state["state"]\n examples__frontend__src__app__createState["createState"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__refresh["refresh"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n end\n subgraph src__extractors\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__todo__relative["relative"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__communication__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__markdown_llm__MarkdownAttemptError__stageAudit["stageAudit"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__nl_llm__NlLlmRequiredError__body["body"]\n src__extractors__communication__declaredParticipantId["declaredParticipantId"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__ast__typescript__declarationIsCallable["declarationIsCallable"]\n src__extractors__nl_llm__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__nl_llm__NlLlmRequiredError__prompt["prompt"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__communication__item["item"]\n src__extractors__communication__envelope["envelope"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__nl_llm__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__configuration__files["files"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__communication__participant["participant"]\n src__extractors__docs_record__action["action"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__nl_llm__NlLlmRequiredError__sourcePath["sourcePath"]\n src__extractors__nl_llm__NlAttemptError__action["action"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__nl__action["action"]\n src__extractors__communication__declaredRole["declaredRole"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__docs_record__target["target"]\n src__extractors__communication__match["match"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__communication__parseEnvelope["parseEnvelope"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__nl_llm__NlAttemptError__lines["lines"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__nl_llm__NlAttemptError__clampLine["clampLine"]\n src__extractors__nl_llm__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__communication__fileParts["fileParts"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__nl_llm__NlLlmRequiredError__result["result"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__nl_llm__NlAttemptError__markDeterministic["markDeterministic"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__git__count["count"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__ast__typescript__add["add"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__communication__communicationFiles["communicationFiles"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__communication__nestedRole["nestedRole"]\n src__extractors__nl_llm__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__communication__extractCommunicationIntent["extractCommunicationIntent"]\n src__extractors__nl__classified["classified"]\n src__extractors__nl_llm__NlLlmRequiredError__startedAt["startedAt"]\n src__extractors__todo__match["match"]\n src__extractors__markdown_llm__MarkdownAttemptError__failed["failed"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__communication__flush["flush"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__ast__records__start["start"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__communication__sameStrings["sameStrings"]\n src__extractors__configuration__pair["pair"]\n src__extractors__nl_llm__NlLlmRequiredError__absolute["absolute"]\n src__extractors__ast__typescript__symbol["symbol"]\n src__extractors__todo__checked["checked"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__ast__typescript__languageName["languageName"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__communication__normalizeType["normalizeType"]\n src__extractors__ast__typescript__isTopLevel["isTopLevel"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__ast__typescript__visit["visit"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__git__runGit["runGit"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__communication__normalize["normalize"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__changelog__lines["lines"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__communication__identity["identity"]\n src__extractors__nl_llm__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__git__state["state"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__configuration__lines["lines"]\n src__extractors__todo__heading["heading"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt["startedAt"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__nl_llm__NlLlmRequiredError__maxLine["maxLine"]\n src__extractors__nl_llm__NlAttemptError__statementText["statementText"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__todo__body["body"]\n src__extractors__communication__raw["raw"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__communication__nestedParticipant["nestedParticipant"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__todo__block["block"]\n src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__changelog__relative["relative"]\n src__extractors__nl__object["object"]\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__nl__missing["missing"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__ast__typescript__lineRange["lineRange"]\n src__extractors__git__root["root"]\n src__extractors__todo__raw["raw"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__communication__unquote["unquote"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__ast__typescript__modifiers["modifiers"]\n src__extractors__configuration__entries["entries"]\n src__extractors__nl_llm__NlAttemptError__failedAudit["failedAudit"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__ast__external__result["result"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__ast__typescript__callee["callee"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__nl_llm__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__communication__inferred["inferred"]\n src__extractors__nl_llm__NlAttemptError__fallback["fallback"]\n src__extractors__communication__isCommunicationType["isCommunicationType"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__configuration__match["match"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__communication__explicitEnvelope["explicitEnvelope"]\n src__extractors__nl_llm__NlAttemptError__audit["audit"]\n src__extractors__todo__task["task"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__communication__listValue["listValue"]\n src__extractors__nl_llm__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__communication__first["first"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__communication__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__configuration__line["line"]\n src__extractors__communication__heading["heading"]\n src__extractors__ast__typescript__excerpt["excerpt"]\n src__extractors__configuration__heading["heading"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic["deterministic"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__markdown_llm__MarkdownAttemptError__readPrompt["readPrompt"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__git__readStats["readStats"]\n src__extractors__todo__action["action"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__communication__declaredParticipant["declaredParticipant"]\n src__extractors__git__result["result"]\n src__extractors__ast__typescript__symbolModifiers["symbolModifiers"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__communication__identityRegistry["identityRegistry"]\n src__extractors__nl__body["body"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__nl_llm__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__nl_llm__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__changelog__body["body"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__nl_llm__NlAttemptError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__markdown_llm__MarkdownAttemptError__strings["strings"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__markdown_llm__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic["markDeterministic"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__nl_llm__NlAttemptError__deterministic["deterministic"]\n src__extractors__docs_schema__target["target"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__todo__text["text"]\n src__extractors__configuration__relative["relative"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__nl_llm__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__configuration__entry["entry"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes["outcomes"]\n src__extractors__communication__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection["extractNlWithCorrection"]\n src__extractors__communication__inferIdentity["inferIdentity"]\n src__extractors__ast__typescript__capabilities["capabilities"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__communication__basename["basename"]\n src__extractors__communication__communicationSegments["communicationSegments"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__communication__extractCommunicationFile["extractCommunicationFile"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__todo__classified["classified"]\n src__extractors__todo__lines["lines"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n end\n subgraph src__graph\n src__graph__linker__jaccard["jaccard"]\n src__graph__linker__moduleAstIds["moduleAstIds"]\n src__graph__symbol_resolution__values["values"]\n src__graph__linker__indexAliases["indexAliases"]\n src__graph__diff__width["width"]\n src__graph__linker__candidatePairs["candidatePairs"]\n src__graph__diff__changedFieldPaths["changedFieldPaths"]\n src__graph__linker__buckets["buckets"]\n src__graph__diff__assertGraph["assertGraph"]\n src__graph__linker__isSuppressedConfigurationPair["isSuppressedConfigurationPair"]\n src__graph__linker__isSuppressedAstPair["isSuppressedAstPair"]\n src__graph__linker__keywordIndex["keywordIndex"]\n src__graph__symbol_resolution__pathSelects["pathSelects"]\n src__graph__symbol_resolution__byAlias["byAlias"]\n src__graph__linker__byId["byId"]\n src__graph__linker__scorePair["scorePair"]\n src__graph__diff__paired["paired"]\n src__graph__diff__left["left"]\n src__graph__linker__intersectsAliases["intersectsAliases"]\n src__graph__linker__deduplicateRecords["deduplicateRecords"]\n src__graph__linker__rightId["rightId"]\n src__graph__diff__relationKey["relationKey"]\n src__graph__diff__values["values"]\n src__graph__linker__linkIntentRecords["linkIntentRecords"]\n src__graph__diff__truncate["truncate"]\n src__graph__linker__astIds["astIds"]\n src__graph__linker__indexKeywords["indexKeywords"]\n src__graph__linker__indexTopicBuckets["indexTopicBuckets"]\n src__graph__diff__y["y"]\n src__graph__diff__recordIdentity["recordIdentity"]\n src__graph__diff__right["right"]\n src__graph__linker__determineRelation["determineRelation"]\n src__graph__diff__metricCard["metricCard"]\n src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"]\n src__graph__linker__configurationIds["configurationIds"]\n src__graph__linker__pathsIntersect["pathsIntersect"]\n src__graph__linker__owners["owners"]\n src__graph__symbol_resolution__selected["selected"]\n src__graph__linker__values["values"]\n src__graph__linker__score["score"]\n src__graph__diff__normalizeRecord["normalizeRecord"]\n src__graph__diff__groupRecords["groupRecords"]\n src__graph__symbol_resolution__resolveSymbol["resolveSymbol"]\n src__graph__linker__records["records"]\n src__graph__diff__diffIntentGraphs["diffIntentGraphs"]\n src__graph__linker__resolvableBasenames["resolvableBasenames"]\n src__graph__diff__afterRecord["afterRecord"]\n src__graph__linker__aliases["aliases"]\n src__graph__diff__visibleRows["visibleRows"]\n src__graph__linker__collectCandidatePairs["collectCandidatePairs"]\n src__graph__diff__renderGraphDiffSvg["renderGraphDiffSvg"]\n src__graph__diff__compareRelations["compareRelations"]\n src__graph__linker__leftId["leftId"]\n src__graph__symbol_resolution__byNlRecord["byNlRecord"]\n src__graph__diff__groups["groups"]\n src__graph__diff__beforeGroups["beforeGroups"]\n src__graph__linker__indexResolvableBasenames["indexResolvableBasenames"]\n src__graph__linker__isModuleTopicSource["isModuleTopicSource"]\n src__graph__symbol_resolution__buildSymbolResolutionIndex["buildSymbolResolutionIndex"]\n src__graph__linker__declarationAstIds["declarationAstIds"]\n src__graph__symbol_resolution__isAstDeclaration["isAstDeclaration"]\n src__graph__diff__afterGroups["afterGroups"]\n src__graph__linker__expand["expand"]\n src__graph__linker__isFileAggregateEvidencePair["isFileAggregateEvidencePair"]\n src__graph__linker__leftKeywords["leftKeywords"]\n src__graph__linker__set["set"]\n src__graph__diff__escapeXml["escapeXml"]\n src__graph__diff__isObject["isObject"]\n src__graph__diff__beforeRecord["beforeRecord"]\n src__graph__symbol_resolution__hasResolvedNlAstSymbolPair["hasResolvedNlAstSymbolPair"]\n src__graph__linker__indexKeywordBuckets["indexKeywordBuckets"]\n src__graph__symbol_resolution__uniquePaths["uniquePaths"]\n src__graph__linker__indexTargetBuckets["indexTargetBuckets"]\n src__graph__diff__height["height"]\n src__graph__linker__addToBucket["addToBucket"]\n src__graph__linker__pairsFromBuckets["pairsFromBuckets"]\n src__graph__linker__intersects["intersects"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__markDeterministic\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__markDeterministic\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__markDeterministic\n src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__markDeterministic\n src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__absolute --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlLlmRequiredError__body --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlLlmRequiredError__sourcePath --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlLlmRequiredError__maxLine --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlLlmRequiredError__prompt --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlAttemptError__failedAudit --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlAttemptError__deterministic --> src__extractors__nl_llm__NlAttemptError__fallback\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveAction\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__nonEmptyText\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveObject\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__allowedModality\n src__extractors__nl_llm__NlAttemptError__lines --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm__NlAttemptError__action --> src__extractors__nl_llm__NlAttemptError__resolveObject\n src__extractors__nl_llm__NlAttemptError__normalizedText --> src__extractors__nl_llm__NlAttemptError__resolveObject\n src__extractors__nl_llm__NlAttemptError__statementText --> src__extractors__nl_llm__NlAttemptError__allowedModality\n src__extractors__nl_llm__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm__NlAttemptError__clampLine\n src__extractors__nl_llm__NlAttemptError__resolveAction --> src__extractors__nl_llm__NlAttemptError__allowedAction\n src__extractors__nl_llm__NlAttemptError__isPlaceholder --> src__extractors__nl_llm__NlAttemptError__nonEmptyText\n src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__isPlaceholder\n src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__nonEmptyText\n src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm__NlAttemptError__nlStrings\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__communication__extractCommunicationIntent --> src__extractors__communication__extractCommunicationFile\n src__extractors__communication__identityRegistry --> src__extractors__communication__extractCommunicationFile\n src__extractors__communication__communicationFiles --> src__extractors__communication__extractCommunicationFile\n src__extractors__communication__extractCommunicationFile --> src__extractors__communication__parseEnvelope\n src__extractors__communication__extractCommunicationFile --> src__extractors__communication__inferIdentity\n src__extractors__communication__extractCommunicationFile --> src__extractors__communication__first\n src__extractors__communication__extractCommunicationFile --> src__extractors__communication__isTicketEvidenceFile\n src__extractors__communication__envelope --> src__extractors__communication__basename\n src__extractors__communication__inferred --> src__extractors__communication__basename\n src__extractors__communication__explicitEnvelope --> src__extractors__communication__basename\n src__extractors__communication__declaredParticipant --> src__extractors__communication__basename\n src__extractors__communication__declaredRole --> src__extractors__communication__basename\n src__extractors__communication__declaredParticipantId --> src__extractors__communication__basename\n src__extractors__communication__identity --> src__extractors__communication__basename\n src__extractors__communication__participant --> src__extractors__communication__basename\n src__extractors__communication__sameStrings --> src__extractors__communication__normalize\n src__extractors__communication__parseEnvelope --> src__extractors__communication__match\n src__extractors__communication__parseEnvelope --> src__extractors__communication__unquote\n src__extractors__communication__inferIdentity --> src__extractors__communication__basename\n src__extractors__communication__inferIdentity --> src__extractors__communication__match\n src__extractors__communication__inferIdentity --> src__extractors__communication__isCommunicationType\n src__extractors__communication__fileParts --> src__extractors__communication__isCommunicationType\n src__extractors__communication__nestedRoleIndex --> src__extractors__communication__isCommunicationType\n src__extractors__communication__nestedRole --> src__extractors__communication__isCommunicationType\n src__extractors__communication__nestedParticipant --> src__extractors__communication__isCommunicationType\n src__extractors__communication__isTicketEvidenceFile --> src__extractors__communication__basename\n src__extractors__communication__communicationSegments --> src__extractors__communication__isCommunicationNoise\n src__extractors__communication__communicationSegments --> src__extractors__communication__match\n src__extractors__communication__communicationSegments --> src__extractors__communication__flush\n src__extractors__communication__flush --> src__extractors__communication__isCommunicationNoise\n src__extractors__communication__item --> src__extractors__communication__isCommunicationNoise\n src__extractors__communication__raw --> src__extractors__communication__match\n src__extractors__communication__heading --> src__extractors__communication__match\n src__extractors__communication__normalizeType --> src__extractors__communication__isCommunicationType\n src__extractors__communication__listValue --> src__extractors__communication__unquote\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__readPrompt\n src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic\n src__extractors__markdown_llm__MarkdownAttemptError__failed --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm__MarkdownAttemptError__strings\n src__extractors__markdown_llm__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm__MarkdownAttemptError__strings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__add --> src__extractors__ast__typescript__lineRange\n src__extractors__ast__typescript__add --> src__extractors__ast__typescript__excerpt\n src__extractors__ast__typescript__add --> src__extractors__ast__typescript__languageName\n src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__modifiers\n src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__symbolModifiers --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__isTopLevel\n src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__callee --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__capabilities --> src__extractors__ast__typescript__add\n src__graph__diff__diffIntentGraphs --> src__graph__diff__assertGraph\n src__graph__diff__diffIntentGraphs --> src__graph__diff__groupRecords\n src__graph__diff__beforeGroups --> src__graph__diff__changedFieldPaths\n src__graph__diff__beforeGroups --> src__graph__diff__normalizeRecord\n src__graph__diff__afterGroups --> src__graph__diff__changedFieldPaths\n src__graph__diff__afterGroups --> src__graph__diff__normalizeRecord\n src__graph__diff__left --> src__graph__diff__changedFieldPaths\n src__graph__diff__left --> src__graph__diff__normalizeRecord\n src__graph__diff__right --> src__graph__diff__changedFieldPaths\n src__graph__diff__right --> src__graph__diff__normalizeRecord\n src__graph__diff__paired --> src__graph__diff__changedFieldPaths\n src__graph__diff__paired --> src__graph__diff__normalizeRecord\n src__graph__diff__beforeRecord --> src__graph__diff__changedFieldPaths\n src__graph__diff__beforeRecord --> src__graph__diff__normalizeRecord\n src__graph__diff__afterRecord --> src__graph__diff__changedFieldPaths\n src__graph__diff__afterRecord --> src__graph__diff__normalizeRecord\n src__graph__diff__renderGraphDiffSvg --> src__graph__diff__escapeXml\n src__graph__diff__renderGraphDiffSvg --> src__graph__diff__truncate\n src__graph__diff__visibleRows --> src__graph__diff__escapeXml\n src__graph__diff__visibleRows --> src__graph__diff__truncate\n src__graph__diff__width --> src__graph__diff__escapeXml\n src__graph__diff__width --> src__graph__diff__truncate\n src__graph__diff__height --> src__graph__diff__escapeXml\n src__graph__diff__height --> src__graph__diff__truncate\n src__graph__diff__y --> src__graph__diff__escapeXml\n src__graph__diff__y --> src__graph__diff__truncate\n src__graph__diff__groupRecords --> src__graph__diff__recordIdentity\n src__graph__diff__groupRecords --> src__graph__diff__values\n src__graph__diff__groups --> src__graph__diff__recordIdentity\n src__graph__diff__changedFieldPaths --> src__graph__diff__isObject\n src__graph__diff__compareRelations --> src__graph__diff__relationKey\n src__graph__diff__metricCard --> src__graph__diff__escapeXml\n src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__isAstDeclaration\n src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__values\n src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration\n src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol\n src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration\n src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects\n src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths\n src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths\n src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords\n src__graph__linker__linkIntentRecords --> src__graph__linker__indexKeywords\n src__graph__linker__records --> src__graph__linker__scorePair\n src__graph__linker__records --> src__graph__linker__determineRelation\n src__graph__linker__byId --> src__graph__linker__set\n src__graph__linker__keywordIndex --> src__graph__linker__scorePair\n src__graph__linker__keywordIndex --> src__graph__linker__determineRelation\n src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair\n src__graph__linker__symbolResolutionIndex --> src__graph__linker__determineRelation\n src__graph__linker__candidatePairs --> src__graph__linker__scorePair\n src__graph__linker__candidatePairs --> src__graph__linker__determineRelation\n src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair\n src__graph__linker__resolvableBasenames --> src__graph__linker__determineRelation\n src__graph__linker__deduplicateRecords --> src__graph__linker__set\n src__graph__linker__deduplicateRecords --> src__graph__linker__values\n src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTargetBuckets\n src__graph__linker__collectCandidatePairs --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__collectCandidatePairs --> src__graph__linker__isModuleTopicSource\n src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTopicBuckets\n src__graph__linker__collectCandidatePairs --> src__graph__linker__pairsFromBuckets\n src__graph__linker__buckets --> src__graph__linker__indexTargetBuckets\n src__graph__linker__buckets --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__buckets --> src__graph__linker__isModuleTopicSource\n src__graph__linker__buckets --> src__graph__linker__indexTopicBuckets\n src__graph__linker__astIds --> src__graph__linker__indexTargetBuckets\n src__graph__linker__astIds --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__astIds --> src__graph__linker__isModuleTopicSource\n src__graph__linker__astIds --> src__graph__linker__indexTopicBuckets\n src__graph__linker__moduleAstIds --> src__graph__linker__indexTargetBuckets\n src__graph__linker__moduleAstIds --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__moduleAstIds --> src__graph__linker__isModuleTopicSource\n src__graph__linker__moduleAstIds --> src__graph__linker__indexTopicBuckets\n src__graph__linker__declarationAstIds --> src__graph__linker__indexTargetBuckets\n src__graph__linker__declarationAstIds --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__declarationAstIds --> src__graph__linker__isModuleTopicSource\n src__graph__linker__declarationAstIds --> src__graph__linker__indexTopicBuckets\n src__graph__linker__configurationIds --> src__graph__linker__indexTargetBuckets\n src__graph__linker__configurationIds --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__configurationIds --> src__graph__linker__isModuleTopicSource\n src__graph__linker__configurationIds --> src__graph__linker__indexTopicBuckets\n src__graph__linker__indexTargetBuckets --> src__graph__linker__addToBucket\n src__graph__linker__indexTargetBuckets --> src__graph__linker__indexAliases\n src__graph__linker__indexAliases --> src__graph__linker__aliases\n src__graph__linker__indexAliases --> src__graph__linker__addToBucket\n src__graph__linker__indexKeywordBuckets --> src__graph__linker__addToBucket\n src__graph__linker__indexTopicBuckets --> src__graph__linker__addToBucket\n src__graph__linker__addToBucket --> src__graph__linker__set\n src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedAstPair\n src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedConfigurationPair\n src__graph__linker__pairsFromBuckets --> src__graph__linker__set\n src__graph__linker__leftId --> src__graph__linker__set\n src__graph__linker__rightId --> src__graph__linker__set\n src__graph__linker__indexResolvableBasenames --> src__graph__linker__set\n src__graph__linker__owners --> src__graph__linker__set\n src__graph__linker__pathsIntersect --> src__graph__linker__expand\n src__graph__linker__scorePair --> src__graph__linker__intersects\n src__graph__linker__scorePair --> src__graph__linker__intersectsAliases\n src__graph__linker__scorePair --> src__graph__linker__pathsIntersect\n src__graph__linker__scorePair --> src__graph__linker__isFileAggregateEvidencePair\n src__graph__linker__scorePair --> src__graph__linker__jaccard\n src__graph__linker__score --> src__graph__linker__intersects\n src__graph__linker__leftKeywords --> src__graph__linker__intersects\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>192 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>292 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+103 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2324 more"]\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [146KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [35KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "166.2KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "23.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 246f 39601L | typescript:138,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.26s\n# CC̅=3.8 | critical:110/3586 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/extractors/communication.ts = 515L, 5 classes, 76m, max CC=50\n 🔴 GOD src/synthesis/code-change-plan/implementation.ts = 1310L, 10 classes, 127m, max CC=47\n 🔴 GOD src/communication/llm/implementation.ts = 514L, 8 classes, 53m, max CC=12\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC extractCommunicationFile CC=50 (limit:15)\n 🟡 CC inferIdentity CC=15 (limit:15)\n 🟡 CC extractMarkdownIntentAudited CC=19 (limit:15)\n 🟡 CC extractTypeScriptFile CC=43 (limit:15)\n 🟡 CC visit CC=25 (limit:15)\n 🟡 CC buildSymbolResolutionIndex CC=15 (limit:15)\n 🟡 CC scorePair CC=18 (limit:15)\n 🟡 CC diagnoseGraph CC=40 (limit:15)\n 🟡 CC neighbors CC=35 (limit:15)\n 🟡 CC recordsById CC=35 (limit:15)\n 🟡 CC groundedImplementation CC=35 (limit:15)\n 🟡 CC implementedPaths CC=35 (limit:15)\n 🟡 CC documentedPaths CC=35 (limit:15)\n 🟡 CC symbolResolutionIndex CC=35 (limit:15)\n 🟡 CC executeAction CC=83 (limit:15)\n 🟡 CC root CC=83 (limit:15)\n\nREFACTOR[4]:\n 1. split src/extractors/communication.ts (god module)\n 2. split src/synthesis/code-change-plan/implementation.ts (god module)\n 3. split src/communication/llm/implementation.ts (god module)\n 4. split 17 high-CC methods (CC>15)\n\nPIPELINES[2043]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=4.0 ←in:0 →out:0\n │ !! implementation.ts 1310L 10C 127m CC=47 ←3\n │ !! cli.ts 908L 1C 118m CC=13 ←0\n │ !! actions.ts 700L 0C 74m CC=83 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! communication.ts 515L 5C 76m CC=50 ←0\n │ !! implementation.ts 514L 8C 53m CC=12 ←0\n │ !! text.ts 491L 0C 51m CC=34 ←0\n │ !! linker.ts 489L 4C 72m CC=18 ←3\n │ !! markdown-llm.ts 458L 6C 38m CC=19 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ !! diagnostics.ts 361L 0C 40m CC=40 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ nl-llm.ts 337L 5C 46m CC=12 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intent.ts 276L 4C 29m CC=23 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ !! result.ts 264L 0C 16m CC=21 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ intent.ts 258L 15C 0m CC=0.0 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ code-change.ts 221L 16C 0m CC=0.0 ←0\n │ !! utils.ts 219L 0C 38m CC=23 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ !! code-change-path.ts 204L 0C 14m CC=38 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! candidate.ts 200L 0C 13m CC=27 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ !! io.ts 177L 1C 32m CC=15 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ !! record.ts 172L 2C 9m CC=18 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ !! typescript.ts 166L 0C 19m CC=43 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ !! symbol-resolution.ts 120L 3C 16m CC=15 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ !! classifier.ts 96L 4C 27m CC=17 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ !! diff-ui.ts 48L 0C 9m CC=52 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.diff/ (fan-in=6)\n HUB: src.live/ (fan-in=7)\n HUB: src.synthesis/ (fan-in=5)\n SMELL: scripts.research/ fan-out=11 → split needed\n SMELL: sdk.python/ fan-out=8 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 426 | edges: 500 | modules: 29\n# CC̄=3.8\n\nHUBS[20]:\n src.extractors.ast.typescript.extractTypeScriptFile\n CC=43 in:0 out:44 total:44\n src.extractors.ast.typescript.visit\n CC=25 in:1 out:26 total:27\n src.extractors.communication.extractCommunicationFile\n CC=50 in:3 out:24 total:27\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.graph.linker.scorePair\n CC=18 in:6 out:16 total:22\n src.graph.linker.linkIntentRecords\n CC=5 in:0 out:22 total:22\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n CC=19 in:0 out:21 total:21\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.graph.diff.diffIntentGraphs\n CC=11 in:0 out:19 total:19\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [14 funcs]\n add CC=14 out:7\n callee CC=2 out:2\n capabilities CC=1 out:2\n declarationIsCallable CC=4 out:2\n excerpt CC=1 out:2\n extractTypeScriptFile CC=43 out:44\n isTopLevel CC=5 out:3\n languageName CC=2 out:3\n lineRange CC=1 out:3\n modifiers CC=4 out:4\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication [34 funcs]\n basename CC=1 out:0\n communicationFiles CC=3 out:2\n communicationSegments CC=14 out:12\n declaredParticipant CC=5 out:1\n declaredParticipantId CC=5 out:1\n declaredRole CC=5 out:1\n envelope CC=5 out:1\n explicitEnvelope CC=5 out:1\n extractCommunicationFile CC=50 out:24\n extractCommunicationIntent CC=7 out:10\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [17 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=8 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n failed CC=1 out:2\n fallbackOrThrow CC=2 out:5\n markDeterministic CC=2 out:2\n markdownResponseContract CC=1 out:7\n readPrompt CC=2 out:6\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [32 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n audit CC=1 out:1\n clampLine CC=1 out:3\n deterministic CC=1 out:1\n extractNlWithCorrection CC=1 out:0\n failedAudit CC=1 out:2\n fallback CC=2 out:0\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n src.graph.diff [26 funcs]\n afterGroups CC=7 out:6\n afterRecord CC=1 out:3\n assertGraph CC=3 out:3\n beforeGroups CC=7 out:6\n beforeRecord CC=1 out:3\n changedFieldPaths CC=6 out:6\n compareRelations CC=1 out:2\n diffIntentGraphs CC=11 out:19\n escapeXml CC=2 out:1\n groupRecords CC=4 out:6\n src.graph.linker [41 funcs]\n addToBucket CC=2 out:3\n aliases CC=3 out:3\n astIds CC=10 out:7\n buckets CC=10 out:7\n byId CC=4 out:2\n candidatePairs CC=5 out:7\n collectCandidatePairs CC=10 out:8\n configurationIds CC=10 out:7\n declarationAstIds CC=10 out:7\n deduplicateRecords CC=4 out:3\n src.graph.symbol-resolution [10 funcs]\n buildSymbolResolutionIndex CC=15 out:13\n byAlias CC=9 out:8\n byNlRecord CC=4 out:3\n hasResolvedNlAstSymbolPair CC=10 out:3\n isAstDeclaration CC=3 out:0\n pathSelects CC=3 out:5\n resolveSymbol CC=8 out:6\n selected CC=2 out:1\n uniquePaths CC=1 out:3\n values CC=2 out:0\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "255.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 426\n total_edges: 500\n modules_count: 29\nnodes:\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.communication.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication\n line: 351\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-llm.MarkdownAttemptError.stageAudit:\n name: stageAudit\n module: src.extractors.markdown-llm\n line: 411\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.graph.linker.jaccard:\n name: jaccard\n module: src.graph.linker\n line: 62\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 1\n src.graph.linker.moduleAstIds:\n name: moduleAstIds\n module: src.graph.linker\n line: 138\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm.NlLlmRequiredError.body:\n name: body\n module: src.extractors.nl-llm\n line: 79\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.symbol-resolution.values:\n name: values\n module: src.graph.symbol-resolution\n line: 33\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 1\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.extractors.communication.declaredParticipantId:\n name: declaredParticipantId\n module: src.extractors.communication\n line: 143\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.ast.typescript.declarationIsCallable:\n name: declarationIsCallable\n module: src.extractors.ast.typescript\n line: 110\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.graph.linker.indexAliases:\n name: indexAliases\n module: src.graph.linker\n line: 174\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm\n line: 244\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.graph.diff.width:\n name: width\n module: src.graph.diff\n line: 119\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.prompt:\n name: prompt\n module: src.extractors.nl-llm\n line: 84\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.linker.candidatePairs:\n name: candidatePairs\n module: src.graph.linker\n line: 79\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.graph.diff.changedFieldPaths:\n name: changedFieldPaths\n module: src.graph.diff\n line: 189\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 8\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n src.extractors.communication.item:\n name: item\n module: src.extractors.communication\n line: 407\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.graph.linker.buckets:\n name: buckets\n module: src.graph.linker\n line: 136\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n src.extractors.communication.envelope:\n name: envelope\n module: src.extractors.communication\n line: 127\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm\n line: 175\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 1\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.graph.diff.assertGraph:\n name: assertGraph\n module: src.graph.diff\n line: 155\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n src.extractors.communication.participant:\n name: participant\n module: src.extractors.communication\n line: 145\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.graph.linker.isSuppressedConfigurationPair:\n name: isSuppressedConfigurationPair\n module: src.graph.linker\n line: 225\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n src.extractors.nl-llm.NlLlmRequiredError.sourcePath:\n name: sourcePath\n module: src.extractors.nl-llm\n line: 80\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm\n line: 178\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.graph.linker.isSuppressedAstPair:\n name: isSuppressedAstPair\n module: src.graph.linker\n line: 262\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.communication.declaredRole:\n name: declaredRole\n module: src.extractors.communication\n line: 142\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 155\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.communication.match:\n name: match\n module: src.extractors.communication\n line: 330\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication\n line: 323\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 1\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.graph.linker.keywordIndex:\n name: keywordIndex\n module: src.graph.linker\n line: 77\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm\n line: 176\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.symbol-resolution.pathSelects:\n name: pathSelects\n module: src.graph.symbol-resolution\n line: 104\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.graph.symbol-resolution.byAlias:\n name: byAlias\n module: src.graph.symbol-resolution\n line: 23\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 0\n src.graph.linker.byId:\n name: byId\n module: src.graph.linker\n line: 117\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.graph.linker.scorePair:\n name: scorePair\n module: src.graph.linker\n line: 342\n cyclomatic_complexity: 18\n calls_out: 16\n calls_in: 6\n src.extractors.nl-llm.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm\n line: 292\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm\n line: 179\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.communication.fileParts:\n name: fileParts\n module: src.extractors.communication\n line: 350\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 78\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.graph.diff.paired:\n name: paired\n module: src.graph.diff\n line: 48\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.result:\n name: result\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.graph.diff.left:\n name: left\n module: src.graph.diff\n line: 46\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.markDeterministic:\n name: markDeterministic\n module: src.extractors.nl-llm\n line: 169\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.graph.linker.intersectsAliases:\n name: intersectsAliases\n module: src.graph.linker\n line: 477\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.graph.linker.deduplicateRecords:\n name: deduplicateRecords\n module: src.graph.linker\n line: 116\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.graph.linker.rightId:\n name: rightId\n module: src.graph.linker\n line: 248\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.graph.diff.relationKey:\n name: relationKey\n module: src.graph.diff\n line: 202\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.add:\n name: add\n module: src.extractors.ast.typescript\n line: 29\n cyclomatic_complexity: 14\n calls_out: 7\n calls_in: 7\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.communication.communicationFiles:\n name: communicationFiles\n module: src.extractors.communication\n line: 75\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.extractors.communication.nestedRole:\n name: nestedRole\n module: src.extractors.communication\n line: 352\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm\n line: 318\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.graph.diff.values:\n name: values\n module: src.graph.diff\n line: 167\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.communication.extractCommunicationIntent:\n name: extractCommunicationIntent\n module: src.extractors.communication\n line: 55\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 0\n src.graph.linker.linkIntentRecords:\n name: linkIntentRecords\n module: src.graph.linker\n line: 73\n cyclomatic_complexity: 5\n calls_out: 22\n calls_in: 0\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.graph.diff.truncate:\n name: truncate\n module: src.graph.diff\n line: 233\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 5\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.startedAt:\n name: startedAt\n module: src.extractors.nl-llm\n line: 59\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.graph.linker.astIds:\n name: astIds\n module: src.graph.linker\n line: 137\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.markdown-llm.MarkdownAttemptError.failed:\n name: failed\n module: src.extractors.markdown-llm\n line: 310\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.communication.flush:\n name: flush\n module: src.extractors.communication\n line: 405\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.graph.linker.indexKeywords:\n name: indexKeywords\n module: src.graph.linker\n line: 54\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.graph.linker.indexTopicBuckets:\n name: indexTopicBuckets\n module: src.graph.linker\n line: 198\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 6\n src.extractors.markdown-llm.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm\n line: 235\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.diff.y:\n name: y\n module: src.graph.diff\n line: 121\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 43\n calls_out: 44\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.graph.diff.recordIdentity:\n name: recordIdentity\n module: src.graph.diff\n line: 175\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication.sameStrings:\n name: sameStrings\n module: src.extractors.communication\n line: 318\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.absolute:\n name: absolute\n module: src.extractors.nl-llm\n line: 78\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.symbol:\n name: symbol\n module: src.extractors.ast.typescript\n line: 90\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.graph.diff.right:\n name: right\n module: src.graph.diff\n line: 47\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.graph.linker.determineRelation:\n name: determineRelation\n module: src.graph.linker\n line: 425\n cyclomatic_complexity: 7\n calls_out: 1\n calls_in: 6\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 55\n cyclomatic_complexity: 19\n calls_out: 21\n calls_in: 0\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.languageName:\n name: languageName\n module: src.extractors.ast.typescript\n line: 163\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.graph.diff.metricCard:\n name: metricCard\n module: src.graph.diff\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.graph.linker.symbolResolutionIndex:\n name: symbolResolutionIndex\n module: src.graph.linker\n line: 78\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.communication.normalizeType:\n name: normalizeType\n module: src.extractors.communication\n line: 481\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n src.extractors.ast.typescript.isTopLevel:\n name: isTopLevel\n module: src.extractors.ast.typescript\n line: 145\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 3\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 53\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.ast.typescript.visit:\n name: visit\n module: src.extractors.ast.typescript\n line: 77\n cyclomatic_complexity: 25\n calls_out: 26\n calls_in: 1\n src.graph.linker.configurationIds:\n name: configurationIds\n module: src.graph.linker\n line: 140\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.graph.linker.pathsIntersect:\n name: pathsIntersect\n module: src.graph.linker\n line: 322\n cyclomatic_complexity: 8\n calls_out: 7\n calls_in: 1\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.graph.linker.owners:\n name: owners\n module: src.graph.linker\n line: 299\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.graph.symbol-resolution.selected:\n name: selected\n module: src.graph.symbol-resolution\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.communication.normalize:\n name: normalize\n module: src.extractors.communication\n line: 319\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 69\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication.identity:\n name: identity\n module: src.extractors.communication\n line: 144\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.graph.linker.values:\n name: values\n module: src.graph.linker\n line: 209\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm\n line: 300\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.graph.linker.score:\n name: score\n module: src.graph.linker\n line: 349\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.diff.normalizeRecord:\n name: normalizeRecord\n module: src.graph.diff\n line: 185\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt:\n name: startedAt\n module: src.extractors.markdown-llm\n line: 60\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.nl-llm.NlLlmRequiredError.maxLine:\n name: maxLine\n module: src.extractors.nl-llm\n line: 83\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.diff.groupRecords:\n name: groupRecords\n module: src.graph.diff\n line: 163\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm\n line: 181\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication.raw:\n name: raw\n module: src.extractors.communication\n line: 416\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.graph.symbol-resolution.resolveSymbol:\n name: resolveSymbol\n module: src.graph.symbol-resolution\n line: 75\n cyclomatic_complexity: 8\n calls_out: 6\n calls_in: 2\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.graph.linker.records:\n name: records\n module: src.graph.linker\n line: 75\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.graph.diff.diffIntentGraphs:\n name: diffIntentGraphs\n module: src.graph.diff\n line: 16\n cyclomatic_complexity: 11\n calls_out: 19\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.markdown-llm.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm\n line: 437\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.extractors.markdown-llm.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm\n line: 249\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.graph.linker.resolvableBasenames:\n name: resolvableBasenames\n module: src.graph.linker\n line: 80\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.communication.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication\n line: 353\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.graph.diff.afterRecord:\n name: afterRecord\n module: src.graph.diff\n line: 51\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.graph.linker.aliases:\n name: aliases\n module: src.graph.linker\n line: 326\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm\n line: 209\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.graph.diff.visibleRows:\n name: visibleRows\n module: src.graph.diff\n line: 118\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.graph.linker.collectCandidatePairs:\n name: collectCandidatePairs\n module: src.graph.linker\n line: 132\n cyclomatic_complexity: 10\n calls_out: 8\n calls_in: 1\n src.graph.diff.renderGraphDiffSvg:\n name: renderGraphDiffSvg\n module: src.graph.diff\n line: 110\n cyclomatic_complexity: 7\n calls_out: 12\n calls_in: 0\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm\n line: 161\n cyclomatic_complexity: 8\n calls_out: 11\n calls_in: 3\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.ast.typescript.lineRange:\n name: lineRange\n module: src.extractors.ast.typescript\n line: 18\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.graph.diff.compareRelations:\n name: compareRelations\n module: src.graph.diff\n line: 210\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.communication.unquote:\n name: unquote\n module: src.extractors.communication\n line: 507\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.graph.linker.leftId:\n name: leftId\n module: src.graph.linker\n line: 247\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n src.extractors.ast.typescript.modifiers:\n name: modifiers\n module: src.extractors.ast.typescript\n line: 72\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.graph.symbol-resolution.byNlRecord:\n name: byNlRecord\n module: src.graph.symbol-resolution\n line: 45\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.failedAudit:\n name: failedAudit\n module: src.extractors.nl-llm\n line: 157\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.extractors.ast.typescript.callee:\n name: callee\n module: src.extractors.ast.typescript\n line: 121\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm\n line: 249\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.communication.inferred:\n name: inferred\n module: src.extractors.communication\n line: 128\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.fallback:\n name: fallback\n module: src.extractors.nl-llm\n line: 265\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 1\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.communication.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication\n line: 486\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n src.graph.diff.groups:\n name: groups\n module: src.graph.diff\n line: 164\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.graph.diff.beforeGroups:\n name: beforeGroups\n module: src.graph.diff\n line: 38\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 0\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.graph.linker.indexResolvableBasenames:\n name: indexResolvableBasenames\n module: src.graph.linker\n line: 298\n cyclomatic_complexity: 8\n calls_out: 13\n calls_in: 1\n src.extractors.communication.explicitEnvelope:\n name: explicitEnvelope\n module: src.extractors.communication\n line: 129\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.audit:\n name: audit\n module: src.extractors.nl-llm\n line: 272\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.graph.linker.isModuleTopicSource:\n name: isModuleTopicSource\n module: src.graph.linker\n line: 159\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 6\n src.extractors.communication.listValue:\n name: listValue\n module: src.extractors.communication\n line: 501\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm\n line: 296\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.communication.first:\n name: first\n module: src.extractors.communication\n line: 497\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.graph.symbol-resolution.buildSymbolResolutionIndex:\n name: buildSymbolResolutionIndex\n module: src.graph.symbol-resolution\n line: 22\n cyclomatic_complexity: 15\n calls_out: 13\n calls_in: 0\n src.graph.linker.declarationAstIds:\n name: declarationAstIds\n module: src.graph.linker\n line: 139\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n src.extractors.communication.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication\n line: 446\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.graph.symbol-resolution.isAstDeclaration:\n name: isAstDeclaration\n module: src.graph.symbol-resolution\n line: 116\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 3\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.communication.heading:\n name: heading\n module: src.extractors.communication\n line: 417\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.excerpt:\n name: excerpt\n module: src.extractors.ast.typescript\n line: 25\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.graph.diff.afterGroups:\n name: afterGroups\n module: src.graph.diff\n line: 39\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 0\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.graph.linker.expand:\n name: expand\n module: src.graph.linker\n line: 323\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 1\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic:\n name: deterministic\n module: src.extractors.markdown-llm\n line: 61\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.graph.linker.isFileAggregateEvidencePair:\n name: isFileAggregateEvidencePair\n module: src.graph.linker\n line: 414\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.markdown-llm.MarkdownAttemptError.readPrompt:\n name: readPrompt\n module: src.extractors.markdown-llm\n line: 431\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.graph.linker.leftKeywords:\n name: leftKeywords\n module: src.graph.linker\n line: 351\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.communication.declaredParticipant:\n name: declaredParticipant\n module: src.extractors.communication\n line: 141\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.symbolModifiers:\n name: symbolModifiers\n module: src.extractors.ast.typescript\n line: 92\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.communication.identityRegistry:\n name: identityRegistry\n module: src.extractors.communication\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.graph.linker.set:\n name: set\n module: src.graph.linker\n line: 478\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 11\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.graph.diff.escapeXml:\n name: escapeXml\n module: src.graph.diff\n line: 227\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 6\n src.graph.diff.isObject:\n name: isObject\n module: src.graph.diff\n line: 198\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm\n line: 213\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 302\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm\n line: 240\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.graph.diff.beforeRecord:\n name: beforeRecord\n module: src.graph.diff\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.symbol-resolution.hasResolvedNlAstSymbolPair:\n name: hasResolvedNlAstSymbolPair\n module: src.graph.symbol-resolution\n line: 61\n cyclomatic_complexity: 10\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 149\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.markdown-llm.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm\n line: 438\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n src.graph.linker.indexKeywordBuckets:\n name: indexKeywordBuckets\n module: src.graph.linker\n line: 186\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 6\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm\n line: 319\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.graph.symbol-resolution.uniquePaths:\n name: uniquePaths\n module: src.graph.symbol-resolution\n line: 112\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.markdown-llm.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm\n line: 439\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic:\n name: markDeterministic\n module: src.extractors.markdown-llm\n line: 402\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.deterministic:\n name: deterministic\n module: src.extractors.nl-llm\n line: 160\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm\n line: 223\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm\n line: 94\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.graph.linker.indexTargetBuckets:\n name: indexTargetBuckets\n module: src.graph.linker\n line: 166\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 6\n src.extractors.communication.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication\n line: 370\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection:\n name: extractNlWithCorrection\n module: src.extractors.nl-llm\n line: 115\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.communication.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication\n line: 337\n cyclomatic_complexity: 15\n calls_out: 9\n calls_in: 1\n src.extractors.ast.typescript.capabilities:\n name: capabilities\n module: src.extractors.ast.typescript\n line: 134\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.communication.basename:\n name: basename\n module: src.extractors.communication\n line: 371\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 11\n src.extractors.communication.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication\n line: 391\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 1\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.graph.diff.height:\n name: height\n module: src.graph.diff\n line: 120\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 58\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.communication.extractCommunicationFile:\n name: extractCommunicationFile\n module: src.extractors.communication\n line: 102\n cyclomatic_complexity: 50\n calls_out: 24\n calls_in: 3\n src.graph.linker.addToBucket:\n name: addToBucket\n module: src.graph.linker\n line: 208\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 4\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.linker.pairsFromBuckets:\n name: pairsFromBuckets\n module: src.graph.linker\n line: 235\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 1\n src.graph.linker.intersects:\n name: intersects\n module: src.graph.linker\n line: 472\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 4\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.docs-schema.target\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.target\n call_type: resolved\n- caller: src.extractors.docs-schema.documentResponseSchema\n callee: src.extractors.docs-schema.documentResponseContract\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n callee: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n callee: src.extractors.nl-llm.NlAttemptError.markDeterministic\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n callee: src.extractors.nl-llm.NlAttemptError.fallbackOrThrow\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions\n callee: src.extractors.nl-llm.NlAttemptError.markDeterministic\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.startedAt\n callee: src.extractors.nl-llm.NlAttemptError.markDeterministic\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.startedAt\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.result\n callee: src.extractors.nl-llm.NlAttemptError.markDeterministic\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.result\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.client\n callee: src.extractors.nl-llm.NlAttemptError.fallbackOrThrow\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.absolute\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.body\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.sourcePath\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.maxLine\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.prompt\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.failedAudit\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.deterministic\n callee: src.extractors.nl-llm.NlAttemptError.fallback\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.sourceExcerpt\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.resolveAction\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.nonEmptyText\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.resolveObject\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.allowedModality\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.lines\n callee: src.extractors.nl-llm.NlAttemptError.sourceExcerpt\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.action\n callee: src.extractors.nl-llm.NlAttemptError.resolveObject\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.normalizedText\n callee: src.extractors.nl-llm.NlAttemptError.resolveObject\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.statementText\n callee: src.extractors.nl-llm.NlAttemptError.allowedModality\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.sourceExcerpt\n callee: src.extractors.nl-llm.NlAttemptError.clampLine\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.resolveAction\n callee: src.extractors.nl-llm.NlAttemptError.allowedAction\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.isPlaceholder\n callee: src.extractors.nl-llm.NlAttemptError.nonEmptyText\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.resolveObject\n callee: src.extractors.nl-llm.NlAttemptError.isPlaceholder\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.resolveObject\n callee: src.extractors.nl-llm.NlAttemptError.nonEmptyText\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.NL_RECORD_CONTRACT\n callee: src.extractors.nl-llm.NlAttemptError.nlStrings\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.files\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage\n call_type: resolved\n- caller: src.extractors.changelog.extractChangelog\n callee: src.extractors.changelog.changelogAction\n call_type: resolved\n- caller: src.extractors.changelog.body\n callee: src.extractors.changelog.changelogAction\n call_type: resolved\n- caller: src.extractors.changelog.relative\n callee: src.extractors.changelog.changelogAction\n call_type: resolved\n- caller: src.extractors.changelog.lines\n callee: src.extractors.changelog.changelogAction\n call_type: resolved\n- caller: src.extractors.docs-deterministic.extractDocumentation\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3277 func | 132f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts\n WHY: 1310L, 10 classes, max CC=47\n EFFORT: ~4h IMPACT: 61570\n\n [2] !! SPLIT src/cli.ts\n WHY: 908L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 11804\n\n [3] !! SPLIT-FUNC executeAction CC=83 fan=65\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5395\n\n [4] !! SPLIT-FUNC root CC=83 fan=64\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5312\n\n [5] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42\n WHY: CC=52 exceeds 15\n EFFORT: ~1h IMPACT: 2184\n\n [8] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [9] !! SPLIT-FUNC extractTypeScriptFile CC=43 fan=44\n WHY: CC=43 exceeds 15\n EFFORT: ~1h IMPACT: 1892\n\n [10] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths\n ⚠ Splitting src/cli.ts may break 118 import paths\n\nMETRICS-TARGET:\n CC̄: 3.9 → ≤2.7\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 99 → ≤49\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.9 → now CC̄=3.9\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "146.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 246f 39601L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:138,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.03s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3586 func | 0 cls | 246 mod | CC̄=3.8 | critical:110 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64\n# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; extractTypeScriptFile fan=44; diffUiHtml fan=42\n# evolution: CC̄ 3.9→3.8 (improved -0.1)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[246]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,908\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,514\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,177\n src/core/record.ts,172\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,276\n src/core/schema/utils.ts,219\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,491\n src/core/types/index.ts,4\n src/core/types/code-change.ts,221\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,258\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,166\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,515\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,458\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,337\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,361\n src/graph/diff.ts,235\n src/graph/linker.ts,489\n src/graph/symbol-resolution.ts,120\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,210\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,200\n src/semantic/reranker/result.ts,264\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,700\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,204\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1310\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,96\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,48\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,participant,role,ticket,communicationOnly,records,isCommunication,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n executeAction()\n root()\n file()\n text()\n analysis()\n records()\n graph()\n graph()\n diagnostics()\n graph()\n diagnostics()\n result()\n output()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n planSet()\n review()\n patchPath()\n auditPath()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n patch()\n receiptPath()\n result()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n beforePath()\n afterPath()\n diff()\n result()\n graph()\n diagnostics()\n view()\n filterCommunicationGraph()\n participant()\n role()\n ticket()\n communicationOnly()\n records()\n isCommunication()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/web/diff-ui.ts:\n e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs\n diffUiHtml()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n src/extractors/communication.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/security.js,../core/types.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationExtractionOptions,CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,CommunicationFileOutcome,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,fileResult,extractCommunicationFile,relativeToProject,segments,pathTicket,envelope,inferred,explicitEnvelope,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,declaredA2aAgentId,explicitPaths,explicitSymbols,classifiedSegments,newRecords,buildCommunicationRecords,segmentType,semantics,classified,action,line,resolveIdentity,sameStrings,normalize,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governance,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,isCommunicationNoise,normalized,governanceSectionType,normalized,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,semanticsFor,first,listValue,stripped,unquote,validTimestamp,parsed\n CommunicationExtractionOptions:\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n CommunicationFileOutcome:\n extractCommunicationIntent()\n root()\n projectRoot()\n files()\n identityRegistry()\n communicationFiles()\n fileResult()\n extractCommunicationFile()\n relativeToProject()\n segments()\n pathTicket()\n envelope()\n inferred()\n explicitEnvelope()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n declaredA2aAgentId()\n explicitPaths()\n explicitSymbols()\n classifiedSegments()\n newRecords()\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n resolveIdentity()\n sameStrings()\n normalize()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governance()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n semanticsFor()\n first()\n listValue()\n stripped()\n unquote()\n validTimestamp()\n parsed()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/synthesis/code-change-plan/implementation.ts:\n i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n CreateCodeChangeReviewOptions:\n CreatedCodeChangeReview:\n CreateCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n PreparedSourceEdit:\n IMPLEMENTATION_DIAGNOSTIC_CODES()\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n conclusions()\n proposals()\n recordsById()\n proposalsByDiagnostic()\n conclusionsByDiagnostic()\n candidates()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n generation()\n planHash()\n createRepositoryPathProbe()\n base()\n absolute()\n implementationDiagnosticRank()\n evaluateCodeChangeAcceptance()\n afterDiagnostics()\n beforeIds()\n afterById()\n targeted()\n clearedDiagnosticIds()\n remainingDiagnosticIds()\n newBlockingDiagnosticIds()\n accepted()\n evaluatedAt()\n closeCodeChanges()\n evaluatedAt()\n afterDiagnostics()\n planIds()\n acceptances()\n acceptedCount()\n indexProposalsByDiagnostic()\n index()\n list()\n indexConclusionsByDiagnostic()\n index()\n list()\n collectTarget()\n paths()\n symbols()\n tickets()\n versions()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n titleFor()\n record()\n object()\n startsWithImperative()\n descriptionFor()\n acceptanceCriteriaFor()\n priorityFor()\n confidenceFor()\n riskFor()\n level()\n rollbackFor()\n deterministicGeneration()\n uniqueSorted()\n createCodeChangeReviewPatch()\n createdAt()\n markdown()\n renderCodeChangeReviewMarkdown()\n symbols()\n assertCodeChangeReviewPatch()\n artifact()\n generation()\n priorityRank()\n inline()\n renderIds()\n createCodeChangeSourcePatch()\n plan()\n graphFingerprint()\n createdAt()\n allowed()\n diffs()\n normalized()\n path()\n rawDiff()\n unifiedDiff()\n patchHash()\n createCodeChangeSourcePatchSet()\n generatedAt()\n assertCodeChangeSourcePatch()\n patch()\n paths()\n path()\n expectedHash()\n allowed()\n expectedChanges()\n editPath()\n assertCodeChangeSourcePatchSet()\n set()\n plansById()\n patchIds()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n instructionFor()\n symbols()\n criteria()\n normalizeUnifiedDiff()\n normalized()\n path()\n bare()\n stripped()\n applyCodeChangeSourcePatch()\n root()\n receiptPath()\n existing()\n relative()\n absolute()\n exists()\n before()\n after()\n now()\n fileHashesAfter()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n expectedPaths()\n hashPaths()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n normalizedDiff()\n baseLines()\n diffLines()\n cursor()\n oldIndex()\n oldCount()\n newCount()\n mark()\n body()\n splitKeep()\n lines()\n src/extractors/ast/typescript.ts:\n i: ../../core/io.js,../../core/record.js,../../core/types.js,./records.js,node:path,typescript\n e: extractTypeScriptFile,relative,sourceFile,moduleCapabilities,lineRange,excerpt,add,symbol,nameOf,modifiers,visit,symbol,symbolModifiers,declarationIsCallable,callee,capabilities,isTopLevel,scriptKind,extension,languageName,extension\n extractTypeScriptFile()\n relative()\n sourceFile()\n moduleCapabilities()\n lineRange()\n excerpt()\n add()\n symbol()\n nameOf()\n modifiers()\n visit()\n symbol()\n symbolModifiers()\n declarationIsCallable()\n callee()\n capabilities()\n isTopLevel()\n scriptKind()\n extension()\n languageName()\n extension()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: diagnoseGraph,neighbors,recordsById,groundedImplementation,implementedPaths,documentedPaths,symbolResolutionIndex,related,evidenced,hasLocationOnlyEvidence,missingFields,symbolIssues,detail,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n diagnoseGraph()\n neighbors()\n recordsById()\n groundedImplementation()\n implementedPaths()\n documentedPaths()\n symbolResolutionIndex()\n related()\n evidenced()\n hasLocationOnlyEvidence()\n missingFields()\n symbolIssues()\n detail()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n lowerBasename()\n dot()\n ext()\n isUsefulCodeChangePath()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,classifyActionHeuristically,conventional,prose,searchable,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n classifyActionHeuristically()\n conventional()\n prose()\n searchable()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n result()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n src/semantic/reranker/candidate.ts:\n i: ../../core/schema.js,../../core/types.js,./validation.js\n e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair\n createSemanticCandidateSet()\n grouped()\n values()\n assertSemanticCandidateSet()\n records()\n seenIds()\n seenPairs()\n byDeclaration()\n declaration()\n module()\n existing()\n expectedHash()\n comparePair()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/semantic/reranker-llm.ts:\n i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util\n e: SemanticRerankerOptions,SemanticRerankerRequiredError\n SemanticRerankerOptions:\n SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,target,lifecycle,source,lines,epistemic,metadata,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n target()\n lifecycle()\n source()\n lines()\n epistemic()\n metadata()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/core/schema/utils.ts:\n i: ../types.js\n e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation\n objectValue()\n exactKeys()\n expectedSet()\n missing()\n extra()\n nonEmptyString()\n nonBlankString()\n nullableString()\n enumValue()\n stringArray()\n nonEmptyUniqueStringArray()\n repositoryPath()\n normalized()\n exactStringSet()\n uniqueIdArray()\n nonEmptyUniqueIdArray()\n knownReferences()\n unknown()\n confidence()\n assertAcyclicProposalDependencies()\n byId()\n visiting()\n visited()\n visit()\n start()\n dateString()\n nullableDate()\n fingerprint()\n nonNegativeInteger()\n countMap()\n map()\n countRecords()\n key()\n exactCounts()\n actual()\n isJsonValue()\n assertGroundedGenerationMetadata()\n generation()\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n src/semantic/reranker/result.ts:\n i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js\n e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons\n createSemanticRerankResult()\n decisions()\n assertSemanticRerankResult()\n candidates()\n records()\n seenDecisions()\n acceptedDeclarations()\n candidate()\n citations()\n record()\n expectedHash()\n applyAcceptedSemanticRelations()\n candidates()\n added()\n candidate()\n assertSemanticVerdictReason()\n allowedVerdicts()\n allowedReasons()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/extractors/markdown-llm.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./markdown.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,AuditedMarkdownExtractionResult,MarkdownLlmRequiredError,MarkdownAttemptError,CoveredBatch,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n AuditedMarkdownExtractionResult:\n MarkdownLlmRequiredError: super(-1),extractMarkdownIntentAudited(-1),startedAt(-1),deterministic(-1),client(-1),prompt(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),failure(-1),failedResponses(-1)\n MarkdownAttemptError: super(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n CoveredBatch:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/graph/linker.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js,./symbol-resolution.js\n e: PairEvidence,RecordKeywords,DirectedRelation,SourceRelationRule,indexKeywords,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,isSuppressedConfigurationPair,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,resolvedNlAstSymbol,capabilityOverlap,objectSimilarity,sharedTopics,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation,intersects,set,intersectsAliases,set,countBy,key\n PairEvidence:\n RecordKeywords:\n DirectedRelation:\n SourceRelationRule:\n indexKeywords()\n jaccard()\n intersection()\n linkIntentRecords()\n records()\n byId()\n keywordIndex()\n symbolResolutionIndex()\n candidatePairs()\n resolvableBasenames()\n left()\n right()\n evidence()\n directed()\n deduplicateRecords()\n byId()\n existing()\n collectCandidatePairs()\n buckets()\n astIds()\n moduleAstIds()\n declarationAstIds()\n configurationIds()\n isModuleTopicSource()\n indexTargetBuckets()\n indexAliases()\n indexKeywordBuckets()\n indexTopicBuckets()\n addToBucket()\n values()\n isSuppressedConfigurationPair()\n pairsFromBuckets()\n output()\n leftId()\n rightId()\n isSuppressedAstPair()\n leftAst()\n rightAst()\n astId()\n indexResolvableBasenames()\n owners()\n normalized()\n basename()\n paths()\n pathsIntersect()\n expand()\n output()\n aliases()\n full()\n leftSet()\n scorePair()\n score()\n leftKeywords()\n rightKeywords()\n resolvedNlAstSymbol()\n capabilityOverlap()\n objectSimilarity()\n sharedTopics()\n intersectionSize()\n size()\n isFileAggregateEvidencePair()\n isModuleTopicEvidencePair()\n determineRelation()\n textScore()\n sourceRelation()\n relationForSourceKinds()\n relation()\n matchSourceRule()\n orientRelation()\n intersects()\n set()\n intersectsAliases()\n set()\n countBy()\n key()\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,withRecordGeneration,generationMetadata,used,extractorIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n withRecordGeneration()\n generationMetadata()\n used()\n extractorIdentity()\n separator()\n clamp()\n sourcePrefix()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/tf/classifier.ts:\n i: ../config/env.js,../core/text.js,../core/types.js,node:fs,node:path,node:url\n e: TfTensor,TfModel,TfModule,ModelAssets,dynamicImport,importer,loadAssets,directory,vocabularyPath,labels,loadClassifier,modelPath,modulePath,moduleValue,absolute,model,assets,vectorize,values,index,classifyAction,fallback,loaded,vector,input,predictionValue,prediction,probabilities,bestIndex,action,confidence\n TfTensor:\n TfModel:\n TfModule:\n ModelAssets:\n dynamicImport()\n importer()\n loadAssets()\n directory()\n vocabularyPath()\n labels()\n loadClassifier()\n modelPath()\n modulePath()\n moduleValue()\n absolute()\n model()\n assets()\n vectorize()\n values()\n index()\n classifyAction()\n fallback()\n loaded()\n vector()\n input()\n predictionValue()\n prediction()\n probabilities()\n bestIndex()\n action()\n confidence()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n src/graph/symbol-resolution.ts:\n i: ../core/target.js,../core/types.js\n e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,values,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration\n AstSymbolCandidate:\n NlSymbolResolution:\n SymbolResolutionIndex:\n buildSymbolResolutionIndex()\n byAlias()\n values()\n byNlRecord()\n hasResolvedNlAstSymbolPair()\n nl()\n ast()\n resolveSymbol()\n matched()\n selected()\n paths()\n pathSelects()\n normalized()\n candidatePath()\n uniquePaths()\n isAstDeclaration()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n ignored()\n extensions()\n maxFiles()\n matcher()\n base()\n visit()\n entries()\n absolute()\n relative()\n extension()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,result,handleWatch,root,taskFile,controller,stop,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n result()\n handleWatch()\n root()\n taskFile()\n controller()\n stop()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/nl-llm.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./nl.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,AuditedNlExtractionResult,NlLlmRequiredError,NlAttemptError\n RawNlRecord:\n NlResponse:\n AuditedNlExtractionResult:\n NlLlmRequiredError: super(-1),extractNlIntentAudited(-1),assertNlExtractionOptions(-1),startedAt(-1),result(-1),client(-1),absolute(-1),body(-1),sourcePath(-1),maxLine(-1),prompt(-1),response(-1),records(-1),failure(-1),responses(-1)\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failedAudit(-1),deterministic(-1),markDeterministic(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),audit(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),readPrompt(-1),promptPath(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../core/id.js,../../core/io.js,../../core/record.js,../../llm/audit.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js,../../version.js,node:fs,node:path,node:url\n e: RawCommunicationEnrichment,RawParticipantSynthesis,RawCommunicationResponse,ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError,ParticipantGroup\n RawCommunicationEnrichment:\n RawParticipantSynthesis:\n RawCommunicationResponse:\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1),participantGroups(-1),grouped(-1),participant(-1),role(-1),key(-1),values(-1),promptPayload(-1),validateEnrichments(-1),expected(-1),output(-1),materializeSyntheses(-1),byKey(-1),seen(-1),output(-1),group(-1),permitted(-1),recordIds(-1),enrichRecord(-1),deterministicSyntheses(-1),synthesis(-1),markDeterministic(-1),marked(-1),deterministicGeneration(-1),fallbackGeneration(-1),llmGeneration(-1),audit(-1),roleOf(-1),sortedUnique(-1),readPrompt(-1),promptPath(-1),communicationStrings(-1),COMMUNICATION_ENRICHMENT_CONTRACT(-1),PARTICIPANT_SYNTHESIS_CONTRACT(-1),COMMUNICATION_RESPONSE_CONTRACT(-1)\n ParticipantGroup:\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,p\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "201.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.18s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)'\n description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:440`\n with cyclomatic complexity 34 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)'\n description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:441`\n with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.ast.typescript.extractTypeScriptFile\n (CC=43)'\n description: 'code2llm reports `src.extractors.ast.typescript.extractTypeScriptFile`\n at `src/extractors/ast/typescript.ts:11` with cyclomatic complexity 43 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/ast/typescript.ts\n dedupe_key: code2llm:cc:src/extractors/ast/typescript.ts:src.extractors.ast.typescript.extractTypeScriptFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.ast.typescript.visit (CC=25)'\n description: 'code2llm reports `src.extractors.ast.typescript.visit` at `src/extractors/ast/typescript.ts:77`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/ast/typescript.ts\n dedupe_key: code2llm:cc:src/extractors/ast/typescript.ts:src.extractors.ast.typescript.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication.extractCommunicationFile\n (CC=50)'\n description: 'code2llm reports `src.extractors.communication.extractCommunicationFile`\n at `src/extractors/communication.ts:102` with cyclomatic complexity 50 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.extractCommunicationFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.diagnoseGraph (CC=40)'\n description: 'code2llm reports `src.graph.diagnostics.diagnoseGraph` at `src/graph/diagnostics.ts:16`\n with cyclomatic complexity 40 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.diagnoseGraph\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.documentedPaths (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.documentedPaths` at `src/graph/diagnostics.ts:23`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.documentedPaths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.groundedImplementation\n (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.groundedImplementation` at\n `src/graph/diagnostics.ts:21` with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.groundedImplementation\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.implementedPaths (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.implementedPaths` at `src/graph/diagnostics.ts:22`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.implementedPaths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.neighbors (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.neighbors` at `src/graph/diagnostics.ts:19`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.neighbors\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.recordsById (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.recordsById` at `src/graph/diagnostics.ts:20`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.recordsById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.symbolResolutionIndex\n (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.symbolResolutionIndex` at\n `src/graph/diagnostics.ts:24` with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.symbolResolutionIndex\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n (CC=25)'\n description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates`\n at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker-llm.ts\n dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet\n (CC=27)'\n description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet`\n at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)'\n description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)'\n description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS`\n at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES`\n at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES`\n at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS`\n at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES`\n at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath`\n at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n (CC=41)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity\n 41 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText`\n at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor\n (CC=25)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor`\n at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity\n 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)'\n description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1`\n with cyclomatic complexity 52 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml\n- signal: code2llm_god\n title: 'Split god module: src/communication/llm/implementation.ts'\n description: 'code2llm reports `src/communication/llm/implementation.ts` as a large\n module (514 lines, 8 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/communication/llm/implementation.ts\n dedupe_key: code2llm:god:src/communication/llm/implementation.ts\n- signal: code2llm_god\n title: 'Split god module: src/extractors/communication.ts'\n description: 'code2llm reports `src/extractors/communication.ts` as a large module\n (515 lines, 5 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:god:src/extractors/communication.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts`\n as a large module (1310 lines, 10 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (195 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation`\n in `src/synthesis/code-change-plan/implementation.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions,\n 10 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God\n Module: src.synthesis.code-change-plan.implementation'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)'\n description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/io.ts\n dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.buildRecord (CC=18)'\n description: 'code2llm reports `src.core.record.buildRecord` at `src/core/record.ts:57`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.buildRecord\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=15)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:125`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.schema.intent.assertIntentRecord\n (CC=23)'\n description: 'code2llm reports `src.core.schema.intent.assertIntentRecord` at `src/core/schema/intent.ts:67`\n with cyclomatic complexity 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/schema/intent.ts\n dedupe_key: code2llm:cc:src/core/schema/intent.ts:src.core.schema.intent.assertIntentRecord\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.schema.utils.assertGroundedGenerationMetadata\n (CC=23)'\n description: 'code2llm reports `src.core.schema.utils.assertGroundedGenerationMetadata`\n at `src/core/schema/utils.ts:167` with cyclomatic complexity 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/schema/utils.ts\n dedupe_key: code2llm:cc:src/core/schema/utils.ts:src.core.schema.utils.assertGroundedGenerationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.STOP_WORDS (CC=17)'\n description: 'code2llm reports `src.core.text.STOP_WORDS` at `src/core/text.ts:30`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.STOP_WORDS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.classifyActionHeuristically\n (CC=17)'\n description: 'code2llm reports `src.core.text.classifyActionHeuristically` at `src/core/text.ts:40`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.classifyActionHeuristically\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication.inferIdentity\n (CC=15)'\n description: 'code2llm reports `src.extractors.communication.inferIdentity` at `src/extractors/communication.ts:337`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.inferIdentity\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n (CC=19)'\n description: 'code2llm reports `src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited`\n at `src/extractors/markdown-llm.ts:55` with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: code2llm:cc:src/extractors/markdown-llm.ts:src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.linker.scorePair (CC=18)'\n description: 'code2llm reports `src.graph.linker.scorePair` at `src/graph/linker.ts:342`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/linker.ts\n dedupe_key: code2llm:cc:src/graph/linker.ts:src.graph.linker.scorePair\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.symbol-resolution.buildSymbolResolutionIndex\n (CC=15)'\n description: 'code2llm reports `src.graph.symbol-resolution.buildSymbolResolutionIndex`\n at `src/graph/symbol-resolution.ts:22` with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/symbol-resolution.ts\n dedupe_key: code2llm:cc:src/graph/symbol-resolution.ts:src.graph.symbol-resolution.buildSymbolResolutionIndex\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations`\n at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult\n (CC=21)'\n description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult`\n at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.filterCommunicationGraph\n (CC=17)'\n description: 'code2llm reports `src.services.actions.filterCommunicationGraph` at\n `src/services/actions.ts:511` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.filterCommunicationGraph\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n (CC=23)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch`\n at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity\n 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n (CC=18)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet`\n at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff`\n at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths\n (CC=16)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths`\n at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity\n 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans`\n at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.tf.classifier.classifyAction (CC=17)'\n description: 'code2llm reports `src.tf.classifier.classifyAction` at `src/tf/classifier.ts:69`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/tf/classifier.ts\n dedupe_key: code2llm:cc:src/tf/classifier.ts:src.tf.classifier.classifyAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, root, changelog, todo, self'\n description: 'code2llm reports `Data Clump: markdown_mode, root, changelog, todo,\n self` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (markdown_mode, root, changelog, todo, self) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n markdown_mode, root, changelog, todo, self'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, root, changelog, todo, self'\n description: 'code2llm reports `Data Clump: markdown_mode, root, changelog, todo,\n self` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (markdown_mode, root, changelog, todo, self) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n markdown_mode, root, changelog, todo, self'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, patterns, root, excludes'\n description: 'code2llm reports `Data Clump: self, patterns, root, excludes` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (self, patterns, root, excludes) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n self, patterns, root, excludes'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, patterns, root, excludes'\n description: 'code2llm reports `Data Clump: self, patterns, root, excludes` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (self, patterns, root, excludes) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n self, patterns, root, excludes'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, file, nl_mode'\n description: 'code2llm reports `Data Clump: self, root, file, nl_mode` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (self, root, file, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n self, root, file, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, file, nl_mode'\n description: 'code2llm reports `Data Clump: self, root, file, nl_mode` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (self, root, file, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n self, root, file, nl_mode'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:343`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:343:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: add'\n description: 'code2llm reports `God Function: add` in `src/extractors/ast/typescript.ts:29`.\n\n\n Function ''add'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/typescript.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/typescript.ts:29:God\n Function: add'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:179`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:187`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:187:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:216`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:216:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertSourceApplyReceipt'\n description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`.\n\n\n Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God\n Function: assertSourceApplyReceipt'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: base'\n description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`.\n\n\n Function ''base'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/io.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:92:God Function: base'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byDeclaration'\n description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`.\n\n\n Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God\n Function: byDeclaration'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation.ts:303`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - co\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3586 func | 166f | 39601L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.8 critical=279 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded executeAction = 83 (limit:15)\n !!! cc_exceeded root = 83 (limit:15)\n !!! high_fan_out executeAction = 65 (limit:10)\n !!! high_fan_out root = 64 (limit:10)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded diffUiHtml = 52 (limit:15)\n !!! cc_exceeded extractCommunicationFile = 50 (limit:15)\n\nMODULES[246] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/synthesis/code-change-plan/implementation.ts] 1310L C:10 F:127 CC↑47 D:3 (typescript)\n M[src/cli.ts] 908L C:1 F:118 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/services/actions.ts] 700L C:0 F:74 CC↑83 D:0 (typescript)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[src/extractors/communication.ts] 515L C:5 F:76 CC↑50 D:0 (typescript)\n M[src/communication/llm/implementation.ts] 514L C:8 F:53 CC↑12 D:0 (typescript)\n M[src/core/text.ts] 491L C:0 F:51 CC↑34 D:0 (typescript)\n M[src/graph/linker.ts] 489L C:4 F:72 CC↑18 D:3 (typescript)\n LANGS: typescript:138/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ executeAction fan=65 // Orchestrates 65 calls\n ★ root fan=64 // Orchestrates 64 calls\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ extractTypeScriptFile fan=44 // Orchestrates 44 calls\n ★ diffUiHtml fan=42 // Orchestrates 42 calls\n\nREFACTOR[15]:\n [1] H/L Split extractCommunicationFile (CC=50)\n [2] H/L Split extractTypeScriptFile (CC=43)\n [3] H/L Split visit (CC=25)\n [4] H/L Split diagnoseGraph (CC=40)\n [5] H/L Split neighbors (CC=35)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.8 crit=279 39601L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; let currentFile = null; function renderFileList(filter = '') { diff --git a/project/map.toon.yaml b/project/map.toon.yaml index 6b93b73..faba8bc 100644 --- a/project/map.toon.yaml +++ b/project/map.toon.yaml @@ -1,80 +1,40 @@ -# todo2code | 262f 45160L | json:32,yml:2,md:52,typescript:117,python:15,toml:2,rust:7,php:4,go:6,javascript:15,shell:6,txt:1,java:1 | 2026-08-01 +# todo2code | 246f 39628L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:138,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 # generated in 0.03s # producer: code2llm | artifact: map.toon.yaml | schema: 1 -# stats: 3285 func | 0 cls | 262 mod | CC̄=4.0 | critical:120 | cycles:0 -# alerts[5]: CC main=95; CC assertOperationPlan=84; CC executeAction=83; CC root=83; CC extractCommunicationIntent=76 -# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=54; main fan=44; extractTypeScriptFile fan=44 -# evolution: baseline +# stats: 3592 func | 0 cls | 246 mod | CC̄=3.8 | critical:110 | cycles:0 +# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64 +# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; extractTypeScriptFile fan=44; diffUiHtml fan=42 +# evolution: CC̄ 3.9→3.8 (improved -0.1) # Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods -M[262]: - CHANGELOG.md,670 - CONTRIBUTION.md,37 +M[246]: Dockerfile,45 - Makefile,129 - README.md,871 - TASK.md,10 - TODO.md,391 - adapters/tensorflow/package.json,10 + Makefile,132 + adapters/tensorflow/package.json,14 compose.e2e.yml,27 docker-compose.yml,18 - docs/ARCHITECTURE.md,200 - docs/CLI_GUIDE.md,328 - docs/CODE_CHANGE_PLANS.md,173 - docs/DEMOLLM.md,175 - docs/DSL.md,457 - docs/E2E.md,52 - docs/GROK-PLAN.md,269 - docs/OPTIMIZATION.md,249 - docs/PIPELINE_DSL_NL.md,464 - docs/PROTOCOLS.md,124 - docs/READINESS.md,442 - docs/REQUIREMENTS.md,39 - docs/SECURITY.md,50 - docs/SUBACTOR_OPERATION_DSL.md,33 - docs/SYSTEM_MONITOROWANIA_INTENCJI_I_PRACY_AGENTOW.md,872 - docs/TEAM_COMMUNICATION.md,268 - docs/TEST_REPORT.md,587 - docs/VALIDATION.md,198 - docs/intent-guard-diagrams/ALL_DIAGRAMS.md,410 - docs/intent-guard-diagrams/README.md,22 - docs/reference/original-monitoring-design.md,872 - evaluation/gold/README.md,87 evaluation/gold/v1/dataset.json,761 evaluation/gold/v2/dataset.json,2410 - examples/CHANGELOG.md,11 - examples/TODO.md,7 - examples/backend/CHANGELOG.md,11 - examples/backend/README.md,46 - examples/backend/TODO.md,8 examples/backend/src/server.ts,99 examples/backend/src/store.ts,48 examples/backend/src/validation.ts,31 - examples/backend/task.md,18 examples/backend/tsconfig.json,14 - examples/docs/ARCHITECTURE.md,9 - examples/frontend/CHANGELOG.md,11 - examples/frontend/README.md,35 - examples/frontend/TODO.md,7 examples/frontend/src/api.ts,50 examples/frontend/src/app.ts,43 examples/frontend/src/render.ts,64 - examples/frontend/task.md,17 examples/frontend/tsconfig.json,15 + examples/project/participants.json,37 examples/sdk/python.py,23 examples/sdk/typescript.mjs,16 examples/src/helper.py,9 examples/src/runtime.ts,13 - examples/task.md,9 + goal.yaml,530 golang/ast_extract.go,368 java/JavaAstExtract.java,260 - package.json,48 + nlp2uri.yaml,8 + package.json,52 php/ast_extract.php,233 - prompts/communication-to-intent.system.md,7 - prompts/docs-to-intent.system.md,23 - prompts/markdown-to-intent.system.md,5 - prompts/nl-to-intent.system.md,15 - prompts/summarize.system.md,51 - prompts/tasks-from-dsl.system.md,52 + project.sh,124 + project2.sh,79 python/ast_extract.py,221 python/requirements.txt,1 rust-ast/Cargo.toml,12 @@ -110,9 +70,8 @@ M[262]: scripts/live-contract-check.mjs,200 scripts/live-model-comparison.mjs,125 scripts/mcp-request.sh,11 - scripts/normalize-generated-analysis-roots.mjs,34 + scripts/normalize-generated-analysis-roots.mjs,38 scripts/package.py,25 - scripts/research/README.md,27 scripts/research/audit-changelog-sample.mjs,226 scripts/research/evaluate-embedding-pairs.py,101 scripts/research/rank-intent-graph-embeddings.py,174 @@ -127,60 +86,69 @@ M[262]: scripts/verify-structured-responses.mjs,35 scripts/verify-workflow-yaml.mjs,43 sdk/__init__.py,1 - sdk/README.md,107 - sdk/go/README.md,20 sdk/go/actions.go,136 sdk/go/client.go,197 sdk/go/examples/basic/main.go,163 sdk/go/todo2code.go,30 sdk/go/types.go,215 - sdk/php/README.md,21 sdk/php/composer.json,18 sdk/php/examples/basic.php,112 sdk/php/src/Client.php,401 sdk/php/src/Error.php,25 sdk/python/__init__.py,13 - sdk/python/README.md,68 sdk/python/examples/basic.py,95 sdk/python/examples/local_runtime.py,36 + sdk/python/pyproject.toml,17 sdk/python/todo2code/__init__.py,33 sdk/python/todo2code/client.py,469 sdk/python/todo2code/runtime.py,225 sdk/python/todo2code_sdk.py,171 sdk/rust/Cargo.toml,17 - sdk/rust/README.md,24 sdk/rust/examples/basic.rs,108 sdk/rust/src/lib.rs,49 sdk/rust/src/actions.rs,100 sdk/rust/src/client.rs,221 sdk/rust/src/error.rs,37 sdk/rust/src/types.rs,140 - sdk/typescript/README.md,23 sdk/typescript/examples/basic.ts,84 - sdk/typescript/package.json,28 + sdk/typescript/package.json,32 sdk/typescript/src/index.ts,420 sdk/typescript/tsconfig.json,20 src/index.ts,53 - src/cli.ts,827 + src/cli.ts,935 src/communication/analyzer.ts,542 - src/communication/identity.ts,100 - src/communication/llm.ts,514 - src/comparison/workspace.ts,327 - src/config/env.ts,227 + src/communication/identity.ts,146 + src/communication/intake-contract.ts,273 + src/communication/intake-protobuf.ts,125 + src/communication/intake-service.ts,291 + src/communication/intake-store.ts,161 + src/communication/llm.ts,1 + src/communication/llm/implementation.ts,514 + src/comparison/workspace.ts,342 + src/config/env.ts,231 src/core/content-cache.ts,139 src/core/grounding.ts,24 src/core/id.ts,167 src/core/ignore.ts,200 src/core/io.ts,177 src/core/record.ts,172 - src/core/schema.ts,922 + src/core/schema/index.ts,4 + src/core/schema/code-change.ts,322 + src/core/schema/conclusions.ts,210 + src/core/schema/constants.ts,31 + src/core/schema/intent.ts,276 + src/core/schema/utils.ts,219 src/core/security.ts,55 src/core/target.ts,57 src/core/text.ts,491 - src/core/types.ts,673 + src/core/types/index.ts,4 + src/core/types/code-change.ts,221 + src/core/types/diagnostics.ts,45 + src/core/types/intent.ts,258 + src/core/types/pipeline.ts,173 src/core/version.ts,2 src/diff/git.ts,161 - src/diff/reality.ts,609 + src/diff/reality.ts,619 src/diff/svg.ts,104 src/diff/text.ts,239 src/diff/text-render.ts,251 @@ -203,21 +171,22 @@ M[262]: src/extractors/ast/typescript.ts,166 src/extractors/ast/unsupported.ts,30 src/extractors/changelog.ts,99 - src/extractors/communication.ts,422 + src/extractors/communication.ts,515 src/extractors/configuration.ts,208 src/extractors/docs-chunks.ts,147 - src/extractors/docs-deterministic.ts,304 + src/extractors/docs-deterministic.ts,369 src/extractors/docs-llm.ts,269 src/extractors/docs-record.ts,193 src/extractors/docs-schema.ts,43 src/extractors/docs-types.ts,68 - src/extractors/git.ts,180 + src/extractors/git.ts,397 src/extractors/markdown.ts,35 src/extractors/markdown-block.ts,67 src/extractors/markdown-llm.ts,458 - src/extractors/markdown-paths.ts,122 + src/extractors/markdown-paths.ts,158 src/extractors/nl.ts,107 - src/extractors/nl-llm.ts,316 + src/extractors/nl-llm.ts,337 + src/extractors/runtime-cycle.ts,306 src/extractors/todo.ts,93 src/graph/capability-evidence.ts,62 src/graph/changelog-signal.ts,89 @@ -225,16 +194,26 @@ M[262]: src/graph/diff.ts,235 src/graph/linker.ts,489 src/graph/symbol-resolution.ts,120 - src/interfaces/a2a.ts,320 - src/interfaces/a2a-card.ts,169 + src/interfaces/a2a.ts,332 + src/interfaces/a2a-card.ts,181 src/interfaces/a2a-history.ts,226 - src/interfaces/a2a-message.ts,184 - src/interfaces/a2a-task-store.ts,513 - src/interfaces/a2a-types.ts,160 + src/interfaces/a2a-message.ts,197 + src/interfaces/a2a-task-store.ts,560 + src/interfaces/a2a-types.ts,164 + src/interfaces/governed-intake.proto,78 + src/interfaces/intake-actions.ts,38 + src/interfaces/intake-schemas/command-v1.schema.json,17 + src/interfaces/intake-schemas/diagnostic-v1.schema.json,11 + src/interfaces/intake-schemas/envelope-v1.schema.json,20 + src/interfaces/intake-schemas/event-v1.schema.json,20 + src/interfaces/intake-schemas/participant-registry-v2.schema.json,36 + src/interfaces/intake-schemas/query-v1.schema.json,11 + src/interfaces/intake-schemas/result-v1.schema.json,9 + src/interfaces/intake_cli.py,156 src/interfaces/mcp.ts,261 src/interfaces/mcp-errors.ts,10 src/interfaces/mcp-resources.ts,88 - src/interfaces/mcp-tools.ts,307 + src/interfaces/mcp-tools.ts,323 src/live/contract-check.ts,317 src/live/model-comparison.ts,218 src/llm/audit.ts,19 @@ -247,17 +226,22 @@ M[262]: src/operations/subactor.ts,122 src/operations/types.ts,155 src/operations/validation.ts,281 - src/pipeline/run.ts,602 + src/pipeline/run.ts,617 src/sdk/typescript.ts,172 - src/semantic/reranker.ts,509 + src/semantic/reranker/index.ts,8 src/semantic/reranker-llm.ts,210 src/semantic/reranker-response.ts,42 + src/semantic/reranker/candidate.ts,200 + src/semantic/reranker/result.ts,264 + src/semantic/reranker/types.ts,106 + src/semantic/reranker/validation.ts,111 src/services/actions.ts,700 src/summary/payload.ts,65 src/summary/render.ts,61 src/summary/summarizer.ts,333 src/synthesis/code-change-path.ts,204 - src/synthesis/code-change-plan.ts,1310 + src/synthesis/code-change-plan/index.ts,1 + src/synthesis/code-change-plan/implementation.ts,1310 src/synthesis/task-synthesis-contract.ts,66 src/synthesis/task-synthesis-materialize.ts,172 src/synthesis/task-synthesis-payload.ts,70 @@ -270,162 +254,6 @@ M[262]: src/web/diff-ui.ts,48 tsconfig.json,23 D: - src/cli.ts: - i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util - e: ParsedArgs,execFileAsync,main,parsed,command,config,files,records,graph,graphFile,graph,graphFile,graph,diagnosticsPath,diagnostics,result,out,graphPath,diagnosticsPath,output,result,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,patch,audit,receipt,actor,approvalHash,result,graphPath,diagnosticsPath,output,result,plansPath,patch,audit,result,inputPath,output,isPlanSet,result,patchPath,actor,approvalHash,receipt,result,planPath,beforeGraphPath,afterGraphPath,output,result,inputPath,beforeGraphPath,afterGraphPath,output,result,root,result,root,result,handleWatch,root,taskFile,controller,stop,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,beforeFile,afterFile,diff,context,maxRows,beforeFile,afterFile,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,file,inline,result,result,result,result,result,result,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath - ParsedArgs: - execFileAsync() - main() - parsed() - command() - config() - files() - records() - graph() - graphFile() - graph() - graphFile() - graph() - diagnosticsPath() - diagnostics() - result() - out() - graphPath() - diagnosticsPath() - output() - result() - synthesisPath() - graphPath() - diagnosticsPath() - patch() - audit() - result() - patch() - audit() - receipt() - actor() - approvalHash() - result() - graphPath() - diagnosticsPath() - output() - result() - plansPath() - patch() - audit() - result() - inputPath() - output() - isPlanSet() - result() - patchPath() - actor() - approvalHash() - receipt() - result() - planPath() - beforeGraphPath() - afterGraphPath() - output() - result() - inputPath() - beforeGraphPath() - afterGraphPath() - output() - result() - root() - result() - root() - result() - handleWatch() - root() - taskFile() - controller() - stop() - formatWatchEvent() - stamp() - handleDiff() - mode() - out() - svg() - html() - beforeFile() - afterFile() - diff() - context() - maxRows() - beforeFile() - afterFile() - root() - result() - handleReality() - graphFile() - graph() - diagnosticsPath() - diagnostics() - view() - out() - svg() - markdown() - handleExtract() - extractor() - root() - out() - file() - inline() - result() - result() - result() - result() - result() - result() - result() - handleCommunication() - root() - graph() - analysis() - out() - markdown() - graphOut() - emitExtraction() - emitJson() - initProject() - moduleRoot() - sourceEnv() - targetEnv() - task() - sourceIgnore() - targetIgnore() - doctor() - result() - parseArgs() - options() - value() - next() - name() - next() - optionString() - value() - optionNullableString() - value() - optionBoolean() - value() - optionNumber() - value() - number() - optionList() - value() - optionNlMode() - optionLlmMode() - value() - optionTaskMode() - value() - optionSummaryMode() - optionPipelineTaskMode() - value() - reportPipelineDegradation() - printHelp() - invokedPath() src/operations/validation.ts: i: ../core/id.js,../core/types.js,./types.js e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash @@ -592,95 +420,15 @@ D: registerRunArtifacts() manifestPath() manifest() - src/extractors/communication.ts: - i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/security.js,../core/types.js,../tf/classifier.js,node:path - e: CommunicationExtractionOptions,CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,relativeToProject,parts,pathTicket,envelope,inferred,explicitEnvelope,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,timestamp,declaredGitAuthors,gitAuthors,declaredA2aAgentId,explicitPaths,explicitSymbols,segments,segmentType,semantics,classified,action,line,resolveIdentity,sameStrings,normalize,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governance,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,isCommunicationNoise,normalized,governanceSectionType,normalized,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,semanticsFor,first,listValue,stripped,unquote,validTimestamp,parsed - CommunicationExtractionOptions: - CommunicationEnvelope: - InferredCommunicationIdentity: - CommunicationSegment: - extractCommunicationIntent() - root() - projectRoot() - files() - identityRegistry() - communicationFiles() - relativeToProject() - parts() - pathTicket() - envelope() - inferred() - explicitEnvelope() - declaredParticipant() - declaredRole() - declaredParticipantId() - identity() - participant() - role() - displayName() - explicitMessageType() - messageType() - ticket() - recipient() - timestamp() - declaredGitAuthors() - gitAuthors() - declaredA2aAgentId() - explicitPaths() - explicitSymbols() - segments() - segmentType() - semantics() - classified() - action() - line() - resolveIdentity() - sameStrings() - normalize() - parseEnvelope() - lines() - end() - match() - inferIdentity() - parts() - basename() - governance() - fileParts() - nestedRoleIndex() - nestedRole() - nestedParticipant() - isTicketEvidenceFile() - basename() - communicationSegments() - lines() - flush() - item() - raw() - heading() - cleaned() - isCommunicationNoise() - normalized() - governanceSectionType() - normalized() - looksLikeTicket() - normalizeRole() - normalizeType() - normalized() - isCommunicationType() - semanticsFor() - first() - listValue() - stripped() - unquote() - validTimestamp() - parsed() src/interfaces/a2a-message.ts: - i: ../services/actions.js - e: parseSendConfiguration,validateOutputModes,supported,parseCommand,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage + i: ../communication/intake-protobuf.js + e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage parseSendConfiguration() validateOutputModes() supported() parseCommand() + protobuf() + bytes() objectData() text() first() @@ -713,8 +461,8 @@ D: clonePart() normalizeUserMessage() src/pipeline/run.ts: - i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path - e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured + i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path + e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured PipelineResult: runPipeline() root() @@ -731,6 +479,7 @@ D: deterministicDocs() docs() configurationExtraction() + runtime() includeCommunication() communicationStartedAt() communicationAudit() @@ -791,27 +540,115 @@ D: fillSelect() loadRuns() compareGraphs() - src/communication/analyzer.ts: - i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js - e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex - CommunicationIssue: - ParticipantCommunicationAnalysis: - CommunicationAnalysis: - analyzeCommunication() - communication() - evidenceByRecord() - participants() - participant() - values() - left() - right() - leftRole() - rightRole() - code() - responseRequiredFrom() - humanRequests() - agentMessages() - response() + src/extractors/communication.ts: + i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/security.js,../core/types.js,../core/types.js,../tf/classifier.js,node:path + e: CommunicationExtractionOptions,CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,CommunicationFileOutcome,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,fileResult,extractCommunicationFile,relativeToProject,segments,pathTicket,envelope,inferred,explicitEnvelope,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,declaredA2aAgentId,explicitPaths,explicitSymbols,classifiedSegments,newRecords,buildCommunicationRecords,segmentType,semantics,classified,action,line,resolveIdentity,sameStrings,normalize,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governance,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,isCommunicationNoise,normalized,governanceSectionType,normalized,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,semanticsFor,first,listValue,stripped,unquote,validTimestamp,parsed + CommunicationExtractionOptions: + CommunicationEnvelope: + InferredCommunicationIdentity: + CommunicationSegment: + CommunicationFileOutcome: + extractCommunicationIntent() + root() + projectRoot() + files() + identityRegistry() + communicationFiles() + fileResult() + extractCommunicationFile() + relativeToProject() + segments() + pathTicket() + envelope() + inferred() + explicitEnvelope() + declaredParticipant() + declaredRole() + declaredParticipantId() + identity() + participant() + role() + displayName() + explicitMessageType() + messageType() + ticket() + recipient() + rawTimestamp() + timestamp() + declaredGitAuthors() + gitAuthors() + declaredA2aAgentId() + explicitPaths() + explicitSymbols() + classifiedSegments() + newRecords() + buildCommunicationRecords() + segmentType() + semantics() + classified() + action() + line() + resolveIdentity() + sameStrings() + normalize() + parseEnvelope() + lines() + end() + match() + inferIdentity() + parts() + basename() + governance() + fileParts() + nestedRoleIndex() + nestedRole() + nestedParticipant() + isTicketEvidenceFile() + basename() + communicationSegments() + lines() + flush() + item() + raw() + heading() + cleaned() + isCommunicationNoise() + normalized() + governanceSectionType() + normalized() + looksLikeTicket() + normalizeRole() + normalizeType() + normalized() + isCommunicationType() + semanticsFor() + first() + listValue() + stripped() + unquote() + validTimestamp() + parsed() + src/communication/analyzer.ts: + i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js + e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex + CommunicationIssue: + ParticipantCommunicationAnalysis: + CommunicationAnalysis: + analyzeCommunication() + communication() + evidenceByRecord() + participants() + participant() + values() + left() + right() + leftRole() + rightRole() + code() + responseRequiredFrom() + humanRequests() + agentMessages() + response() type() participantGit() linked() @@ -876,8 +713,8 @@ D: severityRank() escapeCell() escapeRegex() - src/synthesis/code-change-plan.ts: - i: ../core/io.js,../core/security.js,../core/target.js,../graph/diagnostics.js,../version.js,./code-change-path.js,node:crypto,node:fs,node:path + src/synthesis/code-change-plan/implementation.ts: + i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines ProposeCodeChangePlansOptions: ProposeCodeChangePlansResult: @@ -1229,13 +1066,25 @@ D: OpenRouterModelError: super(-1) OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1) src/communication/identity.ts: - i: ../core/io.js,../core/security.js,node:path - e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,registryPath,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra + i: ../core/io.js,../core/security.js,./intake-contract.js,node:path + e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra ParticipantIdentityEntry: ParticipantIdentityRegistry: LoadedParticipantIdentityRegistry: loadParticipantIdentityRegistry() + v2Path() + v1Path() registryPath() + normalized() + normalizeParticipantIdentityRegistry() + registry() + participants() + ids() + principals() + key() + normalizeV2Entry() + principals() + kind() assertParticipantIdentityRegistry() registry() ids() @@ -1269,20 +1118,9 @@ D: absolute() collect() absolute() - src/semantic/reranker.ts: - i: ../core/id.js,../core/schema.js,../core/types.js,../version.js - e: SemanticRetrievalIdentity,SemanticCandidate,SemanticCandidateSet,SemanticCandidateInput,SemanticRetrievalInput,SemanticEvidenceCitation,SemanticRerankDecisionInput,SemanticRerankDecision,SemanticRerankGeneration,SemanticRerankResult,SemanticRerankGenerationInput,createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,values,expectedHash,createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,validateRetrieval,validateGeneration,validateVerdictReason,assertSemanticVerdictReason,allowed,reasons,assertGroundedQuote,quote,boundedScore,roundedConfidence,requiredText,validDate,comparePair - SemanticRetrievalIdentity: - SemanticCandidate: - SemanticCandidateSet: - SemanticCandidateInput: - SemanticRetrievalInput: - SemanticEvidenceCitation: - SemanticRerankDecisionInput: - SemanticRerankDecision: - SemanticRerankGeneration: - SemanticRerankResult: - SemanticRerankGenerationInput: + src/semantic/reranker/candidate.ts: + i: ../../core/schema.js,../../core/types.js,./validation.js + e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair createSemanticCandidateSet() grouped() values() @@ -1293,35 +1131,8 @@ D: byDeclaration() declaration() module() - values() - expectedHash() - createSemanticRerankResult() - decisions() - assertSemanticRerankResult() - candidates() - records() - seenDecisions() - acceptedDeclarations() - candidate() - citations() - record() + existing() expectedHash() - applyAcceptedSemanticRelations() - candidates() - added() - candidate() - validateRetrieval() - validateGeneration() - validateVerdictReason() - assertSemanticVerdictReason() - allowed() - reasons() - assertGroundedQuote() - quote() - boundedScore() - roundedConfidence() - requiredText() - validDate() comparePair() scripts/research/rank-intent-graph-embeddings.py: e: parse_args,projection_text,main @@ -1330,7 +1141,7 @@ D: main() src/diff/reality.ts: i: ../core/id.js,../core/schema.js,../core/target.js - e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown + e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown RealityRow: IntentRealityView: RealitySvgOptions: @@ -1384,6 +1195,7 @@ D: changelog() topicLabel() separator() + raw() value() declared() object() @@ -1423,26 +1235,13 @@ D: e: SemanticRerankerOptions,SemanticRerankerRequiredError SemanticRerankerOptions: SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1) - src/core/schema.ts: - e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,ACTIONS,MODALITIES,POLARITIES,LIFECYCLES,SOURCE_KINDS,EPISTEMIC_CLASSES,RELATION_TYPES,CONCLUSION_KINDS,DIAGNOSTIC_SEVERITIES,TODO_PRIORITIES,GENERATION_REQUESTED_MODES,GENERATION_EFFECTIVE_MODES,CODE_CHANGE_ACTIONS,CODE_CHANGE_RISK_LEVELS,assertIntentRecord,record,statement,target,lifecycle,source,lines,epistemic,metadata,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertConclusion,known,assertConclusions,known,ids,id,assertTodoProposal,known,assertTodoProposals,known,proposalIds,id,assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertPlanGraphFingerprint,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertConclusionValue,conclusion,expectedId,assertTodoProposalValue,proposal,target,expectedId,assertGroundedGenerationMetadata,generation,validateGroundedContext,report,diagnosticIds,diagnostic,validateTodoProposalContext,known,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,assertRelation,relation,objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue + src/core/schema/intent.ts: + i: ../id.js + e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,target,lifecycle,source,lines,epistemic,metadata,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation GroundedValidationContext: TodoProposalValidationContext: CodeChangePlanValidationContext: CodeChangeAcceptanceValidationContext: - ACTIONS() - MODALITIES() - POLARITIES() - LIFECYCLES() - SOURCE_KINDS() - EPISTEMIC_CLASSES() - RELATION_TYPES() - CONCLUSION_KINDS() - DIAGNOSTIC_SEVERITIES() - TODO_PRIORITIES() - GENERATION_REQUESTED_MODES() - GENERATION_EFFECTIVE_MODES() - CODE_CHANGE_ACTIONS() - CODE_CHANGE_RISK_LEVELS() assertIntentRecord() record() statement() @@ -1472,78 +1271,11 @@ D: change() relations() summary() - assertConclusion() - known() - assertConclusions() - known() - ids() - id() - assertTodoProposal() - known() - assertTodoProposals() - known() - proposalIds() - id() - assertCodeChangePlan() - known() - assertCodeChangePlans() - known() - ids() - id() - assertCodeChangePlansForReview() - ids() - plan() - evidence() - id() - assertCodeChangePlanForAcceptance() - known() - plan() - evidence() - assertPlanGraphFingerprint() - assertCodeChangeAcceptance() - beforeKnown() - afterKnown() - acceptance() - expectedCleared() - expectedRemaining() - expectedBlocking() - expectedAccepted() - assertConclusionValue() - conclusion() - expectedId() - assertTodoProposalValue() - proposal() - target() - expectedId() - assertGroundedGenerationMetadata() - generation() - validateGroundedContext() - report() - diagnosticIds() - diagnostic() - validateTodoProposalContext() - known() - validateCodeChangePlanContext() - known() - conclusions() - proposals() - referencedConclusionIds() - proposal() - proposalIds() - assertCodeChangePlanValue() - plan() - target() - targetPaths() - changePaths() - change() - normalizedPath() - risk() - evidence() - semantic() - expectedHash() - expectedId() assertRelation() relation() + src/core/schema/utils.ts: + i: ../types.js + e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation objectValue() exactKeys() expectedSet() @@ -1580,6 +1312,8 @@ D: exactCounts() actual() isJsonValue() + assertGroundedGenerationMetadata() + generation() src/diff/git.ts: i: ./text.js,node:child_process,node:fs,node:path,node:util e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result @@ -1607,57 +1341,33 @@ D: readWorkingFile() runGit() result() + src/semantic/reranker/result.ts: + i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js + e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons + createSemanticRerankResult() + decisions() + assertSemanticRerankResult() + candidates() + records() + seenDecisions() + acceptedDeclarations() + candidate() + citations() + record() + expectedHash() + applyAcceptedSemanticRelations() + candidates() + added() + candidate() + assertSemanticVerdictReason() + allowedVerdicts() + allowedReasons() sdk/rust/examples/basic.rs: i: serde_json::json,std::env,todo2code::Client e: main,run,joined_ids main() run() joined_ids() - src/watch/watcher.ts: - i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path - e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish - SnapshotDelta: - ScanOptions: - ReportResult: - WatchOptions: - scanTree() - maxFiles() - absoluteRoot() - visit() - absolute() - relative() - stat() - diffSnapshots() - previous() - describeDelta() - shown() - rest() - DEFAULT_MIN_INTERVAL_MS() - DEFAULT_SCAN_INTERVAL_MS() - watchRepository() - root() - minIntervalMs() - scanIntervalMs() - emit() - now() - sleep() - signal() - matcher() - runReport() - result() - snapshot() - lastReportStartedAt() - pending() - current() - delta() - waitMs() - generate() - startedAt() - result() - defaultSleep() - timer() - onAbort() - finish() src/extractors/markdown-llm.ts: i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./markdown.js,node:fs,node:path,node:url e: MarkdownEnrichment,MarkdownResponse,AuditedMarkdownExtractionResult,MarkdownLlmRequiredError,MarkdownAttemptError,CoveredBatch,MARKDOWN_LLM_BATCH_RECORDS @@ -1725,50 +1435,51 @@ D: slice() beforeNumbers() afterNumbers() - src/interfaces/a2a-history.ts: - i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path - e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath - IntentRunListItem: - CommunicationRunSummary: - RunHistoryFilters: - listIntentRuns() - runsDirectory() - entries() - items() - readRunEntries() - readRun() - runDirectory() - graphPath() - manifestPath() - manifest() - safeRunPath() - runListItem() - files() - llm() - runtime() - warnings() - validTimestamp() - validStatus() - llmSummary() - readCommunicationSummary() - relative() - filePath() - stat() - value() - participants() - issues() - participantSummary() - matchesRunFilters() - participant() - role() - ticket() - severity() - normalized() - stringArray() - safeManifestFiles() + src/watch/watcher.ts: + i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path + e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish + SnapshotDelta: + ScanOptions: + ReportResult: + WatchOptions: + scanTree() + maxFiles() + absoluteRoot() + visit() absolute() relative() - relativeApiPath() + stat() + diffSnapshots() + previous() + describeDelta() + shown() + rest() + DEFAULT_MIN_INTERVAL_MS() + DEFAULT_SCAN_INTERVAL_MS() + watchRepository() + root() + minIntervalMs() + scanIntervalMs() + emit() + now() + sleep() + signal() + matcher() + runReport() + result() + snapshot() + lastReportStartedAt() + pending() + current() + delta() + waitMs() + generate() + startedAt() + result() + defaultSleep() + timer() + onAbort() + finish() src/graph/linker.ts: i: ../core/id.js,../core/schema.js,../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js,./symbol-resolution.js e: PairEvidence,RecordKeywords,DirectedRelation,SourceRelationRule,indexKeywords,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,isSuppressedConfigurationPair,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,resolvedNlAstSymbol,capabilityOverlap,objectSimilarity,sharedTopics,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation,intersects,set,intersectsAliases,set,countBy,key @@ -1851,53 +1562,64 @@ D: set() countBy() key() - src/extractors/nl-llm.ts: - i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./nl.js,node:fs,node:path,node:url - e: RawNlRecord,NlResponse,AuditedNlExtractionResult,NlLlmRequiredError,NlAttemptError - RawNlRecord: - NlResponse: - AuditedNlExtractionResult: - NlLlmRequiredError: super(-1),extractNlIntentAudited(-1),assertNlExtractionOptions(-1),startedAt(-1),result(-1),client(-1),absolute(-1),body(-1),sourcePath(-1),maxLine(-1),prompt(-1),response(-1),records(-1),failure(-1),responses(-1) - NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failedAudit(-1),deterministic(-1),markDeterministic(-1),toIntentRecord(-1),start(-1),end(-1),lines(-1),excerpt(-1),action(-1),normalizedText(-1),statementText(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),audit(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),readPrompt(-1),promptPath(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1) - src/extractors/docs-deterministic.ts: - i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path - e: DeterministicDocumentationOptions,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,fenceMatch,marker,language,record,heading,level,title,bullet,block,record,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf - DeterministicDocumentationOptions: - MAX_HEADING_LEVEL() - MIN_STATEMENT_CHARS() - extractDocumentationBaseline() - root() - resolver() - body() - primePathMapper() - resolved() - mapped() - convertDocument() + src/core/record.ts: + i: ./id.js,./target.js,./version.js + e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,withRecordGeneration,generationMetadata,used,extractorIdentity,separator,clamp,sourcePrefix + BuildRecordGenerationInput: + BuildRecordInput: + buildRecord() + rawExcerpt() + withRecordGeneration() + generationMetadata() + used() + extractorIdentity() + separator() + clamp() + sourcePrefix() + src/interfaces/a2a-history.ts: + i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path + e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath + IntentRunListItem: + CommunicationRunSummary: + RunHistoryFilters: + listIntentRuns() + runsDirectory() + entries() + items() + readRunEntries() + readRun() + runDirectory() + graphPath() + manifestPath() + manifest() + safeRunPath() + runListItem() + files() + llm() + runtime() + warnings() + validTimestamp() + validStatus() + llmSummary() + readCommunicationSummary() relative() - lines() - raw() - fenceMatch() - marker() - language() - record() - heading() - level() - title() - bullet() - block() - record() - paragraph() - record() - readParagraph() - cursor() - line() - qualifyingStatement() - target() - hasCodeSpanIdentifier() - statementRecord() - action() - codeBlockRecord() - targetsOf() + filePath() + stat() + value() + participants() + issues() + participantSummary() + matchesRunFilters() + participant() + role() + ticket() + severity() + normalized() + stringArray() + safeManifestFiles() + absolute() + relative() + relativeApiPath() src/evaluation/gold-cases.ts: i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration @@ -1962,20 +1684,43 @@ D: records() record() deterministicGeneration() - src/core/record.ts: - i: ./id.js,./target.js,./version.js - e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,withRecordGeneration,generationMetadata,used,extractorIdentity,separator,clamp,sourcePrefix - BuildRecordGenerationInput: - BuildRecordInput: - buildRecord() - rawExcerpt() - withRecordGeneration() - generationMetadata() - used() - extractorIdentity() - separator() - clamp() - sourcePrefix() + src/communication/intake-contract.ts: + i: node:crypto + e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError + VerifiedPrincipal: + ParticipantV2: + ParticipantRegistryV2: + IntakeEnvelope: + IntakeDiagnostic: + IntakeResult: + IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1) + src/communication/intake-protobuf.ts: + i: ./intake-contract.js + e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte + encodeIntakeEnvelope() + operation() + decodeIntakeEnvelope() + values() + offset() + fieldStart() + number() + wire() + raw() + payload() + encodeIntakeResult() + decodeIntakeResult() + strings() + numbers() + offset() + field() + bytesField() + data() + varintField() + writeVarint() + remaining() + readVarint() + value() + byte() sdk/rust/src/client.rs: i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super:: e: Client @@ -2014,29 +1759,6 @@ D: bestIndex() action() confidence() - src/extractors/markdown-paths.ts: - i: ../core/io.js,node:fs,node:fs,node:path - e: MarkdownPathResolver,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,base,seen,directory,absolute,matches - MarkdownPathResolver: - PATH_SEARCH_EXCLUDES() - MAX_INDEXED_FILES() - createMarkdownPathResolver() - repositoryRoot() - basenames() - headingDirectories() - normalized() - candidate() - matches() - isRepositoryPath() - absolute() - headingScopes() - buildBasenameIndex() - index() - base() - seen() - directory() - absolute() - matches() sdk/typescript/examples/basic.ts: i: ../src/index.js e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison @@ -2059,14 +1781,6 @@ D: reality() gitDiff() comparison() - python/ast_extract.py: - e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main - FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1) - source_hash(value) - dotted_name(node) - is_module_entrypoint(node) - iter_python_files(root;files_from) - main() examples/backend/src/server.ts: i: ./store.js,./validation.js,node:http e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host @@ -2090,6 +1804,14 @@ D: startBackend() port() host() + python/ast_extract.py: + e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main + FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1) + source_hash(value) + dotted_name(node) + is_module_entrypoint(node) + iter_python_files(root;files_from) + main() src/graph/symbol-resolution.ts: i: ../core/target.js,../core/types.js e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,values,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration @@ -2161,54 +1883,6 @@ D: resolved() resolveSource() raw() - src/live/contract-check.ts: - i: ../core/types.js - e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round - LiveBudget: - LiveStageMeasurement: - LiveHistoryRecord: - LiveHistoryStageSummary: - LiveHistorySummary: - LiveContractAudit: - LIVE_HISTORY_LIMIT() - liveRequestTimeoutMs() - measureLiveStages() - missingLiveStages() - measureStage() - responses() - overLatency() - sumUsage() - values() - buildLiveAudit() - stages() - missingStages() - totalLatencyMs() - costs() - totalCostUsd() - overCost() - overTotalLatency() - buildRecordedLiveAudit() - initial() - history() - toLiveHistoryRecord() - appendLiveHistory() - kept() - summarizeLiveHistory() - runs() - byStage() - entries() - redactLiveMessage() - renderLiveReport() - lines() - status() - cost() - detail() - total() - median() - middle() - value() - ratio() - round() src/extractors/docs-record.ts: i: ../core/record.js,../version.js,./docs-types.js e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle @@ -2291,6 +1965,74 @@ D: duplicateCounts() snapshots() result() + src/live/contract-check.ts: + i: ../core/types.js + e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round + LiveBudget: + LiveStageMeasurement: + LiveHistoryRecord: + LiveHistoryStageSummary: + LiveHistorySummary: + LiveContractAudit: + LIVE_HISTORY_LIMIT() + liveRequestTimeoutMs() + measureLiveStages() + missingLiveStages() + measureStage() + responses() + overLatency() + sumUsage() + values() + buildLiveAudit() + stages() + missingStages() + totalLatencyMs() + costs() + totalCostUsd() + overCost() + overTotalLatency() + buildRecordedLiveAudit() + initial() + history() + toLiveHistoryRecord() + appendLiveHistory() + kept() + summarizeLiveHistory() + runs() + byStage() + entries() + redactLiveMessage() + renderLiveReport() + lines() + status() + cost() + detail() + total() + median() + middle() + value() + ratio() + round() + golang/ast_extract.go: + e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash + Fact: + output: + factCollector: + main() + emit() + collectGoFiles() + parseFile() + position() + excerpt() + add() + visitDecl() + visitFunc() + visitGenDecl() + visitCalls() + typeName() + declaredTypeKind() + strPtr() + toSlash() scripts/research/rerank-embedding-shortlist.mjs: i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top @@ -2324,75 +2066,36 @@ D: required() value() top() - golang/ast_extract.go: - e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash - Fact: - output: - factCollector: - main() - emit() - collectGoFiles() - parseFile() - position() - excerpt() - add() - visitDecl() - visitFunc() - visitGenDecl() - visitCalls() - typeName() - declaredTypeKind() - strPtr() - toSlash() - src/operations/subactor.ts: - i: ../core/types.js,./validation.js - e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding - CompileSubactorEnvelopeOptions: - valueMatchesType() - assertBinding() - ageSeconds() - compileSubactorProcessEnvelope() - variableById() - referenced() - variable() - binding() - humanApproval() - binding() - src/extractors/git.ts: - i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:path,node:util - e: GitCommit,ChangedFile,GitExtractionOptions,execFileAsync,extractGitIntent,root,count,inside,message,commit,changedFiles,stats,diff,classified,inferredSymbols,docOnly,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath - GitCommit: - ChangedFile: - GitExtractionOptions: - execFileAsync() - extractGitIntent() + src/config/env.ts: + i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path + e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter + T2CConfig: + loadEnvFile() + explicit() + candidates() + content() + trimmed() + separator() + key() + value() + envString() + value() + envOptional() + value() + envNumber() + raw() + value() + envBoolean() + raw() + envList() + raw() + envLlmMode() + value() + getConfig() + model() root() - count() - inside() - message() - commit() - changedFiles() - stats() - diff() - classified() - inferredSymbols() - docOnly() - runGit() - result() - readCommits() - output() - readChangedFiles() - output() - parts() - status() - readStats() - output() - additions() - deletions() - extractChangedSymbols() - output() - symbol() - isDocumentationPath() + configForDisplay() + hasOpenRouter() src/diff/text-render.ts: i: ./text-types.js e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number @@ -2433,36 +2136,25 @@ D: htmlCell() cssClass() number() - src/config/env.ts: - i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path - e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter - T2CConfig: - loadEnvFile() - explicit() - candidates() - content() - trimmed() - separator() - key() - value() - envString() - value() - envOptional() - value() - envNumber() - raw() - value() - envBoolean() - raw() - envList() - raw() - envLlmMode() - value() - getConfig() - model() - root() - configForDisplay() - hasOpenRouter() + src/operations/subactor.ts: + i: ../core/types.js,./validation.js + e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding + CompileSubactorEnvelopeOptions: + valueMatchesType() + assertBinding() + ageSeconds() + compileSubactorProcessEnvelope() + variableById() + referenced() + variable() + binding() + humanApproval() + binding() + src/communication/intake-service.ts: + i: ./intake-store.js,node:crypto,node:fs,node:path + e: IntakeState,GovernedIntakeService + IntakeState: + GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) scripts/live-model-comparison.mjs: i: node:fs,node:path,node:url e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile @@ -2481,6 +2173,275 @@ D: failedAudit() message() writeFile() + src/cli.ts: + i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util + e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath + ParsedArgs: + execFileAsync() + main() + parsed() + command() + config() + handler() + commandHandlers() + resolveMainCommand() + handleLink() + files() + records() + graph() + handleDiagnose() + graphFile() + graph() + handleSummarize() + graphFile() + graph() + diagnosticsPath() + diagnostics() + result() + out() + handleProposeTodo() + graphPath() + diagnosticsPath() + output() + result() + handleRenderTodo() + synthesisPath() + graphPath() + diagnosticsPath() + patch() + audit() + result() + handleApplyTodo() + patch() + audit() + receipt() + actor() + approvalHash() + result() + handleProposeCodeChange() + graphPath() + diagnosticsPath() + output() + result() + handleRenderCodeChange() + plansPath() + patch() + audit() + result() + handleProposeSourcePatch() + inputPath() + output() + isPlanSet() + result() + handleApplySourcePatch() + patchPath() + actor() + approvalHash() + receipt() + result() + handleEvaluateCodeChange() + planPath() + beforeGraphPath() + afterGraphPath() + output() + result() + handleCloseCodeChange() + inputPath() + beforeGraphPath() + afterGraphPath() + output() + result() + handleCompareWorkspace() + root() + result() + handlePipeline() + root() + options() + result() + handleWatch() + root() + taskFile() + pipeline() + controller() + stop() + resolvePipelineRoot() + buildPipelineOptions() + buildCommonPipelineOptions() + resolveWatchTaskFile() + buildWorkspaceComparisonOptions() + formatWatchEvent() + stamp() + handleDiff() + mode() + out() + svg() + html() + maxRows() + parseDiffMode() + mode() + handleGraphDiff() + beforeFile() + afterFile() + diff() + out() + svg() + buildDiffPayload() + buildFileDiff() + beforeFile() + afterFile() + context() + buildGitDiff() + context() + root() + result() + handleReality() + graphFile() + graph() + diagnosticsPath() + diagnostics() + view() + out() + svg() + markdown() + handleExtract() + extractor() + root() + out() + handler() + handleExtractNl() + file() + inline() + result() + handleExtractGit() + result() + handleExtractAst() + result() + handleExtractConfig() + result() + handleExtractRuntime() + cycle() + result() + handleExtractMarkdown() + result() + handleExtractDocs() + result() + handleExtractCommunication() + result() + handleCommunication() + root() + graph() + analysis() + out() + markdown() + graphOut() + emitExtraction() + emitJson() + handleIntake() + operation() + inputPath() + absolute() + result() + intakeExitCode() + initProject() + moduleRoot() + sourceEnv() + targetEnv() + task() + sourceIgnore() + targetIgnore() + doctor() + result() + parseArgs() + options() + value() + next() + name() + next() + optionString() + value() + optionNullableString() + value() + optionBoolean() + value() + optionNumber() + value() + number() + optionList() + value() + optionNlMode() + optionLlmMode() + value() + optionTaskMode() + value() + optionSummaryMode() + optionPipelineTaskMode() + value() + reportPipelineDegradation() + printHelp() + invokedPath() + src/extractors/ast.ts: + i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path + e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result + AstExtractionOptions: + ExternalCacheAdapter: + extractAstIntent() + root() + cache() + matcher() + files() + body() + relative() + extracted() + adapterFiles() + manifest() + result() + unsupported() + sourceManifest() + body() + isIntentRecords() + isExtractionResult() + result() + src/extractors/nl-llm.ts: + i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./nl.js,node:fs,node:path,node:url + e: RawNlRecord,NlResponse,AuditedNlExtractionResult,NlLlmRequiredError,NlAttemptError + RawNlRecord: + NlResponse: + AuditedNlExtractionResult: + NlLlmRequiredError: super(-1),extractNlIntentAudited(-1),assertNlExtractionOptions(-1),startedAt(-1),result(-1),client(-1),absolute(-1),body(-1),sourcePath(-1),maxLine(-1),prompt(-1),response(-1),records(-1),failure(-1),responses(-1) + NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failedAudit(-1),deterministic(-1),markDeterministic(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),audit(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),readPrompt(-1),promptPath(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1) + src/extractors/docs-llm.ts: + i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url + e: DocumentationLlmRequiredError + DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1) + src/extractors/markdown-paths.ts: + i: ../core/io.js,node:fs,node:fs,node:path + e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches + MarkdownPathResolver: + BasenameIndexState: + PATH_SEARCH_EXCLUDES() + MAX_INDEXED_FILES() + createMarkdownPathResolver() + repositoryRoot() + basenames() + headingDirectories() + normalized() + candidate() + matches() + isRepositoryPath() + absolute() + headingScopes() + buildBasenameIndex() + index() + state() + directory() + entries() + createBasenameIndexState() + readBasenameDirectoryEntries() + isNestedCheckout() + scanDirectoryForBasenames() + absolute() + addBasenameIndexMatch() + matches() src/synthesis/todo-patch.ts: i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings @@ -2542,87 +2503,9 @@ D: isoDate() uniqueIds() uniqueStrings() - src/summary/payload.ts: - i: ../core/types.js - e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord - compactSummaryPayload() - referenced() - nonAst() - moduleAst() - relevantAst() - ids() - selectedRelations() - compactRecord() - src/live/model-comparison.ts: - i: ../core/types.js,./contract-check.js - e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round - LiveModelRun: - LiveModelMeasurement: - LiveModelAgreement: - LiveModelComparison: - measureLiveModelRun() - responses() - records() - enrichedRecords() - costUsd() - isLlmEnriched() - sourceKey() - lines() - compareLiveModelOutputs() - rightBySource() - pairs() - agreeing() - buildLiveModelComparison() - models() - passing() - pick() - measured() - renderLiveModelComparison() - sumUsage() - values() - round() - src/extractors/docs-llm.ts: - i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url - e: DocumentationLlmRequiredError - DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1) - src/extractors/ast.ts: - i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path - e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result - AstExtractionOptions: - ExternalCacheAdapter: - extractAstIntent() - root() - cache() - matcher() - files() - body() - relative() - extracted() - adapterFiles() - manifest() - result() - unsupported() - sourceManifest() - body() - isIntentRecords() - isExtractionResult() - result() - src/evaluation/gold-cli.ts: - i: node:fs,node:path - e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered - main() - args() - arg() - json() - requirePerfect() - outIndex() - outPath() - dataset() - report() - rendered() src/comparison/workspace.ts: i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util - e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result + e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result WorkspaceComparisonOptions: CoverageSnapshot: WorkspaceComparison: @@ -2661,6 +2544,7 @@ D: artifacts() scopedOutputDirectory() absolute() + relative() commonPipelineOptions() optionsForRoot() existingFile() @@ -2681,8 +2565,60 @@ D: documentationLine() git() result() - src/communication/llm.ts: - i: ../config/env.js,../core/id.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url + src/summary/payload.ts: + i: ../core/types.js + e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord + compactSummaryPayload() + referenced() + nonAst() + moduleAst() + relevantAst() + ids() + selectedRelations() + compactRecord() + src/evaluation/gold-cli.ts: + i: node:fs,node:path + e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered + main() + args() + arg() + json() + requirePerfect() + outIndex() + outPath() + dataset() + report() + rendered() + src/live/model-comparison.ts: + i: ../core/types.js,./contract-check.js + e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round + LiveModelRun: + LiveModelMeasurement: + LiveModelAgreement: + LiveModelComparison: + measureLiveModelRun() + responses() + records() + enrichedRecords() + costUsd() + isLlmEnriched() + sourceKey() + lines() + compareLiveModelOutputs() + rightBySource() + pairs() + agreeing() + buildLiveModelComparison() + models() + passing() + pick() + measured() + renderLiveModelComparison() + sumUsage() + values() + round() + src/communication/llm/implementation.ts: + i: ../../config/env.js,../../core/id.js,../../core/io.js,../../core/record.js,../../llm/audit.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js,../../version.js,node:fs,node:path,node:url e: RawCommunicationEnrichment,RawParticipantSynthesis,RawCommunicationResponse,ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError,ParticipantGroup RawCommunicationEnrichment: RawParticipantSynthesis: @@ -2692,78 +2628,311 @@ D: CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1) CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1),participantGroups(-1),grouped(-1),participant(-1),role(-1),key(-1),values(-1),promptPayload(-1),validateEnrichments(-1),expected(-1),output(-1),materializeSyntheses(-1),byKey(-1),seen(-1),output(-1),group(-1),permitted(-1),recordIds(-1),enrichRecord(-1),deterministicSyntheses(-1),synthesis(-1),markDeterministic(-1),marked(-1),deterministicGeneration(-1),fallbackGeneration(-1),llmGeneration(-1),audit(-1),roleOf(-1),sortedUnique(-1),readPrompt(-1),promptPath(-1),communicationStrings(-1),COMMUNICATION_ENRICHMENT_CONTRACT(-1),PARTICIPANT_SYNTHESIS_CONTRACT(-1),COMMUNICATION_RESPONSE_CONTRACT(-1) ParticipantGroup: - src/synthesis/validation.ts: - i: ../core/schema.js,../core/types.js - e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values - TodoProposalDuplicate: - TodoProposalValidationResult: - validateAndClassifyTodoProposals() - existing() - duplicates() - orderedProposalIds() - duplicateProposalIds() - duplicateIds() - duplicateEvidence() - proposalWords() + src/extractors/changelog.ts: + i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path + e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower + extractChangelog() + absolute() + body() + relative() + lines() + raw() + versionHeading() + categoryHeading() + bullet() + block() + text() + action() + resolvedPaths() + changelogAction() + normalized() + lower() + src/extractors/docs-deterministic.ts: + i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path + e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf + DeterministicDocumentationOptions: + DocumentationContext: + LineResult: + MAX_HEADING_LEVEL() + MIN_STATEMENT_CHARS() + extractDocumentationBaseline() + root() + resolver() + body() + primePathMapper() + resolved() + mapped() + convertDocument() + relative() + lines() + raw() + lineResult() + handleDocumentationLine() + headingRecord() + sectionHeading() + bulletRecord() + paragraphResult() + parseFenceBlock() + match() + marker() + language() + record() + parseSectionHeading() + heading() + level() + title() + record() + parseBulletStatement() + bullet() + block() + record() + parseParagraphStatement() + paragraph() + record() + readParagraph() + cursor() + line() + qualifyingStatement() target() - sharedTicket() - sharedSymbol() - sharedPath() - similarity() - dependencyFirstPriorityOrder() - byId() - remainingDependencies() - dependents() - values() - compare() - left() - right() - ready() - id() - remaining() - words() - jaccard() - common() - intersects() - values() - src/synthesis/tasks-llm.ts: - i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url - e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError - RawDiagnosticAction: - AuditedTaskSynthesisResult: - TaskSynthesisRequiredError: super(-1) - TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1) - src/interfaces/a2a-task-store.ts: - i: ../config/env.js,../core/security.js,../services/actions.js,node:crypto,node:fs,node:path,node:timers/promises - e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,currentTaskState,completeTask,message,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageToken,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage - PreparedTask: - ListCursor: - TaskStoreSnapshot: - tasks() - messageTaskIndex() - clearA2aTaskStoreForTests() - handleA2aRpc() - handleRpcInTaskStore() - params() - sendMessage() + hasCodeSpanIdentifier() + statementRecord() + action() + codeBlockRecord() + targetsOf() + src/extractors/git.ts: + i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util + e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath + GitCommit: + ChangedFile: + GitExtractionOptions: + DiscoveredRepository: + RepositoryDiscoveryResult: + DiscoveryState: + execFileAsync() + MAX_DISCOVERED_REPOSITORIES() + MAX_DISCOVERY_DIRECTORIES() + REPOSITORY_READ_CONCURRENCY() + DISCOVERY_EXCLUDED_DIRECTORIES() + extractGitIntent() + root() + count() + discovery() + results() message() - sendConfiguration() - prepared() - getTask() - task() - historyLength() - cancelTask() - task() - fullTaskView() - scheduleTaskExecution() - task() - withTaskStore() - storePath() - release() - result() - configuredTaskStorePath() - acquireTaskStoreLock() - deadline() + extractRepositoryGitIntent() + message() + commit() + changedFiles() + stats() + diff() + classified() + inferredSymbols() + scopedFiles() + docOnly() + discoverGitRepositories() + state() + current() + entries() + createDiscoveryState() + hasMoreDiscoveryWork() + takeNextDiscoveryDirectory() + current() + readDiscoveryEntries() + filterDiscoveryChildren() + processDiscoveryDirectory() + child() + prefix() + marker() + registerDiscoveredRepository() + resolveDiscoveryPrefix() + finishDiscovery() + gitMarkerState() + marker() + isGitWorkTree() + scopeChangedFile() + mapWithConcurrency() + results() + cursor() + workers() + index() + value() + runGit() + result() + readCommits() + output() + readChangedFiles() + output() + parts() + status() + readStats() + output() + additions() + deletions() + extractChangedSymbols() + output() + symbol() + isDocumentationPath() + src/graph/diff.ts: + i: ../core/id.js,../core/schema.js + e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate + DiffSvgOptions: + diffIntentGraphs() + beforeById() + afterById() + unchangedRecords() + beforeGroups() + afterGroups() + left() + right() + paired() + beforeRecord() + afterRecord() + beforeRelations() + afterRelations() + fingerprint() + renderGraphDiffSvg() + maxItems() + title() + visibleRows() + width() + height() + y() + assertGraph() + groupRecords() + groups() + identity() + values() + recordIdentity() + normalizeRecord() + changedFieldPaths() + isObject() + relationKey() + compareRecords() + compareRelations() + recordLabel() + changeLabel() + metricCard() + escapeXml() + truncate() + src/core/schema/code-change.ts: + i: ../id.js,../types.js + e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch + assertCodeChangePlan() + known() + assertCodeChangePlans() + known() + ids() + id() + assertCodeChangePlansForReview() + ids() + plan() + evidence() + id() + assertCodeChangePlanForAcceptance() + known() + plan() + evidence() + assertCodeChangeAcceptance() + beforeKnown() + afterKnown() + acceptance() + expectedCleared() + expectedRemaining() + expectedBlocking() + expectedAccepted() + assertPlanGraphFingerprint() + assertCodeChangePlanValue() + plan() + target() + targetPaths() + changePaths() + change() + normalizedPath() + risk() + evidence() + semantic() + expectedHash() + expectedId() + validateCodeChangePlanContext() + known() + conclusions() + proposals() + referencedConclusionIds() + proposal() + proposalIds() + assertStringSetMatch() + src/synthesis/validation.ts: + i: ../core/schema.js,../core/types.js + e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values + TodoProposalDuplicate: + TodoProposalValidationResult: + validateAndClassifyTodoProposals() + existing() + duplicates() + orderedProposalIds() + duplicateProposalIds() + duplicateIds() + duplicateEvidence() + proposalWords() + target() + sharedTicket() + sharedSymbol() + sharedPath() + similarity() + dependencyFirstPriorityOrder() + byId() + remainingDependencies() + dependents() + values() + compare() + left() + right() + ready() + id() + remaining() + words() + jaccard() + common() + intersects() + values() + src/synthesis/tasks-llm.ts: + i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url + e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError + RawDiagnosticAction: + AuditedTaskSynthesisResult: + TaskSynthesisRequiredError: super(-1) + TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1) + src/interfaces/a2a-task-store.ts: + i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises + e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage + PreparedTask: + ListCursor: + TaskStoreSnapshot: + tasks() + messageTaskIndex() + clearA2aTaskStoreForTests() + handleA2aRpc() + handleRpcInTaskStore() + params() + sendMessage() + message() + sendConfiguration() + prepared() + getTask() + task() + historyLength() + cancelTask() + task() + fullTaskView() + scheduleTaskExecution() + task() + withTaskStore() + storePath() + release() + result() + configuredTaskStorePath() + acquireTaskStoreLock() + deadline() removeLock() removeStaleLock() stat() @@ -2793,9 +2962,18 @@ D: executeMessage() command() result() + domainResult() + rejectTask() + protobuf() + diagnostic() + message() currentTaskState() completeTask() + protobuf() message() + protobufResult() + intakeDomainResult() + record() failTask() message() agentMessage() @@ -2808,7 +2986,7 @@ D: statusTimestampAfter() filter() filtered() - pageToken() + pageCursor() start() page() last() @@ -2831,103 +3009,42 @@ D: task() messageKey() errorMessage() - src/graph/diff.ts: - i: ../core/id.js,../core/schema.js - e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate - DiffSvgOptions: - diffIntentGraphs() - beforeById() - afterById() - unchangedRecords() - beforeGroups() - afterGroups() - left() - right() - paired() - beforeRecord() - afterRecord() - beforeRelations() - afterRelations() - fingerprint() - renderGraphDiffSvg() - maxItems() - title() - visibleRows() - width() - height() - y() - assertGraph() - groupRecords() - groups() - identity() - values() - recordIdentity() - normalizeRecord() - changedFieldPaths() - isObject() - relationKey() - compareRecords() - compareRelations() - recordLabel() - changeLabel() - metricCard() - escapeXml() - truncate() - src/extractors/changelog.ts: - i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path - e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower - extractChangelog() - absolute() - body() - relative() - lines() - raw() - versionHeading() - categoryHeading() - bullet() - block() - text() - action() - resolvedPaths() - changelogAction() - normalized() - lower() - sdk/python/examples/basic.py: - e: main - main() - sdk/php/src/Client.php: - e: Client - Client: - scripts/verify-workflow-yaml.mjs: - i: node:fs,node:path - e: explicit,files,body,seen,match,key,previous,workflowFiles,directory - explicit() - files() - body() - seen() - match() - key() - previous() - workflowFiles() - directory() - scripts/research/audit-changelog-sample.mjs: - i: node:child_process,node:fs,node:path - e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,classification,labelCounts,labelRepositories,stratifiedSample,groups,values,added,record,targetClass,target,classify,text,file,exactFileUpdate,match,candidate,basename,pathOwners,file,countBy,item,readJson,parseArgs,value,index,limitIndex,limit,intentDirectoryIndex,intentDirectory - options() - entries() - root() - latest() - runDirectory() - diagnostics() - graph() - recordsById() - findings() - selected() - trackedFiles() - classification() - labelCounts() - labelRepositories() - stratifiedSample() + src/communication/intake-store.ts: + i: ../core/io.js,../core/security.js,node:crypto,node:fs,node:path + e: IntakeEvent,StreamSnapshot,IntakeEventStore + IntakeEvent: + StreamSnapshot: + IntakeEventStore: read(-1),names(-1),name(-1),eventPath(-1),stat(-1),event(-1),lockPath(-1),stream(-1),existing(-1),writeRegistry(-1),projectionPath(-1),slug(-1),atomicWrite(-1),safe(-1),temp(-1),assertSafe(-1),hashEvent(-1),broken(-1),unsafe(-1) + scripts/verify-workflow-yaml.mjs: + i: node:fs,node:path + e: explicit,files,body,seen,match,key,previous,workflowFiles,directory + explicit() + files() + body() + seen() + match() + key() + previous() + workflowFiles() + directory() + scripts/research/audit-changelog-sample.mjs: + i: node:child_process,node:fs,node:path + e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,classification,labelCounts,labelRepositories,stratifiedSample,groups,values,added,record,targetClass,target,classify,text,file,exactFileUpdate,match,candidate,basename,pathOwners,file,countBy,item,readJson,parseArgs,value,index,limitIndex,limit,intentDirectoryIndex,intentDirectory + options() + entries() + root() + latest() + runDirectory() + diagnostics() + graph() + recordsById() + findings() + selected() + trackedFiles() + classification() + labelCounts() + labelRepositories() + stratifiedSample() groups() values() added() @@ -2953,6 +3070,183 @@ D: limit() intentDirectoryIndex() intentDirectory() + sdk/php/src/Client.php: + e: Client + Client: + sdk/python/examples/basic.py: + e: main + main() + examples/backend/src/validation.ts: + e: ValidationResult,ALLOWED_ACTIONS,validateEventPayload,invalid,record,agent,action,object + ValidationResult: + ALLOWED_ACTIONS() + validateEventPayload() + invalid() + record() + agent() + action() + object() + java/JavaAstExtract.java: + i: com.sun.source.util.JavacTask,com.sun.source.util.SourcePositions,com.sun.source.util.TreePathScanner,com.sun.source.util.Trees,java.io.IOException,java.nio.charset.StandardCharsets,java.nio.file.Files,java.nio.file.Path,java.nio.file.Paths + e: JavaAstExtract + JavaAstExtract: main(-1),emit(-1),parseFile(-1),emit(-1),collect(-1),try(-1),containsIgnored(-1),try(-1),Collector(-1),add(-1),map(-1),add(-1),map(-1),add(-1),add(-1),add(-1),add(-1),map(-1),add(-1),map(-1),emit(-1),json(-1),json(-1),escape(-1),slash(-1) + src/extractors/nl.ts: + i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path + e: NlExtractionOptions,assertNlExtractionOptions,extractNlIntent,absolute,body,sourcePath,classified,action,object,missing,confidence,inferActor,detectMissingFields + NlExtractionOptions: + assertNlExtractionOptions() + extractNlIntent() + absolute() + body() + sourcePath() + classified() + action() + object() + missing() + confidence() + inferActor() + detectMissingFields() + src/extractors/configuration.ts: + i: ../config/env.js,../core/ignore.js,../core/io.js,../core/record.js,../core/types.js,node:path + e: ConfigurationEntry,MAX_ENTRIES_PER_FILE,extractConfigurationIntent,root,matcher,discovered,files,relative,body,isConfigurationPath,base,configurationRecords,base,entries,bounded,fileAggregate,format,lastLine,configurationFormat,base,jsonEntries,parsed,lines,tomlEntries,line,heading,pair,yamlOrAssignmentEntries,yaml,assignment,key,dockerEntries,match,instruction,detail,entry,uniqueEntries,seen,findKeyLine,pattern,index + ConfigurationEntry: + MAX_ENTRIES_PER_FILE() + extractConfigurationIntent() + root() + matcher() + discovered() + files() + relative() + body() + isConfigurationPath() + base() + configurationRecords() + base() + entries() + bounded() + fileAggregate() + format() + lastLine() + configurationFormat() + base() + jsonEntries() + parsed() + lines() + tomlEntries() + line() + heading() + pair() + yamlOrAssignmentEntries() + yaml() + assignment() + key() + dockerEntries() + match() + instruction() + detail() + entry() + uniqueEntries() + seen() + findKeyLine() + pattern() + index() + src/extractors/markdown-block.ts: + e: MarkdownListBlock,readListBlock,cursor,line + MarkdownListBlock: + readListBlock() + cursor() + line() + src/graph/capability-evidence.ts: + i: ../core/text.js,../core/types.js + e: STRUCTURAL_TOPICS,declaredCapabilityTopics,topics,locationTopics,aggregateCapabilityTopics,values,aggregateCapabilityOverlap,aggregate,declaration,requested,implemented,overlap,hasCapabilityClaim,isFileAggregate + STRUCTURAL_TOPICS() + declaredCapabilityTopics() + topics() + locationTopics() + aggregateCapabilityTopics() + values() + aggregateCapabilityOverlap() + aggregate() + declaration() + requested() + implemented() + overlap() + hasCapabilityClaim() + isFileAggregate() + src/core/ignore.ts: + i: node:fs,node:path + e: IgnoreRule,IgnoreMatcher,LoadIgnoreOptions,compileIgnorePattern,pattern,negated,directoryOnly,anchored,body,prefix,translateGlob,char,next,close,body,escapeLiteral,parseIgnoreFile,createIgnoreMatcher,normalize,decide,target,segments,ancestor,loadIgnoreMatcher,files,absolute,rule + IgnoreRule: + IgnoreMatcher: + LoadIgnoreOptions: + compileIgnorePattern() + pattern() + negated() + directoryOnly() + anchored() + body() + prefix() + translateGlob() + char() + next() + close() + body() + escapeLiteral() + parseIgnoreFile() + createIgnoreMatcher() + normalize() + decide() + target() + segments() + ancestor() + loadIgnoreMatcher() + files() + absolute() + rule() + src/llm/structured-schema.ts: + i: ../core/types.js + e: StructuredSchema,StructuredResponseError,StringOptions,NumberOptions,ArrayOptions + StructuredSchema: + StructuredResponseError: super(-1),schema(-1),parse(-1),string(-1),pattern(-1),fail(-1),fail(-1),nullableString(-1),base(-1),number(-1),fail(-1),checkNumberBounds(-1),integer(-1),numeric(-1),parsed(-1),enumValue(-1),allowed(-1),fail(-1),array(-1),fail(-1),fail(-1),parsed(-1),identities(-1),object(-1),keys(-1),allowed(-1),fail(-1),candidate(-1),unknown(-1),missing(-1),checkNumberBounds(-1),fail(-1),fail(-1),jsonIdentity(-1),record(-1),describe(-1),fail(-1) + StringOptions: + NumberOptions: + ArrayOptions: + src/interfaces/a2a-types.ts: + i: ../services/actions.js,./intake-actions.js + e: JsonRpcRequest,A2APart,A2AMessage,A2AArtifact,A2ATask,StoredTask,SendConfiguration,A2ARequestError,BodyTooLargeError,TERMINAL_TASK_STATES,TASK_STATES + JsonRpcRequest: + A2APart: + A2AMessage: + A2AArtifact: + A2ATask: + StoredTask: + SendConfiguration: + A2ARequestError: super(-1) + BodyTooLargeError: stringParam(-1),optionalString(-1),optionalStringArray(-1),optionalInteger(-1),parsed(-1),optionalBoolean(-1),optionalTimestamp(-1),timestamp(-1),optionalTaskState(-1),recordParam(-1),isRecord(-1) + TERMINAL_TASK_STATES() + TASK_STATES() + src/interfaces/mcp-tools.ts: + i: ../config/env.js,../services/actions.js,./intake-actions.js,./mcp-errors.js + e: McpTool,callMcpTool,name,args,result,tool,writes,stringProp,nullableStringProp,stringArrayProp,numberProp + McpTool: + callMcpTool() + name() + args() + result() + tool() + writes() + stringProp() + nullableStringProp() + stringArrayProp() + numberProp() + src/interfaces/intake_cli.py: + e: _varint,_read_varint,encode_envelope,decode_envelope,execute,main + _varint(value) + _read_varint(data;offset) + encode_envelope(envelope) + decode_envelope(data) + execute(args) + main() src/summary/summarizer.ts: i: ../config/env.js,../core/grounding.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./payload.js,./render.js,node:fs,node:path,node:url e: SummaryResult,SummaryOptions,RawConclusion,RawSummaryResponse,SummaryAttemptError,summarizeGraph,mode,conclusions,client,conclusions,systemPrompt,payload,failure,responses,conclusions,SUMMARY_CONCLUSION_CONTRACT,SUMMARY_RESPONSE_CONTRACT @@ -3000,155 +3294,131 @@ D: unknown() main() args() - src/llm/structured-schema.ts: - i: ../core/types.js - e: StructuredSchema,StructuredResponseError,StringOptions,NumberOptions,ArrayOptions - StructuredSchema: - StructuredResponseError: super(-1),schema(-1),parse(-1),string(-1),pattern(-1),fail(-1),fail(-1),nullableString(-1),base(-1),number(-1),fail(-1),checkNumberBounds(-1),integer(-1),numeric(-1),parsed(-1),enumValue(-1),allowed(-1),fail(-1),array(-1),fail(-1),fail(-1),parsed(-1),identities(-1),object(-1),keys(-1),allowed(-1),fail(-1),candidate(-1),unknown(-1),missing(-1),checkNumberBounds(-1),fail(-1),fail(-1),jsonIdentity(-1),record(-1),describe(-1),fail(-1) - StringOptions: - NumberOptions: - ArrayOptions: - src/interfaces/a2a-types.ts: - i: ../services/actions.js - e: JsonRpcRequest,A2APart,A2AMessage,A2AArtifact,A2ATask,StoredTask,SendConfiguration,A2ARequestError,BodyTooLargeError,TERMINAL_TASK_STATES,TASK_STATES - JsonRpcRequest: - A2APart: - A2AMessage: - A2AArtifact: - A2ATask: - StoredTask: - SendConfiguration: - A2ARequestError: super(-1) - BodyTooLargeError: stringParam(-1),optionalString(-1),optionalStringArray(-1),optionalInteger(-1),parsed(-1),optionalBoolean(-1),optionalTimestamp(-1),timestamp(-1),optionalTaskState(-1),recordParam(-1),isRecord(-1) - TERMINAL_TASK_STATES() - TASK_STATES() - src/graph/capability-evidence.ts: - i: ../core/text.js,../core/types.js - e: STRUCTURAL_TOPICS,declaredCapabilityTopics,topics,locationTopics,aggregateCapabilityTopics,values,aggregateCapabilityOverlap,aggregate,declaration,requested,implemented,overlap,hasCapabilityClaim,isFileAggregate - STRUCTURAL_TOPICS() - declaredCapabilityTopics() - topics() - locationTopics() - aggregateCapabilityTopics() - values() - aggregateCapabilityOverlap() - aggregate() - declaration() - requested() - implemented() - overlap() - hasCapabilityClaim() - isFileAggregate() - src/extractors/nl.ts: - i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path - e: NlExtractionOptions,assertNlExtractionOptions,extractNlIntent,absolute,body,sourcePath,classified,action,object,missing,confidence,inferActor,detectMissingFields - NlExtractionOptions: - assertNlExtractionOptions() - extractNlIntent() - absolute() + rust-ast/src/main.rs: + i: proc_macro2::Span,quote::ToTokens,serde::Serialize,serde_json::,std::collections::BTreeSet,std::env,std::fs,std::path::,syn::spanned::Spanned,syn::visit:: + e: Fact,Output,Collector,main,arguments,collect_files,new,qualified,add,excerpt,modifiers,visit_item_mod,visit_item_use,visit_item_struct,visit_item_enum,visit_item_trait,visit_item_type,visit_item_const,visit_item_static,visit_item_fn,visit_item_impl,visit_impl_item_fn,visit_expr_call,visit_expr_method_call + Fact: + Output: + Collector: + main() + arguments() + collect_files() + new() + qualified() + add() + excerpt() + modifiers() + visit_item_mod() + visit_item_use() + visit_item_struct() + visit_item_enum() + visit_item_trait() + visit_item_type() + visit_item_const() + visit_item_static() + visit_item_fn() + visit_item_impl() + visit_impl_item_fn() + visit_expr_call() + visit_expr_method_call() + src/extractors/runtime-cycle.ts: + i: ../config/env.js,../core/io.js,../core/record.js,node:path + e: CycleContext,MAX_PER_SECTION,extractRuntimeCycleIntent,cyclePath,root,body,cycle,sourcePath,observedAt,host,results,parseCycle,cycle,sourcePathFor,relative,boundedArray,objects,label,text,tags,watched,declared,probeRecord,id,failed,error,outcome,violationRecord,probe,fact,driftRecord,probe,fact,proposalRecord,kind,probe,detail,proposalAction,factsMetadata,jsonScalar + CycleContext: + MAX_PER_SECTION() + extractRuntimeCycleIntent() + cyclePath() + root() body() + cycle() sourcePath() - classified() - action() - object() - missing() - confidence() - inferActor() - detectMissingFields() - src/extractors/markdown-block.ts: - e: MarkdownListBlock,readListBlock,cursor,line - MarkdownListBlock: - readListBlock() - cursor() - line() - src/extractors/configuration.ts: - i: ../config/env.js,../core/ignore.js,../core/io.js,../core/record.js,../core/types.js,node:path - e: ConfigurationEntry,MAX_ENTRIES_PER_FILE,extractConfigurationIntent,root,matcher,discovered,files,relative,body,isConfigurationPath,base,configurationRecords,base,entries,bounded,fileAggregate,format,lastLine,configurationFormat,base,jsonEntries,parsed,lines,tomlEntries,line,heading,pair,yamlOrAssignmentEntries,yaml,assignment,key,dockerEntries,match,instruction,detail,entry,uniqueEntries,seen,findKeyLine,pattern,index - ConfigurationEntry: - MAX_ENTRIES_PER_FILE() - extractConfigurationIntent() - root() - matcher() - discovered() + observedAt() + host() + results() + parseCycle() + cycle() + sourcePathFor() + relative() + boundedArray() + objects() + label() + text() + tags() + watched() + declared() + probeRecord() + id() + failed() + error() + outcome() + violationRecord() + probe() + fact() + driftRecord() + probe() + fact() + proposalRecord() + kind() + probe() + detail() + proposalAction() + factsMetadata() + jsonScalar() + src/extractors/ast/external.ts: + i: ../../core/io.js,../../core/types.js,./records.js,./types.js,node:child_process,node:util + e: ExternalAdapterOptions,execFileAsync,runExternalAstAdapter,files,result,parsed + ExternalAdapterOptions: + execFileAsync() + runExternalAstAdapter() files() - relative() - body() - isConfigurationPath() - base() - configurationRecords() - base() - entries() - bounded() - fileAggregate() - format() - lastLine() - configurationFormat() - base() - jsonEntries() + result() parsed() - lines() - tomlEntries() - line() - heading() - pair() - yamlOrAssignmentEntries() - yaml() - assignment() - key() - dockerEntries() - match() - instruction() - detail() - entry() - uniqueEntries() - seen() - findKeyLine() - pattern() - index() - src/core/ignore.ts: - i: node:fs,node:path - e: IgnoreRule,IgnoreMatcher,LoadIgnoreOptions,compileIgnorePattern,pattern,negated,directoryOnly,anchored,body,prefix,translateGlob,char,next,close,body,escapeLiteral,parseIgnoreFile,createIgnoreMatcher,normalize,decide,target,segments,ancestor,loadIgnoreMatcher,files,absolute,rule - IgnoreRule: - IgnoreMatcher: - LoadIgnoreOptions: - compileIgnorePattern() - pattern() - negated() - directoryOnly() - anchored() - body() - prefix() - translateGlob() - char() - next() - close() - body() - escapeLiteral() - parseIgnoreFile() - createIgnoreMatcher() - normalize() - decide() + src/core/target.ts: + i: ./types.js + e: GENERIC_SYMBOLS,GENERIC_FILES,normalizeTarget,normalizePath,normalizeSymbol,symbolAliases,normalized,parts,leaf,pathAliases,normalized,basename,unique + GENERIC_SYMBOLS() + GENERIC_FILES() + normalizeTarget() + normalizePath() + normalizeSymbol() + symbolAliases() + normalized() + parts() + leaf() + pathAliases() + normalized() + basename() + unique() + src/core/schema/conclusions.ts: + i: ../id.js + e: assertConclusion,known,assertConclusions,known,ids,id,assertTodoProposal,known,assertTodoProposals,known,proposalIds,id,assertConclusionValue,conclusion,expectedId,assertTodoProposalValue,proposal,target,expectedId,assertTodoProposalReferenceValue,createRecordIdRegex,validateGroundedContext,report,diagnosticIds,diagnostic,validateTodoProposalContext,known + assertConclusion() + known() + assertConclusions() + known() + ids() + id() + assertTodoProposal() + known() + assertTodoProposals() + known() + proposalIds() + id() + assertConclusionValue() + conclusion() + expectedId() + assertTodoProposalValue() + proposal() target() - segments() - ancestor() - loadIgnoreMatcher() - files() - absolute() - rule() - java/JavaAstExtract.java: - i: com.sun.source.util.JavacTask,com.sun.source.util.SourcePositions,com.sun.source.util.TreePathScanner,com.sun.source.util.Trees,java.io.IOException,java.nio.charset.StandardCharsets,java.nio.file.Files,java.nio.file.Path,java.nio.file.Paths - e: JavaAstExtract - JavaAstExtract: main(-1),emit(-1),parseFile(-1),emit(-1),collect(-1),try(-1),containsIgnored(-1),try(-1),Collector(-1),add(-1),map(-1),add(-1),map(-1),add(-1),add(-1),add(-1),add(-1),map(-1),add(-1),map(-1),emit(-1),json(-1),json(-1),escape(-1),slash(-1) - examples/backend/src/validation.ts: - e: ValidationResult,ALLOWED_ACTIONS,validateEventPayload,invalid,record,agent,action,object - ValidationResult: - ALLOWED_ACTIONS() - validateEventPayload() - invalid() - record() - agent() - action() - object() + expectedId() + assertTodoProposalReferenceValue() + createRecordIdRegex() + validateGroundedContext() + report() + diagnosticIds() + diagnostic() + validateTodoProposalContext() + known() src/interfaces/mcp.ts: i: ../config/env.js,./mcp-errors.js,./mcp-resources.js,./mcp-tools.js,node:path,node:readline,node:url e: JsonRpcRequest,McpConnectionState,DISCOVERY_TTL_MS,LIST_TTL_MS,RESOURCE_TTL_MS,createMcpConnectionState,startMcpServer,resolvedConfig,state,input,parsed,request,result,handleMcpRequest,initializeLegacy,params,requested,protocolVersion,handleModernRequest,params,responseMeta,handleLegacyRequest,params,validateModernRequest,params,meta,validateModernMetadata,requested,capabilities,hasModernMetadata,meta,parseRequestLine,completePublic,serverInfo,serverMeta,serverInstructions,isLegacyProtocol,isJsonRpcRequest,candidate,requestId,id,rpcError,sendError,send,invokedPath @@ -3199,7 +3469,7 @@ D: invokedPath() src/interfaces/a2a.ts: i: ../config/env.js,../services/actions.js,../web/diff-ui.js,./a2a-card.js,./a2a-history.js,./a2a-task-store.js,node:crypto,node:http,node:path,node:url - e: startA2aServer,resolvedConfig,server,address,port,handleHttp,url,handlePublicGet,handleAuthenticatedApi,handleDiffApi,input,handleJsonRpc,rpc,isNotification,result,parseRpcRequest,status,sendRpcFailure,code,metadata,status,requireAuthorization,requireProtocolVersion,requestedVersion,a2aVersion,raw,headerVersion,authorized,header,received,expected,principalForRequest,readBody,length,chunk,sendJson,payload,sendText,sendNoContent,rpcError,reason,errorInfo,stringMetadata,handleUnexpectedError,errorMessage,invokedPath + e: startA2aServer,resolvedConfig,server,address,port,handleHttp,url,handlePublicGet,handleAuthenticatedApi,handleDiffApi,input,handleJsonRpc,rpc,isNotification,result,parseRpcRequest,status,sendRpcFailure,code,metadata,status,requireAuthorization,requireProtocolVersion,requestedVersion,a2aVersion,raw,headerVersion,isLoopbackHost,value,authorized,header,received,expected,principalForRequest,readBody,length,chunk,sendJson,payload,sendText,sendNoContent,rpcError,reason,errorInfo,stringMetadata,handleUnexpectedError,errorMessage,invokedPath startA2aServer() resolvedConfig() server() @@ -3227,6 +3497,8 @@ D: a2aVersion() raw() headerVersion() + isLoopbackHost() + value() authorized() header() received() @@ -3246,39 +3518,10 @@ D: handleUnexpectedError() errorMessage() invokedPath() - src/extractors/ast/external.ts: - i: ../../core/io.js,../../core/types.js,./records.js,./types.js,node:child_process,node:util - e: ExternalAdapterOptions,execFileAsync,runExternalAstAdapter,files,result,parsed - ExternalAdapterOptions: - execFileAsync() - runExternalAstAdapter() - files() - result() - parsed() - src/core/target.ts: - i: ./types.js - e: GENERIC_SYMBOLS,GENERIC_FILES,normalizeTarget,normalizePath,normalizeSymbol,symbolAliases,normalized,parts,leaf,pathAliases,normalized,basename,unique - GENERIC_SYMBOLS() - GENERIC_FILES() - normalizeTarget() - normalizePath() - normalizeSymbol() - symbolAliases() - normalized() - parts() - leaf() - pathAliases() - normalized() - basename() - unique() - sdk/python/todo2code/runtime.py: - e: TypeScriptRuntimeError,RuntimeResult,TypeScriptRuntime,_resolve_cli,_parse_mapping,_load_mapping - TypeScriptRuntimeError(RuntimeError): # Raised when the local Node/TypeScript runtime cannot be exec... - RuntimeResult: # Raw result of a local TypeScript CLI invocation... - TypeScriptRuntime: __init__(1),invoke(1),version(0),pipeline(0),diagnose(1),diff_graphs(2),reality(1) # Execute the canonical TypeScript runtime from a Python proce... - _resolve_cli(value) - _parse_mapping(content;label) - _load_mapping(path;label) + scripts/research/evaluate-embedding-pairs.py: + e: parse_args,main + parse_args() + main() sdk/go/client.go: e: Client,rpcRequest,rpcResponse,New,nextID,setHeaders,RPC,Send,unwrapTask,Call,Health,AgentCard,getJSON Client: @@ -3294,67 +3537,14 @@ D: Health() AgentCard() getJSON() - scripts/research/evaluate-embedding-pairs.py: - e: parse_args,main - parse_args() - main() - rust-ast/src/main.rs: - i: proc_macro2::Span,quote::ToTokens,serde::Serialize,serde_json::,std::collections::BTreeSet,std::env,std::fs,std::path::,syn::spanned::Spanned,syn::visit:: - e: Fact,Output,Collector,main,arguments,collect_files,new,qualified,add,excerpt,modifiers,visit_item_mod,visit_item_use,visit_item_struct,visit_item_enum,visit_item_trait,visit_item_type,visit_item_const,visit_item_static,visit_item_fn,visit_item_impl,visit_impl_item_fn,visit_expr_call,visit_expr_method_call - Fact: - Output: - Collector: - main() - arguments() - collect_files() - new() - qualified() - add() - excerpt() - modifiers() - visit_item_mod() - visit_item_use() - visit_item_struct() - visit_item_enum() - visit_item_trait() - visit_item_type() - visit_item_const() - visit_item_static() - visit_item_fn() - visit_item_impl() - visit_impl_item_fn() - visit_expr_call() - visit_expr_method_call() - src/interfaces/mcp-tools.ts: - i: ../config/env.js,../services/actions.js,./mcp-errors.js - e: McpTool,callMcpTool,name,args,result,tool,writes,stringProp,nullableStringProp,stringArrayProp,numberProp - McpTool: - callMcpTool() - name() - args() - result() - tool() - writes() - stringProp() - nullableStringProp() - stringArrayProp() - numberProp() - src/graph/changelog-signal.ts: - i: ../core/types.js - e: GENERATED_ANALYSIS_BASENAMES,isActionableChangelogRecord,text,paths,isPlaceholder,isFileSummary,isFileOnlyUpdate,match,candidate,basename,isGeneratedAnalysisPath,segments,basename - GENERATED_ANALYSIS_BASENAMES() - isActionableChangelogRecord() - text() - paths() - isPlaceholder() - isFileSummary() - isFileOnlyUpdate() - match() - candidate() - basename() - isGeneratedAnalysisPath() - segments() - basename() + sdk/python/todo2code/runtime.py: + e: TypeScriptRuntimeError,RuntimeResult,TypeScriptRuntime,_resolve_cli,_parse_mapping,_load_mapping + TypeScriptRuntimeError(RuntimeError): # Raised when the local Node/TypeScript runtime cannot be exec... + RuntimeResult: # Raw result of a local TypeScript CLI invocation... + TypeScriptRuntime: __init__(1),invoke(1),version(0),pipeline(0),diagnose(1),diff_graphs(2),reality(1) # Execute the canonical TypeScript runtime from a Python proce... + _resolve_cli(value) + _parse_mapping(content;label) + _load_mapping(path;label) src/extractors/docs-chunks.ts: i: ./docs-types.js e: prioritizeDocumentChunks,needles,chunkPriority,matches,mapConcurrent,results,nextIndex,worker,index,item,workerCount,chunkMarkdown,lines,sections,currentStart,currentEnd,flush,sectionLines,sectionText,candidateSize,markdownSections,sectionStart,splitLongSection,batchStart,batch,takeLineBatch,size,offset,line @@ -3385,25 +3575,24 @@ D: batch() takeLineBatch() size() - offset() - line() - sdk/typescript/src/index.ts: - e: IntentTarget,IntentStatement,IntentGenerationMetadata,IntentRecord,IntentGraph,DiagnosticReport,ExtractionAudit,ExtractionResult,A2APart,A2AMessage,A2ATask,T2CError,ClientOptions,T2CClient,unwrapTask - IntentTarget: - IntentStatement: - IntentGenerationMetadata: - IntentRecord: - IntentGraph: - DiagnosticReport: - ExtractionAudit: - ExtractionResult: - A2APart: - A2AMessage: - A2ATask: - T2CError: super(-1) - ClientOptions: - T2CClient: health(-1),agentCard(-1),send(-1),result(-1),call(-1),task(-1),detail(-1),part(-1),getTask(-1),cancelTask(-1),listTasks(-1),extractNl(-1),extractGit(-1),extractAst(-1),extractConfig(-1),link(-1),diagnose(-1),summarize(-1),compareWorkspace(-1),diffGraphs(-1),response(-1),body(-1),message(-1),diffFiles(-1),diffGit(-1),reality(-1),pipeline(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),rpc(-1),body(-1),response(-1),payload(-1),getJson(-1),response(-1),request(-1),controller(-1),timer(-1),clearTimeout(-1) - unwrapTask() + offset() + line() + src/graph/changelog-signal.ts: + i: ../core/types.js + e: GENERATED_ANALYSIS_BASENAMES,isActionableChangelogRecord,text,paths,isPlaceholder,isFileSummary,isFileOnlyUpdate,match,candidate,basename,isGeneratedAnalysisPath,segments,basename + GENERATED_ANALYSIS_BASENAMES() + isActionableChangelogRecord() + text() + paths() + isPlaceholder() + isFileSummary() + isFileOnlyUpdate() + match() + candidate() + basename() + isGeneratedAnalysisPath() + segments() + basename() scripts/verify-structured-responses.mjs: i: node:fs,node:path e: root,sourceRoot,files,structuredCalls,source,typescriptFiles,absolute @@ -3432,13 +3621,23 @@ D: referenced() content() text() - src/llm/failure.ts: - i: ../core/types.js,./openrouter.js,./structured-schema.js - e: LlmFailureReason,classifyLlmFailure,message,rejectedLlmResponseMetadata - LlmFailureReason: - classifyLlmFailure() - message() - rejectedLlmResponseMetadata() + sdk/typescript/src/index.ts: + e: IntentTarget,IntentStatement,IntentGenerationMetadata,IntentRecord,IntentGraph,DiagnosticReport,ExtractionAudit,ExtractionResult,A2APart,A2AMessage,A2ATask,T2CError,ClientOptions,T2CClient,unwrapTask + IntentTarget: + IntentStatement: + IntentGenerationMetadata: + IntentRecord: + IntentGraph: + DiagnosticReport: + ExtractionAudit: + ExtractionResult: + A2APart: + A2AMessage: + A2ATask: + T2CError: super(-1) + ClientOptions: + T2CClient: health(-1),agentCard(-1),send(-1),result(-1),call(-1),task(-1),detail(-1),part(-1),getTask(-1),cancelTask(-1),listTasks(-1),extractNl(-1),extractGit(-1),extractAst(-1),extractConfig(-1),link(-1),diagnose(-1),summarize(-1),compareWorkspace(-1),diffGraphs(-1),response(-1),body(-1),message(-1),diffFiles(-1),diffGit(-1),reality(-1),pipeline(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),rpc(-1),body(-1),response(-1),payload(-1),getJson(-1),response(-1),request(-1),controller(-1),timer(-1),clearTimeout(-1) + unwrapTask() src/core/security.ts: i: node:fs,node:path e: assertPathWithinRoot,rootAbsolute,candidateAbsolute,existingAncestor,ancestorReal,assertDescendant,relative,nearestExistingPath,current,code,parent @@ -3453,22 +3652,27 @@ D: current() code() parent() - sdk/python/todo2code/client.py: - e: T2CError,IntentRecord,ExtractionResult,Diagnostic,DiagnosticReport,IntentGraph,T2CClient,_unwrap_task,_as_dict,_graph_dict,_report_dict - T2CError(RuntimeError): __init__(3) # Raised for JSON-RPC errors, transport failures and non-compl... - IntentRecord: from_dict(1) # A single t2c.intent/v1 record... - ExtractionResult: from_dict(1) # Records, warnings and the optional audited LLM stage result... - Diagnostic: from_dict(1) - DiagnosticReport: from_dict(1),blocking(0) - IntentGraph: from_dict(1) - T2CClient: __init__(3),_headers(1),_open(1),_rpc(2),_get(1),health(0),agent_card(0),send(2),call(2),compare_workspace(0),propose_todo(1),render_todo(1),apply_todo(1),get_task(1),cancel_task(1),list_tasks(0),extract_nl(3),extract_nl_result(3),extract_git(2),extract_ast(1),extract_config(1),extract_markdown(4),extract_markdown_result(4),extract_docs(3),extract_docs_result(3),link(1),diagnose(1),summarize(3),diff_graphs(3),diff_graphs_rest(0),diff_files(2),diff_git(0),reality(2),pipeline(0) # Client for the todo2code A2A endpoint. - -Example: - >>> cli... - _unwrap_task(result) - _as_dict(value) - _graph_dict(value) - _report_dict(value) + src/semantic/reranker/validation.ts: + i: ../../core/types.js + e: requiredText,validateRetrieval,validateGeneration,validateVerdictReason,allowedVerdicts,allowedReasons,assertGroundedQuote,quote,validDate,boundedScore,roundedConfidence + requiredText() + validateRetrieval() + validateGeneration() + validateVerdictReason() + allowedVerdicts() + allowedReasons() + assertGroundedQuote() + quote() + validDate() + boundedScore() + roundedConfidence() + src/llm/failure.ts: + i: ../core/types.js,./openrouter.js,./structured-schema.js + e: LlmFailureReason,classifyLlmFailure,message,rejectedLlmResponseMetadata + LlmFailureReason: + classifyLlmFailure() + message() + rejectedLlmResponseMetadata() scripts/verify-module-boundaries.mjs: i: node:fs,node:path e: sourceRoot,files,graph,body,target,relative,targetRelative,visiting,visited,visit,start,collect,absolute,resolveSource,raw,relative,slash @@ -3489,21 +3693,40 @@ Example: raw() relative() slash() - src/operations/artifact.ts: - i: ../core/id.js,./subactor.js,./types.js,node:fs,node:path - e: CompileOperationPlanArtifactOptions,OperationPlanCompilationReceipt,readJson,writeExclusive,target,directory,temporary,existing,compileOperationPlanArtifact,plan,bindings,envelope - CompileOperationPlanArtifactOptions: - OperationPlanCompilationReceipt: - readJson() - writeExclusive() - target() - directory() - temporary() - existing() - compileOperationPlanArtifact() - plan() - bindings() - envelope() + sdk/python/todo2code/client.py: + e: T2CError,IntentRecord,ExtractionResult,Diagnostic,DiagnosticReport,IntentGraph,T2CClient,_unwrap_task,_as_dict,_graph_dict,_report_dict + T2CError(RuntimeError): __init__(3) # Raised for JSON-RPC errors, transport failures and non-compl... + IntentRecord: from_dict(1) # A single t2c.intent/v1 record... + ExtractionResult: from_dict(1) # Records, warnings and the optional audited LLM stage result... + Diagnostic: from_dict(1) + DiagnosticReport: from_dict(1),blocking(0) + IntentGraph: from_dict(1) + T2CClient: __init__(3),_headers(1),_open(1),_rpc(2),_get(1),health(0),agent_card(0),send(2),call(2),compare_workspace(0),propose_todo(1),render_todo(1),apply_todo(1),get_task(1),cancel_task(1),list_tasks(0),extract_nl(3),extract_nl_result(3),extract_git(2),extract_ast(1),extract_config(1),extract_markdown(4),extract_markdown_result(4),extract_docs(3),extract_docs_result(3),link(1),diagnose(1),summarize(3),diff_graphs(3),diff_graphs_rest(0),diff_files(2),diff_git(0),reality(2),pipeline(0) # Client for the todo2code A2A endpoint. + +Example: + >>> cli... + _unwrap_task(result) + _as_dict(value) + _graph_dict(value) + _report_dict(value) + examples/frontend/src/api.ts: + e: IntentEvent,EventPage,ApiError + IntentEvent: + EventPage: + ApiError: super(-1),fetchEvents(-1),url(-1),response(-1),payload(-1),publishEvent(-1),response(-1),payload(-1) + src/extractors/ast/records.ts: + i: ../../core/record.js,../../core/types.js,./types.js + e: adapterRecords,detailRecords,moduleRecords,byPath,bucket,start,end,capabilities,boundedCapabilities,moduleTopicText + adapterRecords() + detailRecords() + moduleRecords() + byPath() + bucket() + start() + end() + capabilities() + boundedCapabilities() + moduleTopicText() src/interfaces/mcp-resources.ts: i: ../config/env.js,../core/io.js,./mcp-errors.js,node:fs,node:path e: listMcpResources,readRequestedMcpResource,uri,readMcpResource,latestPath,selected,latest,filePath,latestPointer,assertInsideRoot,relative,isInvalidResourceError,resource @@ -3520,64 +3743,34 @@ Example: relative() isInvalidResourceError() resource() - src/extractors/ast/records.ts: - i: ../../core/record.js,../../core/types.js,./types.js - e: adapterRecords,detailRecords,moduleRecords,byPath,bucket,start,end,capabilities,boundedCapabilities,moduleTopicText - adapterRecords() - detailRecords() - moduleRecords() - byPath() - bucket() - start() - end() - capabilities() - boundedCapabilities() - moduleTopicText() - examples/frontend/src/api.ts: - e: IntentEvent,EventPage,ApiError - IntentEvent: - EventPage: - ApiError: super(-1),fetchEvents(-1),url(-1),response(-1),payload(-1),publishEvent(-1),response(-1),payload(-1) - src/synthesis/task-synthesis-materialize.ts: - i: ../core/grounding.js,../core/id.js,../core/schema.js,../core/target.js,./task-synthesis-contract.js - e: materializeTaskSynthesisResponse,parsed,conclusionKeys,proposalKeys,conclusions,diagnosticIds,conclusionIdByKey,conclusionByKey,proposalDrafts,conclusionKeys,citedConclusions,conclusion,proposalIdByKey,proposals,normalizeLocalKeys,explicit,reserved,keys,hasBlankKey,key,suffix,mapKeys,keys,id,sortedUnique,normalizeStringArray,values,normalizeRawTarget,target,normalizeAcceptanceCriteria,criteria,source,assertProposalEvidenceMatchesConclusions,byId,cited,diagnostics,records - materializeTaskSynthesisResponse() - parsed() - conclusionKeys() - proposalKeys() - conclusions() - diagnosticIds() - conclusionIdByKey() - conclusionByKey() - proposalDrafts() - conclusionKeys() - citedConclusions() - conclusion() - proposalIdByKey() - proposals() - normalizeLocalKeys() - explicit() - reserved() - keys() - hasBlankKey() - key() - suffix() - mapKeys() - keys() - id() - sortedUnique() - normalizeStringArray() - values() - normalizeRawTarget() + src/interfaces/intake-actions.ts: + i: ../communication/intake-contract.js,../communication/intake-protobuf.js,../communication/intake-service.js,../config/env.js,../core/security.js,node:path + e: executeIntakeAction,requestedRoot,root,projectDir,operation,supplied,envelope,service,result,envelopeInput + executeIntakeAction() + requestedRoot() + root() + projectDir() + operation() + supplied() + envelope() + service() + result() + envelopeInput() + src/operations/artifact.ts: + i: ../core/id.js,./subactor.js,./types.js,node:fs,node:path + e: CompileOperationPlanArtifactOptions,OperationPlanCompilationReceipt,readJson,writeExclusive,target,directory,temporary,existing,compileOperationPlanArtifact,plan,bindings,envelope + CompileOperationPlanArtifactOptions: + OperationPlanCompilationReceipt: + readJson() + writeExclusive() target() - normalizeAcceptanceCriteria() - criteria() - source() - assertProposalEvidenceMatchesConclusions() - byId() - cited() - diagnostics() - records() + directory() + temporary() + existing() + compileOperationPlanArtifact() + plan() + bindings() + envelope() src/extractors/todo.ts: i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,./markdown-block.js,./markdown-paths.js,node:path e: extractTodo,absolute,body,relative,lines,raw,heading,level,task,checked,block,text,classified,action,resolvedPaths,inferOwner,match,extractExplicitId @@ -3606,23 +3799,6 @@ Example: files() counts() extension() - src/evaluation/gold-extraction.ts: - i: ../config/env.js,../core/security.js,../core/types.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/markdown.js,../extractors/nl.js,./gold-types.js,node:fs,node:os,node:path - e: runExtractionCase,root,config,writeFixtureFiles,destination,extractNlCase,extractMarkdownCase,extractDeterministicDocumentationCase,files,extractDocumentationCase,originalFetch,benchmarkConfig,config,projectRecord - runExtractionCase() - root() - config() - writeFixtureFiles() - destination() - extractNlCase() - extractMarkdownCase() - extractDeterministicDocumentationCase() - files() - extractDocumentationCase() - originalFetch() - benchmarkConfig() - config() - projectRecord() src/core/id.ts: i: node:crypto e: stableStringify,sortValue,sha256,shortHash,createIntentId,createRelationId,createConclusionId,createTodoProposalId,createCodeChangePlanHash,createCodeChangePlanId,createCodeChangeSourcePatchHash,createCodeChangeSourcePatchId,graphFingerprint,newRunId,stamp,asJsonValue @@ -3657,6 +3833,63 @@ Example: ContentCacheOptions: ContentCacheEntryOptions: ContentCache: getOrCompute(-1),assertNamespace(-1),key(-1),filePath(-1),cached(-1),value(-1),snapshot(-1),envelope(-1),write(-1),directory(-1),temporaryPath(-1),assertNamespace(-1),isNodeError(-1) + src/synthesis/task-synthesis-materialize.ts: + i: ../core/grounding.js,../core/id.js,../core/schema.js,../core/target.js,./task-synthesis-contract.js + e: materializeTaskSynthesisResponse,parsed,conclusionKeys,proposalKeys,conclusions,diagnosticIds,conclusionIdByKey,conclusionByKey,proposalDrafts,conclusionKeys,citedConclusions,conclusion,proposalIdByKey,proposals,normalizeLocalKeys,explicit,reserved,keys,hasBlankKey,key,suffix,mapKeys,keys,id,sortedUnique,normalizeStringArray,values,normalizeRawTarget,target,normalizeAcceptanceCriteria,criteria,source,assertProposalEvidenceMatchesConclusions,byId,cited,diagnostics,records + materializeTaskSynthesisResponse() + parsed() + conclusionKeys() + proposalKeys() + conclusions() + diagnosticIds() + conclusionIdByKey() + conclusionByKey() + proposalDrafts() + conclusionKeys() + citedConclusions() + conclusion() + proposalIdByKey() + proposals() + normalizeLocalKeys() + explicit() + reserved() + keys() + hasBlankKey() + key() + suffix() + mapKeys() + keys() + id() + sortedUnique() + normalizeStringArray() + values() + normalizeRawTarget() + target() + normalizeAcceptanceCriteria() + criteria() + source() + assertProposalEvidenceMatchesConclusions() + byId() + cited() + diagnostics() + records() + src/evaluation/gold-extraction.ts: + i: ../config/env.js,../core/security.js,../core/types.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/markdown.js,../extractors/nl.js,./gold-types.js,node:fs,node:os,node:path + e: runExtractionCase,root,config,writeFixtureFiles,destination,extractNlCase,extractMarkdownCase,extractDeterministicDocumentationCase,files,extractDocumentationCase,originalFetch,benchmarkConfig,config,projectRecord + runExtractionCase() + root() + config() + writeFixtureFiles() + destination() + extractNlCase() + extractMarkdownCase() + extractDeterministicDocumentationCase() + files() + extractDocumentationCase() + originalFetch() + benchmarkConfig() + config() + projectRecord() scripts/live-contract-check.mjs: i: node:fs,node:path,node:url e: REPO_ROOT,envNumber,value,main,config,manifest,history,recorded,runLivePipeline,root,outputDir,config,deadline,deadlineTimer,startedAt,failed,runLivePipelineOnce,result,readLatestRunManifest,runsRoot,manifestPath,stat,auditPath,historyPath,readHistory,parsed,writeJson @@ -3687,6 +3920,34 @@ Example: readHistory() parsed() writeJson() + examples/frontend/src/render.ts: + i: ./api.js + e: PanelRow,classifyEvent,toRows,renderTable,table,head,body,tr,cell,renderError,banner,headerRow,tr,th + PanelRow: + classifyEvent() + toRows() + renderTable() + table() + head() + body() + tr() + cell() + renderError() + banner() + headerRow() + tr() + th() + examples/frontend/src/app.ts: + i: ./api.js,./render.js + e: PanelState,createState,refresh,page,message,mountPanel,state,reload + PanelState: + createState() + refresh() + page() + message() + mountPanel() + state() + reload() src/extractors/markdown.ts: i: ../config/env.js,../core/types.js,./changelog.js,./markdown-paths.js,./todo.js e: MarkdownExtractionOptions,extractMarkdownIntent,pathResolver,todo,changelog @@ -3711,8 +3972,33 @@ Example: counts() metric() ratio() - sdk/rust/src/actions.rs: - i: crate::,serde_json:: + scripts/normalize-generated-analysis-roots.mjs: + i: node:fs,node:path + e: root,sourceRoot,textExtensions,projectDirectory,changed,original,normalized + root() + sourceRoot() + textExtensions() + projectDirectory() + changed() + original() + normalized() + scripts/sync-generated-readme-metadata.mjs: + i: node:fs,node:path + e: root,readmePath,relativeReadme,packagePath,packageJson,version,license,nodeVersion,original,synchronized,licenseTarget,requiredString,replaceRequired,badgeValue + root() + readmePath() + relativeReadme() + packagePath() + packageJson() + version() + license() + nodeVersion() + original() + synchronized() + licenseTarget() + requiredString() + replaceRequired() + badgeValue() sdk/go/types.go: e: SourceLineRange,IntentTarget,IntentStatement,IntentSource,IntentEpistemic,IntentGenerationMetadata,IntentRecord,IntentRelation,IntentGraph,Diagnostic,DiagnosticReport,ExtractionResult,Part,Message,Artifact,Task,RealityResult,DiffResult,Error,Generation,Error SourceLineRange: @@ -3736,61 +4022,8 @@ Example: Error: Generation() Error() - scripts/sync-generated-readme-metadata.mjs: - i: node:fs,node:path - e: root,readmePath,relativeReadme,packagePath,packageJson,version,license,nodeVersion,original,synchronized,licenseTarget,requiredString,replaceRequired,badgeValue - root() - readmePath() - relativeReadme() - packagePath() - packageJson() - version() - license() - nodeVersion() - original() - synchronized() - licenseTarget() - requiredString() - replaceRequired() - badgeValue() - scripts/normalize-generated-analysis-roots.mjs: - i: node:fs,node:path - e: root,sourceRoot,textExtensions,projectDirectory,changed,original,normalized - root() - sourceRoot() - textExtensions() - projectDirectory() - changed() - original() - normalized() - examples/frontend/src/render.ts: - i: ./api.js - e: PanelRow,classifyEvent,toRows,renderTable,table,head,body,tr,cell,renderError,banner,headerRow,tr,th - PanelRow: - classifyEvent() - toRows() - renderTable() - table() - head() - body() - tr() - cell() - renderError() - banner() - headerRow() - tr() - th() - examples/frontend/src/app.ts: - i: ./api.js,./render.js - e: PanelState,createState,refresh,page,message,mountPanel,state,reload - PanelState: - createState() - refresh() - page() - message() - mountPanel() - state() - reload() + sdk/rust/src/actions.rs: + i: crate::,serde_json:: src/synthesis/task-synthesis-payload.ts: e: compactSynthesisPayload,recordIds,todoRecords,records,includedIds,groundedDiagnostics,compactRecord,compareDiagnostics compactSynthesisPayload() @@ -3801,9 +4034,6 @@ Example: groundedDiagnostics() compactRecord() compareDiagnostics() - src/interfaces/mcp-errors.ts: - e: McpRequestError - McpRequestError: super(-1),normalizeMcpError(-1) src/interfaces/a2a-card.ts: i: ../config/env.js,../version.js,node:crypto,node:http e: sendAgentCard,card,serialized,payload,agentCard,skills,skill @@ -3814,6 +4044,9 @@ Example: agentCard() skills() skill() + src/interfaces/mcp-errors.ts: + e: McpRequestError + McpRequestError: super(-1),normalizeMcpError(-1) sdk/go/actions.go: i: context e: ExtractAST,ExtractConfig,ExtractNL,ExtractDocs,ExtractMarkdown,ExtractMarkdownWithOptions,ExtractGit,Link,Diagnose,Reality,DiffGit,DiffFiles,CompareWorkspace,Pipeline,ProposeTodo,RenderTodo,ApplyTodo,callMap @@ -3835,15 +4068,11 @@ Example: RenderTodo() ApplyTodo() callMap() - src/sdk/typescript.ts: - i: ../core/types.js,../diff/reality.js,../diff/text.js,../services/actions.js - e: Todo2CodeClientOptions,DiffResult,FileDiffResult,GitDiffResponse,RealityResult,Todo2CodeClient - Todo2CodeClientOptions: - DiffResult: - FileDiffResult: - GitDiffResponse: - RealityResult: - Todo2CodeClient: a2a(-1),health(-1),diffGraphs(-1),diffGraphFiles(-1),compareWorkspace(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),extractNl(-1),run(-1) + examples/src/runtime.ts: + e: Contract,validateContract,executeContract + Contract: + validateContract() + executeContract() src/extractors/ast/python.ts: i: ../../config/env.js,../../core/ignore.js,../../core/io.js,../../core/types.js,./external.js,node:fs,node:os,node:path,node:url e: extractPythonAst,helperPath,matcher,files,temporaryDirectory,filesPath @@ -3873,6 +4102,40 @@ Example: svgStyles() svgDocument() theme() + src/sdk/typescript.ts: + i: ../core/types.js,../diff/reality.js,../diff/text.js,../services/actions.js + e: Todo2CodeClientOptions,DiffResult,FileDiffResult,GitDiffResponse,RealityResult,Todo2CodeClient + Todo2CodeClientOptions: + DiffResult: + FileDiffResult: + GitDiffResponse: + RealityResult: + Todo2CodeClient: a2a(-1),health(-1),diffGraphs(-1),diffGraphFiles(-1),compareWorkspace(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),extractNl(-1),run(-1) + scripts/assert-demollm-run.mjs: + i: node:fs/promises,node:path + e: root,output,latestPath,latest,manifestPath,manifest,stage,stage,tokens,cost + root() + output() + latestPath() + latest() + manifestPath() + manifest() + stage() + stage() + tokens() + cost() + scripts/generate-response-schemas.mjs: + i: ../dist/src/extractors/docs-schema.js,node:fs,node:path,node:url + e: root,outputPath,publishedDocumentMaximum,current + root() + outputPath() + publishedDocumentMaximum() + current() + scripts/vallm-compatible.py: + e: detect_file_language_with_parser_id + detect_file_language_with_parser_id(file_path) + sdk/rust/src/error.rs: + i: std::fmt sdk/rust/src/types.rs: i: serde::,serde_json::Value e: SourceLineRange,IntentTarget,IntentStatement,IntentSource,IntentEpistemic,IntentLifecycle,IntentGenerationMetadata,IntentRecord,Diagnostic,DiagnosticReport,ExtractionResult @@ -3887,42 +4150,73 @@ Example: Diagnostic: DiagnosticReport: ExtractionResult: - sdk/rust/src/error.rs: - i: std::fmt sdk/python/todo2code_sdk.py: e: Todo2CodeClient,_record_dict Todo2CodeClient: __init__(3),health(0),extract_nl(3),extract_docs(3),diff_graphs(3),diff_graph_files(3),diff_text_files(2),diff_git(0),reality(1),run(2) # Diff-focused client for the todo2code runtime. Graph compar... _record_dict(record) - scripts/vallm-compatible.py: - e: detect_file_language_with_parser_id - detect_file_language_with_parser_id(file_path) - scripts/generate-response-schemas.mjs: - i: ../dist/src/extractors/docs-schema.js,node:fs,node:path,node:url - e: root,outputPath,publishedDocumentMaximum,current - root() - outputPath() - publishedDocumentMaximum() - current() - scripts/assert-demollm-run.mjs: - i: node:fs/promises,node:path - e: root,output,latestPath,latest,manifestPath,manifest,stage,stage,tokens,cost - root() - output() - latestPath() - latest() - manifestPath() - manifest() - stage() - stage() - tokens() - cost() - examples/src/runtime.ts: - e: Contract,validateContract,executeContract - Contract: - validateContract() - executeContract() + examples/backend/src/store.ts: + e: IntentEvent,EventPage,EventStore + IntentEvent: + EventPage: + EventStore: enqueueEvent(-1),listEvents(-1),start(-1),size(-1) + examples/src/helper.py: + e: load_task,normalize_task + load_task(path) + normalize_task(value) + examples/sdk/typescript.mjs: + i: ../../dist/src/sdk/typescript.js,node:fs/promises + e: client + client() + src/extractors/docs-schema.ts: + i: ../llm/structured-schema.js,./docs-types.js + e: strings,target,documentRecord,documentResponseContract,documentResponseSchema + strings() + target() + documentRecord() + documentResponseContract() + documentResponseSchema() + src/extractors/ast/rust.ts: + i: ../../config/env.js,../../core/types.js,./external.js,node:path,node:url + e: extractRustAst,helperPath + extractRustAst() + helperPath() + src/extractors/ast/go.ts: + i: ../../config/env.js,../../core/types.js,./external.js,node:path,node:url + e: extractGoAst,helperPath + extractGoAst() + helperPath() + src/extractors/ast/java.ts: + i: ../../config/env.js,../../core/types.js,./external.js,node:path,node:url + e: extractJavaAst,helperPath + extractJavaAst() + helperPath() + src/core/schema/constants.ts: + e: ACTIONS,MODALITIES,POLARITIES,LIFECYCLES,SOURCE_KINDS,EPISTEMIC_CLASSES,RELATION_TYPES,CONCLUSION_KINDS,DIAGNOSTIC_SEVERITIES,TODO_PRIORITIES,GENERATION_REQUESTED_MODES,GENERATION_EFFECTIVE_MODES,CODE_CHANGE_ACTIONS,CODE_CHANGE_RISK_LEVELS + ACTIONS() + MODALITIES() + POLARITIES() + LIFECYCLES() + SOURCE_KINDS() + EPISTEMIC_CLASSES() + RELATION_TYPES() + CONCLUSION_KINDS() + DIAGNOSTIC_SEVERITIES() + TODO_PRIORITIES() + GENERATION_REQUESTED_MODES() + GENERATION_EFFECTIVE_MODES() + CODE_CHANGE_ACTIONS() + CODE_CHANGE_RISK_LEVELS() + src/semantic/reranker-response.ts: + i: ../llm/structured-schema.js + e: SemanticRerankerResponse,RERANK_DECISION_CONTRACT,SEMANTIC_RERANK_RESPONSE_CONTRACT,SEMANTIC_RERANK_RESPONSE_SCHEMA,assertSemanticRerankerResponse,response + SemanticRerankerResponse: + RERANK_DECISION_CONTRACT() + SEMANTIC_RERANK_RESPONSE_CONTRACT() + SEMANTIC_RERANK_RESPONSE_SCHEMA() + assertSemanticRerankerResponse() + response() src/synthesis/task-synthesis-contract.ts: i: ../core/types.js,../llm/structured-schema.js e: RawConclusion,RawProposal,RawTaskSynthesisResponse,taskStrings,taskIds,nonBlank,RAW_CONCLUSION_CONTRACT,RAW_PROPOSAL_CONTRACT,TASK_SYNTHESIS_RESPONSE_CONTRACT @@ -3935,15 +4229,10 @@ Graph compar... RAW_CONCLUSION_CONTRACT() RAW_PROPOSAL_CONTRACT() TASK_SYNTHESIS_RESPONSE_CONTRACT() - src/semantic/reranker-response.ts: - i: ../llm/structured-schema.js - e: SemanticRerankerResponse,RERANK_DECISION_CONTRACT,SEMANTIC_RERANK_RESPONSE_CONTRACT,SEMANTIC_RERANK_RESPONSE_SCHEMA,assertSemanticRerankerResponse,response - SemanticRerankerResponse: - RERANK_DECISION_CONTRACT() - SEMANTIC_RERANK_RESPONSE_CONTRACT() - SEMANTIC_RERANK_RESPONSE_SCHEMA() - assertSemanticRerankerResponse() - response() + src/llm/audit.ts: + i: ../config/env.js,../core/types.js + e: openRouterAuditConfiguration + openRouterAuditConfiguration() src/operations/contract.ts: i: ../core/id.js,./validation.js e: variableContractSemanticValue,createVariableContract,normalized,normalizedPlanDraft,operationPlanHashMaterial,createOperationPlan,normalized,planHash @@ -3955,76 +4244,55 @@ Graph compar... createOperationPlan() normalized() planHash() - src/llm/audit.ts: - i: ../config/env.js,../core/types.js - e: openRouterAuditConfiguration - openRouterAuditConfiguration() - src/extractors/docs-schema.ts: - i: ../llm/structured-schema.js,./docs-types.js - e: strings,target,documentRecord,documentResponseContract,documentResponseSchema - strings() - target() - documentRecord() - documentResponseContract() - documentResponseSchema() - src/extractors/ast/rust.ts: - i: ../../config/env.js,../../core/types.js,./external.js,node:path,node:url - e: extractRustAst,helperPath - extractRustAst() - helperPath() - src/extractors/ast/java.ts: - i: ../../config/env.js,../../core/types.js,./external.js,node:path,node:url - e: extractJavaAst,helperPath - extractJavaAst() - helperPath() - src/extractors/ast/go.ts: - i: ../../config/env.js,../../core/types.js,./external.js,node:path,node:url - e: extractGoAst,helperPath - extractGoAst() - helperPath() - sdk/python/examples/local_runtime.py: - e: main - main() sdk/php/src/Error.php: e: Error Error: - examples/src/helper.py: - e: load_task,normalize_task - load_task(path) - normalize_task(value) - examples/sdk/typescript.mjs: - i: ../../dist/src/sdk/typescript.js,node:fs/promises - e: client - client() - examples/backend/src/store.ts: - e: IntentEvent,EventPage,EventStore - IntentEvent: - EventPage: - EventStore: enqueueEvent(-1),listEvents(-1),start(-1),size(-1) - tsconfig.json: - package.json: - docker-compose.yml: + sdk/python/examples/local_runtime.py: + e: main + main() + goal.yaml: compose.e2e.yml: - TODO.md: - TASK.md: - README.md: Makefile: + docker-compose.yml: Dockerfile: - CONTRIBUTION.md: - CHANGELOG.md: - src/version.ts: + tsconfig.json: + nlp2uri.yaml: + project2.sh: + package.json: + project.sh: + e: install_project_package,cleanup_analysis_snapshot,run_analysis_tool + install_project_package() + cleanup_analysis_snapshot() + run_analysis_tool() + schemas/todo-proposal.schema.json: + schemas/conclusion.schema.json: + schemas/document-extraction-response.schema.json: + schemas/participant-synthesis.schema.json: + schemas/intent-graph-diff.schema.json: + schemas/code-change-acceptance.schema.json: + schemas/operation-plan.schema.json: + schemas/code-change-review.schema.json: + schemas/code-change-close-result.schema.json: + schemas/code-change-source-patch.schema.json: + schemas/semantic-rerank.schema.json: + schemas/intent-graph.schema.json: + schemas/intent-record.schema.json: + schemas/code-change-plan-set.schema.json: + schemas/code-change-source-apply-receipt.schema.json: + schemas/todo-patch.schema.json: + schemas/variable-contract.schema.json: + schemas/participant-registry.schema.json: + schemas/code-change-plan.schema.json: + schemas/code-change-source-patch-set.schema.json: + schemas/semantic-candidate-set.schema.json: + schemas/gold-dataset.schema.json: + rust-ast/Cargo.toml: + examples/backend/tsconfig.json: + examples/frontend/tsconfig.json: + examples/project/participants.json: + examples/sdk/python.py: src/index.ts: - src/operations/types.ts: - i: ../core/types.js - e: VariableContract,OperationParameterReference,OperationRollback,OperationStep,OperationExpectation,OperationPlan,ResolvedVariableBinding,SubactorProcessEnvelope - VariableContract: - OperationParameterReference: - OperationRollback: - OperationStep: - OperationExpectation: - OperationPlan: - ResolvedVariableBinding: - SubactorProcessEnvelope: + src/version.ts: src/extractors/docs-types.ts: e: RawDocumentRecord,DocumentResponse,DocumentChunk,DocumentationTargetHints,DocumentationExtractionOptions,DocumentationExtractionResult,DocumentChunkResult RawDocumentRecord: @@ -4039,30 +4307,12 @@ Graph compar... e: AdapterFact,AdapterOutput AdapterFact: AdapterOutput: - src/diff/text-types.ts: - e: DiffLine,DiffHunk,FileDiff,DiffTextOptions - DiffLine: - DiffHunk: - FileDiff: - DiffTextOptions: + src/core/types/index.ts: src/core/version.ts: - src/core/types.ts: - e: SourceLineRange,IntentTarget,IntentStatement,IntentSource,IntentEpistemic,IntentLifecycle,IntentGenerationMetadata,IntentRecordMetadata,IntentRecord,IntentRelation,IntentGraph,IntentRecordChange,IntentGraphDiff,Diagnostic,DiagnosticReport,GroundedGenerationMetadata,Conclusion,TodoProposal,CodeChangeFile,CodeChangeRisk,CodeChangePlan,CodeChangeAcceptance,CodeChangeCloseResult,CodeChangeReviewPatch,CodeChangeSourceEdit,CodeChangeSourcePatch,CodeChangeSourcePatchSet,CodeChangeSourcePatchApproval,CodeChangeSourceApplyReceipt,TodoPatchDuplicateClassification,TodoPatchArtifact,TodoPatchApproval,TodoApplyReceipt,TodoApplyResult,ExtractionResult,ContentCacheStats,CachedExtractionResult,LlmResponseMetadata,PipelineStageAudit,PipelineOptions,PipelineManifest - SourceLineRange: - IntentTarget: - IntentStatement: - IntentSource: - IntentEpistemic: - IntentLifecycle: - IntentGenerationMetadata: - IntentRecordMetadata: - IntentRecord: - IntentRelation: - IntentGraph: - IntentRecordChange: - IntentGraphDiff: - Diagnostic: - DiagnosticReport: + src/core/schema/index.ts: + src/core/types/code-change.ts: + i: ./diagnostics.js,./intent.js,./pipeline.js + e: GroundedGenerationMetadata,Conclusion,TodoProposal,CodeChangeFile,CodeChangeRisk,CodeChangePlan,CodeChangeAcceptance,CodeChangeCloseResult,CodeChangeReviewPatch,CodeChangeSourceEdit,CodeChangeSourcePatch,CodeChangeSourcePatchSet,CodeChangeSourcePatchApproval,CodeChangeSourceApplyReceipt,TodoPatchDuplicateClassification,TodoPatchArtifact GroundedGenerationMetadata: Conclusion: TodoProposal: @@ -4079,9 +4329,30 @@ Graph compar... CodeChangeSourceApplyReceipt: TodoPatchDuplicateClassification: TodoPatchArtifact: - TodoPatchApproval: - TodoApplyReceipt: - TodoApplyResult: + src/core/types/intent.ts: + e: SourceLineRange,IntentTarget,IntentStatement,IntentSource,IntentEpistemic,IntentLifecycle,IntentGenerationMetadata,IntentRecordMetadata,IntentRecord,IntentRelation,IntentGraph,IntentRecordChange,IntentGraphDiff,Diagnostic,DiagnosticReport + SourceLineRange: + IntentTarget: + IntentStatement: + IntentSource: + IntentEpistemic: + IntentLifecycle: + IntentGenerationMetadata: + IntentRecordMetadata: + IntentRecord: + IntentRelation: + IntentGraph: + IntentRecordChange: + IntentGraphDiff: + Diagnostic: + DiagnosticReport: + src/core/types/diagnostics.ts: + e: Diagnostic,DiagnosticReport + Diagnostic: + DiagnosticReport: + src/core/types/pipeline.ts: + i: ./intent.js + e: ExtractionResult,ContentCacheStats,CachedExtractionResult,LlmResponseMetadata,PipelineStageAudit,PipelineOptions,PipelineManifest ExtractionResult: ContentCacheStats: CachedExtractionResult: @@ -4089,108 +4360,77 @@ Graph compar... PipelineStageAudit: PipelineOptions: PipelineManifest: - sdk/__init__.py: - sdk/README.md: - sdk/typescript/tsconfig.json: - sdk/typescript/package.json: - sdk/typescript/README.md: - sdk/rust/README.md: - sdk/rust/Cargo.toml: - sdk/rust/src/lib.rs: - sdk/python/__init__.py: - sdk/python/README.md: - sdk/python/todo2code/__init__.py: - sdk/php/composer.json: - sdk/php/README.md: - sdk/php/examples/basic.php: - i: Todo2Code\Client,Todo2Code\Error - sdk/go/todo2code.go: - sdk/go/README.md: - scripts/smoke.sh: + src/semantic/reranker/index.ts: + src/semantic/reranker/types.ts: + e: SemanticRetrievalIdentity,SemanticCandidate,SemanticCandidateSet,SemanticCandidateInput,SemanticRetrievalInput,SemanticEvidenceCitation,SemanticRerankDecisionInput,SemanticRerankDecision,SemanticRerankGeneration,SemanticRerankResult,SemanticRerankGenerationInput + SemanticRetrievalIdentity: + SemanticCandidate: + SemanticCandidateSet: + SemanticCandidateInput: + SemanticRetrievalInput: + SemanticEvidenceCitation: + SemanticRerankDecisionInput: + SemanticRerankDecision: + SemanticRerankGeneration: + SemanticRerankResult: + SemanticRerankGenerationInput: + src/synthesis/code-change-plan/index.ts: + src/interfaces/governed-intake.proto: + src/interfaces/intake-schemas/command-v1.schema.json: + src/interfaces/intake-schemas/result-v1.schema.json: + src/interfaces/intake-schemas/event-v1.schema.json: + src/interfaces/intake-schemas/envelope-v1.schema.json: + src/interfaces/intake-schemas/participant-registry-v2.schema.json: + src/interfaces/intake-schemas/query-v1.schema.json: + src/interfaces/intake-schemas/diagnostic-v1.schema.json: + src/diff/text-types.ts: + e: DiffLine,DiffHunk,FileDiff,DiffTextOptions + DiffLine: + DiffHunk: + FileDiff: + DiffTextOptions: + src/operations/types.ts: + i: ../core/types.js + e: VariableContract,OperationParameterReference,OperationRollback,OperationStep,OperationExpectation,OperationPlan,ResolvedVariableBinding,SubactorProcessEnvelope + VariableContract: + OperationParameterReference: + OperationRollback: + OperationStep: + OperationExpectation: + OperationPlan: + ResolvedVariableBinding: + SubactorProcessEnvelope: + src/communication/llm.ts: scripts/package.py: - scripts/mcp-request.sh: - scripts/examples-check.sh: - e: cleanup,record_sdk_log,run_sdk - cleanup() - record_sdk_log() - run_sdk() scripts/e2e.sh: e: fail,require_command,run_step fail() require_command() run_step() + scripts/a2a-request.sh: + scripts/mcp-request.sh: scripts/docker-smoke.sh: e: cleanup cleanup() - scripts/a2a-request.sh: - scripts/research/README.md: - schemas/variable-contract.schema.json: - schemas/todo-proposal.schema.json: - schemas/todo-patch.schema.json: - schemas/semantic-rerank.schema.json: - schemas/semantic-candidate-set.schema.json: - schemas/participant-synthesis.schema.json: - schemas/participant-registry.schema.json: - schemas/operation-plan.schema.json: - schemas/intent-record.schema.json: - schemas/intent-graph.schema.json: - schemas/intent-graph-diff.schema.json: - schemas/gold-dataset.schema.json: - schemas/document-extraction-response.schema.json: - schemas/conclusion.schema.json: - schemas/code-change-source-patch.schema.json: - schemas/code-change-source-patch-set.schema.json: - schemas/code-change-source-apply-receipt.schema.json: - schemas/code-change-review.schema.json: - schemas/code-change-plan.schema.json: - schemas/code-change-plan-set.schema.json: - schemas/code-change-close-result.schema.json: - schemas/code-change-acceptance.schema.json: - rust-ast/Cargo.toml: - python/requirements.txt: - prompts/tasks-from-dsl.system.md: - prompts/summarize.system.md: - prompts/nl-to-intent.system.md: - prompts/markdown-to-intent.system.md: - prompts/docs-to-intent.system.md: - prompts/communication-to-intent.system.md: - examples/task.md: - examples/TODO.md: - examples/CHANGELOG.md: - examples/sdk/python.py: - examples/frontend/tsconfig.json: - examples/frontend/task.md: - examples/frontend/TODO.md: - examples/frontend/README.md: - examples/frontend/CHANGELOG.md: - examples/docs/ARCHITECTURE.md: - examples/backend/tsconfig.json: - examples/backend/task.md: - examples/backend/TODO.md: - examples/backend/README.md: - examples/backend/CHANGELOG.md: - evaluation/gold/README.md: + scripts/examples-check.sh: + e: cleanup,record_sdk_log,run_sdk + cleanup() + record_sdk_log() + run_sdk() + scripts/smoke.sh: + adapters/tensorflow/package.json: evaluation/gold/v2/dataset.json: evaluation/gold/v1/dataset.json: - docs/VALIDATION.md: - docs/TEST_REPORT.md: - docs/TEAM_COMMUNICATION.md: - docs/SYSTEM_MONITOROWANIA_INTENCJI_I_PRACY_AGENTOW.md: - docs/SUBACTOR_OPERATION_DSL.md: - docs/SECURITY.md: - docs/REQUIREMENTS.md: - docs/READINESS.md: - docs/PROTOCOLS.md: - docs/PIPELINE_DSL_NL.md: - docs/OPTIMIZATION.md: - docs/GROK-PLAN.md: - docs/E2E.md: - docs/DSL.md: - docs/DEMOLLM.md: - docs/CODE_CHANGE_PLANS.md: - docs/CLI_GUIDE.md: - docs/ARCHITECTURE.md: - docs/reference/original-monitoring-design.md: - docs/intent-guard-diagrams/README.md: - docs/intent-guard-diagrams/ALL_DIAGRAMS.md: - adapters/tensorflow/package.json: + python/requirements.txt: + sdk/__init__.py: + sdk/go/todo2code.go: + sdk/typescript/tsconfig.json: + sdk/typescript/package.json: + sdk/rust/Cargo.toml: + sdk/rust/src/lib.rs: + sdk/php/composer.json: + sdk/php/examples/basic.php: + i: Todo2Code\Client,Todo2Code\Error + sdk/python/__init__.py: + sdk/python/pyproject.toml: + sdk/python/todo2code/__init__.py: diff --git a/project/mermaid.export b/project/mermaid.export index 07a9a48..6598708 100644 --- a/project/mermaid.export +++ b/project/mermaid.export @@ -32,6 +32,12 @@ flowchart TD examples__backend__src__server__host["host"] end subgraph examples__frontend + examples__frontend__src__api__ApiError__super["super"] + examples__frontend__src__api__ApiError__fetchEvents["fetchEvents"] + examples__frontend__src__api__ApiError__url["url"] + examples__frontend__src__api__ApiError__response["response"] + examples__frontend__src__api__ApiError__payload["payload"] + examples__frontend__src__api__ApiError__publishEvent["publishEvent"] examples__frontend__src__render__classifyEvent["classifyEvent"] examples__frontend__src__render__toRows["toRows"] examples__frontend__src__render__renderTable["renderTable"] @@ -51,21 +57,15 @@ flowchart TD examples__frontend__src__app__mountPanel["mountPanel"] examples__frontend__src__app__state["state"] examples__frontend__src__app__reload["reload"] - examples__frontend__src__api__ApiError__super["super"] - examples__frontend__src__api__ApiError__fetchEvents["fetchEvents"] - examples__frontend__src__api__ApiError__url["url"] - examples__frontend__src__api__ApiError__response["response"] - examples__frontend__src__api__ApiError__payload["payload"] - examples__frontend__src__api__ApiError__publishEvent["publishEvent"] end subgraph examples__sdk examples__sdk__typescript__client["client"] end subgraph examples__src - examples__src__runtime__validateContract["validateContract"] - examples__src__runtime__executeContract["executeContract"] examples__src__helper__load_task["load_task"] examples__src__helper__normalize_task["normalize_task"] + examples__src__runtime__validateContract["validateContract"] + examples__src__runtime__executeContract["executeContract"] end subgraph golang__ast_extract golang__ast_extract__main("main CC=14") @@ -107,6 +107,11 @@ flowchart TD php__ast_extract__addFact["addFact"] php__ast_extract__parseFile{{parseFile CC=38}} end + subgraph project + project__install_project_package["install_project_package"] + project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"] + project__run_analysis_tool["run_analysis_tool"] + end subgraph python__ast_extract python__ast_extract__source_hash["source_hash"] python__ast_extract__dotted_name["dotted_name"] @@ -237,6 +242,8 @@ flowchart TD scripts__normalize_generated_analysis_roots__normalized["normalized"] end subgraph scripts__research + scripts__research__evaluate_embedding_pairs__parse_args["parse_args"] + scripts__research__evaluate_embedding_pairs__main("main CC=9") scripts__research__rerank_embedding_shortlist__options["options"] scripts__research__rerank_embedding_shortlist__records["records"] scripts__research__rerank_embedding_shortlist__selectedRows["selectedRows"] @@ -264,11 +271,6 @@ flowchart TD scripts__research__rerank_embedding_shortlist__value["value"] scripts__research__rerank_embedding_shortlist__required["required"] scripts__research__rerank_embedding_shortlist__top["top"] - scripts__research__rank_intent_graph_embeddings__parse_args["parse_args"] - scripts__research__rank_intent_graph_embeddings__projection_text["projection_text"] - scripts__research__rank_intent_graph_embeddings__main{{main CC=27}} - scripts__research__evaluate_embedding_pairs__parse_args["parse_args"] - scripts__research__evaluate_embedding_pairs__main("main CC=9") scripts__research__audit_changelog_sample__options["options"] scripts__research__audit_changelog_sample__entries["entries"] scripts__research__audit_changelog_sample__root["root"] @@ -297,6 +299,9 @@ flowchart TD scripts__research__audit_changelog_sample__match["match"] scripts__research__audit_changelog_sample__candidate["candidate"] scripts__research__audit_changelog_sample__basename["basename"] + scripts__research__audit_changelog_sample__pathOwners["pathOwners"] + scripts__research__audit_changelog_sample__countBy["countBy"] + scripts__research__audit_changelog_sample__item["item"] end subgraph scripts__sync_generated_readme_metadata scripts__sync_generated_readme_metadata__root["root"] @@ -397,8 +402,6 @@ flowchart TD scripts__verify_workflow_yaml__directory["directory"] end subgraph sdk__go - sdk__go__types__Generation["Generation"] - sdk__go__types__Error["Error"] sdk__go__client__New["New"] sdk__go__client__nextID["nextID"] sdk__go__client__setHeaders["setHeaders"] @@ -409,6 +412,8 @@ flowchart TD sdk__go__client__Health["Health"] sdk__go__client__AgentCard["AgentCard"] sdk__go__client__getJSON["getJSON"] + sdk__go__types__Generation["Generation"] + sdk__go__types__Error["Error"] sdk__go__actions__ExtractAST["ExtractAST"] sdk__go__actions__ExtractConfig["ExtractConfig"] sdk__go__actions__ExtractNL["ExtractNL"] @@ -434,8 +439,6 @@ flowchart TD sdk__go__examples__basic__main__joinedIDs["joinedIDs"] end subgraph sdk__php - sdk__php__src__Error__Todo2Code__Error____construct["__construct"] - sdk__php__src__Error__Todo2Code__Error__data["data"] sdk__php__src__Client__Todo2Code__Client____construct["__construct"] sdk__php__src__Client__Todo2Code__Client__health["health"] sdk__php__src__Client__Todo2Code__Client__agentCard["agentCard"] @@ -463,6 +466,8 @@ flowchart TD sdk__php__src__Client__Todo2Code__Client__request("request CC=10") sdk__php__src__Client__Todo2Code__Client__statusFromHeaders["statusFromHeaders"] sdk__php__src__Client__Todo2Code__Client__nextId["nextId"] + sdk__php__src__Error__Todo2Code__Error____construct["__construct"] + sdk__php__src__Error__Todo2Code__Error__data["data"] end subgraph sdk__python sdk__python__todo2code_sdk__Todo2CodeClient____init__["__init__"] @@ -476,6 +481,8 @@ flowchart TD sdk__python__todo2code_sdk__Todo2CodeClient__reality["reality"] sdk__python__todo2code_sdk__Todo2CodeClient__run["run"] sdk__python__todo2code_sdk___record_dict["_record_dict"] + sdk__python__examples__basic__main("main CC=11") + sdk__python__examples__local_runtime__main["main"] sdk__python__todo2code__runtime__TypeScriptRuntime____init__["__init__"] sdk__python__todo2code__runtime__TypeScriptRuntime__invoke["invoke"] sdk__python__todo2code__runtime__TypeScriptRuntime__version["version"] @@ -523,13 +530,34 @@ flowchart TD sdk__python__todo2code__client__T2CClient__summarize["summarize"] sdk__python__todo2code__client__T2CClient__diff_graphs["diff_graphs"] sdk__python__todo2code__client__T2CClient__diff_graphs_rest["diff_graphs_rest"] - sdk__python__todo2code__client__T2CClient__diff_files["diff_files"] - sdk__python__todo2code__client__T2CClient__diff_git["diff_git"] end subgraph sdk__rust - sdk__rust__src__types__generation["generation"] + sdk__rust__examples__basic__main["main"] + sdk__rust__examples__basic__run{{run CC=20}} + sdk__rust__examples__basic__joined_ids["joined_ids"] + sdk__rust__src__actions__extract_ast["extract_ast"] + sdk__rust__src__actions__extract_config["extract_config"] + sdk__rust__src__actions__extract_nl["extract_nl"] + sdk__rust__src__actions__extract_nl_mode["extract_nl_mode"] + sdk__rust__src__actions__extract_docs["extract_docs"] + sdk__rust__src__actions__extract_markdown["extract_markdown"] + sdk__rust__src__actions__extract_markdown_mode["extract_markdown_mode"] + sdk__rust__src__actions__extract_git["extract_git"] + sdk__rust__src__actions__link["link"] + sdk__rust__src__actions__diagnose["diagnose"] + sdk__rust__src__actions__reality["reality"] + sdk__rust__src__actions__diff_git["diff_git"] + sdk__rust__src__actions__diff_files["diff_files"] + sdk__rust__src__actions__diff_graphs["diff_graphs"] + sdk__rust__src__actions__compare_workspace["compare_workspace"] + sdk__rust__src__actions__pipeline["pipeline"] + sdk__rust__src__actions__propose_todo["propose_todo"] + sdk__rust__src__actions__render_todo["render_todo"] + sdk__rust__src__actions__apply_todo["apply_todo"] + sdk__rust__src__actions__merge["merge"] sdk__rust__src__error__fmt["fmt"] sdk__rust__src__error__from["from"] + sdk__rust__src__types__generation["generation"] sdk__rust__src__client__new["new"] sdk__rust__src__client__with_timeout["with_timeout"] sdk__rust__src__client__next_id["next_id"] @@ -549,31 +577,27 @@ flowchart TD sdk__rust__src__client__decode_chunked["decode_chunked"] sdk__rust__src__client__parses_base_urls["parses_base_urls"] sdk__rust__src__client__decodes_chunked_bodies["decodes_chunked_bodies"] - sdk__rust__src__actions__extract_ast["extract_ast"] - sdk__rust__src__actions__extract_config["extract_config"] - sdk__rust__src__actions__extract_nl["extract_nl"] - sdk__rust__src__actions__extract_nl_mode["extract_nl_mode"] - sdk__rust__src__actions__extract_docs["extract_docs"] - sdk__rust__src__actions__extract_markdown["extract_markdown"] - sdk__rust__src__actions__extract_markdown_mode["extract_markdown_mode"] - sdk__rust__src__actions__extract_git["extract_git"] - sdk__rust__src__actions__link["link"] - sdk__rust__src__actions__diagnose["diagnose"] - sdk__rust__src__actions__reality["reality"] - sdk__rust__src__actions__diff_git["diff_git"] - sdk__rust__src__actions__diff_files["diff_files"] - sdk__rust__src__actions__diff_graphs["diff_graphs"] - sdk__rust__src__actions__compare_workspace["compare_workspace"] - sdk__rust__src__actions__pipeline["pipeline"] - sdk__rust__src__actions__propose_todo["propose_todo"] - sdk__rust__src__actions__render_todo["render_todo"] - sdk__rust__src__actions__apply_todo["apply_todo"] - sdk__rust__src__actions__merge["merge"] - sdk__rust__examples__basic__main["main"] - sdk__rust__examples__basic__run{{run CC=20}} - sdk__rust__examples__basic__joined_ids["joined_ids"] end subgraph sdk__typescript + sdk__typescript__examples__basic__baseUrl{{baseUrl CC=17}} + sdk__typescript__examples__basic__token{{token CC=17}} + sdk__typescript__examples__basic__root{{root CC=17}} + sdk__typescript__examples__basic__main{{main CC=17}} + sdk__typescript__examples__basic__client["client"] + sdk__typescript__examples__basic__health["health"] + sdk__typescript__examples__basic__card["card"] + sdk__typescript__examples__basic__nl["nl"] + sdk__typescript__examples__basic__ast["ast"] + sdk__typescript__examples__basic__markdown["markdown"] + sdk__typescript__examples__basic__graph["graph"] + sdk__typescript__examples__basic__diagnostics["diagnostics"] + sdk__typescript__examples__basic__synthesis["synthesis"] + sdk__typescript__examples__basic__validation["validation"] + sdk__typescript__examples__basic__rendered["rendered"] + sdk__typescript__examples__basic__artifact["artifact"] + sdk__typescript__examples__basic__reality["reality"] + sdk__typescript__examples__basic__gitDiff["gitDiff"] + sdk__typescript__examples__basic__comparison["comparison"] sdk__typescript__src__unwrapTask["unwrapTask"] sdk__typescript__src__T2CError__super["super"] sdk__typescript__src__T2CClient__health["health"] @@ -615,149 +639,130 @@ flowchart TD sdk__typescript__src__T2CClient__rpc["rpc"] sdk__typescript__src__T2CClient__payload["payload"] sdk__typescript__src__T2CClient__getJson["getJson"] - sdk__typescript__src__T2CClient__request["request"] - sdk__typescript__src__T2CClient__controller["controller"] - sdk__typescript__src__T2CClient__timer["timer"] - sdk__typescript__src__T2CClient__clearTimeout["clearTimeout"] - sdk__typescript__examples__basic__baseUrl{{baseUrl CC=17}} - sdk__typescript__examples__basic__token{{token CC=17}} - sdk__typescript__examples__basic__root{{root CC=17}} - sdk__typescript__examples__basic__main{{main CC=17}} - sdk__typescript__examples__basic__client["client"] - sdk__typescript__examples__basic__health["health"] - sdk__typescript__examples__basic__card["card"] - sdk__typescript__examples__basic__nl["nl"] - sdk__typescript__examples__basic__ast["ast"] - sdk__typescript__examples__basic__markdown["markdown"] - sdk__typescript__examples__basic__graph["graph"] - sdk__typescript__examples__basic__diagnostics["diagnostics"] - sdk__typescript__examples__basic__synthesis["synthesis"] - sdk__typescript__examples__basic__validation["validation"] - sdk__typescript__examples__basic__rendered["rendered"] end subgraph src__cli src__cli__execFileAsync["execFileAsync"] - src__cli__main{{main CC=95}} + src__cli__main("main CC=9") src__cli__parsed["parsed"] src__cli__command["command"] src__cli__config["config"] + src__cli__handler["handler"] + src__cli__commandHandlers["commandHandlers"] + src__cli__resolveMainCommand["resolveMainCommand"] + src__cli__handleLink["handleLink"] src__cli__files["files"] src__cli__records["records"] src__cli__graph["graph"] + src__cli__handleDiagnose["handleDiagnose"] src__cli__graphFile["graphFile"] + src__cli__handleSummarize["handleSummarize"] src__cli__diagnosticsPath["diagnosticsPath"] src__cli__diagnostics["diagnostics"] src__cli__result["result"] src__cli__out["out"] + src__cli__handleProposeTodo["handleProposeTodo"] src__cli__graphPath["graphPath"] src__cli__output["output"] + src__cli__handleRenderTodo("handleRenderTodo CC=8") src__cli__synthesisPath["synthesisPath"] src__cli__patch["patch"] src__cli__audit["audit"] + src__cli__handleApplyTodo("handleApplyTodo CC=8") src__cli__receipt["receipt"] src__cli__actor["actor"] src__cli__approvalHash["approvalHash"] + src__cli__handleProposeCodeChange["handleProposeCodeChange"] + src__cli__handleRenderCodeChange["handleRenderCodeChange"] src__cli__plansPath["plansPath"] + src__cli__handleProposeSourcePatch["handleProposeSourcePatch"] src__cli__inputPath["inputPath"] src__cli__isPlanSet["isPlanSet"] + src__cli__handleApplySourcePatch["handleApplySourcePatch"] src__cli__patchPath["patchPath"] + src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] src__cli__planPath["planPath"] src__cli__beforeGraphPath["beforeGraphPath"] src__cli__afterGraphPath["afterGraphPath"] + src__cli__handleCloseCodeChange["handleCloseCodeChange"] + src__cli__handleCompareWorkspace["handleCompareWorkspace"] src__cli__root["root"] + src__cli__handlePipeline["handlePipeline"] + src__cli__options("options CC=13") src__cli__handleWatch["handleWatch"] src__cli__taskFile["taskFile"] + src__cli__pipeline["pipeline"] src__cli__controller["controller"] src__cli__stop["stop"] + src__cli__resolvePipelineRoot["resolvePipelineRoot"] + src__cli__buildPipelineOptions["buildPipelineOptions"] + src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] + src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] + src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOptions"] src__cli__formatWatchEvent("formatWatchEvent CC=10") src__cli__stamp("stamp CC=10") - src__cli__handleDiff{{handleDiff CC=24}} - src__cli__mode("mode CC=8") - src__cli__svg["svg"] - src__cli__html("html CC=8") - src__cli__beforeFile["beforeFile"] - src__cli__afterFile["afterFile"] - src__cli__diff["diff"] - src__cli__context("context CC=9") - src__cli__maxRows("maxRows CC=9") - src__cli__handleReality("handleReality CC=9") - src__cli__view["view"] - src__cli__markdown["markdown"] - src__cli__handleExtract{{handleExtract CC=16}} - src__cli__extractor["extractor"] - src__cli__file["file"] - src__cli__inline["inline"] - src__cli__handleCommunication("handleCommunication CC=11") - src__cli__analysis["analysis"] - src__cli__graphOut["graphOut"] - src__cli__emitExtraction["emitExtraction"] - src__cli__emitJson["emitJson"] - src__cli__initProject["initProject"] - src__cli__moduleRoot["moduleRoot"] - src__cli__sourceEnv["sourceEnv"] - src__cli__targetEnv["targetEnv"] + src__cli__handleDiff("handleDiff CC=9") end subgraph src__communication - src__communication__llm__CommunicationLlmRequiredError__super["super"] - src__communication__llm__CommunicationLlmRequiredError__extractCommunicationIntentAudited("extractCommunicationIntentAudited CC=12") - src__communication__llm__CommunicationLlmRequiredError__startedAt["startedAt"] - src__communication__llm__CommunicationLlmRequiredError__deterministic["deterministic"] - src__communication__llm__CommunicationLlmRequiredError__records["records"] - src__communication__llm__CommunicationLlmRequiredError__client["client"] - src__communication__llm__CommunicationLlmRequiredError__groups["groups"] - src__communication__llm__CommunicationLlmRequiredError__response["response"] - src__communication__llm__CommunicationLlmRequiredError__enrichments["enrichments"] - src__communication__llm__CommunicationLlmRequiredError__enrichedByOriginal["enrichedByOriginal"] - src__communication__llm__CommunicationLlmRequiredError__generation["generation"] - src__communication__llm__CommunicationLlmRequiredError__participants["participants"] - src__communication__llm__CommunicationLlmRequiredError__failure["failure"] - src__communication__llm__CommunicationLlmRequiredError__responses["responses"] - src__communication__llm__CommunicationLlmRequiredError__classifyLlmFailure["classifyLlmFailure"] - src__communication__llm__CommunicationAttemptError__super["super"] - src__communication__llm__CommunicationAttemptError__enrichWithCorrection["enrichWithCorrection"] - src__communication__llm__CommunicationAttemptError__completion["completion"] - src__communication__llm__CommunicationAttemptError__fallbackOrThrow["fallbackOrThrow"] - src__communication__llm__CommunicationAttemptError__failed["failed"] - src__communication__llm__CommunicationAttemptError__marked["marked"] - src__communication__llm__CommunicationAttemptError__participantGroups("participantGroups CC=10") - src__communication__llm__CommunicationAttemptError__grouped["grouped"] - src__communication__llm__CommunicationAttemptError__participant["participant"] - src__communication__llm__CommunicationAttemptError__role["role"] - src__communication__llm__CommunicationAttemptError__key["key"] - src__communication__llm__CommunicationAttemptError__values["values"] - src__communication__llm__CommunicationAttemptError__promptPayload["promptPayload"] - src__communication__llm__CommunicationAttemptError__validateEnrichments["validateEnrichments"] - src__communication__llm__CommunicationAttemptError__expected["expected"] - src__communication__llm__CommunicationAttemptError__output["output"] - src__communication__llm__CommunicationAttemptError__materializeSyntheses("materializeSyntheses CC=9") - src__communication__llm__CommunicationAttemptError__byKey["byKey"] - src__communication__llm__CommunicationAttemptError__seen["seen"] - src__communication__llm__CommunicationAttemptError__group["group"] - src__communication__llm__CommunicationAttemptError__permitted["permitted"] - src__communication__llm__CommunicationAttemptError__recordIds["recordIds"] - src__communication__llm__CommunicationAttemptError__enrichRecord["enrichRecord"] - src__communication__llm__CommunicationAttemptError__deterministicSyntheses["deterministicSyntheses"] - src__communication__llm__CommunicationAttemptError__synthesis["synthesis"] - src__communication__llm__CommunicationAttemptError__markDeterministic["markDeterministic"] - src__communication__llm__CommunicationAttemptError__deterministicGeneration["deterministicGeneration"] - src__communication__llm__CommunicationAttemptError__fallbackGeneration["fallbackGeneration"] - src__communication__llm__CommunicationAttemptError__llmGeneration["llmGeneration"] - src__communication__llm__CommunicationAttemptError__audit["audit"] - src__communication__llm__CommunicationAttemptError__roleOf["roleOf"] - src__communication__llm__CommunicationAttemptError__sortedUnique["sortedUnique"] - src__communication__llm__CommunicationAttemptError__readPrompt["readPrompt"] - src__communication__llm__CommunicationAttemptError__promptPath["promptPath"] - src__communication__llm__CommunicationAttemptError__communicationStrings["communicationStrings"] - src__communication__llm__CommunicationAttemptError__COMMUNICATION_ENRICHMENT_CONTRACT["COMMUNICATION_ENRICHMENT_CONTRACT"] - src__communication__llm__CommunicationAttemptError__PARTICIPANT_SYNTHESIS_CONTRACT["PARTICIPANT_SYNTHESIS_CONTRACT"] - src__communication__llm__CommunicationAttemptError__COMMUNICATION_RESPONSE_CONTRACT["COMMUNICATION_RESPONSE_CONTRACT"] - src__communication__identity__loadParticipantIdentityRegistry["loadParticipantIdentityRegistry"] - src__communication__identity__registryPath["registryPath"] - src__communication__identity__assertParticipantIdentityRegistry{{assertParticipantIdentityRegistry CC=30}} - src__communication__identity__registry{{registry CC=25}} - src__communication__identity__ids{{ids CC=25}} - src__communication__identity__external{{external CC=25}} - src__communication__identity__entry["entry"] + src__communication__intake_contract__IntakeError__super["super"] + src__communication__intake_contract__IntakeError__payloadHash["payloadHash"] + src__communication__intake_contract__IntakeError__canonicalJson["canonicalJson"] + src__communication__intake_contract__IntakeError__record["record"] + src__communication__intake_contract__IntakeError__assertIntakeEnvelope{{assertIntakeEnvelope CC=18}} + src__communication__intake_contract__IntakeError__envelope["envelope"] + src__communication__intake_contract__IntakeError__invalid["invalid"] + src__communication__intake_contract__IntakeError__assertCommand("assertCommand CC=12") + src__communication__intake_contract__IntakeError__base["base"] + src__communication__intake_contract__IntakeError__participantId["participantId"] + src__communication__intake_contract__IntakeError__assertQuery("assertQuery CC=8") + src__communication__intake_contract__IntakeError__assertParticipant("assertParticipant CC=9") + src__communication__intake_contract__IntakeError__entry["entry"] + src__communication__intake_contract__IntakeError__nonBlank["nonBlank"] + src__communication__intake_contract__IntakeError__capabilities["capabilities"] + src__communication__intake_contract__IntakeError__stringArray["stringArray"] + src__communication__intake_contract__IntakeError__principalKey["principalKey"] + src__communication__intake_contract__IntakeError__assertPrincipal["assertPrincipal"] + src__communication__intake_contract__IntakeError__principal["principal"] + src__communication__intake_contract__IntakeError__commandFields["commandFields"] + src__communication__intake_contract__IntakeError__type["type"] + src__communication__intake_contract__IntakeError__queryFields["queryFields"] + src__communication__intake_contract__IntakeError__strictObject["strictObject"] + src__communication__intake_contract__IntakeError__allowed["allowed"] + src__communication__intake_contract__IntakeError__extra["extra"] + src__communication__intake_contract__IntakeError__missing["missing"] + src__communication__intake_contract__IntakeError__ticketId["ticketId"] + src__communication__intake_contract__IntakeError__role["role"] + src__communication__intake_contract__IntakeError__diagnostic["diagnostic"] + src__communication__intake_contract__IntakeError__known["known"] + src__communication__intake_protobuf__encodeIntakeEnvelope["encodeIntakeEnvelope"] + src__communication__intake_protobuf__operation["operation"] + src__communication__intake_protobuf__decodeIntakeEnvelope{{decodeIntakeEnvelope CC=16}} + src__communication__intake_protobuf__values("values CC=9") + src__communication__intake_protobuf__offset["offset"] + src__communication__intake_protobuf__fieldStart("fieldStart CC=8") + src__communication__intake_protobuf__number("number CC=8") + src__communication__intake_protobuf__wire("wire CC=8") + src__communication__intake_protobuf__raw["raw"] + src__communication__intake_protobuf__payload["payload"] + src__communication__intake_protobuf__encodeIntakeResult["encodeIntakeResult"] + src__communication__intake_protobuf__decodeIntakeResult{{decodeIntakeResult CC=18}} + src__communication__intake_protobuf__strings["strings"] + src__communication__intake_protobuf__numbers["numbers"] + src__communication__intake_protobuf__field["field"] + src__communication__intake_protobuf__bytesField["bytesField"] + src__communication__intake_protobuf__data["data"] + src__communication__intake_protobuf__varintField["varintField"] + src__communication__intake_protobuf__writeVarint["writeVarint"] + src__communication__intake_protobuf__remaining["remaining"] + src__communication__intake_protobuf__readVarint["readVarint"] + src__communication__intake_protobuf__value["value"] + src__communication__intake_protobuf__byte["byte"] + src__communication__analyzer__analyzeCommunication{{analyzeCommunication CC=48}} + src__communication__analyzer__communication("communication CC=8") + src__communication__analyzer__evidenceByRecord("evidenceByRecord CC=8") + src__communication__analyzer__participants("participants CC=8") + src__communication__analyzer__participant["participant"] + src__communication__analyzer__values["values"] + src__communication__analyzer__left["left"] end subgraph src__comparison src__comparison__workspace__execFileAsync("execFileAsync CC=12") @@ -795,10 +800,10 @@ flowchart TD src__comparison__workspace__artifacts["artifacts"] src__comparison__workspace__scopedOutputDirectory["scopedOutputDirectory"] src__comparison__workspace__absolute["absolute"] + src__comparison__workspace__relative["relative"] src__comparison__workspace__commonPipelineOptions("commonPipelineOptions CC=11") src__comparison__workspace__optionsForRoot["optionsForRoot"] src__comparison__workspace__existingFile["existingFile"] - src__comparison__workspace__relative["relative"] src__comparison__workspace__coverage["coverage"] src__comparison__workspace__diagnosticDelta["diagnosticDelta"] src__comparison__workspace__classifyWorkspaceTrend("classifyWorkspaceTrend CC=9") @@ -838,6 +843,18 @@ flowchart TD src__config__env__hasOpenRouter["hasOpenRouter"] end subgraph src__core + src__core__target__GENERIC_SYMBOLS("GENERIC_SYMBOLS CC=9") + src__core__target__GENERIC_FILES("GENERIC_FILES CC=9") + src__core__target__normalizeTarget("normalizeTarget CC=9") + src__core__target__normalizePath["normalizePath"] + src__core__target__normalizeSymbol["normalizeSymbol"] + src__core__target__symbolAliases["symbolAliases"] + src__core__target__normalized["normalized"] + src__core__target__parts["parts"] + src__core__target__leaf["leaf"] + src__core__target__pathAliases["pathAliases"] + src__core__target__basename["basename"] + src__core__target__unique["unique"] src__core__text__STOP_WORDS{{STOP_WORDS CC=17}} src__core__text__classifyActionHeuristically{{classifyActionHeuristically CC=17}} src__core__text__conventional["conventional"] @@ -886,20 +903,15 @@ flowchart TD src__core__text__result["result"] src__core__text__splitIntentLines["splitIntentLines"] src__core__text__lines["lines"] - src__core__text__raw["raw"] - src__core__text__cleaned["cleaned"] - src__core__text__pieces["pieces"] - src__core__target__GENERIC_SYMBOLS("GENERIC_SYMBOLS CC=9") - src__core__target__GENERIC_FILES("GENERIC_FILES CC=9") - src__core__target__normalizeTarget("normalizeTarget CC=9") - src__core__target__normalizePath["normalizePath"] - src__core__target__normalizeSymbol["normalizeSymbol"] - src__core__target__symbolAliases["symbolAliases"] - src__core__target__normalized["normalized"] - src__core__target__parts["parts"] - src__core__target__leaf["leaf"] end subgraph src__diff + src__diff__svg__escapeXml["escapeXml"] + src__diff__svg__truncate["truncate"] + src__diff__svg__sanitizeSourceLine["sanitizeSourceLine"] + src__diff__svg__metricCard["metricCard"] + src__diff__svg__svgStyles["svgStyles"] + src__diff__svg__svgDocument["svgDocument"] + src__diff__svg__theme["theme"] src__diff__text__DEFAULT_CONTEXT["DEFAULT_CONTEXT"] src__diff__text__DEFAULT_MAX_COMPARE_LINES["DEFAULT_MAX_COMPARE_LINES"] src__diff__text__splitLines["splitLines"] @@ -948,51 +960,26 @@ flowchart TD src__diff__text__slice["slice"] src__diff__text__beforeNumbers["beforeNumbers"] src__diff__text__afterNumbers["afterNumbers"] - src__diff__text_render__renderUnifiedDiff["renderUnifiedDiff"] - src__diff__text_render__marker["marker"] - src__diff__text_render__toSideBySideRows("toSideBySideRows CC=13") - src__diff__text_render__index("index CC=13") - src__diff__text_render__line["line"] - src__diff__text_render__pairs["pairs"] - src__diff__text_render__renderTextDiffSvg("renderTextDiffSvg CC=11") - src__diff__text_render__theme["theme"] - src__diff__text_render__maxRows["maxRows"] - src__diff__text_render__maxColumns["maxColumns"] - src__diff__text_render__title["title"] - src__diff__text_render__charWidth["charWidth"] + src__diff__reality__buildRealityView{{buildRealityView CC=26}} + src__diff__reality__components("components CC=9") + src__diff__reality__diagnosticsByRecord("diagnosticsByRecord CC=9") + src__diff__reality__codes["codes"] + src__diff__reality__status["status"] end subgraph src__evaluation - src__evaluation__gold__loadGoldDataset["loadGoldDataset"] - src__evaluation__gold__parsed["parsed"] - src__evaluation__gold__evaluateGoldDataset["evaluateGoldDataset"] - src__evaluation__gold__first["first"] - src__evaluation__gold__second["second"] - src__evaluation__gold__stable["stable"] - src__evaluation__gold__goldReportIsPerfect("goldReportIsPerfect CC=14") - src__evaluation__gold__renderGoldReportMarkdown["renderGoldReportMarkdown"] - src__evaluation__gold__percent["percent"] - src__evaluation__gold__support["support"] - src__evaluation__gold__rows["rows"] - src__evaluation__gold__value["value"] - src__evaluation__gold__evaluateOnce["evaluateOnce"] - src__evaluation__gold__extraction["extraction"] - src__evaluation__gold__linking["linking"] - src__evaluation__gold__dsl2todo["dsl2todo"] - src__evaluation__gold__diagnostics["diagnostics"] - src__evaluation__gold__evaluateExtraction["evaluateExtraction"] - src__evaluation__gold__byChannel["byChannel"] - src__evaluation__gold__actual["actual"] - src__evaluation__gold__overall["overall"] - src__evaluation__gold__evaluateDiagnostics["evaluateDiagnostics"] - src__evaluation__gold__counts["counts"] - src__evaluation__gold__forbiddenViolations["forbiddenViolations"] - src__evaluation__gold__snapshots["snapshots"] - src__evaluation__gold__result["result"] - src__evaluation__gold__evaluateLinking("evaluateLinking CC=10") - src__evaluation__gold__byClass["byClass"] - src__evaluation__gold__reranking["reranking"] - src__evaluation__gold__evaluateDsl2Todo["evaluateDsl2Todo"] - src__evaluation__gold__duplicateCounts["duplicateCounts"] + src__evaluation__gold_extraction__runExtractionCase["runExtractionCase"] + src__evaluation__gold_extraction__root["root"] + src__evaluation__gold_extraction__config["config"] + src__evaluation__gold_extraction__writeFixtureFiles["writeFixtureFiles"] + src__evaluation__gold_extraction__destination["destination"] + src__evaluation__gold_extraction__extractNlCase["extractNlCase"] + src__evaluation__gold_extraction__extractMarkdownCase["extractMarkdownCase"] + src__evaluation__gold_extraction__extractDeterministicDocumentationCase["extractDeterministicDocumentationCa"] + src__evaluation__gold_extraction__files["files"] + src__evaluation__gold_extraction__extractDocumentationCase["extractDocumentationCase"] + src__evaluation__gold_extraction__originalFetch["originalFetch"] + src__evaluation__gold_extraction__benchmarkConfig["benchmarkConfig"] + src__evaluation__gold_extraction__projectRecord["projectRecord"] src__evaluation__gold_types__assertGoldDataset["assertGoldDataset"] src__evaluation__gold_types__dataset["dataset"] src__evaluation__gold_types__assertDatasetObject["assertDatasetObject"] @@ -1004,44 +991,44 @@ flowchart TD src__evaluation__gold_types__assertLinkingCohorts{{assertLinkingCohorts CC=32}} src__evaluation__gold_types__labels{{labels CC=18}} src__evaluation__gold_types__modules{{modules CC=18}} - src__evaluation__gold_metrics__emptyCounts["emptyCounts"] - src__evaluation__gold_metrics__addCounts["addCounts"] - src__evaluation__gold_metrics__compareSets["compareSets"] - src__evaluation__gold_metrics__actualCounts["actualCounts"] - src__evaluation__gold_metrics__expectedCounts["expectedCounts"] - src__evaluation__gold_metrics__counts["counts"] - src__evaluation__gold_metrics__actualCount["actualCount"] - src__evaluation__gold_metrics__expectedCount["expectedCount"] - src__evaluation__gold_metrics__frequency["frequency"] - src__evaluation__gold_metrics__metric["metric"] - src__evaluation__gold_metrics__ratio["ratio"] - src__evaluation__gold_extraction__runExtractionCase["runExtractionCase"] - src__evaluation__gold_extraction__root["root"] - src__evaluation__gold_extraction__config["config"] - src__evaluation__gold_extraction__writeFixtureFiles["writeFixtureFiles"] - src__evaluation__gold_extraction__destination["destination"] - src__evaluation__gold_extraction__extractNlCase["extractNlCase"] - src__evaluation__gold_extraction__extractMarkdownCase["extractMarkdownCase"] + src__evaluation__gold_cases__evaluateLinkingCase("evaluateLinkingCase CC=8") + src__evaluation__gold_cases__idToLabel["idToLabel"] + src__evaluation__gold_cases__graph["graph"] + src__evaluation__gold_cases__observed["observed"] + src__evaluation__gold_cases__actual["actual"] + src__evaluation__gold_cases__expected["expected"] + src__evaluation__gold_cases__byClass["byClass"] + src__evaluation__gold_cases__forbidden["forbidden"] + src__evaluation__gold_cases__forbiddenViolations["forbiddenViolations"] + src__evaluation__gold_cases__evaluateRerankingCase{{evaluateRerankingCase CC=17}} + src__evaluation__gold_cases__declarationRecordId["declarationRecordId"] + src__evaluation__gold_cases__candidates["candidates"] + src__evaluation__gold_cases__moduleRecordId["moduleRecordId"] + src__evaluation__gold_cases__candidateByModule["candidateByModule"] + src__evaluation__gold_cases__decisions["decisions"] + src__evaluation__gold_cases__candidate["candidate"] + src__evaluation__gold_cases__rerank["rerank"] + src__evaluation__gold_cases__augmented["augmented"] + src__evaluation__gold_cases__classifyRelation["classifyRelation"] + src__evaluation__gold_cases__exact["exact"] + src__evaluation__gold_cases__evaluateDiagnosticsCase["evaluateDiagnosticsCase"] + src__evaluation__gold_cases__report["report"] + src__evaluation__gold_cases__evaluateDsl2TodoCase["evaluateDsl2TodoCase"] + src__evaluation__gold_cases__diagnostics["diagnostics"] + src__evaluation__gold_cases__diagnosticIds["diagnosticIds"] + src__evaluation__gold_cases__conclusion["conclusion"] + src__evaluation__gold_cases__proposals["proposals"] + src__evaluation__gold_cases__validation["validation"] + src__evaluation__gold_cases__duplicateIds["duplicateIds"] + src__evaluation__gold_cases__citations["citations"] + src__evaluation__gold_cases__buildConclusion["buildConclusion"] + src__evaluation__gold_cases__buildProposal["buildProposal"] + src__evaluation__gold_cases__recordIds["recordIds"] + src__evaluation__gold_cases__id["id"] + src__evaluation__gold_cases__countCitations["countCitations"] + src__evaluation__gold_cases__citationRequired["citationRequired"] end subgraph src__extractors - src__extractors__todo__extractTodo["extractTodo"] - src__extractors__todo__absolute["absolute"] - src__extractors__todo__body["body"] - src__extractors__todo__relative["relative"] - src__extractors__todo__lines["lines"] - src__extractors__todo__raw["raw"] - src__extractors__todo__heading["heading"] - src__extractors__todo__level["level"] - src__extractors__todo__task["task"] - src__extractors__todo__checked["checked"] - src__extractors__todo__block["block"] - src__extractors__todo__text["text"] - src__extractors__todo__classified["classified"] - src__extractors__todo__action["action"] - src__extractors__todo__resolvedPaths["resolvedPaths"] - src__extractors__todo__inferOwner["inferOwner"] - src__extractors__todo__match["match"] - src__extractors__todo__extractExplicitId["extractExplicitId"] src__extractors__nl__assertNlExtractionOptions("assertNlExtractionOptions CC=9") src__extractors__nl__extractNlIntent["extractNlIntent"] src__extractors__nl__absolute["absolute"] @@ -1054,38 +1041,94 @@ flowchart TD src__extractors__nl__confidence["confidence"] src__extractors__nl__inferActor["inferActor"] src__extractors__nl__detectMissingFields("detectMissingFields CC=10") - src__extractors__nl_llm__NlLlmRequiredError__super["super"] - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited("extractNlIntentAudited CC=10") - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__nl_llm__NlLlmRequiredError__startedAt["startedAt"] - src__extractors__nl_llm__NlLlmRequiredError__result["result"] - src__extractors__nl_llm__NlLlmRequiredError__client["client"] - src__extractors__nl_llm__NlLlmRequiredError__absolute["absolute"] - src__extractors__nl_llm__NlLlmRequiredError__body["body"] - src__extractors__nl_llm__NlLlmRequiredError__sourcePath["sourcePath"] - src__extractors__nl_llm__NlLlmRequiredError__maxLine["maxLine"] - src__extractors__nl_llm__NlLlmRequiredError__prompt["prompt"] - src__extractors__nl_llm__NlLlmRequiredError__response["response"] - src__extractors__nl_llm__NlLlmRequiredError__records["records"] - src__extractors__nl_llm__NlLlmRequiredError__failure["failure"] - src__extractors__nl_llm__NlLlmRequiredError__responses["responses"] - src__extractors__nl_llm__NlAttemptError__super["super"] - src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection["extractNlWithCorrection"] - src__extractors__nl_llm__NlAttemptError__completion["completion"] - src__extractors__nl_llm__NlAttemptError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__nl_llm__NlAttemptError__failedAudit["failedAudit"] - src__extractors__nl_llm__NlAttemptError__deterministic["deterministic"] - src__extractors__nl_llm__NlAttemptError__markDeterministic["markDeterministic"] - src__extractors__nl_llm__NlAttemptError__toIntentRecord{{toIntentRecord CC=18}} - src__extractors__nl_llm__NlAttemptError__start["start"] - src__extractors__nl_llm__NlAttemptError__end["end"] - src__extractors__nl_llm__NlAttemptError__lines["lines"] - src__extractors__nl_llm__NlAttemptError__excerpt["excerpt"] - src__extractors__nl_llm__NlAttemptError__action["action"] - src__extractors__nl_llm__NlAttemptError__normalizedText("normalizedText CC=11") - src__extractors__nl_llm__NlAttemptError__statementText("statementText CC=11") + src__extractors__ast__extractAstIntent("extractAstIntent CC=12") + src__extractors__ast__root["root"] + src__extractors__ast__cache["cache"] + src__extractors__ast__matcher["matcher"] + src__extractors__ast__files["files"] + src__extractors__ast__body["body"] + src__extractors__ast__relative["relative"] + src__extractors__ast__extracted["extracted"] + src__extractors__ast__adapterFiles["adapterFiles"] + src__extractors__ast__manifest["manifest"] + src__extractors__ast__result["result"] + src__extractors__ast__unsupported["unsupported"] + src__extractors__ast__sourceManifest["sourceManifest"] + src__extractors__ast__isIntentRecords["isIntentRecords"] + src__extractors__ast__isExtractionResult["isExtractionResult"] + src__extractors__runtime_cycle__MAX_PER_SECTION("MAX_PER_SECTION CC=8") + src__extractors__runtime_cycle__extractRuntimeCycleIntent("extractRuntimeCycleIntent CC=8") + src__extractors__runtime_cycle__cyclePath["cyclePath"] + src__extractors__runtime_cycle__root["root"] + src__extractors__runtime_cycle__body["body"] + src__extractors__runtime_cycle__cycle["cycle"] + src__extractors__runtime_cycle__sourcePath["sourcePath"] + src__extractors__runtime_cycle__observedAt["observedAt"] + src__extractors__runtime_cycle__host["host"] + src__extractors__runtime_cycle__results["results"] + src__extractors__runtime_cycle__parseCycle["parseCycle"] + src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] + src__extractors__runtime_cycle__relative["relative"] + src__extractors__runtime_cycle__boundedArray("boundedArray CC=8") + src__extractors__runtime_cycle__objects["objects"] + src__extractors__runtime_cycle__label["label"] + src__extractors__runtime_cycle__text["text"] + src__extractors__runtime_cycle__tags["tags"] + src__extractors__runtime_cycle__watched["watched"] + src__extractors__runtime_cycle__declared["declared"] + src__extractors__runtime_cycle__probeRecord("probeRecord CC=9") + src__extractors__runtime_cycle__id["id"] + src__extractors__runtime_cycle__failed["failed"] + src__extractors__runtime_cycle__error["error"] + src__extractors__runtime_cycle__outcome["outcome"] + src__extractors__runtime_cycle__violationRecord["violationRecord"] + src__extractors__runtime_cycle__probe["probe"] + src__extractors__runtime_cycle__fact["fact"] + src__extractors__runtime_cycle__driftRecord["driftRecord"] + src__extractors__runtime_cycle__proposalRecord["proposalRecord"] + src__extractors__runtime_cycle__kind["kind"] + src__extractors__runtime_cycle__detail["detail"] + src__extractors__runtime_cycle__proposalAction["proposalAction"] end subgraph src__graph + src__graph__diff__diffIntentGraphs("diffIntentGraphs CC=11") + src__graph__diff__beforeById["beforeById"] + src__graph__diff__afterById["afterById"] + src__graph__diff__unchangedRecords["unchangedRecords"] + src__graph__diff__beforeGroups["beforeGroups"] + src__graph__diff__afterGroups["afterGroups"] + src__graph__diff__left["left"] + src__graph__diff__right["right"] + src__graph__diff__paired["paired"] + src__graph__diff__beforeRecord["beforeRecord"] + src__graph__diff__afterRecord["afterRecord"] + src__graph__diff__beforeRelations["beforeRelations"] + src__graph__diff__afterRelations["afterRelations"] + src__graph__diff__fingerprint["fingerprint"] + src__graph__diff__renderGraphDiffSvg["renderGraphDiffSvg"] + src__graph__diff__maxItems["maxItems"] + src__graph__diff__title["title"] + src__graph__diff__visibleRows["visibleRows"] + src__graph__diff__width["width"] + src__graph__diff__height["height"] + src__graph__diff__y["y"] + src__graph__diff__assertGraph["assertGraph"] + src__graph__diff__groupRecords["groupRecords"] + src__graph__diff__groups["groups"] + src__graph__diff__identity["identity"] + src__graph__diff__values["values"] + src__graph__diff__recordIdentity["recordIdentity"] + src__graph__diff__normalizeRecord["normalizeRecord"] + src__graph__diff__changedFieldPaths["changedFieldPaths"] + src__graph__diff__isObject["isObject"] + src__graph__diff__relationKey["relationKey"] + src__graph__diff__compareRecords["compareRecords"] + src__graph__diff__compareRelations["compareRelations"] + src__graph__diff__recordLabel["recordLabel"] + src__graph__diff__changeLabel["changeLabel"] + src__graph__diff__metricCard["metricCard"] + src__graph__diff__escapeXml["escapeXml"] + src__graph__diff__truncate["truncate"] src__graph__symbol_resolution__buildSymbolResolutionIndex{{buildSymbolResolutionIndex CC=15}} src__graph__symbol_resolution__byAlias("byAlias CC=9") src__graph__symbol_resolution__values["values"] @@ -1108,46 +1151,52 @@ flowchart TD src__graph__linker__linkIntentRecords["linkIntentRecords"] src__graph__linker__records["records"] src__graph__linker__byId["byId"] - src__graph__linker__keywordIndex["keywordIndex"] - src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"] - src__graph__linker__candidatePairs["candidatePairs"] - src__graph__linker__resolvableBasenames["resolvableBasenames"] - src__graph__linker__left["left"] - src__graph__linker__right["right"] - src__graph__linker__evidence["evidence"] - src__graph__linker__directed["directed"] - src__graph__linker__deduplicateRecords["deduplicateRecords"] - src__graph__linker__existing["existing"] - src__graph__linker__collectCandidatePairs("collectCandidatePairs CC=10") - src__graph__linker__buckets("buckets CC=10") - src__graph__linker__astIds("astIds CC=10") - src__graph__linker__moduleAstIds("moduleAstIds CC=10") - src__graph__linker__declarationAstIds("declarationAstIds CC=10") - src__graph__linker__configurationIds("configurationIds CC=10") - src__graph__linker__isModuleTopicSource["isModuleTopicSource"] - src__graph__linker__indexTargetBuckets["indexTargetBuckets"] - src__graph__linker__indexAliases["indexAliases"] - src__graph__linker__indexKeywordBuckets["indexKeywordBuckets"] - src__graph__linker__indexTopicBuckets["indexTopicBuckets"] - src__graph__linker__addToBucket["addToBucket"] - src__graph__linker__values["values"] - src__graph__linker__isSuppressedConfigurationPair["isSuppressedConfigurationPair"] - src__graph__linker__pairsFromBuckets("pairsFromBuckets CC=8") - src__graph__linker__output("output CC=8") - src__graph__linker__leftId["leftId"] - src__graph__linker__rightId["rightId"] - src__graph__linker__isSuppressedAstPair("isSuppressedAstPair CC=9") - src__graph__linker__leftAst["leftAst"] - src__graph__linker__rightAst["rightAst"] - src__graph__linker__astId["astId"] - src__graph__linker__indexResolvableBasenames("indexResolvableBasenames CC=8") - src__graph__linker__owners("owners CC=8") - src__graph__linker__normalized["normalized"] - src__graph__linker__basename["basename"] - src__graph__linker__paths["paths"] - src__graph__linker__pathsIntersect("pathsIntersect CC=8") end subgraph src__interfaces + src__interfaces__a2a_card__sendAgentCard["sendAgentCard"] + src__interfaces__a2a_card__card["card"] + src__interfaces__a2a_card__serialized["serialized"] + src__interfaces__a2a_card__payload["payload"] + src__interfaces__a2a_card__agentCard["agentCard"] + src__interfaces__a2a_card__skills["skills"] + src__interfaces__a2a_card__skill["skill"] + src__interfaces__a2a_message__parseSendConfiguration["parseSendConfiguration"] + src__interfaces__a2a_message__validateOutputModes["validateOutputModes"] + src__interfaces__a2a_message__supported["supported"] + src__interfaces__a2a_message__parseCommand{{parseCommand CC=63}} + src__interfaces__a2a_message__protobuf["protobuf"] + src__interfaces__a2a_message__bytes["bytes"] + src__interfaces__a2a_message__objectData["objectData"] + src__interfaces__a2a_message__text["text"] + src__interfaces__a2a_message__first["first"] + src__interfaces__a2a_message__commandFromData["commandFromData"] + src__interfaces__a2a_message__action["action"] + src__interfaces__a2a_message__nested["nested"] + src__interfaces__a2a_message__parseKeyValues["parseKeyValues"] + src__interfaces__a2a_message__key["key"] + src__interfaces__a2a_message__raw["raw"] + src__interfaces__a2a_message__stringValue["stringValue"] + src__interfaces__a2a_message__parseScalar["parseScalar"] + src__interfaces__a2a_message__parseMessage("parseMessage CC=12") + src__interfaces__a2a_message__messageId["messageId"] + src__interfaces__a2a_message__contextId["contextId"] + src__interfaces__a2a_message__taskId["taskId"] + src__interfaces__a2a_message__referenceTaskIds["referenceTaskIds"] + src__interfaces__a2a_message__extensions["extensions"] + src__interfaces__a2a_message__metadata["metadata"] + src__interfaces__a2a_message__parsePart["parsePart"] + src__interfaces__a2a_message__output["output"] + src__interfaces__a2a_message__parsePartContent["parsePartContent"] + src__interfaces__a2a_message__content["content"] + src__interfaces__a2a_message__qualifier["qualifier"] + src__interfaces__a2a_message__ensureSupportedMessageContent["ensureSupportedMessageContent"] + src__interfaces__a2a_message__normalizeAction["normalizeAction"] + src__interfaces__a2a_message__normalized["normalized"] + src__interfaces__a2a_message__cloneMessage["cloneMessage"] + src__interfaces__a2a_message__clonePart("clonePart CC=8") + src__interfaces__a2a_message__normalizeUserMessage["normalizeUserMessage"] + src__interfaces__mcp_errors__McpRequestError__super["super"] + src__interfaces__mcp_errors__McpRequestError__normalizeMcpError["normalizeMcpError"] src__interfaces__mcp__DISCOVERY_TTL_MS["DISCOVERY_TTL_MS"] src__interfaces__mcp__LIST_TTL_MS["LIST_TTL_MS"] src__interfaces__mcp__RESOURCE_TTL_MS["RESOURCE_TTL_MS"] @@ -1164,73 +1213,8 @@ flowchart TD src__interfaces__mcp__params["params"] src__interfaces__mcp__requested["requested"] src__interfaces__mcp__protocolVersion["protocolVersion"] - src__interfaces__mcp__handleModernRequest("handleModernRequest CC=8") - src__interfaces__mcp__responseMeta["responseMeta"] - src__interfaces__mcp__handleLegacyRequest("handleLegacyRequest CC=8") - src__interfaces__mcp__validateModernRequest("validateModernRequest CC=9") - src__interfaces__mcp__meta["meta"] - src__interfaces__mcp__validateModernMetadata["validateModernMetadata"] - src__interfaces__mcp__capabilities["capabilities"] - src__interfaces__mcp__hasModernMetadata["hasModernMetadata"] - src__interfaces__mcp__parseRequestLine["parseRequestLine"] - src__interfaces__mcp__completePublic["completePublic"] - src__interfaces__mcp__serverInfo["serverInfo"] - src__interfaces__mcp__serverMeta["serverMeta"] - src__interfaces__mcp__serverInstructions["serverInstructions"] - src__interfaces__mcp__isLegacyProtocol["isLegacyProtocol"] - src__interfaces__mcp__isJsonRpcRequest("isJsonRpcRequest CC=9") - src__interfaces__mcp__candidate["candidate"] - src__interfaces__mcp__requestId("requestId CC=8") - src__interfaces__mcp__id["id"] - src__interfaces__mcp__rpcError["rpcError"] - src__interfaces__mcp__sendError["sendError"] - src__interfaces__mcp__send["send"] - src__interfaces__mcp__invokedPath["invokedPath"] - src__interfaces__mcp_tools__callMcpTool("callMcpTool CC=8") - src__interfaces__mcp_tools__name["name"] - src__interfaces__mcp_tools__args["args"] - src__interfaces__mcp_tools__result["result"] - src__interfaces__mcp_tools__tool["tool"] - src__interfaces__mcp_tools__writes["writes"] - src__interfaces__mcp_tools__stringProp["stringProp"] - src__interfaces__mcp_tools__nullableStringProp["nullableStringProp"] - src__interfaces__mcp_tools__stringArrayProp["stringArrayProp"] - src__interfaces__mcp_tools__numberProp["numberProp"] - src__interfaces__mcp_resources__listMcpResources["listMcpResources"] - src__interfaces__mcp_resources__readRequestedMcpResource["readRequestedMcpResource"] - src__interfaces__mcp_resources__uri["uri"] - src__interfaces__mcp_resources__readMcpResource["readMcpResource"] - src__interfaces__mcp_resources__latestPath["latestPath"] - src__interfaces__mcp_resources__selected["selected"] - src__interfaces__mcp_resources__latest["latest"] - src__interfaces__mcp_resources__filePath["filePath"] - src__interfaces__mcp_resources__latestPointer["latestPointer"] - src__interfaces__mcp_resources__assertInsideRoot["assertInsideRoot"] - src__interfaces__mcp_resources__relative["relative"] - src__interfaces__mcp_resources__isInvalidResourceError["isInvalidResourceError"] end subgraph src__live - src__live__model_comparison__measureLiveModelRun("measureLiveModelRun CC=12") - src__live__model_comparison__responses["responses"] - src__live__model_comparison__records["records"] - src__live__model_comparison__enrichedRecords["enrichedRecords"] - src__live__model_comparison__costUsd["costUsd"] - src__live__model_comparison__isLlmEnriched["isLlmEnriched"] - src__live__model_comparison__sourceKey["sourceKey"] - src__live__model_comparison__lines["lines"] - src__live__model_comparison__compareLiveModelOutputs["compareLiveModelOutputs"] - src__live__model_comparison__rightBySource["rightBySource"] - src__live__model_comparison__pairs["pairs"] - src__live__model_comparison__agreeing["agreeing"] - src__live__model_comparison__buildLiveModelComparison["buildLiveModelComparison"] - src__live__model_comparison__models["models"] - src__live__model_comparison__passing["passing"] - src__live__model_comparison__pick["pick"] - src__live__model_comparison__measured["measured"] - src__live__model_comparison__renderLiveModelComparison("renderLiveModelComparison CC=10") - src__live__model_comparison__sumUsage["sumUsage"] - src__live__model_comparison__values["values"] - src__live__model_comparison__round["round"] src__live__contract_check__LIVE_HISTORY_LIMIT["LIVE_HISTORY_LIMIT"] src__live__contract_check__liveRequestTimeoutMs["liveRequestTimeoutMs"] src__live__contract_check__measureLiveStages["measureLiveStages"] @@ -1270,33 +1254,29 @@ flowchart TD src__live__contract_check__value["value"] src__live__contract_check__ratio["ratio"] src__live__contract_check__round["round"] + src__live__model_comparison__measureLiveModelRun("measureLiveModelRun CC=12") + src__live__model_comparison__responses["responses"] + src__live__model_comparison__records["records"] + src__live__model_comparison__enrichedRecords["enrichedRecords"] + src__live__model_comparison__costUsd["costUsd"] + src__live__model_comparison__isLlmEnriched["isLlmEnriched"] + src__live__model_comparison__sourceKey["sourceKey"] + src__live__model_comparison__lines["lines"] + src__live__model_comparison__compareLiveModelOutputs["compareLiveModelOutputs"] + src__live__model_comparison__rightBySource["rightBySource"] + src__live__model_comparison__pairs["pairs"] + src__live__model_comparison__agreeing["agreeing"] + src__live__model_comparison__buildLiveModelComparison["buildLiveModelComparison"] + src__live__model_comparison__models["models"] + src__live__model_comparison__passing["passing"] + src__live__model_comparison__pick["pick"] + src__live__model_comparison__measured["measured"] + src__live__model_comparison__renderLiveModelComparison("renderLiveModelComparison CC=10") + src__live__model_comparison__sumUsage["sumUsage"] + src__live__model_comparison__values["values"] + src__live__model_comparison__round["round"] end subgraph src__llm - src__llm__structured_schema__StructuredResponseError__super["super"] - src__llm__structured_schema__StructuredResponseError__schema["schema"] - src__llm__structured_schema__StructuredResponseError__parse["parse"] - src__llm__structured_schema__StructuredResponseError__string("string CC=10") - src__llm__structured_schema__StructuredResponseError__pattern["pattern"] - src__llm__structured_schema__StructuredResponseError__fail["fail"] - src__llm__structured_schema__StructuredResponseError__nullableString["nullableString"] - src__llm__structured_schema__StructuredResponseError__base["base"] - src__llm__structured_schema__StructuredResponseError__number["number"] - src__llm__structured_schema__StructuredResponseError__checkNumberBounds["checkNumberBounds"] - src__llm__structured_schema__StructuredResponseError__integer["integer"] - src__llm__structured_schema__StructuredResponseError__numeric["numeric"] - src__llm__structured_schema__StructuredResponseError__parsed["parsed"] - src__llm__structured_schema__StructuredResponseError__enumValue["enumValue"] - src__llm__structured_schema__StructuredResponseError__allowed["allowed"] - src__llm__structured_schema__StructuredResponseError__array("array CC=9") - src__llm__structured_schema__StructuredResponseError__identities["identities"] - src__llm__structured_schema__StructuredResponseError__object["object"] - src__llm__structured_schema__StructuredResponseError__keys["keys"] - src__llm__structured_schema__StructuredResponseError__candidate["candidate"] - src__llm__structured_schema__StructuredResponseError__unknown["unknown"] - src__llm__structured_schema__StructuredResponseError__missing["missing"] - src__llm__structured_schema__StructuredResponseError__jsonIdentity["jsonIdentity"] - src__llm__structured_schema__StructuredResponseError__record["record"] - src__llm__structured_schema__StructuredResponseError__describe["describe"] src__llm__openrouter__OpenRouterModelError__super["super"] src__llm__openrouter__OpenRouterClient__isConfigured["isConfigured"] src__llm__openrouter__OpenRouterClient__listAvailableModels("listAvailableModels CC=13") @@ -1332,8 +1312,52 @@ flowchart TD src__llm__openrouter__OpenRouterClient__parseJsonContent["parseJsonContent"] src__llm__openrouter__OpenRouterClient__trimmed["trimmed"] src__llm__openrouter__OpenRouterClient__start["start"] + src__llm__openrouter__OpenRouterClient__end["end"] + src__llm__openrouter__OpenRouterClient__parseJsonResponse["parseJsonResponse"] + src__llm__openrouter__OpenRouterClient__metadata["metadata"] + src__llm__openrouter__OpenRouterClient__sleep["sleep"] + src__llm__failure__classifyLlmFailure["classifyLlmFailure"] + src__llm__failure__message["message"] + src__llm__failure__rejectedLlmResponseMetadata["rejectedLlmResponseMetadata"] + src__llm__audit__openRouterAuditConfiguration["openRouterAuditConfiguration"] + src__llm__structured_schema__StructuredResponseError__super["super"] + src__llm__structured_schema__StructuredResponseError__schema["schema"] + src__llm__structured_schema__StructuredResponseError__parse["parse"] + src__llm__structured_schema__StructuredResponseError__string("string CC=10") + src__llm__structured_schema__StructuredResponseError__pattern["pattern"] + src__llm__structured_schema__StructuredResponseError__fail["fail"] + src__llm__structured_schema__StructuredResponseError__nullableString["nullableString"] + src__llm__structured_schema__StructuredResponseError__base["base"] + src__llm__structured_schema__StructuredResponseError__number["number"] + src__llm__structured_schema__StructuredResponseError__checkNumberBounds["checkNumberBounds"] + src__llm__structured_schema__StructuredResponseError__integer["integer"] + src__llm__structured_schema__StructuredResponseError__numeric["numeric"] + src__llm__structured_schema__StructuredResponseError__parsed["parsed"] + src__llm__structured_schema__StructuredResponseError__enumValue["enumValue"] + src__llm__structured_schema__StructuredResponseError__allowed["allowed"] + src__llm__structured_schema__StructuredResponseError__array("array CC=9") + src__llm__structured_schema__StructuredResponseError__identities["identities"] end subgraph src__operations + src__operations__artifact__readJson["readJson"] + src__operations__artifact__writeExclusive["writeExclusive"] + src__operations__artifact__target["target"] + src__operations__artifact__directory["directory"] + src__operations__artifact__temporary["temporary"] + src__operations__artifact__existing["existing"] + src__operations__artifact__compileOperationPlanArtifact["compileOperationPlanArtifact"] + src__operations__artifact__plan["plan"] + src__operations__artifact__bindings["bindings"] + src__operations__artifact__envelope["envelope"] + src__operations__subactor__valueMatchesType("valueMatchesType CC=11") + src__operations__subactor__assertBinding("assertBinding CC=9") + src__operations__subactor__ageSeconds["ageSeconds"] + src__operations__subactor__compileSubactorProcessEnvelope("compileSubactorProcessEnvelope CC=13") + src__operations__subactor__variableById["variableById"] + src__operations__subactor__referenced["referenced"] + src__operations__subactor__variable["variable"] + src__operations__subactor__binding["binding"] + src__operations__subactor__humanApproval["humanApproval"] src__operations__validation__VALUE_TYPES["VALUE_TYPES"] src__operations__validation__CLASSIFICATIONS["CLASSIFICATIONS"] src__operations__validation__SOURCE_KINDS["SOURCE_KINDS"] @@ -1375,28 +1399,9 @@ flowchart TD src__operations__validation__variable["variable"] src__operations__validation__rollback["rollback"] src__operations__validation__coveredSteps("coveredSteps CC=8") - src__operations__validation__expectationIds("expectationIds CC=8") - src__operations__validation__expectation["expectation"] - src__operations__validation__verifiedBy["verifiedBy"] - src__operations__validation__decision["decision"] - src__operations__validation__verification["verification"] - src__operations__validation__expectedHash["expectedHash"] - src__operations__subactor__valueMatchesType("valueMatchesType CC=11") - src__operations__subactor__assertBinding("assertBinding CC=9") - src__operations__subactor__ageSeconds["ageSeconds"] - src__operations__subactor__compileSubactorProcessEnvelope("compileSubactorProcessEnvelope CC=13") - src__operations__subactor__variableById["variableById"] - src__operations__subactor__referenced["referenced"] - src__operations__subactor__variable["variable"] - src__operations__subactor__binding["binding"] - src__operations__subactor__humanApproval["humanApproval"] - src__operations__contract__variableContractSemanticValue["variableContractSemanticValue"] - src__operations__contract__createVariableContract["createVariableContract"] - src__operations__contract__normalized["normalized"] - src__operations__contract__normalizedPlanDraft["normalizedPlanDraft"] end subgraph src__pipeline - src__pipeline__run__runPipeline{{runPipeline CC=53}} + src__pipeline__run__runPipeline{{runPipeline CC=56}} src__pipeline__run__root["root"] src__pipeline__run__runId["runId"] src__pipeline__run__baseOutput["baseOutput"] @@ -1410,7 +1415,8 @@ flowchart TD src__pipeline__run__documentationStartedAt["documentationStartedAt"] src__pipeline__run__deterministicDocs["deterministicDocs"] src__pipeline__run__docs["docs"] - src__pipeline__run__configurationExtraction("configurationExtraction CC=10") + src__pipeline__run__configurationExtraction["configurationExtraction"] + src__pipeline__run__runtime["runtime"] src__pipeline__run__includeCommunication("includeCommunication CC=10") src__pipeline__run__communicationStartedAt("communicationStartedAt CC=10") src__pipeline__run__communicationAudit("communicationAudit CC=10") @@ -1455,7 +1461,6 @@ flowchart TD src__pipeline__run__message("message CC=9") src__pipeline__run__knownAudit("knownAudit CC=9") src__pipeline__run__failedAudit("failedAudit CC=9") - src__pipeline__run__stageValue["stageValue"] end subgraph src__sdk src__sdk__typescript__Todo2CodeClient__a2a["a2a"] @@ -1476,46 +1481,6 @@ flowchart TD src__sdk__typescript__Todo2CodeClient__run["run"] end subgraph src__semantic - src__semantic__reranker__createSemanticCandidateSet("createSemanticCandidateSet CC=8") - src__semantic__reranker__grouped["grouped"] - src__semantic__reranker__values["values"] - src__semantic__reranker__assertSemanticCandidateSet{{assertSemanticCandidateSet CC=27}} - src__semantic__reranker__records{{records CC=16}} - src__semantic__reranker__seenIds("seenIds CC=14") - src__semantic__reranker__seenPairs("seenPairs CC=14") - src__semantic__reranker__byDeclaration("byDeclaration CC=14") - src__semantic__reranker__declaration["declaration"] - src__semantic__reranker__module["module"] - src__semantic__reranker__expectedHash["expectedHash"] - src__semantic__reranker__createSemanticRerankResult["createSemanticRerankResult"] - src__semantic__reranker__decisions["decisions"] - src__semantic__reranker__assertSemanticRerankResult{{assertSemanticRerankResult CC=21}} - src__semantic__reranker__candidates["candidates"] - src__semantic__reranker__seenDecisions{{seenDecisions CC=16}} - src__semantic__reranker__acceptedDeclarations{{acceptedDeclarations CC=16}} - src__semantic__reranker__candidate["candidate"] - src__semantic__reranker__citations["citations"] - src__semantic__reranker__record["record"] - src__semantic__reranker__applyAcceptedSemanticRelations["applyAcceptedSemanticRelations"] - src__semantic__reranker__added["added"] - src__semantic__reranker__validateRetrieval["validateRetrieval"] - src__semantic__reranker__validateGeneration["validateGeneration"] - src__semantic__reranker__validateVerdictReason["validateVerdictReason"] - src__semantic__reranker__assertSemanticVerdictReason["assertSemanticVerdictReason"] - src__semantic__reranker__allowed["allowed"] - src__semantic__reranker__reasons["reasons"] - src__semantic__reranker__assertGroundedQuote["assertGroundedQuote"] - src__semantic__reranker__quote["quote"] - src__semantic__reranker__boundedScore["boundedScore"] - src__semantic__reranker__roundedConfidence["roundedConfidence"] - src__semantic__reranker__requiredText["requiredText"] - src__semantic__reranker__validDate["validDate"] - src__semantic__reranker__comparePair["comparePair"] - src__semantic__reranker_response__RERANK_DECISION_CONTRACT["RERANK_DECISION_CONTRACT"] - src__semantic__reranker_response__SEMANTIC_RERANK_RESPONSE_CONTRACT["SEMANTIC_RERANK_RESPONSE_CONTRACT"] - src__semantic__reranker_response__SEMANTIC_RERANK_RESPONSE_SCHEMA["SEMANTIC_RERANK_RESPONSE_SCHEMA"] - src__semantic__reranker_response__assertSemanticRerankerResponse["assertSemanticRerankerResponse"] - src__semantic__reranker_response__response["response"] src__semantic__reranker_llm__SemanticRerankerRequiredError__super["super"] src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates{{rerankSemanticCandidates CC=25}} src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticCandidateSet["assertSemanticCandidateSet"] @@ -1536,6 +1501,46 @@ flowchart TD src__semantic__reranker_llm__SemanticRerankerRequiredError__resolvedRevision["resolvedRevision"] src__semantic__reranker_llm__SemanticRerankerRequiredError__tracked("tracked CC=9") src__semantic__reranker_llm__SemanticRerankerRequiredError__recordIds("recordIds CC=9") + src__semantic__reranker_llm__SemanticRerankerRequiredError__record["record"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__sourcePath["sourcePath"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__semanticRerankCacheKey["semanticRerankCacheKey"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__projectRecord["projectRecord"] + src__semantic__reranker_response__RERANK_DECISION_CONTRACT["RERANK_DECISION_CONTRACT"] + src__semantic__reranker_response__SEMANTIC_RERANK_RESPONSE_CONTRACT["SEMANTIC_RERANK_RESPONSE_CONTRACT"] + src__semantic__reranker_response__SEMANTIC_RERANK_RESPONSE_SCHEMA["SEMANTIC_RERANK_RESPONSE_SCHEMA"] + src__semantic__reranker_response__assertSemanticRerankerResponse["assertSemanticRerankerResponse"] + src__semantic__reranker_response__response["response"] + src__semantic__reranker__result__createSemanticRerankResult["createSemanticRerankResult"] + src__semantic__reranker__result__decisions["decisions"] + src__semantic__reranker__result__assertSemanticRerankResult{{assertSemanticRerankResult CC=21}} + src__semantic__reranker__result__candidates["candidates"] + src__semantic__reranker__result__records{{records CC=16}} + src__semantic__reranker__result__seenDecisions{{seenDecisions CC=16}} + src__semantic__reranker__result__acceptedDeclarations{{acceptedDeclarations CC=16}} + src__semantic__reranker__result__candidate["candidate"] + src__semantic__reranker__result__citations["citations"] + src__semantic__reranker__result__record["record"] + src__semantic__reranker__result__expectedHash["expectedHash"] + src__semantic__reranker__result__applyAcceptedSemanticRelations["applyAcceptedSemanticRelations"] + src__semantic__reranker__result__added["added"] + src__semantic__reranker__result__assertSemanticVerdictReason["assertSemanticVerdictReason"] + src__semantic__reranker__result__allowedVerdicts["allowedVerdicts"] + src__semantic__reranker__result__allowedReasons["allowedReasons"] + src__semantic__reranker__candidate__createSemanticCandidateSet("createSemanticCandidateSet CC=8") + src__semantic__reranker__candidate__grouped["grouped"] + src__semantic__reranker__candidate__values["values"] + src__semantic__reranker__candidate__assertSemanticCandidateSet{{assertSemanticCandidateSet CC=27}} + src__semantic__reranker__candidate__records("records CC=14") + src__semantic__reranker__candidate__seenIds("seenIds CC=14") + src__semantic__reranker__candidate__seenPairs("seenPairs CC=14") + src__semantic__reranker__candidate__byDeclaration("byDeclaration CC=14") + src__semantic__reranker__candidate__declaration["declaration"] + src__semantic__reranker__candidate__module["module"] + src__semantic__reranker__candidate__existing["existing"] + src__semantic__reranker__candidate__expectedHash["expectedHash"] + src__semantic__reranker__candidate__comparePair["comparePair"] + src__semantic__reranker__validation__requiredText["requiredText"] + src__semantic__reranker__validation__validateRetrieval["validateRetrieval"] end subgraph src__services src__services__actions__executeAction{{executeAction CC=83}} @@ -1600,6 +1605,14 @@ flowchart TD src__services__actions__readRecords["readRecords"] end subgraph src__summary + src__summary__payload__compactSummaryPayload("compactSummaryPayload CC=12") + src__summary__payload__referenced["referenced"] + src__summary__payload__nonAst["nonAst"] + src__summary__payload__moduleAst["moduleAst"] + src__summary__payload__relevantAst["relevantAst"] + src__summary__payload__ids["ids"] + src__summary__payload__selectedRelations["selectedRelations"] + src__summary__payload__compactRecord["compactRecord"] src__summary__summarizer__summarizeGraph("summarizeGraph CC=10") src__summary__summarizer__mode["mode"] src__summary__summarizer__conclusions["conclusions"] @@ -1640,76 +1653,68 @@ flowchart TD src__summary__render__confidence["confidence"] src__summary__render__renderConclusion["renderConclusion"] src__summary__render__recordCitations["recordCitations"] - src__summary__payload__compactSummaryPayload("compactSummaryPayload CC=12") - src__summary__payload__referenced["referenced"] - src__summary__payload__nonAst["nonAst"] - src__summary__payload__moduleAst["moduleAst"] - src__summary__payload__relevantAst["relevantAst"] - src__summary__payload__ids["ids"] - src__summary__payload__selectedRelations["selectedRelations"] - src__summary__payload__compactRecord["compactRecord"] end subgraph src__synthesis - src__synthesis__validation__validateAndClassifyTodoProposals["validateAndClassifyTodoProposals"] - src__synthesis__validation__existing["existing"] - src__synthesis__validation__duplicates["duplicates"] - src__synthesis__validation__orderedProposalIds["orderedProposalIds"] - src__synthesis__validation__duplicateProposalIds["duplicateProposalIds"] - src__synthesis__validation__duplicateIds["duplicateIds"] - src__synthesis__validation__duplicateEvidence("duplicateEvidence CC=11") - src__synthesis__validation__proposalWords["proposalWords"] - src__synthesis__validation__target["target"] - src__synthesis__validation__sharedTicket["sharedTicket"] - src__synthesis__validation__sharedSymbol["sharedSymbol"] - src__synthesis__validation__sharedPath["sharedPath"] - src__synthesis__validation__similarity["similarity"] - src__synthesis__validation__dependencyFirstPriorityOrder("dependencyFirstPriorityOrder CC=11") - src__synthesis__validation__byId["byId"] - src__synthesis__validation__remainingDependencies["remainingDependencies"] - src__synthesis__validation__dependents["dependents"] - src__synthesis__validation__values["values"] - src__synthesis__validation__compare["compare"] - src__synthesis__validation__left["left"] - src__synthesis__validation__right["right"] - src__synthesis__validation__ready["ready"] - src__synthesis__validation__id["id"] - src__synthesis__validation__remaining["remaining"] - src__synthesis__validation__words["words"] - src__synthesis__validation__jaccard["jaccard"] - src__synthesis__validation__common["common"] - src__synthesis__validation__intersects["intersects"] + src__synthesis__task_synthesis_payload__compactSynthesisPayload["compactSynthesisPayload"] + src__synthesis__task_synthesis_payload__recordIds["recordIds"] + src__synthesis__task_synthesis_payload__todoRecords["todoRecords"] + src__synthesis__task_synthesis_payload__records["records"] + src__synthesis__task_synthesis_payload__includedIds["includedIds"] + src__synthesis__task_synthesis_payload__groundedDiagnostics["groundedDiagnostics"] + src__synthesis__task_synthesis_payload__compactRecord["compactRecord"] + src__synthesis__task_synthesis_payload__compareDiagnostics["compareDiagnostics"] + src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS{{NON_SOURCE_DIR_SEGMENTS CC=38}} + src__synthesis__code_change_path__BINARY_EXTENSIONS{{BINARY_EXTENSIONS CC=38}} + src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES{{GENERATED_ANALYSIS_BASENAMES CC=38}} + src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES{{T2C_ARTIFACT_BASENAMES CC=38}} + src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES{{EXTENSIONLESS_SOURCE_BASENAMES CC=38}} + src__synthesis__code_change_path__isPlannablePath{{isPlannablePath CC=38}} + src__synthesis__code_change_path__normalized["normalized"] + src__synthesis__code_change_path__segments["segments"] + src__synthesis__code_change_path__lowerSegments["lowerSegments"] + src__synthesis__code_change_path__basename["basename"] + src__synthesis__code_change_path__lowerBasename["lowerBasename"] + src__synthesis__code_change_path__dot["dot"] + src__synthesis__code_change_path__ext["ext"] + src__synthesis__code_change_path__isUsefulCodeChangePath["isUsefulCodeChangePath"] + src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse["materializeTaskSynthesisResponse"] + src__synthesis__task_synthesis_materialize__parsed["parsed"] + src__synthesis__task_synthesis_materialize__conclusionKeys["conclusionKeys"] + src__synthesis__task_synthesis_materialize__proposalKeys["proposalKeys"] + src__synthesis__task_synthesis_materialize__conclusions["conclusions"] + src__synthesis__task_synthesis_materialize__diagnosticIds["diagnosticIds"] + src__synthesis__task_synthesis_materialize__conclusionIdByKey["conclusionIdByKey"] + src__synthesis__task_synthesis_materialize__conclusionByKey["conclusionByKey"] + src__synthesis__task_synthesis_materialize__proposalDrafts["proposalDrafts"] + src__synthesis__task_synthesis_materialize__citedConclusions["citedConclusions"] + src__synthesis__task_synthesis_materialize__conclusion["conclusion"] + src__synthesis__task_synthesis_materialize__proposalIdByKey["proposalIdByKey"] + src__synthesis__task_synthesis_materialize__proposals["proposals"] + src__synthesis__task_synthesis_materialize__normalizeLocalKeys["normalizeLocalKeys"] + src__synthesis__task_synthesis_materialize__explicit["explicit"] + src__synthesis__task_synthesis_materialize__reserved["reserved"] + src__synthesis__task_synthesis_materialize__keys["keys"] + src__synthesis__task_synthesis_materialize__hasBlankKey["hasBlankKey"] + src__synthesis__task_synthesis_materialize__key["key"] + src__synthesis__task_synthesis_materialize__suffix["suffix"] + src__synthesis__task_synthesis_materialize__mapKeys["mapKeys"] + src__synthesis__task_synthesis_materialize__id["id"] + src__synthesis__task_synthesis_materialize__sortedUnique["sortedUnique"] + src__synthesis__task_synthesis_materialize__normalizeStringArray["normalizeStringArray"] + src__synthesis__task_synthesis_materialize__values["values"] + src__synthesis__task_synthesis_materialize__normalizeRawTarget["normalizeRawTarget"] + src__synthesis__task_synthesis_materialize__target["target"] + src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria["normalizeAcceptanceCriteria"] + src__synthesis__task_synthesis_materialize__criteria["criteria"] + src__synthesis__task_synthesis_materialize__source["source"] + src__synthesis__task_synthesis_materialize__assertProposalEvidenceMatchesConclusions["assertProposalEvidenceMatchesConclu"] + src__synthesis__task_synthesis_materialize__byId["byId"] + src__synthesis__task_synthesis_materialize__cited["cited"] + src__synthesis__task_synthesis_materialize__diagnostics["diagnostics"] + src__synthesis__task_synthesis_materialize__records["records"] src__synthesis__todo_patch__diagnosticReportFingerprint["diagnosticReportFingerprint"] src__synthesis__todo_patch__createTodoPatch("createTodoPatch CC=8") src__synthesis__todo_patch__expectedValidation["expectedValidation"] - src__synthesis__todo_patch__proposalById["proposalById"] - src__synthesis__todo_patch__selected["selected"] - src__synthesis__todo_patch__proposal["proposal"] - src__synthesis__todo_patch__orderedSelected["orderedSelected"] - src__synthesis__todo_patch__markdown["markdown"] - src__synthesis__todo_patch__renderTodoPatchMarkdown["renderTodoPatchMarkdown"] - src__synthesis__todo_patch__writeTodoPatchArtifacts["writeTodoPatchArtifacts"] - src__synthesis__todo_patch__created["created"] - src__synthesis__todo_patch__patchPath["patchPath"] - src__synthesis__todo_patch__auditPath["auditPath"] - src__synthesis__todo_patch__applyTodoPatch("applyTodoPatch CC=12") - src__synthesis__todo_patch__current["current"] - src__synthesis__todo_patch__receipt["receipt"] - src__synthesis__todo_patch__now["now"] - src__synthesis__todo_patch__currentHash["currentHash"] - src__synthesis__todo_patch__result["result"] - src__synthesis__todo_patch__applied["applied"] - src__synthesis__todo_patch__recovered["recovered"] - src__synthesis__todo_patch__assertTodoPatchArtifact("assertTodoPatchArtifact CC=11") - src__synthesis__todo_patch__artifact["artifact"] - src__synthesis__todo_patch__sourceTodo["sourceTodo"] - src__synthesis__todo_patch__duplicates["duplicates"] - src__synthesis__todo_patch__classified["classified"] - src__synthesis__todo_patch__duplicate["duplicate"] - src__synthesis__todo_patch__assertApproval["assertApproval"] - src__synthesis__todo_patch__assertReceipt["assertReceipt"] - src__synthesis__todo_patch__atomicWrite["atomicWrite"] - src__synthesis__todo_patch__temporary["temporary"] - src__synthesis__todo_patch__existing["existing"] end subgraph src__tf src__tf__classifier__dynamicImport["dynamicImport"] @@ -1790,608 +1795,608 @@ flowchart TD src__web__diff_ui__loadRuns("loadRuns CC=12") src__web__diff_ui__compareGraphs{{compareGraphs CC=15}} end - src__cli__main --> src__cli__printHelp - src__cli__main --> src__cli__parseArgs - src__cli__main --> src__cli__initProject - src__cli__main --> src__cli__doctor - src__cli__main --> src__cli__handleExtract - src__cli__main --> src__cli__handleCommunication - src__cli__parsed --> src__cli__printHelp - src__cli__command --> src__cli__printHelp - src__cli__diagnosticsPath --> src__cli__optionNumber - src__cli__diagnosticsPath --> src__cli__optionBoolean - src__cli__diagnostics --> src__cli__optionNumber - src__cli__diagnostics --> src__cli__optionBoolean - src__cli__result --> src__cli__execFileAsync - src__cli__isPlanSet --> src__cli__optionString - src__cli__root --> src__cli__optionString - src__cli__root --> src__cli__optionNullableString - src__cli__root --> src__cli__optionLlmMode - src__cli__handleWatch --> src__cli__optionNullableString - src__cli__handleWatch --> src__cli__optionList - src__cli__handleWatch --> src__cli__optionBoolean - src__cli__handleWatch --> src__cli__optionString - src__cli__handleWatch --> src__cli__optionNumber - src__cli__handleWatch --> src__cli__optionNlMode - src__cli__handleWatch --> src__cli__optionLlmMode - src__cli__handleWatch --> src__cli__optionPipelineTaskMode - src__cli__taskFile --> src__cli__optionNullableString - src__cli__taskFile --> src__cli__optionList - src__cli__taskFile --> src__cli__optionBoolean - src__cli__taskFile --> src__cli__optionString - src__cli__taskFile --> src__cli__optionNumber - src__cli__taskFile --> src__cli__optionNlMode - src__cli__taskFile --> src__cli__optionLlmMode - src__cli__taskFile --> src__cli__optionPipelineTaskMode - src__cli__controller --> src__cli__optionNumber - src__cli__controller --> src__cli__optionBoolean - src__cli__controller --> src__cli__formatWatchEvent - src__cli__stop --> src__cli__optionNumber - src__cli__stop --> src__cli__optionBoolean - src__cli__stop --> src__cli__formatWatchEvent - src__cli__formatWatchEvent --> src__cli__file - src__cli__stamp --> src__cli__file - src__cli__handleDiff --> src__cli__optionString - src__cli__handleDiff --> src__cli__optionNumber - src__cli__mode --> src__cli__optionNumber - src__cli__svg --> src__cli__optionNumber - src__cli__svg --> src__cli__optionBoolean - src__cli__html --> src__cli__optionNumber - src__cli__diff --> src__cli__optionNumber - src__cli__context --> src__cli__optionString - src__cli__context --> src__cli__optionBoolean - src__cli__context --> src__cli__optionNumber - src__cli__maxRows --> src__cli__optionString - src__cli__maxRows --> src__cli__optionBoolean - src__cli__maxRows --> src__cli__optionNumber - src__cli__handleReality --> src__cli__optionString - src__cli__handleReality --> src__cli__optionNumber - src__cli__handleReality --> src__cli__optionBoolean - src__cli__view --> src__cli__optionNumber - src__cli__view --> src__cli__optionBoolean - src__cli__handleExtract --> src__cli__optionString - src__cli__handleExtract --> src__cli__optionNlMode - src__cli__handleExtract --> src__cli__emitExtraction - src__cli__handleExtract --> src__cli__optionNumber - src__cli__handleExtract --> src__cli__optionNullableString - src__cli__handleExtract --> src__cli__optionLlmMode - src__cli__extractor --> src__cli__optionString - src__cli__extractor --> src__cli__optionNlMode - src__cli__extractor --> src__cli__emitExtraction - src__cli__handleCommunication --> src__cli__optionString - src__cli__handleCommunication --> src__cli__optionNullableString - src__cli__handleCommunication --> src__cli__optionLlmMode - src__cli__handleCommunication --> src__cli__optionNumber - src__cli__handleCommunication --> src__cli__optionBoolean - src__cli__doctor --> src__cli__execFileAsync - src__cli__optionNumber --> src__cli__optionString - src__cli__optionList --> src__cli__optionString - src__cli__optionNlMode --> src__cli__optionLlmMode - src__cli__optionLlmMode --> src__cli__optionString - src__cli__optionTaskMode --> src__cli__optionString - src__cli__optionSummaryMode --> src__cli__optionLlmMode - src__cli__optionSummaryMode --> src__cli__optionBoolean - src__cli__optionPipelineTaskMode --> src__cli__optionString - src__cli__invokedPath --> src__cli__main - src__web__diff_ui__diffUiHtml --> src__web__diff_ui__byId - src__web__diff_ui__diffUiHtml --> src__web__diff_ui__selectedRun - src__web__diff_ui__diffUiHtml --> src__web__diff_ui__formatBytes - src__web__diff_ui__requestHeaders --> src__web__diff_ui__byId - src__web__diff_ui__formatBytes --> src__web__diff_ui__selectedRun - src__web__diff_ui__formatBytes --> src__web__diff_ui__byId - src__web__diff_ui__selectedRun --> src__web__diff_ui__byId - src__web__diff_ui__selectedRun --> src__web__diff_ui__formatBytes - src__web__diff_ui__updateMeta --> src__web__diff_ui__selectedRun - src__web__diff_ui__updateMeta --> src__web__diff_ui__byId - src__web__diff_ui__updateMeta --> src__web__diff_ui__formatBytes - src__web__diff_ui__fillSelect --> src__web__diff_ui__byId - src__web__diff_ui__fillSelect --> src__web__diff_ui__updateMeta - src__web__diff_ui__loadRuns --> src__web__diff_ui__byId - src__web__diff_ui__loadRuns --> src__web__diff_ui__requestHeaders - src__web__diff_ui__loadRuns --> src__web__diff_ui__fillSelect - src__web__diff_ui__loadRuns --> src__web__diff_ui__compareGraphs - src__web__diff_ui__compareGraphs --> src__web__diff_ui__byId - src__web__diff_ui__compareGraphs --> src__web__diff_ui__requestHeaders - src__watch__watcher__scanTree --> src__watch__watcher__relative - src__watch__watcher__scanTree --> src__watch__watcher__visit - src__watch__watcher__scanTree --> src__watch__watcher__stat - src__watch__watcher__maxFiles --> src__watch__watcher__relative - src__watch__watcher__maxFiles --> src__watch__watcher__visit - src__watch__watcher__maxFiles --> src__watch__watcher__stat - src__watch__watcher__absoluteRoot --> src__watch__watcher__relative - src__watch__watcher__absoluteRoot --> src__watch__watcher__visit - src__watch__watcher__absoluteRoot --> src__watch__watcher__stat - src__watch__watcher__visit --> src__watch__watcher__relative - src__watch__watcher__visit --> src__watch__watcher__stat - src__watch__watcher__absolute --> src__watch__watcher__visit - src__watch__watcher__relative --> src__watch__watcher__visit - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__now - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__scanTree - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__emit - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__generate - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__sleep - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__diffSnapshots - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__describeDelta - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS --> src__watch__watcher__runReport - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__now - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__scanTree - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__emit - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__generate - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__sleep - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__diffSnapshots - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__describeDelta - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS --> src__watch__watcher__runReport - src__watch__watcher__watchRepository --> src__watch__watcher__now - src__watch__watcher__watchRepository --> src__watch__watcher__scanTree - src__watch__watcher__watchRepository --> src__watch__watcher__emit - src__watch__watcher__watchRepository --> src__watch__watcher__generate - src__watch__watcher__watchRepository --> src__watch__watcher__sleep - src__watch__watcher__watchRepository --> src__watch__watcher__diffSnapshots - src__watch__watcher__watchRepository --> src__watch__watcher__describeDelta - src__watch__watcher__watchRepository --> src__watch__watcher__runReport - src__watch__watcher__result --> src__watch__watcher__emit - src__watch__watcher__result --> src__watch__watcher__now - src__watch__watcher__snapshot --> src__watch__watcher__emit - src__watch__watcher__lastReportStartedAt --> src__watch__watcher__now - src__watch__watcher__lastReportStartedAt --> src__watch__watcher__generate - src__watch__watcher__pending --> src__watch__watcher__now - src__watch__watcher__pending --> src__watch__watcher__generate - src__watch__watcher__current --> src__watch__watcher__describeDelta - src__watch__watcher__current --> src__watch__watcher__emit - src__watch__watcher__delta --> src__watch__watcher__describeDelta - src__watch__watcher__delta --> src__watch__watcher__emit - src__watch__watcher__waitMs --> src__watch__watcher__emit - src__watch__watcher__generate --> src__watch__watcher__emit - src__watch__watcher__generate --> src__watch__watcher__now - src__watch__watcher__generate --> src__watch__watcher__runReport - src__watch__watcher__generate --> src__watch__watcher__scanTree - src__watch__watcher__startedAt --> src__watch__watcher__runReport - src__watch__watcher__startedAt --> src__watch__watcher__emit - src__watch__watcher__startedAt --> src__watch__watcher__now - src__watch__watcher__defaultSleep --> src__watch__watcher__finish - src__watch__watcher__timer --> src__watch__watcher__finish - src__watch__watcher__onAbort --> src__watch__watcher__finish - src__tf__classifier__dynamicImport --> src__tf__classifier__importer - src__tf__classifier__loadClassifier --> src__tf__classifier__dynamicImport - src__tf__classifier__loadClassifier --> src__tf__classifier__loadAssets - src__tf__classifier__classifyAction --> src__tf__classifier__loadClassifier - src__tf__classifier__classifyAction --> src__tf__classifier__vectorize - src__synthesis__validation__validateAndClassifyTodoProposals --> src__synthesis__validation__duplicateEvidence - src__synthesis__validation__validateAndClassifyTodoProposals --> src__synthesis__validation__dependencyFirstPriorityOrder - src__synthesis__validation__duplicateEvidence --> src__synthesis__validation__words - src__synthesis__validation__duplicateEvidence --> src__synthesis__validation__intersects - src__synthesis__validation__duplicateEvidence --> src__synthesis__validation__jaccard - src__synthesis__validation__proposalWords --> src__synthesis__validation__words - src__synthesis__validation__target --> src__synthesis__validation__jaccard - src__synthesis__validation__target --> src__synthesis__validation__words - src__synthesis__validation__sharedTicket --> src__synthesis__validation__jaccard - src__synthesis__validation__sharedTicket --> src__synthesis__validation__words - src__synthesis__validation__sharedSymbol --> src__synthesis__validation__jaccard - src__synthesis__validation__sharedSymbol --> src__synthesis__validation__words - src__synthesis__validation__sharedPath --> src__synthesis__validation__jaccard - src__synthesis__validation__sharedPath --> src__synthesis__validation__words - src__synthesis__validation__similarity --> src__synthesis__validation__jaccard - src__synthesis__validation__similarity --> src__synthesis__validation__words - src__synthesis__todo_patch__createTodoPatch --> src__synthesis__todo_patch__sameArray - src__synthesis__todo_patch__createTodoPatch --> src__synthesis__todo_patch__renderTodoPatchMarkdown - src__synthesis__todo_patch__createTodoPatch --> src__synthesis__todo_patch__normalizePath - src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__selected --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__orderedSelected --> src__synthesis__todo_patch__sameArray - src__synthesis__todo_patch__markdown --> src__synthesis__todo_patch__normalizePath - src__synthesis__todo_patch__markdown --> src__synthesis__todo_patch__diagnosticReportFingerprint - src__synthesis__todo_patch__renderTodoPatchMarkdown --> src__synthesis__todo_patch__inline - src__synthesis__todo_patch__renderTodoPatchMarkdown --> src__synthesis__todo_patch__renderTargets - src__synthesis__todo_patch__renderTodoPatchMarkdown --> src__synthesis__todo_patch__renderIds - src__synthesis__todo_patch__writeTodoPatchArtifacts --> src__synthesis__todo_patch__createTodoPatch - src__synthesis__todo_patch__applyTodoPatch --> src__synthesis__todo_patch__assertTodoPatchArtifact - src__synthesis__todo_patch__applyTodoPatch --> src__synthesis__todo_patch__assertApproval - src__synthesis__todo_patch__applyTodoPatch --> src__synthesis__todo_patch__assertReceipt - src__synthesis__todo_patch__applyTodoPatch --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__applyTodoPatch --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__current --> src__synthesis__todo_patch__assertReceipt - src__synthesis__todo_patch__now --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__now --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__now --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__currentHash --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__currentHash --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__currentHash --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__result --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__result --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__result --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__applied --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__applied --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__applied --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__recovered --> src__synthesis__todo_patch__appendPatch - src__synthesis__todo_patch__recovered --> src__synthesis__todo_patch__atomicWrite - src__synthesis__todo_patch__recovered --> src__synthesis__todo_patch__wasAlreadyAppended - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__isoDate - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__hash - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__nonBlank - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__assertTodoPatchArtifact --> src__synthesis__todo_patch__sameArray - src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__artifact --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__sourceTodo --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__duplicates --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__object - src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__exactKeys - src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__uniqueIds - src__synthesis__todo_patch__classified --> src__synthesis__todo_patch__uniqueStrings - src__synthesis__todo_patch__assertApproval --> src__synthesis__todo_patch__nonBlank - src__synthesis__todo_patch__assertReceipt --> src__synthesis__todo_patch__sameArray - src__synthesis__todo_patch__assertReceipt --> src__synthesis__todo_patch__nonBlank - src__synthesis__todo_patch__assertReceipt --> src__synthesis__todo_patch__isoDate - src__synthesis__todo_patch__renderTargets --> src__synthesis__todo_patch__inline - src__synthesis__todo_patch__rendered --> src__synthesis__todo_patch__inline - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__assertConclusions - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__readPrompt - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeTodoProposals --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesisAudit - src__synthesis__tasks_llm__TaskSynthesisAttemptError__startedAt --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__assertConclusions - src__synthesis__tasks_llm__TaskSynthesisAttemptError__client --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow - src__synthesis__tasks_llm__TaskSynthesisAttemptError__prompt --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection - src__synthesis__tasks_llm__TaskSynthesisAttemptError__payload --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection - src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__generationMetadata - src__synthesis__tasks_llm__TaskSynthesisAttemptError__fallbackOrThrow --> src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesisAudit - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__normalizeLocalKeys - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__normalizeRawTarget - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria - src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__parsed --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__parsed --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__proposalKeys --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__proposalKeys --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__conclusions --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__conclusions --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__diagnosticIds --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__normalizeRawTarget - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__conclusionIdByKey --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__normalizeRawTarget - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__conclusionByKey --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__normalizeRawTarget - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__proposalDrafts --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__proposalIdByKey --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__proposals --> src__synthesis__task_synthesis_materialize__mapKeys - src__synthesis__task_synthesis_materialize__keys --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__mapKeys --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__mapKeys --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_materialize__sortedUnique --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__normalizeRawTarget --> src__synthesis__task_synthesis_materialize__normalizeStringArray - src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria --> src__synthesis__task_synthesis_materialize__sortedUnique - src__synthesis__task_synthesis_contract__RAW_CONCLUSION_CONTRACT --> src__synthesis__task_synthesis_contract__nonBlank - src__synthesis__task_synthesis_contract__RAW_CONCLUSION_CONTRACT --> src__synthesis__task_synthesis_contract__taskIds - src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT --> src__synthesis__task_synthesis_contract__nonBlank - src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT --> src__synthesis__task_synthesis_contract__taskStrings - src__synthesis__task_synthesis_contract__RAW_PROPOSAL_CONTRACT --> src__synthesis__task_synthesis_contract__taskIds - src__synthesis__code_change_plan__proposeCodeChangePlans --> src__synthesis__code_change_plan__indexProposalsByDiagnostic - src__synthesis__code_change_plan__proposeCodeChangePlans --> src__synthesis__code_change_plan__indexConclusionsByDiagnostic - src__synthesis__code_change_plan__generatedAt --> src__synthesis__code_change_plan__createCodeChangeSourcePatch - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__priorityFor - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__acceptanceCriteriaFor - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__riskFor - src__synthesis__code_change_plan__conclusions --> src__synthesis__code_change_plan__rollbackFor - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__priorityFor - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__acceptanceCriteriaFor - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__riskFor - src__synthesis__code_change_plan__proposals --> src__synthesis__code_change_plan__rollbackFor - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__priorityFor - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__acceptanceCriteriaFor - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__riskFor - src__synthesis__code_change_plan__recordsById --> src__synthesis__code_change_plan__rollbackFor - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__priorityFor - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__acceptanceCriteriaFor - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__riskFor - src__synthesis__code_change_plan__proposalsByDiagnostic --> src__synthesis__code_change_plan__rollbackFor - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__priorityFor - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__acceptanceCriteriaFor - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__riskFor - src__synthesis__code_change_plan__conclusionsByDiagnostic --> src__synthesis__code_change_plan__rollbackFor - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__collectTarget - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__buildChanges - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__titleFor - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__descriptionFor - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__priorityFor - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__acceptanceCriteriaFor - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__riskFor - src__synthesis__code_change_plan__candidates --> src__synthesis__code_change_plan__rollbackFor - src__synthesis__code_change_plan__relatedRecords --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__matchingProposals --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__matchingConclusions --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__target --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__changes --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__planHash --> src__synthesis__code_change_plan__confidenceFor - src__synthesis__code_change_plan__closeCodeChanges --> src__synthesis__code_change_plan__evaluateCodeChangeAcceptance - src__synthesis__code_change_plan__closeCodeChanges --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__planIds --> src__synthesis__code_change_plan__evaluateCodeChangeAcceptance - src__synthesis__code_change_plan__acceptances --> src__synthesis__code_change_plan__evaluateCodeChangeAcceptance - src__synthesis__code_change_plan__acceptedCount --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__indexProposalsByDiagnostic --> src__synthesis__code_change_plan__set - src__synthesis__code_change_plan__index --> src__synthesis__code_change_plan__set - src__synthesis__code_change_plan__indexConclusionsByDiagnostic --> src__synthesis__code_change_plan__set - src__synthesis__code_change_plan__paths --> src__synthesis__code_change_plan__exactSourcePatchKeys - src__synthesis__code_change_plan__paths --> src__synthesis__code_change_plan__assertSourcePatchStrings - src__synthesis__code_change_plan__paths --> src__synthesis__code_change_plan__normalizeUnifiedDiff - src__synthesis__code_change_plan__buildChanges --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__titleFor --> src__synthesis__code_change_plan__startsWithImperative - src__synthesis__code_change_plan__record --> src__synthesis__code_change_plan__startsWithImperative - src__synthesis__code_change_plan__object --> src__synthesis__code_change_plan__startsWithImperative - src__synthesis__code_change_plan__acceptanceCriteriaFor --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__riskFor --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__rollbackFor --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__createCodeChangeReviewPatch --> src__synthesis__code_change_plan__priorityRank - src__synthesis__code_change_plan__createCodeChangeReviewPatch --> src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown - src__synthesis__code_change_plan__createCodeChangeReviewPatch --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__createCodeChangeReviewPatch --> src__synthesis__code_change_plan__assertCodeChangeReviewPatch - src__synthesis__code_change_plan__markdown --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown --> src__synthesis__code_change_plan__inline - src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown --> src__synthesis__code_change_plan__renderIds - src__synthesis__code_change_plan__createCodeChangeSourcePatch --> src__synthesis__code_change_plan__normalizeUnifiedDiff - src__synthesis__code_change_plan__createCodeChangeSourcePatch --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__createCodeChangeSourcePatch --> src__synthesis__code_change_plan__instructionFor - src__synthesis__code_change_plan__rawDiff --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__rawDiff --> src__synthesis__code_change_plan__instructionFor - src__synthesis__code_change_plan__unifiedDiff --> src__synthesis__code_change_plan__uniqueSorted - src__synthesis__code_change_plan__unifiedDiff --> src__synthesis__code_change_plan__instructionFor - src__synthesis__code_change_plan__patchHash --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__createCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__createCodeChangeSourcePatch - src__synthesis__code_change_plan__createCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__createCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet - src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__exactSourcePatchKeys - src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertSourcePatchIds - src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertSourcePatchStrings - src__synthesis__code_change_plan__assertCodeChangeSourcePatch --> src__synthesis__code_change_plan__normalizeUnifiedDiff - src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__exactSourcePatchKeys - src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch - src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet --> src__synthesis__code_change_plan__exactSourcePatchSet - src__synthesis__code_change_plan__plansById --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch - src__synthesis__code_change_plan__patchIds --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch - src__synthesis__code_change_plan__applyCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertCodeChangeSourcePatch - src__synthesis__code_change_plan__applyCodeChangeSourcePatch --> src__synthesis__code_change_plan__assertExistingSourceReceipt - src__synthesis__code_change_plan__now --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__fileHashesAfter --> src__synthesis__code_change_plan__deterministicGeneration - src__synthesis__code_change_plan__assertExistingSourceReceipt --> src__synthesis__code_change_plan__assertSourceApplyReceipt - src__synthesis__code_change_plan__assertSourceApplyReceipt --> src__synthesis__code_change_plan__exactSourcePatchKeys - src__synthesis__code_change_plan__assertSourceApplyReceipt --> src__synthesis__code_change_plan__exactSourcePatchSet - src__synthesis__code_change_plan__applyUnifiedDiffToText --> src__synthesis__code_change_plan__normalizeUnifiedDiff - src__synthesis__code_change_plan__applyUnifiedDiffToText --> src__synthesis__code_change_plan__splitKeep - src__synthesis__code_change_path__isUsefulCodeChangePath --> src__synthesis__code_change_path__isPlannablePath - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__assertConclusions - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__summaryMode - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__readPrompt - src__summary__summarizer__summarizeGraph --> src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection - src__summary__summarizer__mode --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__mode --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__client --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__client --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__systemPrompt --> src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection - src__summary__summarizer__systemPrompt --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__systemPrompt --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__payload --> src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection - src__summary__summarizer__payload --> src__summary__summarizer__SummaryAttemptError__deterministicConclusions - src__summary__summarizer__payload --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection --> src__summary__summarizer__SummaryAttemptError__materializeConclusions - src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection --> src__summary__summarizer__SummaryAttemptError__generationMetadata - src__summary__summarizer__SummaryAttemptError__conclusions --> src__summary__summarizer__SummaryAttemptError__sortedUnique - src__summary__summarizer__SummaryAttemptError__materializeConclusions --> src__summary__summarizer__SummaryAttemptError__sortedUnique - src__summary__summarizer__SummaryAttemptError__materializeConclusions --> src__summary__summarizer__SummaryAttemptError__assertConclusions - src__summary__summarizer__SummaryAttemptError__parsed --> src__summary__summarizer__SummaryAttemptError__sortedUnique - src__summary__summarizer__SummaryAttemptError__deterministicConclusions --> src__summary__summarizer__SummaryAttemptError__sortedUnique - src__summary__summarizer__SummaryAttemptError__deterministicConclusions --> src__summary__summarizer__SummaryAttemptError__assertConclusions - src__summary__render__renderSummaryMarkdown --> src__summary__render__renderRecords - src__summary__render__renderSummaryMarkdown --> src__summary__render__renderConclusion - src__summary__render__renderSummaryMarkdown --> src__summary__render__recordCitations - src__summary__render__actions --> src__summary__render__recordCitations - src__summary__render__confidence --> src__summary__render__recordCitations - src__summary__render__renderConclusion --> src__summary__render__recordCitations - src__services__actions__executeAction --> src__services__actions__resolveRoot - src__services__actions__executeAction --> src__services__actions__scopedPath - src__services__actions__executeAction --> src__services__actions__nlModeValue - src__services__actions__executeAction --> src__services__actions__numberValue - src__services__actions__executeAction --> src__services__actions__nullableScopedPath - src__services__actions__executeAction --> src__services__actions__llmModeValue - src__services__actions__executeAction --> src__services__actions__stringList - src__services__actions__executeAction --> src__services__actions__nullableString - src__services__actions__root --> src__services__actions__scopedPath - src__services__actions__root --> src__services__actions__nlModeValue - src__services__actions__root --> src__services__actions__numberValue - src__services__actions__root --> src__services__actions__nullableScopedPath - src__services__actions__root --> src__services__actions__llmModeValue - src__services__actions__root --> src__services__actions__stringList - src__services__actions__root --> src__services__actions__nullableString - src__services__actions__analysis --> src__services__actions__booleanValue - src__services__actions__graph --> src__services__actions__booleanValue - src__services__actions__graph --> src__services__actions__numberValue - src__services__actions__diagnostics --> src__services__actions__booleanValue - src__services__actions__diagnostics --> src__services__actions__numberValue - src__services__actions__result --> src__services__actions__stringValue - src__services__actions__result --> src__services__actions__booleanValue - src__services__actions__result --> src__services__actions__numberValue - src__services__actions__todoPath --> src__services__actions__stringValue - src__services__actions__receiptPath --> src__services__actions__stringValue - src__services__actions__conclusions --> src__services__actions__numberValue - src__services__actions__proposals --> src__services__actions__numberValue - src__services__actions__patch --> src__services__actions__stringValue - src__services__actions__beforeGraph --> src__services__actions__hasInputValue - src__services__actions__beforeDiagnostics --> src__services__actions__hasInputValue - src__services__actions__afterGraph --> src__services__actions__hasInputValue - src__services__actions__afterDiagnostics --> src__services__actions__hasInputValue - src__services__actions__value --> src__services__actions__hasInputValue - src__services__actions__beforeInput --> src__services__actions__numberValue - src__services__actions__afterInput --> src__services__actions__numberValue - src__services__actions__before --> src__services__actions__numberValue - src__services__actions__after --> src__services__actions__numberValue - src__services__actions__diff --> src__services__actions__stringValue - src__services__actions__diff --> src__services__actions__numberValue - src__services__actions__svg --> src__services__actions__numberValue - src__services__actions__beforePath --> src__services__actions__stringValue - src__services__actions__beforePath --> src__services__actions__numberValue - src__services__actions__afterPath --> src__services__actions__stringValue - src__services__actions__afterPath --> src__services__actions__numberValue - src__services__actions__view --> src__services__actions__booleanValue - src__services__actions__view --> src__services__actions__numberValue - src__services__actions__filterCommunicationGraph --> src__services__actions__stringValue - src__services__actions__filterCommunicationGraph --> src__services__actions__booleanValue - src__services__actions__nlModeValue --> src__services__actions__llmModeValue - src__services__actions__summaryModeValue --> src__services__actions__llmModeValue - src__services__actions__summaryModeValue --> src__services__actions__booleanValue - src__services__actions__withTextDiffViews --> src__services__actions__stringValue - src__services__actions__withTextDiffViews --> src__services__actions__booleanValue - src__services__actions__withTextDiffViews --> src__services__actions__numberValue - src__services__actions__title --> src__services__actions__booleanValue - src__services__actions__title --> src__services__actions__numberValue - src__services__actions__scopedPath --> src__services__actions__stringValue - src__services__actions__nullableScopedPath --> src__services__actions__nullableString - src__services__actions__readRecords --> src__services__actions__stringList - src__semantic__reranker__createSemanticCandidateSet --> src__semantic__reranker__requiredText - src__semantic__reranker__assertSemanticCandidateSet --> src__semantic__reranker__validDate - src__semantic__reranker__assertSemanticCandidateSet --> src__semantic__reranker__validateRetrieval - src__semantic__reranker__assertSemanticCandidateSet --> src__semantic__reranker__boundedScore - src__semantic__reranker__records --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__records --> src__semantic__reranker__validateVerdictReason - src__semantic__reranker__records --> src__semantic__reranker__requiredText - src__semantic__reranker__records --> src__semantic__reranker__assertGroundedQuote - src__semantic__reranker__seenIds --> src__semantic__reranker__boundedScore - src__semantic__reranker__seenPairs --> src__semantic__reranker__boundedScore - src__semantic__reranker__byDeclaration --> src__semantic__reranker__boundedScore - src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__assertSemanticCandidateSet - src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__requiredText - src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__createSemanticRerankResult --> src__semantic__reranker__assertSemanticRerankResult - src__semantic__reranker__decisions --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__decisions --> src__semantic__reranker__requiredText - src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__assertSemanticCandidateSet - src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__validDate - src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__validateGeneration - src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__validateVerdictReason - src__semantic__reranker__assertSemanticRerankResult --> src__semantic__reranker__requiredText - src__semantic__reranker__seenDecisions --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__seenDecisions --> src__semantic__reranker__validateVerdictReason - src__semantic__reranker__seenDecisions --> src__semantic__reranker__requiredText - src__semantic__reranker__seenDecisions --> src__semantic__reranker__assertGroundedQuote - src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__roundedConfidence - src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__validateVerdictReason - src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__requiredText - src__semantic__reranker__acceptedDeclarations --> src__semantic__reranker__assertGroundedQuote - src__semantic__reranker__applyAcceptedSemanticRelations --> src__semantic__reranker__assertSemanticRerankResult - src__semantic__reranker__applyAcceptedSemanticRelations --> src__semantic__reranker__values - src__semantic__reranker__validateRetrieval --> src__semantic__reranker__requiredText - src__semantic__reranker__validateGeneration --> src__semantic__reranker__requiredText - src__semantic__reranker__validateVerdictReason --> src__semantic__reranker__assertSemanticVerdictReason - src__semantic__reranker__assertGroundedQuote --> src__semantic__reranker__requiredText - src__semantic__reranker__quote --> src__semantic__reranker__requiredText - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticCandidateSet - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshot - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates --> src__semantic__reranker_llm__SemanticRerankerRequiredError__projectRecord - src__semantic__reranker_llm__SemanticRerankerRequiredError__model --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult - src__semantic__reranker_llm__SemanticRerankerRequiredError__modelRevision --> src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult - src__semantic__reranker_llm__SemanticRerankerRequiredError__payload --> src__semantic__reranker_llm__SemanticRerankerRequiredError__projectRecord - src__pipeline__run__runPipeline --> src__pipeline__run__skippedAudit - src__pipeline__run__docs --> src__pipeline__run__collectTargetHints - src__pipeline__run__docs --> src__pipeline__run__values - src__pipeline__run__configurationExtraction --> src__pipeline__run__skippedAudit - src__pipeline__run__includeCommunication --> src__pipeline__run__skippedAudit - src__pipeline__run__communicationStartedAt --> src__pipeline__run__skippedAudit - src__pipeline__run__communicationAudit --> src__pipeline__run__skippedAudit - src__pipeline__run__communicationInputPresent --> src__pipeline__run__skippedAudit - src__pipeline__run__collectTargetHints --> src__pipeline__run__values - src__pipeline__run__persistFailedRun --> src__pipeline__run__skippedAudit - src__pipeline__run__persistFailedRun --> src__pipeline__run__failureCode - src__pipeline__run__persistFailedRun --> src__pipeline__run__failedAudit - src__pipeline__run__persistFailedRun --> src__pipeline__run__aborted - src__pipeline__run__persistFailedRun --> src__pipeline__run__stageValue - src__pipeline__run__persistFailedRun --> src__pipeline__run__manifestConfiguration - src__pipeline__run__aborted --> src__pipeline__run__skippedAudit - src__pipeline__run__message --> src__pipeline__run__failureCode - src__pipeline__run__knownAudit --> src__pipeline__run__failureCode - src__pipeline__run__failedAudit --> src__pipeline__run__failureCode - src__pipeline__run__stageValue --> src__pipeline__run__failedAudit - src__pipeline__run__stageValue --> src__pipeline__run__aborted - src__pipeline__run__reason --> src__pipeline__run__failureCode - src__operations__validation__dateString --> src__operations__validation__nonBlank - src__operations__validation__assertPrincipalList --> src__operations__validation__uniqueStrings - src__operations__validation__principals --> src__operations__validation__uniqueStrings - src__operations__validation__assertVariableContract --> src__operations__validation__objectValue - src__operations__validation__assertVariableContract --> src__operations__validation__exactKeys - src__operations__validation__assertVariableContract --> src__operations__validation__nonBlank - src__operations__validation__assertVariableContract --> src__operations__validation__assertPrincipalList - src__operations__validation__contract --> src__operations__validation__objectValue - src__operations__validation__source --> src__operations__validation__objectValue - src__operations__validation__access --> src__operations__validation__objectValue - src__operations__validation__readers --> src__operations__validation__assertPrincipalList - src__operations__validation__writers --> src__operations__validation__assertPrincipalList - src__operations__validation__assertGeneration --> src__operations__validation__objectValue - src__operations__validation__assertGeneration --> src__operations__validation__exactKeys - src__operations__validation__assertGeneration --> src__operations__validation__nonBlank - src__operations__validation__assertGeneration --> src__operations__validation__dateString - src__operations__validation__generation --> src__operations__validation__nonBlank - src__operations__validation__assertAcyclic --> src__operations__validation__visit - src__operations__validation__ids --> src__operations__validation__visit - src__operations__validation__visiting --> src__operations__validation__visit - src__operations__validation__visited --> src__operations__validation__visit + rust_ast__src__main__main --> rust_ast__src__main__arguments + rust_ast__src__main__main --> rust_ast__src__main__collect_files + rust_ast__src__main__main --> rust_ast__src__main__slash + rust_ast__src__main__collect_files --> rust_ast__src__main__slash + rust_ast__src__main__add --> rust_ast__src__main__excerpt + rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified + rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add + rust_ast__src__main__visit_item_use --> rust_ast__src__main__add + rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item + rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item + rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item + rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item + rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified + rust_ast__src__main__visit_item_const --> rust_ast__src__main__add + rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers + rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified + rust_ast__src__main__visit_item_static --> rust_ast__src__main__add + rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers + rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified + rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add + rust_ast__src__main__visit_item_fn --> rust_ast__src__main__modifiers + rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add + rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add + rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add + rust_ast__src__main__type_item --> rust_ast__src__main__qualified + rust_ast__src__main__type_item --> rust_ast__src__main__add + rust_ast__src__main__type_item --> rust_ast__src__main__modifiers + examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid + examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid + examples__backend__src__validation__record --> examples__backend__src__validation__invalid + examples__backend__src__validation__agent --> examples__backend__src__validation__invalid + examples__backend__src__validation__action --> examples__backend__src__validation__invalid + examples__backend__src__validation__object --> examples__backend__src__validation__invalid + examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest + examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson + examples__backend__src__server__store --> examples__backend__src__server__handleRequest + examples__backend__src__server__store --> examples__backend__src__server__sendJson + examples__backend__src__server__server --> examples__backend__src__server__handleRequest + examples__backend__src__server__server --> examples__backend__src__server__sendJson + examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson + examples__backend__src__server__handleRequest --> examples__backend__src__server__size + examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody + examples__backend__src__server__validation --> examples__backend__src__server__sendJson + examples__backend__src__server__event --> examples__backend__src__server__sendJson + examples__backend__src__server__offset --> examples__backend__src__server__sendJson + examples__backend__src__server__limit --> examples__backend__src__server__sendJson + examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend + examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent + examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow + examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState + examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh + examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload + examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state + examples__frontend__src__app__state --> examples__frontend__src__app__refresh + examples__frontend__src__app__reload --> examples__frontend__src__app__refresh + examples__src__runtime__executeContract --> examples__src__runtime__validateContract + java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add + java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit + java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect + java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__slash + java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__parseFile + java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json + java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map + java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try + java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored + java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash + java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__Collector + java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape + src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions + src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields + src__extractors__nl__extractNlIntent --> src__extractors__nl__inferActor + src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields + src__extractors__nl__absolute --> src__extractors__nl__inferActor + src__extractors__nl__body --> src__extractors__nl__detectMissingFields + src__extractors__nl__body --> src__extractors__nl__inferActor + src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields + src__extractors__nl__sourcePath --> src__extractors__nl__inferActor + src__extractors__nl__classified --> src__extractors__nl__inferActor + src__extractors__nl__action --> src__extractors__nl__inferActor + src__extractors__nl__object --> src__extractors__nl__inferActor + src__extractors__nl__missing --> src__extractors__nl__inferActor + src__extractors__nl__confidence --> src__extractors__nl__inferActor + src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__driftRecord + src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__proposalRecord + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__driftRecord + src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__proposalRecord + src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord + src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray + src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord + src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags + src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags + src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar + src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags + src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar + src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text + src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction + src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar + src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath + src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords + src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath + src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords + src__extractors__configuration__files --> src__extractors__configuration__configurationRecords + src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords + src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries + src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries + src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries + src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries + src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate + src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate + src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate + src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat + src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine + src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine + src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine + src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries + src__extractors__configuration__tomlEntries --> src__extractors__configuration__match + src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry + src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries + src__extractors__configuration__line --> src__extractors__configuration__entry + src__extractors__configuration__heading --> src__extractors__configuration__entry + src__extractors__configuration__pair --> src__extractors__configuration__entry + src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries + src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match + src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry + src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries + src__extractors__configuration__dockerEntries --> src__extractors__configuration__match + src__extractors__docs_schema__target --> src__extractors__docs_schema__strings + src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings + src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target + src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__markDeterministic + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__markDeterministic + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__markDeterministic + src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__markDeterministic + src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow + src__extractors__nl_llm__NlLlmRequiredError__absolute --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlLlmRequiredError__body --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlLlmRequiredError__sourcePath --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlLlmRequiredError__maxLine --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlLlmRequiredError__prompt --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection + src__extractors__nl_llm__NlAttemptError__failedAudit --> src__extractors__nl_llm__NlAttemptError__audit + src__extractors__nl_llm__NlAttemptError__deterministic --> src__extractors__nl_llm__NlAttemptError__fallback + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveAction + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__nonEmptyText + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveObject + src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__allowedModality + src__extractors__nl_llm__NlAttemptError__lines --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt + src__extractors__nl_llm__NlAttemptError__action --> src__extractors__nl_llm__NlAttemptError__resolveObject + src__extractors__nl_llm__NlAttemptError__normalizedText --> src__extractors__nl_llm__NlAttemptError__resolveObject + src__extractors__nl_llm__NlAttemptError__statementText --> src__extractors__nl_llm__NlAttemptError__allowedModality + src__extractors__nl_llm__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm__NlAttemptError__clampLine + src__extractors__nl_llm__NlAttemptError__resolveAction --> src__extractors__nl_llm__NlAttemptError__allowedAction + src__extractors__nl_llm__NlAttemptError__isPlaceholder --> src__extractors__nl_llm__NlAttemptError__nonEmptyText + src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__isPlaceholder + src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__nonEmptyText + src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm__NlAttemptError__nlStrings + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__buildAudit + src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage + src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage + src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage + src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction + src__extractors__changelog__body --> src__extractors__changelog__changelogAction + src__extractors__changelog__relative --> src__extractors__changelog__changelogAction + src__extractors__changelog__lines --> src__extractors__changelog__changelogAction + src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument + src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper + src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument + src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper + src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument + src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper + src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine + src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock + src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading + src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement + src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement + src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match + src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord + src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord + src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match + src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord + src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match + src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match + src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement + src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph + src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement + src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf + src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex + src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes + src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath + src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames + src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes + src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath + src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames + src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes + src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath + src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath + src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames + src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState + src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries + src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout + src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames + src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries + src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout + src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames + src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries + src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout + src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames + src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject + src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle + src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk + src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder + src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder + src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine + src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap + src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget + src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction + src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality + src__extractors__todo__extractTodo --> src__extractors__todo__match + src__extractors__todo__extractTodo --> src__extractors__todo__inferOwner + src__extractors__todo__body --> src__extractors__todo__match + src__extractors__todo__body --> src__extractors__todo__inferOwner + src__extractors__todo__relative --> src__extractors__todo__match + src__extractors__todo__relative --> src__extractors__todo__inferOwner + src__extractors__todo__lines --> src__extractors__todo__match + src__extractors__todo__lines --> src__extractors__todo__inferOwner + src__extractors__todo__raw --> src__extractors__todo__match + src__extractors__todo__heading --> src__extractors__todo__match + src__extractors__todo__task --> src__extractors__todo__inferOwner + src__extractors__todo__task --> src__extractors__todo__extractExplicitId + src__extractors__todo__checked --> src__extractors__todo__inferOwner + src__extractors__todo__checked --> src__extractors__todo__extractExplicitId + src__extractors__todo__block --> src__extractors__todo__inferOwner + src__extractors__todo__block --> src__extractors__todo__extractExplicitId + src__extractors__todo__text --> src__extractors__todo__inferOwner + src__extractors__todo__text --> src__extractors__todo__extractExplicitId + src__extractors__todo__classified --> src__extractors__todo__inferOwner + src__extractors__todo__classified --> src__extractors__todo__extractExplicitId + src__extractors__todo__action --> src__extractors__todo__inferOwner + src__extractors__todo__action --> src__extractors__todo__extractExplicitId + src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner + src__extractors__todo__resolvedPaths --> src__extractors__todo__extractExplicitId + src__extractors__todo__inferOwner --> src__extractors__todo__match + src__extractors__todo__extractExplicitId --> src__extractors__todo__match + src__extractors__communication__extractCommunicationIntent --> src__extractors__communication__extractCommunicationFile + src__extractors__communication__identityRegistry --> src__extractors__communication__extractCommunicationFile + src__extractors__communication__communicationFiles --> src__extractors__communication__extractCommunicationFile + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__parseEnvelope + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__inferIdentity + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__first + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__isTicketEvidenceFile + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__looksLikeTicket + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__normalizeRole + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__resolveIdentity + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__basename + src__extractors__communication__extractCommunicationFile --> src__extractors__communication__normalizeType + src__extractors__communication__envelope --> src__extractors__communication__basename + src__extractors__communication__inferred --> src__extractors__communication__basename + src__extractors__communication__explicitEnvelope --> src__extractors__communication__basename + src__extractors__communication__declaredParticipant --> src__extractors__communication__basename + src__extractors__communication__declaredRole --> src__extractors__communication__basename + src__extractors__communication__declaredParticipantId --> src__extractors__communication__basename + src__extractors__communication__identity --> src__extractors__communication__basename + src__extractors__communication__participant --> src__extractors__communication__basename + src__extractors__communication__sameStrings --> src__extractors__communication__normalize + src__extractors__communication__parseEnvelope --> src__extractors__communication__match + src__extractors__communication__parseEnvelope --> src__extractors__communication__unquote + src__extractors__communication__inferIdentity --> src__extractors__communication__basename + src__extractors__communication__inferIdentity --> src__extractors__communication__match + src__extractors__communication__inferIdentity --> src__extractors__communication__isCommunicationType + src__extractors__communication__fileParts --> src__extractors__communication__isCommunicationType + src__extractors__communication__nestedRoleIndex --> src__extractors__communication__isCommunicationType + src__extractors__communication__nestedRole --> src__extractors__communication__isCommunicationType + src__extractors__communication__nestedParticipant --> src__extractors__communication__isCommunicationType + src__extractors__communication__isTicketEvidenceFile --> src__extractors__communication__basename + src__extractors__communication__communicationSegments --> src__extractors__communication__isCommunicationNoise + src__extractors__communication__communicationSegments --> src__extractors__communication__match + src__extractors__communication__communicationSegments --> src__extractors__communication__flush + src__extractors__communication__communicationSegments --> src__extractors__communication__governanceSectionType + src__extractors__communication__flush --> src__extractors__communication__isCommunicationNoise + src__extractors__communication__item --> src__extractors__communication__isCommunicationNoise + src__extractors__communication__raw --> src__extractors__communication__match + src__extractors__communication__heading --> src__extractors__communication__match + src__extractors__communication__normalizeType --> src__extractors__communication__isCommunicationType + src__extractors__communication__listValue --> src__extractors__communication__unquote + src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree + src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent + src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories + src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency + src__extractors__git__root --> src__extractors__git__isGitWorkTree + src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent + src__extractors__git__count --> src__extractors__git__isGitWorkTree + src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols + src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__scopeChangedFile + src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState + src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork + src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory + src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries + src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory + src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren + src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery + src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork + src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory + src__extractors__git__state --> src__extractors__git__readDiscoveryEntries + src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory + src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren + src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix + src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState + src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository + src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree + src__extractors__git__isGitWorkTree --> src__extractors__git__runGit + src__extractors__git__runGit --> src__extractors__git__execFileAsync + src__extractors__git__result --> src__extractors__git__execFileAsync + src__extractors__git__readCommits --> src__extractors__git__runGit + src__extractors__git__readChangedFiles --> src__extractors__git__runGit + src__extractors__git__readStats --> src__extractors__git__runGit + src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority + src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority + src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker + src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker + src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker + src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker + src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections + src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush + src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection + src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush + src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection + src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush + src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection + src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__readPrompt + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow + src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection + src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract + src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch + src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage + src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic + src__extractors__markdown_llm__MarkdownAttemptError__failed --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit + src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm__MarkdownAttemptError__strings + src__extractors__markdown_llm__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm__MarkdownAttemptError__strings + src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync + src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync + src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords + src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities + src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__lineRange + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__excerpt + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__languageName + src__extractors__ast__typescript__add --> src__extractors__ast__typescript__lineRange + src__extractors__ast__typescript__add --> src__extractors__ast__typescript__excerpt + src__extractors__ast__typescript__add --> src__extractors__ast__typescript__languageName + src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__modifiers + src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__nameOf + src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__modifiers + src__extractors__ast__typescript__symbolModifiers --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__isTopLevel + src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__callee --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__capabilities --> src__extractors__ast__typescript__add + src__graph__diff__diffIntentGraphs --> src__graph__diff__assertGraph + src__graph__diff__diffIntentGraphs --> src__graph__diff__groupRecords + src__graph__diff__diffIntentGraphs --> src__graph__diff__changedFieldPaths + src__graph__diff__diffIntentGraphs --> src__graph__diff__normalizeRecord + src__graph__diff__diffIntentGraphs --> src__graph__diff__relationKey + src__graph__diff__beforeGroups --> src__graph__diff__changedFieldPaths + src__graph__diff__beforeGroups --> src__graph__diff__normalizeRecord + src__graph__diff__afterGroups --> src__graph__diff__changedFieldPaths + src__graph__diff__afterGroups --> src__graph__diff__normalizeRecord + src__graph__diff__left --> src__graph__diff__changedFieldPaths + src__graph__diff__left --> src__graph__diff__normalizeRecord + src__graph__diff__right --> src__graph__diff__changedFieldPaths + src__graph__diff__right --> src__graph__diff__normalizeRecord + src__graph__diff__paired --> src__graph__diff__changedFieldPaths + src__graph__diff__paired --> src__graph__diff__normalizeRecord + src__graph__diff__beforeRecord --> src__graph__diff__changedFieldPaths + src__graph__diff__beforeRecord --> src__graph__diff__normalizeRecord + src__graph__diff__afterRecord --> src__graph__diff__changedFieldPaths + src__graph__diff__afterRecord --> src__graph__diff__normalizeRecord + src__graph__diff__renderGraphDiffSvg --> src__graph__diff__escapeXml + src__graph__diff__renderGraphDiffSvg --> src__graph__diff__truncate + src__graph__diff__renderGraphDiffSvg --> src__graph__diff__metricCard + src__graph__diff__visibleRows --> src__graph__diff__escapeXml + src__graph__diff__visibleRows --> src__graph__diff__truncate + src__graph__diff__width --> src__graph__diff__escapeXml + src__graph__diff__width --> src__graph__diff__truncate + src__graph__diff__height --> src__graph__diff__escapeXml + src__graph__diff__height --> src__graph__diff__truncate + src__graph__diff__y --> src__graph__diff__escapeXml + src__graph__diff__y --> src__graph__diff__truncate + src__graph__diff__groupRecords --> src__graph__diff__recordIdentity + src__graph__diff__groupRecords --> src__graph__diff__values + src__graph__diff__groups --> src__graph__diff__recordIdentity + src__graph__diff__changedFieldPaths --> src__graph__diff__isObject + src__graph__diff__compareRelations --> src__graph__diff__relationKey + src__graph__diff__metricCard --> src__graph__diff__escapeXml + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__values + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths + src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths + src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords + src__graph__linker__linkIntentRecords --> src__graph__linker__indexKeywords + src__graph__linker__linkIntentRecords --> src__graph__linker__collectCandidatePairs + src__graph__linker__linkIntentRecords --> src__graph__linker__indexResolvableBasenames + src__graph__linker__linkIntentRecords --> src__graph__linker__scorePair + src__graph__linker__linkIntentRecords --> src__graph__linker__determineRelation + src__graph__linker__records --> src__graph__linker__scorePair + src__graph__linker__records --> src__graph__linker__determineRelation + src__graph__linker__byId --> src__graph__linker__set + src__graph__linker__keywordIndex --> src__graph__linker__scorePair + src__graph__linker__keywordIndex --> src__graph__linker__determineRelation + src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair + src__graph__linker__symbolResolutionIndex --> src__graph__linker__determineRelation + src__graph__linker__candidatePairs --> src__graph__linker__scorePair + src__graph__linker__candidatePairs --> src__graph__linker__determineRelation + src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair + src__graph__linker__resolvableBasenames --> src__graph__linker__determineRelation + src__graph__linker__deduplicateRecords --> src__graph__linker__set + src__graph__linker__deduplicateRecords --> src__graph__linker__values + src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTargetBuckets + src__graph__linker__collectCandidatePairs --> src__graph__linker__indexKeywordBuckets + src__graph__linker__collectCandidatePairs --> src__graph__linker__isModuleTopicSource + src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTopicBuckets + src__graph__linker__collectCandidatePairs --> src__graph__linker__pairsFromBuckets + src__graph__linker__buckets --> src__graph__linker__indexTargetBuckets + src__graph__linker__buckets --> src__graph__linker__indexKeywordBuckets + src__graph__linker__buckets --> src__graph__linker__isModuleTopicSource + src__graph__linker__buckets --> src__graph__linker__indexTopicBuckets + src__graph__linker__astIds --> src__graph__linker__indexTargetBuckets + src__graph__linker__astIds --> src__graph__linker__indexKeywordBuckets + src__graph__linker__astIds --> src__graph__linker__isModuleTopicSource + src__graph__linker__astIds --> src__graph__linker__indexTopicBuckets + src__graph__linker__moduleAstIds --> src__graph__linker__indexTargetBuckets + src__graph__linker__moduleAstIds --> src__graph__linker__indexKeywordBuckets + src__graph__linker__moduleAstIds --> src__graph__linker__isModuleTopicSource + src__graph__linker__moduleAstIds --> src__graph__linker__indexTopicBuckets + src__graph__linker__declarationAstIds --> src__graph__linker__indexTargetBuckets + src__graph__linker__declarationAstIds --> src__graph__linker__indexKeywordBuckets + src__graph__linker__declarationAstIds --> src__graph__linker__isModuleTopicSource + src__graph__linker__declarationAstIds --> src__graph__linker__indexTopicBuckets + src__graph__linker__configurationIds --> src__graph__linker__indexTargetBuckets + src__graph__linker__configurationIds --> src__graph__linker__indexKeywordBuckets + src__graph__linker__configurationIds --> src__graph__linker__isModuleTopicSource + src__graph__linker__configurationIds --> src__graph__linker__indexTopicBuckets + src__graph__linker__indexTargetBuckets --> src__graph__linker__addToBucket + src__graph__linker__indexTargetBuckets --> src__graph__linker__indexAliases + src__graph__linker__indexAliases --> src__graph__linker__aliases + src__graph__linker__indexAliases --> src__graph__linker__addToBucket + src__graph__linker__indexKeywordBuckets --> src__graph__linker__addToBucket + src__graph__linker__indexTopicBuckets --> src__graph__linker__addToBucket + src__graph__linker__addToBucket --> src__graph__linker__set + src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedAstPair + src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedConfigurationPair + src__graph__linker__pairsFromBuckets --> src__graph__linker__set + src__graph__linker__leftId --> src__graph__linker__set + src__graph__linker__rightId --> src__graph__linker__set + src__graph__linker__indexResolvableBasenames --> src__graph__linker__set + src__graph__linker__owners --> src__graph__linker__set + src__graph__linker__pathsIntersect --> src__graph__linker__expand + src__graph__linker__scorePair --> src__graph__linker__intersects + src__graph__linker__scorePair --> src__graph__linker__intersectsAliases + src__graph__linker__scorePair --> src__graph__linker__pathsIntersect + src__graph__linker__scorePair --> src__graph__linker__isFileAggregateEvidencePair + src__graph__linker__scorePair --> src__graph__linker__jaccard + src__graph__linker__scorePair --> src__graph__linker__isModuleTopicEvidencePair + src__graph__linker__scorePair --> src__graph__linker__intersectionSize + src__graph__linker__score --> src__graph__linker__intersects + src__graph__linker__leftKeywords --> src__graph__linker__intersects + src__graph__linker__rightKeywords --> src__graph__linker__intersects + src__graph__linker__resolvedNlAstSymbol --> src__graph__linker__intersectsAliases + src__graph__linker__determineRelation --> src__graph__linker__relationForSourceKinds + src__graph__linker__relationForSourceKinds --> src__graph__linker__matchSourceRule + src__graph__linker__matchSourceRule --> src__graph__linker__orientRelation + src__graph__linker__intersectsAliases --> src__graph__linker__aliases + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__buildNeighbors + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__map + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__indexGroundedImplementationEvidence + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__indexImplementedPaths + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__indexDocumentedPaths + src__graph__diagnostics__neighbors --> src__graph__diagnostics__map + src__graph__diagnostics__neighbors --> src__graph__diagnostics__hasImplementedTarget + src__graph__diagnostics__neighbors --> src__graph__diagnostics__hasDocumentedTarget + src__graph__diagnostics__neighbors --> src__graph__diagnostics__isPlan + src__graph__diagnostics__neighbors --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__neighbors --> src__graph__diagnostics__isPublicImplementation + src__graph__diagnostics__neighbors --> src__graph__diagnostics__isReleaseCandidate + src__graph__diagnostics__recordsById --> src__graph__diagnostics__map + src__graph__diagnostics__recordsById --> src__graph__diagnostics__hasImplementedTarget + src__graph__diagnostics__recordsById --> src__graph__diagnostics__hasDocumentedTarget + src__graph__diagnostics__recordsById --> src__graph__diagnostics__isPlan + src__graph__diagnostics__recordsById --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__recordsById --> src__graph__diagnostics__isPublicImplementation + src__graph__diagnostics__recordsById --> src__graph__diagnostics__isReleaseCandidate + src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__map + src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__hasImplementedTarget + src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__hasDocumentedTarget + src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__isPlan + src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__isPublicImplementation + src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__isReleaseCandidate + src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__map + src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__hasImplementedTarget + src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__hasDocumentedTarget + src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__isPlan + src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__isPublicImplementation + src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__isReleaseCandidate + src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__map + src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__hasImplementedTarget + src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__hasDocumentedTarget + src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__isPlan + src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__isPublicImplementation + src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__isReleaseCandidate + src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__map + src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__hasImplementedTarget + src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__hasDocumentedTarget + src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__isPlan + src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__isPublicImplementation + src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__isReleaseCandidate + src__graph__diagnostics__related --> src__graph__diagnostics__isPlan classDef highCC fill:#ff6b6b,stroke:#c92a2a,color:#fff classDef medCC fill:#ffd43b,stroke:#f08c00,color:#000 - class src__cli__main,src__cli__handleDiff,src__cli__handleExtract,src__web__diff_ui__diffUiHtml,src__web__diff_ui__compareGraphs,src__watch__watcher__DEFAULT_MIN_INTERVAL_MS,src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS,src__watch__watcher__watchRepository,src__tf__classifier__classifyAction,src__synthesis__code_change_plan__proposeCodeChangePlans,src__synthesis__code_change_plan__paths,src__synthesis__code_change_plan__assertCodeChangeReviewPatch,src__synthesis__code_change_plan__assertCodeChangeSourcePatch,src__synthesis__code_change_plan__assertCodeChangeSourcePatchSet,src__synthesis__code_change_plan__normalizeUnifiedDiff,src__synthesis__code_change_plan__applyCodeChangeSourcePatch,src__synthesis__code_change_plan__applyUnifiedDiffToText,src__synthesis__code_change_plan__cursor,src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS,src__synthesis__code_change_path__BINARY_EXTENSIONS,src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES,src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES,src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES,src__synthesis__code_change_path__isPlannablePath,src__services__actions__executeAction,src__services__actions__root,src__services__actions__filterCommunicationGraph,src__semantic__reranker__assertSemanticCandidateSet,src__semantic__reranker__records,src__semantic__reranker__assertSemanticRerankResult highCC - class src__cli__formatWatchEvent,src__cli__stamp,src__cli__mode,src__cli__html,src__cli__context,src__cli__maxRows,src__cli__handleReality,src__cli__handleCommunication,src__cli__parseArgs,src__cli__options,src__web__diff_ui__loadRuns,src__watch__watcher__scanTree,src__watch__watcher__maxFiles,src__watch__watcher__absoluteRoot,src__watch__watcher__visit,src__synthesis__validation__duplicateEvidence,src__synthesis__validation__dependencyFirstPriorityOrder,src__synthesis__todo_patch__createTodoPatch,src__synthesis__todo_patch__applyTodoPatch,src__synthesis__todo_patch__assertTodoPatchArtifact,src__synthesis__tasks_llm__TaskSynthesisAttemptError__synthesizeWithCorrection,src__synthesis__code_change_plan__evaluateCodeChangeAcceptance,src__synthesis__code_change_plan__collectTarget,src__synthesis__code_change_plan__buildChanges,src__synthesis__code_change_plan__titleFor,src__synthesis__code_change_plan__renderCodeChangeReviewMarkdown,src__synthesis__code_change_plan__createCodeChangeSourcePatch,src__synthesis__code_change_plan__createCodeChangeSourcePatchSet,src__synthesis__code_change_plan__assertSourcePatchStrings,src__synthesis__code_change_plan__assertExistingSourceReceipt medCC + class examples__backend__src__server__handleRequest,src__extractors__communication__extractCommunicationFile,src__extractors__communication__inferIdentity,src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited,src__extractors__ast__typescript__extractTypeScriptFile,src__extractors__ast__typescript__visit,src__graph__symbol_resolution__buildSymbolResolutionIndex,src__graph__linker__scorePair,src__graph__diagnostics__diagnoseGraph,src__graph__diagnostics__neighbors,src__graph__diagnostics__recordsById,src__graph__diagnostics__groundedImplementation,src__graph__diagnostics__implementedPaths,src__graph__diagnostics__documentedPaths,src__graph__diagnostics__symbolResolutionIndex,src__services__actions__executeAction,src__services__actions__root,src__services__actions__filterCommunicationGraph,src__tf__classifier__classifyAction,src__core__text__STOP_WORDS,src__core__text__classifyActionHeuristically,src__core__text__normalized,src__core__text__inferObject,src__core__record__buildRecord,src__core__record__generationMetadata,src__core__io__walkFiles,src__core__schema__intent__assertIntentRecord,src__core__schema__utils__assertGroundedGenerationMetadata,src__web__diff_ui__diffUiHtml,src__web__diff_ui__compareGraphs highCC + class rust_ast__src__main__collect_files,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__nl_llm__NlAttemptError__toIntentRecord,src__extractors__nl_llm__NlAttemptError__statementText,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk,src__extractors__changelog__extractChangelog,src__extractors__changelog__changelogAction,src__extractors__docs_deterministic__parseSectionHeading,src__extractors__docs_deterministic__readParagraph,src__extractors__docs_deterministic__cursor,src__extractors__markdown_paths__createMarkdownPathResolver,src__extractors__markdown_paths__repositoryRoot,src__extractors__markdown_paths__basenames,src__extractors__markdown_paths__headingDirectories,src__extractors__markdown_paths__scanDirectoryForBasenames,src__extractors__docs_record__OBJECT_PLACEHOLDERS,src__extractors__docs_record__toDocumentIntentRecord medCC diff --git a/project/planfile-tickets.yaml b/project/planfile-tickets.yaml index 580dc69..77f6b78 100644 --- a/project/planfile-tickets.yaml +++ b/project/planfile-tickets.yaml @@ -1,7 +1,7 @@ source: code2llm -# generated in 0.17s +# generated in 0.18s schema: code2llm.planfile_tickets.v1 -project_root: +project_root: /home/tom/github/semcod/todo2code tickets: - signal: code2llm_cc title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)' @@ -73,23 +73,6 @@ tickets: files: - sdk/go/examples/basic/main.go dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.cli.main (CC=95)' - description: 'code2llm reports `src.cli.main` at `src/cli.ts:53` with cyclomatic - complexity 95 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/cli.ts - dedupe_key: code2llm:cc:src/cli.ts:src.cli.main - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication (CC=48)' @@ -112,7 +95,7 @@ tickets: title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry (CC=30)' description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry` - at `src/communication/identity.ts:51` with cyclomatic complexity 30 (limit 15). + at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -128,7 +111,7 @@ tickets: dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)' - description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:58` + description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104` with cyclomatic complexity 25 (limit 15). @@ -145,7 +128,7 @@ tickets: dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)' - description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:57` + description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103` with cyclomatic complexity 25 (limit 15). @@ -162,7 +145,7 @@ tickets: dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)' - description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:53` + description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99` with cyclomatic complexity 25 (limit 15). @@ -283,46 +266,11 @@ tickets: - src/extractors/ast/typescript.ts dedupe_key: code2llm:cc:src/extractors/ast/typescript.ts:src.extractors.ast.typescript.visit - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.communication.communicationFiles - (CC=72)' - description: 'code2llm reports `src.extractors.communication.communicationFiles` - at `src/extractors/communication.ts:74` with cyclomatic complexity 72 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/communication.ts - dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.communicationFiles -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.communication.extractCommunicationIntent - (CC=76)' - description: 'code2llm reports `src.extractors.communication.extractCommunicationIntent` - at `src/extractors/communication.ts:54` with cyclomatic complexity 76 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/communication.ts - dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.extractCommunicationIntent -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.communication.identityRegistry - (CC=72)' - description: 'code2llm reports `src.extractors.communication.identityRegistry` at - `src/extractors/communication.ts:69` with cyclomatic complexity 72 (limit 15). + title: 'Reduce cyclomatic complexity: src.extractors.communication.extractCommunicationFile + (CC=50)' + description: 'code2llm reports `src.extractors.communication.extractCommunicationFile` + at `src/extractors/communication.ts:102` with cyclomatic complexity 50 (limit + 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -335,7 +283,7 @@ tickets: - refactor files: - src/extractors/communication.ts - dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.identityRegistry + dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.extractCommunicationFile - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.graph.diagnostics.diagnoseGraph (CC=40)' description: 'code2llm reports `src.graph.diagnostics.diagnoseGraph` at `src/graph/diagnostics.ts:16` @@ -458,9 +406,9 @@ tickets: - src/graph/diagnostics.ts dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.symbolResolutionIndex - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=57)' - description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:41` - with cyclomatic complexity 57 (limit 15). + title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)' + description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42` + with cyclomatic complexity 63 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -615,9 +563,9 @@ tickets: - src/operations/validation.ts dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=53)' - description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:55` - with cyclomatic complexity 53 (limit 15). + title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)' + description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56` + with cyclomatic complexity 56 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -650,10 +598,11 @@ tickets: - src/semantic/reranker-llm.ts dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.assertSemanticCandidateSet + title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet (CC=27)' - description: 'code2llm reports `src.semantic.reranker.assertSemanticCandidateSet` - at `src/semantic/reranker.ts:184` with cyclomatic complexity 27 (limit 15). + description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet` + at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit + 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -665,8 +614,8 @@ tickets: - complexity - refactor files: - - src/semantic/reranker.ts - dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.assertSemanticCandidateSet + - src/semantic/reranker/candidate.ts + dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)' description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72` @@ -816,11 +765,11 @@ tickets: - src/synthesis/code-change-path.ts dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.applyCodeChangeSourcePatch + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch (CC=41)' - description: 'code2llm reports `src.synthesis.code-change-plan.applyCodeChangeSourcePatch` - at `src/synthesis/code-change-plan.ts:1031` with cyclomatic complexity 41 (limit - 15). + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` + at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity + 41 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -832,14 +781,14 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.applyCodeChangeSourcePatch + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.applyUnifiedDiffToText + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText (CC=47)' - description: 'code2llm reports `src.synthesis.code-change-plan.applyUnifiedDiffToText` - at `src/synthesis/code-change-plan.ts:1222` with cyclomatic complexity 47 (limit - 15). + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText` + at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity + 47 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -851,14 +800,14 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.applyUnifiedDiffToText + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.assertCodeChangeSourcePatch + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch (CC=47)' - description: 'code2llm reports `src.synthesis.code-change-plan.assertCodeChangeSourcePatch` - at `src/synthesis/code-change-plan.ts:790` with cyclomatic complexity 47 (limit - 15). + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` + at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity + 47 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -870,12 +819,14 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.assertCodeChangeSourcePatch + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.cursor (CC=25)' - description: 'code2llm reports `src.synthesis.code-change-plan.cursor` at `src/synthesis/code-change-plan.ts:1256` - with cyclomatic complexity 25 (limit 15). + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor + (CC=25)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor` + at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity + 25 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -887,8 +838,8 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.cursor + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)' description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1` @@ -907,9 +858,9 @@ tickets: - src/web/diff-ui.ts dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml - signal: code2llm_god - title: 'Split god module: src/communication/llm.ts' - description: 'code2llm reports `src/communication/llm.ts` as a large module (514 - lines, 8 classes). + title: 'Split god module: src/communication/llm/implementation.ts' + description: 'code2llm reports `src/communication/llm/implementation.ts` as a large + module (514 lines, 8 classes). Split it by responsibility, keep public imports stable, and add focused tests @@ -921,12 +872,12 @@ tickets: - god-module - refactor files: - - src/communication/llm.ts - dedupe_key: code2llm:god:src/communication/llm.ts + - src/communication/llm/implementation.ts + dedupe_key: code2llm:god:src/communication/llm/implementation.ts - signal: code2llm_god - title: 'Split god module: src/core/schema.ts' - description: 'code2llm reports `src/core/schema.ts` as a large module (922 lines, - 4 classes). + title: 'Split god module: src/extractors/communication.ts' + description: 'code2llm reports `src/extractors/communication.ts` as a large module + (515 lines, 5 classes). Split it by responsibility, keep public imports stable, and add focused tests @@ -938,12 +889,12 @@ tickets: - god-module - refactor files: - - src/core/schema.ts - dedupe_key: code2llm:god:src/core/schema.ts + - src/extractors/communication.ts + dedupe_key: code2llm:god:src/extractors/communication.ts - signal: code2llm_god - title: 'Split god module: src/core/types.ts' - description: 'code2llm reports `src/core/types.ts` as a large module (673 lines, - 41 classes). + title: 'Split god module: src/synthesis/code-change-plan/implementation.ts' + description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts` + as a large module (1310 lines, 10 classes). Split it by responsibility, keep public imports stable, and add focused tests @@ -955,48 +906,33 @@ tickets: - god-module - refactor files: - - src/core/types.ts - dedupe_key: code2llm:god:src/core/types.ts -- signal: code2llm_god - title: 'Split god module: src/semantic/reranker.ts' - description: 'code2llm reports `src/semantic/reranker.ts` as a large module (509 - lines, 11 classes). + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: decode_envelope' + description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`. - Split it by responsibility, keep public imports stable, and add focused tests - around the moved behavior.' - priority: high - labels: - - llm-ready - - code2llm - - god-module - - refactor - files: - - src/semantic/reranker.ts - dedupe_key: code2llm:god:src/semantic/reranker.ts -- signal: code2llm_god - title: 'Split god module: src/synthesis/code-change-plan.ts' - description: 'code2llm reports `src/synthesis/code-change-plan.ts` as a large module - (1310 lines, 10 classes). + Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28. - Split it by responsibility, keep public imports stable, and add focused tests - around the moved behavior.' + Make the smallest refactor that removes the smell and run local tests.' priority: high labels: - llm-ready - code2llm - - god-module - - refactor + - code-smell + - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:god:src/synthesis/code-change-plan.ts + - src/interfaces/intake_cli.py + dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function: + decode_envelope' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`. + description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`. - Function ''main'' is oversized: CC=11, fan-out=31, mutations=18. + Function ''main'' is oversized: CC=5, fan-out=18, mutations=22. Make the smallest refactor that removes the smell and run local tests.' @@ -1007,8 +943,8 @@ tickets: - code-smell - god-function files: - - sdk/python/examples/basic.py - dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function: + - src/interfaces/intake_cli.py + dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' @@ -1030,31 +966,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God Function: main' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.cli' - description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`. - - - Module ''src.cli'' is too large (152 functions, 1 classes). Consider splitting - into sub-modules. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: high - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.core.schema' - description: 'code2llm reports `God Module: src.core.schema` in `src/core/schema.ts:1`. + title: 'Address code smell: God Function: main' + description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`. - Module ''src.core.schema'' is too large (151 functions, 4 classes). Consider splitting - into sub-modules. + Function ''main'' is oversized: CC=11, fan-out=31, mutations=18. Make the smallest refactor that removes the smell and run local tests.' @@ -1065,14 +981,15 @@ tickets: - code-smell - god-function files: - - src/core/schema.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:1:God Module: src.core.schema' + - sdk/python/examples/basic.py + dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function: + main' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.core.types' - description: 'code2llm reports `God Module: src.core.types` in `src/core/types.ts:1`. + title: 'Address code smell: God Module: src.cli' + description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`. - Module ''src.core.types'' is too large (0 functions, 41 classes). Consider splitting + Module ''src.cli'' is too large (195 functions, 1 classes). Consider splitting into sub-modules. @@ -1084,15 +1001,16 @@ tickets: - code-smell - god-function files: - - src/core/types.ts - dedupe_key: 'code2llm:smell:god_function:src/core/types.ts:1:God Module: src.core.types' + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.synthesis.code-change-plan' - description: 'code2llm reports `God Module: src.synthesis.code-change-plan` in `src/synthesis/code-change-plan.ts:1`. + title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation' + description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation` + in `src/synthesis/code-change-plan/implementation.ts:1`. - Module ''src.synthesis.code-change-plan'' is too large (148 functions, 10 classes). - Consider splitting into sub-modules. + Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions, + 10 classes). Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -1103,9 +1021,9 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:1:God - Module: src.synthesis.code-change-plan' + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God + Module: src.synthesis.code-change-plan.implementation' - signal: code2llm_cc title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest (CC=16)' @@ -1278,9 +1196,11 @@ tickets: - sdk/typescript/examples/basic.ts dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.cli.handleDiff (CC=24)' - description: 'code2llm reports `src.cli.handleDiff` at `src/cli.ts:428` with cyclomatic - complexity 24 (limit 15). + title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope + (CC=18)' + description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope` + at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit + 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1292,12 +1212,14 @@ tickets: - complexity - refactor files: - - src/cli.ts - dedupe_key: code2llm:cc:src/cli.ts:src.cli.handleDiff + - src/communication/intake-contract.ts + dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.cli.handleExtract (CC=16)' - description: 'code2llm reports `src.cli.handleExtract` at `src/cli.ts:518` with - cyclomatic complexity 16 (limit 15). + title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope + (CC=16)' + description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope` + at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit + 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1309,8 +1231,27 @@ tickets: - complexity - refactor files: - - src/cli.ts - dedupe_key: code2llm:cc:src/cli.ts:src.cli.handleExtract + - src/communication/intake-protobuf.ts + dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult + (CC=18)' + description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult` + at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit + 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/communication/intake-protobuf.ts + dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)' description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with @@ -1363,10 +1304,10 @@ tickets: - src/core/record.ts dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.schema.assertGroundedGenerationMetadata + title: 'Reduce cyclomatic complexity: src.core.schema.intent.assertIntentRecord (CC=23)' - description: 'code2llm reports `src.core.schema.assertGroundedGenerationMetadata` - at `src/core/schema.ts:533` with cyclomatic complexity 23 (limit 15). + description: 'code2llm reports `src.core.schema.intent.assertIntentRecord` at `src/core/schema/intent.ts:67` + with cyclomatic complexity 23 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1378,12 +1319,13 @@ tickets: - complexity - refactor files: - - src/core/schema.ts - dedupe_key: code2llm:cc:src/core/schema.ts:src.core.schema.assertGroundedGenerationMetadata + - src/core/schema/intent.ts + dedupe_key: code2llm:cc:src/core/schema/intent.ts:src.core.schema.intent.assertIntentRecord - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.schema.assertIntentRecord (CC=23)' - description: 'code2llm reports `src.core.schema.assertIntentRecord` at `src/core/schema.ts:74` - with cyclomatic complexity 23 (limit 15). + title: 'Reduce cyclomatic complexity: src.core.schema.utils.assertGroundedGenerationMetadata + (CC=23)' + description: 'code2llm reports `src.core.schema.utils.assertGroundedGenerationMetadata` + at `src/core/schema/utils.ts:167` with cyclomatic complexity 23 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1395,8 +1337,8 @@ tickets: - complexity - refactor files: - - src/core/schema.ts - dedupe_key: code2llm:cc:src/core/schema.ts:src.core.schema.assertIntentRecord + - src/core/schema/utils.ts + dedupe_key: code2llm:cc:src/core/schema/utils.ts:src.core.schema.utils.assertGroundedGenerationMetadata - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.core.text.STOP_WORDS (CC=17)' description: 'code2llm reports `src.core.text.STOP_WORDS` at `src/core/text.ts:30` @@ -1468,7 +1410,7 @@ tickets: dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)' - description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:493` + description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503` with cyclomatic complexity 15 (limit 15). @@ -1485,7 +1427,7 @@ tickets: dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)' - description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:439` + description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446` with cyclomatic complexity 15 (limit 15). @@ -1760,7 +1702,7 @@ tickets: - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.extractors.communication.inferIdentity (CC=15)' - description: 'code2llm reports `src.extractors.communication.inferIdentity` at `src/extractors/communication.ts:244` + description: 'code2llm reports `src.extractors.communication.inferIdentity` at `src/extractors/communication.ts:337` with cyclomatic complexity 15 (limit 15). @@ -1775,60 +1717,6 @@ tickets: files: - src/extractors/communication.ts dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.inferIdentity -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.docs-deterministic.convertDocument - (CC=18)' - description: 'code2llm reports `src.extractors.docs-deterministic.convertDocument` - at `src/extractors/docs-deterministic.ts:100` with cyclomatic complexity 18 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/docs-deterministic.ts - dedupe_key: code2llm:cc:src/extractors/docs-deterministic.ts:src.extractors.docs-deterministic.convertDocument -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.docs-deterministic.lines (CC=17)' - description: 'code2llm reports `src.extractors.docs-deterministic.lines` at `src/extractors/docs-deterministic.ts:102` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/docs-deterministic.ts - dedupe_key: code2llm:cc:src/extractors/docs-deterministic.ts:src.extractors.docs-deterministic.lines -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.docs-deterministic.relative - (CC=17)' - description: 'code2llm reports `src.extractors.docs-deterministic.relative` at `src/extractors/docs-deterministic.ts:101` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/docs-deterministic.ts - dedupe_key: code2llm:cc:src/extractors/docs-deterministic.ts:src.extractors.docs-deterministic.relative - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited (CC=19)' @@ -1847,94 +1735,6 @@ tickets: files: - src/extractors/markdown-llm.ts dedupe_key: code2llm:cc:src/extractors/markdown-llm.ts:src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.markdown-paths.base (CC=16)' - description: 'code2llm reports `src.extractors.markdown-paths.base` at `src/extractors/markdown-paths.ts:86` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/markdown-paths.ts - dedupe_key: code2llm:cc:src/extractors/markdown-paths.ts:src.extractors.markdown-paths.base -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.markdown-paths.buildBasenameIndex - (CC=17)' - description: 'code2llm reports `src.extractors.markdown-paths.buildBasenameIndex` - at `src/extractors/markdown-paths.ts:84` with cyclomatic complexity 17 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/markdown-paths.ts - dedupe_key: code2llm:cc:src/extractors/markdown-paths.ts:src.extractors.markdown-paths.buildBasenameIndex -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.markdown-paths.index (CC=16)' - description: 'code2llm reports `src.extractors.markdown-paths.index` at `src/extractors/markdown-paths.ts:85` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/markdown-paths.ts - dedupe_key: code2llm:cc:src/extractors/markdown-paths.ts:src.extractors.markdown-paths.index -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.markdown-paths.seen (CC=16)' - description: 'code2llm reports `src.extractors.markdown-paths.seen` at `src/extractors/markdown-paths.ts:88` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/markdown-paths.ts - dedupe_key: code2llm:cc:src/extractors/markdown-paths.ts:src.extractors.markdown-paths.seen -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.nl-llm.NlAttemptError.toIntentRecord - (CC=18)' - description: 'code2llm reports `src.extractors.nl-llm.NlAttemptError.toIntentRecord` - at `src/extractors/nl-llm.ts:175` with cyclomatic complexity 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/nl-llm.ts - dedupe_key: code2llm:cc:src/extractors/nl-llm.ts:src.extractors.nl-llm.NlAttemptError.toIntentRecord - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.graph.linker.scorePair (CC=18)' description: 'code2llm reports `src.graph.linker.scorePair` at `src/graph/linker.ts:342` @@ -2025,7 +1825,7 @@ tickets: dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)' - description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:497` + description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512` with cyclomatic complexity 19 (limit 15). @@ -2041,10 +1841,11 @@ tickets: - src/pipeline/run.ts dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.acceptedDeclarations + title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations (CC=16)' - description: 'code2llm reports `src.semantic.reranker.acceptedDeclarations` at `src/semantic/reranker.ts:328` - with cyclomatic complexity 16 (limit 15). + description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations` + at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit + 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -2056,13 +1857,13 @@ tickets: - complexity - refactor files: - - src/semantic/reranker.ts - dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.acceptedDeclarations + - src/semantic/reranker/result.ts + dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.assertSemanticRerankResult + title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult (CC=21)' - description: 'code2llm reports `src.semantic.reranker.assertSemanticRerankResult` - at `src/semantic/reranker.ts:311` with cyclomatic complexity 21 (limit 15). + description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult` + at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -2074,11 +1875,11 @@ tickets: - complexity - refactor files: - - src/semantic/reranker.ts - dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.assertSemanticRerankResult + - src/semantic/reranker/result.ts + dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.records (CC=16)' - description: 'code2llm reports `src.semantic.reranker.records` at `src/semantic/reranker.ts:326` + title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)' + description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110` with cyclomatic complexity 16 (limit 15). @@ -2091,11 +1892,12 @@ tickets: - complexity - refactor files: - - src/semantic/reranker.ts - dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.records + - src/semantic/reranker/result.ts + dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.seenDecisions (CC=16)' - description: 'code2llm reports `src.semantic.reranker.seenDecisions` at `src/semantic/reranker.ts:327` + title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions + (CC=16)' + description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111` with cyclomatic complexity 16 (limit 15). @@ -2108,8 +1910,8 @@ tickets: - complexity - refactor files: - - src/semantic/reranker.ts - dedupe_key: code2llm:cc:src/semantic/reranker.ts:src.semantic.reranker.seenDecisions + - src/semantic/reranker/result.ts + dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.services.actions.filterCommunicationGraph (CC=17)' @@ -2129,11 +1931,11 @@ tickets: - src/services/actions.ts dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.filterCommunicationGraph - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.assertCodeChangeReviewPatch + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch (CC=23)' - description: 'code2llm reports `src.synthesis.code-change-plan.assertCodeChangeReviewPatch` - at `src/synthesis/code-change-plan.ts:626` with cyclomatic complexity 23 (limit - 15). + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch` + at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity + 23 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -2145,14 +1947,14 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.assertCodeChangeReviewPatch + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet (CC=18)' - description: 'code2llm reports `src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet` - at `src/synthesis/code-change-plan.ts:896` with cyclomatic complexity 18 (limit - 15). + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet` + at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity + 18 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -2164,14 +1966,14 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.assertCodeChangeSourcePatchSet + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.normalizeUnifiedDiff + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff (CC=17)' - description: 'code2llm reports `src.synthesis.code-change-plan.normalizeUnifiedDiff` - at `src/synthesis/code-change-plan.ts:983` with cyclomatic complexity 17 (limit - 15). + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff` + at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity + 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -2183,12 +1985,14 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.normalizeUnifiedDiff + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.paths (CC=16)' - description: 'code2llm reports `src.synthesis.code-change-plan.paths` at `src/synthesis/code-change-plan.ts:830` - with cyclomatic complexity 16 (limit 15). + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths + (CC=16)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths` + at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity + 16 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -2200,14 +2004,14 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.paths + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.proposeCodeChangePlans + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans (CC=17)' - description: 'code2llm reports `src.synthesis.code-change-plan.proposeCodeChangePlans` - at `src/synthesis/code-change-plan.ts:109` with cyclomatic complexity 17 (limit - 15). + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` + at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity + 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -2219,8 +2023,8 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan.ts:src.synthesis.code-change-plan.proposeCodeChangePlans + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.tf.classifier.classifyAction (CC=17)' description: 'code2llm reports `src.tf.classifier.classifyAction` at `src/tf/classifier.ts:69` @@ -2309,12 +2113,12 @@ tickets: - src/web/diff-ui.ts dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo' - description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self, - todo` in `sdk/python/todo2code/client.py:332`. + title: 'Address code smell: Data Clump: markdown_mode, root, changelog, todo, self' + description: 'code2llm reports `Data Clump: markdown_mode, root, changelog, todo, + self` in `sdk/python/todo2code/client.py:332`. - Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple + Arguments (markdown_mode, root, changelog, todo, self) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. @@ -2328,14 +2132,14 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: - root, markdown_mode, changelog, self, todo' + markdown_mode, root, changelog, todo, self' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo' - description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self, - todo` in `sdk/python/todo2code/client.py:341`. + title: 'Address code smell: Data Clump: markdown_mode, root, changelog, todo, self' + description: 'code2llm reports `Data Clump: markdown_mode, root, changelog, todo, + self` in `sdk/python/todo2code/client.py:341`. - Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple + Arguments (markdown_mode, root, changelog, todo, self) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. @@ -2349,7 +2153,7 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: - root, markdown_mode, changelog, self, todo' + markdown_mode, root, changelog, todo, self' - signal: code2llm_smell_data_clump title: 'Address code smell: Data Clump: self, action, payload' description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`. @@ -2391,11 +2195,11 @@ tickets: dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: self, action, payload' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, excludes, patterns' - description: 'code2llm reports `Data Clump: self, root, excludes, patterns` in `sdk/python/todo2code/client.py:354`. + title: 'Address code smell: Data Clump: self, patterns, root, excludes' + description: 'code2llm reports `Data Clump: self, patterns, root, excludes` in `sdk/python/todo2code/client.py:354`. - Arguments (self, root, excludes, patterns) are used together in multiple functions: + Arguments (self, patterns, root, excludes) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. @@ -2409,13 +2213,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: - self, root, excludes, patterns' + self, patterns, root, excludes' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, excludes, patterns' - description: 'code2llm reports `Data Clump: self, root, excludes, patterns` in `sdk/python/todo2code/client.py:362`. + title: 'Address code smell: Data Clump: self, patterns, root, excludes' + description: 'code2llm reports `Data Clump: self, patterns, root, excludes` in `sdk/python/todo2code/client.py:362`. - Arguments (self, root, excludes, patterns) are used together in multiple functions: + Arguments (self, patterns, root, excludes) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. @@ -2429,13 +2233,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: - self, root, excludes, patterns' + self, patterns, root, excludes' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, nl_mode, file' - description: 'code2llm reports `Data Clump: self, root, nl_mode, file` in `sdk/python/todo2code/client.py:307`. + title: 'Address code smell: Data Clump: self, root, file, nl_mode' + description: 'code2llm reports `Data Clump: self, root, file, nl_mode` in `sdk/python/todo2code/client.py:307`. - Arguments (self, root, nl_mode, file) are used together in multiple functions: + Arguments (self, root, file, nl_mode) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. @@ -2449,13 +2253,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: - self, root, nl_mode, file' + self, root, file, nl_mode' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, nl_mode, file' - description: 'code2llm reports `Data Clump: self, root, nl_mode, file` in `sdk/python/todo2code/client.py:312`. + title: 'Address code smell: Data Clump: self, root, file, nl_mode' + description: 'code2llm reports `Data Clump: self, root, file, nl_mode` in `sdk/python/todo2code/client.py:312`. - Arguments (self, root, nl_mode, file) are used together in multiple functions: + Arguments (self, root, file, nl_mode) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. @@ -2469,13 +2273,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: - self, root, nl_mode, file' + self, root, file, nl_mode' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: MAX_INDEXED_FILES' - description: 'code2llm reports `God Function: MAX_INDEXED_FILES` in `src/extractors/markdown-paths.ts:31`. + title: 'Address code smell: God Function: MAX_PER_SECTION' + description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`. - Function ''MAX_INDEXED_FILES'' is oversized: CC=12, fan-out=12, mutations=0. + Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2486,9 +2290,9 @@ tickets: - code-smell - god-function files: - - src/extractors/markdown-paths.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:31:God - Function: MAX_INDEXED_FILES' + - src/extractors/runtime-cycle.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God + Function: MAX_PER_SECTION' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS' description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`. @@ -2527,11 +2331,11 @@ tickets: - src/core/text.ts dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:343:God Function: PATH_ROOTS' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: PATH_SEARCH_EXCLUDES' - description: 'code2llm reports `God Function: PATH_SEARCH_EXCLUDES` in `src/extractors/markdown-paths.ts:25`. + title: 'Address code smell: God Function: RPC' + description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`. - Function ''PATH_SEARCH_EXCLUDES'' is oversized: CC=12, fan-out=12, mutations=0. + Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2542,27 +2346,8 @@ tickets: - code-smell - god-function files: - - src/extractors/markdown-paths.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:25:God - Function: PATH_SEARCH_EXCLUDES' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: RPC' - description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`. - - - Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - sdk/go/client.go - dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC' + - sdk/go/client.go + dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: absolute' description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`. @@ -2661,7 +2446,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyAcceptedSemanticRelations' description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in - `src/semantic/reranker.ts:372`. + `src/semantic/reranker/result.ts:179`. Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0. @@ -2675,9 +2460,9 @@ tickets: - code-smell - god-function files: - - src/semantic/reranker.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker.ts:372:God Function: - applyAcceptedSemanticRelations' + - src/semantic/reranker/result.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God + Function: applyAcceptedSemanticRelations' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyTodoPatch' description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`. @@ -2700,7 +2485,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertAcyclicProposalDependencies' description: 'code2llm reports `God Function: assertAcyclicProposalDependencies` - in `src/core/schema.ts:853`. + in `src/core/schema/utils.ts:96`. Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11, @@ -2715,11 +2500,12 @@ tickets: - code-smell - god-function files: - - src/core/schema.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:853:God Function: assertAcyclicProposalDependencies' + - src/core/schema/utils.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function: + assertAcyclicProposalDependencies' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertCodeChangeAcceptance' - description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema.ts:408`. + description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`. Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0. @@ -2733,14 +2519,34 @@ tickets: - code-smell - god-function files: - - src/core/schema.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:408:God Function: assertCodeChangeAcceptance' + - src/core/schema/code-change.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God + Function: assertCodeChangeAcceptance' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: assertCommand' + description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`. + + + Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-contract.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God + Function: assertCommand' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertConclusionValue' - description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema.ts:462`. + description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`. - Function ''assertConclusionValue'' is oversized: CC=5, fan-out=11, mutations=0. + Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2751,11 +2557,12 @@ tickets: - code-smell - god-function files: - - src/core/schema.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:462:God Function: assertConclusionValue' + - src/core/schema/conclusions.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function: + assertConclusionValue' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertIntentGraph' - description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema.ts:194`. + description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:187`. Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0. @@ -2769,11 +2576,12 @@ tickets: - code-smell - god-function files: - - src/core/schema.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:194:God Function: assertIntentGraph' + - src/core/schema/intent.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:187:God Function: + assertIntentGraph' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertIntentGraphDiff' - description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema.ts:223`. + description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:216`. Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0. @@ -2787,11 +2595,50 @@ tickets: - code-smell - god-function files: - - src/core/schema.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:223:God Function: assertIntentGraphDiff' + - src/core/schema/intent.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:216:God Function: + assertIntentGraphDiff' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: assertParticipant' + description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`. + + + Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-contract.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God + Function: assertParticipant' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: assertProjectionWritable' + description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`. + + + Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-service.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God + Function: assertProjectionWritable' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertSourceApplyReceipt' - description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan.ts:1180`. + description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`. Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0. @@ -2805,8 +2652,8 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:1180:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God Function: assertSourceApplyReceipt' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertTodoPatchArtifact' @@ -2829,10 +2676,10 @@ tickets: assertTodoPatchArtifact' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertTodoProposalValue' - description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema.ts:489`. + description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`. - Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=17, mutations=0. + Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2843,8 +2690,9 @@ tickets: - code-smell - god-function files: - - src/core/schema.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:489:God Function: assertTodoProposalValue' + - src/core/schema/conclusions.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God + Function: assertTodoProposalValue' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: atomicWrite' description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`. @@ -2922,10 +2770,10 @@ tickets: block' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: body' - description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`. + description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`. - Function ''body'' is oversized: CC=5, fan-out=20, mutations=0. + Function ''body'' is oversized: CC=2, fan-out=14, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2936,15 +2784,14 @@ tickets: - code-smell - god-function files: - - src/extractors/todo.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function: - body' + - src/extractors/nl.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: body' - description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`. + description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`. - Function ''body'' is oversized: CC=2, fan-out=14, mutations=0. + Function ''body'' is oversized: CC=7, fan-out=15, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2955,14 +2802,15 @@ tickets: - code-smell - god-function files: - - src/extractors/nl.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body' + - src/extractors/changelog.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function: + body' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: body' - description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`. + description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`. - Function ''body'' is oversized: CC=7, fan-out=15, mutations=0. + Function ''body'' is oversized: CC=5, fan-out=20, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2973,12 +2821,12 @@ tickets: - code-smell - god-function files: - - src/extractors/changelog.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function: + - src/extractors/todo.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function: body' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: byDeclaration' - description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker.ts:205`. + description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`. Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0. @@ -2992,12 +2840,12 @@ tickets: - code-smell - god-function files: - - src/semantic/reranker.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker.ts:205:God Function: - byDeclaration' + - src/semantic/reranker/candidate.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God + Function: byDeclaration' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: byKey' - description: 'code2llm reports `God Function: byKey` in `src/communication/llm.ts:303`. + description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation.ts:303`. Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0. @@ -3011,12 +2859,12 @@ tickets: - code-smell - god-function files: - - src/communication/llm.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm.ts:303:God Function: - byKey' + - src/communication/llm/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:303:God + Function: byKey' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: candidates' - description: 'code2llm reports `God Function: candidates` in `src/synthesis/code-change-plan.ts:124`. + description: 'code2llm reports `God Function: candidates` in `src/synthesis/code-change-plan/implementation.ts:124`. Function ''candidates'' is oversized: CC=7, fan-out=18, mutations=0. @@ -3030,12 +2878,12 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:124:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:124:God Function: candidates' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: changePaths' - description: 'code2llm reports `God Function: changePaths` in `src/core/schema.ts:702`. + description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`. Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0. @@ -3049,8 +2897,9 @@ tickets: - code-smell - god-function files: - - src/core/schema.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:702:God Function: changePaths' + - src/core/schema/code-change.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God + Function: changePaths' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: checked' description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`. @@ -3091,7 +2940,7 @@ tickets: classified' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: closeCodeChanges' - description: 'code2llm reports `God Function: closeCodeChanges` in `src/synthesis/code-change-plan.ts:298`. + description: 'code2llm reports `God Function: closeCodeChanges` in `src/synthesis/code-change-plan/implementation.ts:298`. Function ''closeCodeChanges'' is oversized: CC=6, fan-out=13, mutations=0. @@ -3105,8 +2954,8 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:298:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:298:God Function: closeCodeChanges' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: collect' @@ -3167,7 +3016,7 @@ tickets: communicationOnly' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: communicationSegments' - description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication.ts:298`. + description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication.ts:391`. Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0. @@ -3182,7 +3031,7 @@ tickets: - god-function files: - src/extractors/communication.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/communication.ts:298:God + dedupe_key: 'code2llm:smell:god_function:src/extractors/communication.ts:391:God Function: communicationSegments' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: compareWorkspaceIntent' @@ -3225,7 +3074,7 @@ tickets: compileSubactorProcessEnvelope' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: conclusions' - description: 'code2llm reports `God Function: conclusions` in `src/synthesis/code-change-plan.ts:118`. + description: 'code2llm reports `God Function: conclusions` in `src/synthesis/code-change-plan/implementation.ts:118`. Function ''conclusions'' is oversized: CC=7, fan-out=18, mutations=0. @@ -3239,12 +3088,12 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:118:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:118:God Function: conclusions' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: conclusionsByDiagnostic' - description: 'code2llm reports `God Function: conclusionsByDiagnostic` in `src/synthesis/code-change-plan.ts:122`. + description: 'code2llm reports `God Function: conclusionsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:122`. Function ''conclusionsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0. @@ -3258,8 +3107,8 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:122:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:122:God Function: conclusionsByDiagnostic' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: configurationRecords' @@ -3282,7 +3131,7 @@ tickets: Function: configurationRecords' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createCodeChangeReviewPatch' - description: 'code2llm reports `God Function: createCodeChangeReviewPatch` in `src/synthesis/code-change-plan.ts:547`. + description: 'code2llm reports `God Function: createCodeChangeReviewPatch` in `src/synthesis/code-change-plan/implementation.ts:547`. Function ''createCodeChangeReviewPatch'' is oversized: CC=6, fan-out=15, mutations=0. @@ -3296,12 +3145,12 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:547:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:547:God Function: createCodeChangeReviewPatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createCodeChangeSourcePatch' - description: 'code2llm reports `God Function: createCodeChangeSourcePatch` in `src/synthesis/code-change-plan.ts:698`. + description: 'code2llm reports `God Function: createCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation.ts:698`. Function ''createCodeChangeSourcePatch'' is oversized: CC=13, fan-out=20, mutations=0. @@ -3315,13 +3164,13 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:698:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:698:God Function: createCodeChangeSourcePatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createCodeChangeSourcePatchSet' description: 'code2llm reports `God Function: createCodeChangeSourcePatchSet` in - `src/synthesis/code-change-plan.ts:759`. + `src/synthesis/code-change-plan/implementation.ts:759`. Function ''createCodeChangeSourcePatchSet'' is oversized: CC=8, fan-out=11, mutations=0. @@ -3335,12 +3184,12 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:759:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:759:God Function: createCodeChangeSourcePatchSet' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createMarkdownPathResolver' - description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:33`. + description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`. Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0. @@ -3355,11 +3204,11 @@ tickets: - god-function files: - src/extractors/markdown-paths.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:33:God + dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God Function: createMarkdownPathResolver' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createSemanticCandidateSet' - description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker.ts:113`. + description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`. Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0. @@ -3373,12 +3222,12 @@ tickets: - code-smell - god-function files: - - src/semantic/reranker.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker.ts:113:God Function: - createSemanticCandidateSet' + - src/semantic/reranker/candidate.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:16:God + Function: createSemanticCandidateSet' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createSemanticRerankResult' - description: 'code2llm reports `God Function: createSemanticRerankResult` in `src/semantic/reranker.ts:251`. + description: 'code2llm reports `God Function: createSemanticRerankResult` in `src/semantic/reranker/result.ts:23`. Function ''createSemanticRerankResult'' is oversized: CC=4, fan-out=11, mutations=0. @@ -3392,9 +3241,9 @@ tickets: - code-smell - god-function files: - - src/semantic/reranker.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker.ts:251:God Function: - createSemanticRerankResult' + - src/semantic/reranker/result.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:23:God + Function: createSemanticRerankResult' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createTodoPatch' description: 'code2llm reports `God Function: createTodoPatch` in `src/synthesis/todo-patch.ts:69`. @@ -3451,6 +3300,25 @@ tickets: files: - src/graph/diff.ts dedupe_key: 'code2llm:smell:god_function:src/graph/diff.ts:16:God Function: diffIntentGraphs' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: encode_envelope' + description: 'code2llm reports `God Function: encode_envelope` in `src/interfaces/intake_cli.py:55`. + + + Function ''encode_envelope'' is oversized: CC=6, fan-out=11, mutations=11. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/interfaces/intake_cli.py + dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:55:God Function: + encode_envelope' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: enrichBatchCovering' description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm.ts:161`. @@ -3491,7 +3359,7 @@ tickets: Function: enrichRecord' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: evaluateCodeChangeAcceptance' - description: 'code2llm reports `God Function: evaluateCodeChangeAcceptance` in `src/synthesis/code-change-plan.ts:224`. + description: 'code2llm reports `God Function: evaluateCodeChangeAcceptance` in `src/synthesis/code-change-plan/implementation.ts:224`. Function ''evaluateCodeChangeAcceptance'' is oversized: CC=9, fan-out=18, mutations=0. @@ -3505,8 +3373,8 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:224:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:224:God Function: evaluateCodeChangeAcceptance' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: evaluateDiagnosticsCase' @@ -3624,7 +3492,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractCommunicationIntentAudited' description: 'code2llm reports `God Function: extractCommunicationIntentAudited` - in `src/communication/llm.ts:86`. + in `src/communication/llm/implementation.ts:86`. Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23, @@ -3639,9 +3507,9 @@ tickets: - code-smell - god-function files: - - src/communication/llm.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm.ts:86:God Function: - extractCommunicationIntentAudited' + - src/communication/llm/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:86:God + Function: extractCommunicationIntentAudited' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractDocumentationIntent' description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`. @@ -3661,25 +3529,6 @@ tickets: - src/extractors/docs-llm.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-llm.ts:45:God Function: extractDocumentationIntent' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: extractGitIntent' - description: 'code2llm reports `God Function: extractGitIntent` in `src/extractors/git.ts:31`. - - - Function ''extractGitIntent'' is oversized: CC=13, fan-out=21, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/extractors/git.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:31:God Function: - extractGitIntent' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractNlIntent' description: 'code2llm reports `God Function: extractNlIntent` in `src/extractors/nl.ts:38`. @@ -3755,6 +3604,44 @@ tickets: - src/extractors/ast/python.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/python.ts:11:God Function: extractPythonAst' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: extractRepositoryGitIntent' + description: 'code2llm reports `God Function: extractRepositoryGitIntent` in `src/extractors/git.ts:74`. + + + Function ''extractRepositoryGitIntent'' is oversized: CC=11, fan-out=21, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/extractors/git.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:74:God Function: + extractRepositoryGitIntent' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: extractRuntimeCycleIntent' + description: 'code2llm reports `God Function: extractRuntimeCycleIntent` in `src/extractors/runtime-cycle.ts:29`. + + + Function ''extractRuntimeCycleIntent'' is oversized: CC=8, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/extractors/runtime-cycle.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:29:God + Function: extractRuntimeCycleIntent' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractSymbols' description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:412`. @@ -3851,7 +3738,7 @@ tickets: Function: graph' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleCommunication' - description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:583`. + description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:632`. Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0. @@ -3866,10 +3753,82 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:583:God Function: handleCommunication' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:632:God Function: handleCommunication' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: handleDiff' + description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:437`. + + + Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:437:God Function: handleDiff' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: handleGraphDiff' + description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:463`. + + + Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:463:God Function: handleGraphDiff' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: handleIntake' + description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:672`. + + + Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:672:God Function: handleIntake' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: handlePipeline' + description: 'code2llm reports `God Function: handlePipeline` in `src/cli.ts:345`. + + + Function ''handlePipeline'' is oversized: CC=4, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:345:God Function: handlePipeline' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleReality' - description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:492`. + description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:520`. Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0. @@ -3884,10 +3843,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:492:God Function: handleReality' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:520:God Function: handleReality' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleWatch' - description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:366`. + description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:374`. Function ''handleWatch'' is oversized: CC=6, fan-out=18, mutations=0. @@ -3902,7 +3861,7 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:366:God Function: handleWatch' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:374:God Function: handleWatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: ignored' description: 'code2llm reports `God Function: ignored` in `src/core/io.ts:88`. @@ -3996,10 +3955,10 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:361:God Function: isPathLike' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: lines' - description: 'code2llm reports `God Function: lines` in `src/extractors/todo.ts:32`. + description: 'code2llm reports `God Function: lines` in `src/extractors/changelog.ts:30`. - Function ''lines'' is oversized: CC=5, fan-out=20, mutations=0. + Function ''lines'' is oversized: CC=7, fan-out=15, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4010,15 +3969,15 @@ tickets: - code-smell - god-function files: - - src/extractors/todo.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:32:God Function: + - src/extractors/changelog.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:30:God Function: lines' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: lines' - description: 'code2llm reports `God Function: lines` in `src/extractors/changelog.ts:30`. + description: 'code2llm reports `God Function: lines` in `src/extractors/todo.ts:32`. - Function ''lines'' is oversized: CC=7, fan-out=15, mutations=0. + Function ''lines'' is oversized: CC=5, fan-out=20, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4029,8 +3988,8 @@ tickets: - code-smell - god-function files: - - src/extractors/changelog.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:30:God Function: + - src/extractors/todo.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:32:God Function: lines' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: linkIntentRecords' @@ -4090,7 +4049,7 @@ tickets: listIntentRuns' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: listTasks' - description: 'code2llm reports `God Function: listTasks` in `src/interfaces/a2a-task-store.ts:397`. + description: 'code2llm reports `God Function: listTasks` in `src/interfaces/a2a-task-store.ts:444`. Function ''listTasks'' is oversized: CC=9, fan-out=14, mutations=0. @@ -4105,7 +4064,7 @@ tickets: - god-function files: - src/interfaces/a2a-task-store.ts - dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-task-store.ts:397:God + dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-task-store.ts:444:God Function: listTasks' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: llm' @@ -4183,10 +4142,10 @@ tickets: Function: local' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `src/evaluation/gold-cli.ts:11`. + description: 'code2llm reports `God Function: main` in `rust-ast/src/main.rs:36`. - Function ''main'' is oversized: CC=12, fan-out=15, mutations=0. + Function ''main'' is oversized: CC=6, fan-out=21, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4197,15 +4156,14 @@ tickets: - code-smell - god-function files: - - src/evaluation/gold-cli.ts - dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cli.ts:11:God Function: - main' + - rust-ast/src/main.rs + dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:36:God Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `scripts/live-model-comparison.mjs:27`. + description: 'code2llm reports `God Function: main` in `java/JavaAstExtract.java:21`. - Function ''main'' is oversized: CC=13, fan-out=22, mutations=0. + Function ''main'' is oversized: CC=10, fan-out=16, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4216,15 +4174,15 @@ tickets: - code-smell - god-function files: - - scripts/live-model-comparison.mjs - dedupe_key: 'code2llm:smell:god_function:scripts/live-model-comparison.mjs:27:God - Function: main' + - java/JavaAstExtract.java + dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:21:God Function: + main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `scripts/live-contract-check.mjs:41`. + description: 'code2llm reports `God Function: main` in `src/evaluation/gold-cli.ts:11`. - Function ''main'' is oversized: CC=5, fan-out=16, mutations=0. + Function ''main'' is oversized: CC=12, fan-out=15, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4235,15 +4193,15 @@ tickets: - code-smell - god-function files: - - scripts/live-contract-check.mjs - dedupe_key: 'code2llm:smell:god_function:scripts/live-contract-check.mjs:41:God - Function: main' + - src/evaluation/gold-cli.ts + dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cli.ts:11:God Function: + main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `rust-ast/src/main.rs:36`. + description: 'code2llm reports `God Function: main` in `golang/ast_extract.go:53`. - Function ''main'' is oversized: CC=6, fan-out=21, mutations=0. + Function ''main'' is oversized: CC=14, fan-out=14, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4254,14 +4212,15 @@ tickets: - code-smell - god-function files: - - rust-ast/src/main.rs - dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:36:God Function: main' + - golang/ast_extract.go + dedupe_key: 'code2llm:smell:god_function:golang/ast_extract.go:53:God Function: + main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `python/ast_extract.py:195`. + description: 'code2llm reports `God Function: main` in `scripts/live-model-comparison.mjs:27`. - Function ''main'' is oversized: CC=4, fan-out=19, mutations=12. + Function ''main'' is oversized: CC=13, fan-out=22, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4272,15 +4231,15 @@ tickets: - code-smell - god-function files: - - python/ast_extract.py - dedupe_key: 'code2llm:smell:god_function:python/ast_extract.py:195:God Function: - main' + - scripts/live-model-comparison.mjs + dedupe_key: 'code2llm:smell:god_function:scripts/live-model-comparison.mjs:27:God + Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `java/JavaAstExtract.java:21`. + description: 'code2llm reports `God Function: main` in `scripts/live-contract-check.mjs:41`. - Function ''main'' is oversized: CC=10, fan-out=16, mutations=0. + Function ''main'' is oversized: CC=5, fan-out=16, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4291,15 +4250,15 @@ tickets: - code-smell - god-function files: - - java/JavaAstExtract.java - dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:21:God Function: - main' + - scripts/live-contract-check.mjs + dedupe_key: 'code2llm:smell:god_function:scripts/live-contract-check.mjs:41:God + Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `golang/ast_extract.go:53`. + description: 'code2llm reports `God Function: main` in `python/ast_extract.py:195`. - Function ''main'' is oversized: CC=14, fan-out=14, mutations=0. + Function ''main'' is oversized: CC=4, fan-out=19, mutations=12. Make the smallest refactor that removes the smell and run local tests.' @@ -4310,9 +4269,27 @@ tickets: - code-smell - god-function files: - - golang/ast_extract.go - dedupe_key: 'code2llm:smell:god_function:golang/ast_extract.go:53:God Function: + - python/ast_extract.py + dedupe_key: 'code2llm:smell:god_function:python/ast_extract.py:195:God Function: main' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: main' + description: 'code2llm reports `God Function: main` in `src/cli.ts:61`. + + + Function ''main'' is oversized: CC=9, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:61:God Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: matcher' description: 'code2llm reports `God Function: matcher` in `src/core/io.ts:91`. @@ -4352,7 +4329,7 @@ tickets: matchesRunFilters' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: materializeSyntheses' - description: 'code2llm reports `God Function: materializeSyntheses` in `src/communication/llm.ts:296`. + description: 'code2llm reports `God Function: materializeSyntheses` in `src/communication/llm/implementation.ts:296`. Function ''materializeSyntheses'' is oversized: CC=9, fan-out=14, mutations=0. @@ -4366,9 +4343,9 @@ tickets: - code-smell - god-function files: - - src/communication/llm.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm.ts:296:God Function: - materializeSyntheses' + - src/communication/llm/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:296:God + Function: materializeSyntheses' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: materializeTaskSynthesisResponse' description: 'code2llm reports `God Function: materializeTaskSynthesisResponse` @@ -4392,10 +4369,10 @@ tickets: Function: materializeTaskSynthesisResponse' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: maxFiles' - description: 'code2llm reports `God Function: maxFiles` in `src/watch/watcher.ts:38`. + description: 'code2llm reports `God Function: maxFiles` in `src/core/io.ts:90`. - Function ''maxFiles'' is oversized: CC=11, fan-out=14, mutations=0. + Function ''maxFiles'' is oversized: CC=11, fan-out=16, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4406,14 +4383,14 @@ tickets: - code-smell - god-function files: - - src/watch/watcher.ts - dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:38:God Function: maxFiles' + - src/core/io.ts + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:90:God Function: maxFiles' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: maxFiles' - description: 'code2llm reports `God Function: maxFiles` in `src/core/io.ts:90`. + description: 'code2llm reports `God Function: maxFiles` in `src/watch/watcher.ts:38`. - Function ''maxFiles'' is oversized: CC=11, fan-out=16, mutations=0. + Function ''maxFiles'' is oversized: CC=11, fan-out=14, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4424,8 +4401,8 @@ tickets: - code-smell - god-function files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:90:God Function: maxFiles' + - src/watch/watcher.ts + dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:38:God Function: maxFiles' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: measureStage' description: 'code2llm reports `God Function: measureStage` in `src/live/contract-check.ts:115`. @@ -4464,6 +4441,27 @@ tickets: - src/extractors/ast/records.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/records.ts:34:God Function: moduleRecords' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: normalizeParticipantIdentityRegistry' + description: 'code2llm reports `God Function: normalizeParticipantIdentityRegistry` + in `src/communication/identity.ts:53`. + + + Function ''normalizeParticipantIdentityRegistry'' is oversized: CC=12, fan-out=12, + mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/identity.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/identity.ts:53:God Function: + normalizeParticipantIdentityRegistry' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: object' description: 'code2llm reports `God Function: object` in `src/llm/structured-schema.ts:155`. @@ -4485,7 +4483,7 @@ tickets: object' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: options' - description: 'code2llm reports `God Function: options` in `src/cli.ts:668`. + description: 'code2llm reports `God Function: options` in `src/cli.ts:747`. Function ''options'' is oversized: CC=13, fan-out=5, mutations=0. @@ -4500,10 +4498,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:668:God Function: options' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:747:God Function: options' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: output' - description: 'code2llm reports `God Function: output` in `src/communication/llm.ts:305`. + description: 'code2llm reports `God Function: output` in `src/communication/llm/implementation.ts:305`. Function ''output'' is oversized: CC=6, fan-out=11, mutations=0. @@ -4517,15 +4515,15 @@ tickets: - code-smell - god-function files: - - src/communication/llm.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm.ts:305:God Function: - output' + - src/communication/llm/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:305:God + Function: output' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parseArgs' - description: 'code2llm reports `God Function: parseArgs` in `src/cli.ts:666`. + description: 'code2llm reports `God Function: parseArgs` in `scripts/research/rerank-embedding-shortlist.mjs:164`. - Function ''parseArgs'' is oversized: CC=13, fan-out=5, mutations=0. + Function ''parseArgs'' is oversized: CC=14, fan-out=11, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4536,14 +4534,15 @@ tickets: - code-smell - god-function files: - - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:666:God Function: parseArgs' + - scripts/research/rerank-embedding-shortlist.mjs + dedupe_key: 'code2llm:smell:god_function:scripts/research/rerank-embedding-shortlist.mjs:164:God + Function: parseArgs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parseArgs' - description: 'code2llm reports `God Function: parseArgs` in `scripts/research/rerank-embedding-shortlist.mjs:164`. + description: 'code2llm reports `God Function: parseArgs` in `src/cli.ts:745`. - Function ''parseArgs'' is oversized: CC=14, fan-out=11, mutations=0. + Function ''parseArgs'' is oversized: CC=13, fan-out=5, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4554,12 +4553,11 @@ tickets: - code-smell - god-function files: - - scripts/research/rerank-embedding-shortlist.mjs - dedupe_key: 'code2llm:smell:god_function:scripts/research/rerank-embedding-shortlist.mjs:164:God - Function: parseArgs' + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:745:God Function: parseArgs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parse_args' - description: 'code2llm reports `God Function: parse_args` in `scripts/research/rank-intent-graph-embeddings.py:15`. + description: 'code2llm reports `God Function: parse_args` in `scripts/research/evaluate-embedding-pairs.py:14`. Function ''parse_args'' is oversized: CC=1, fan-out=3, mutations=8. @@ -4573,12 +4571,12 @@ tickets: - code-smell - god-function files: - - scripts/research/rank-intent-graph-embeddings.py - dedupe_key: 'code2llm:smell:god_function:scripts/research/rank-intent-graph-embeddings.py:15:God + - scripts/research/evaluate-embedding-pairs.py + dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:14:God Function: parse_args' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parse_args' - description: 'code2llm reports `God Function: parse_args` in `scripts/research/evaluate-embedding-pairs.py:14`. + description: 'code2llm reports `God Function: parse_args` in `scripts/research/rank-intent-graph-embeddings.py:15`. Function ''parse_args'' is oversized: CC=1, fan-out=3, mutations=8. @@ -4592,8 +4590,8 @@ tickets: - code-smell - god-function files: - - scripts/research/evaluate-embedding-pairs.py - dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:14:God + - scripts/research/rank-intent-graph-embeddings.py + dedupe_key: 'code2llm:smell:god_function:scripts/research/rank-intent-graph-embeddings.py:15:God Function: parse_args' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parse_base_url' @@ -4635,7 +4633,7 @@ tickets: participant' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: participantGroups' - description: 'code2llm reports `God Function: participantGroups` in `src/communication/llm.ts:241`. + description: 'code2llm reports `God Function: participantGroups` in `src/communication/llm/implementation.ts:241`. Function ''participantGroups'' is oversized: CC=10, fan-out=12, mutations=0. @@ -4649,12 +4647,12 @@ tickets: - code-smell - god-function files: - - src/communication/llm.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm.ts:241:God Function: - participantGroups' + - src/communication/llm/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:241:God + Function: participantGroups' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: primaryTargetKey' - description: 'code2llm reports `God Function: primaryTargetKey` in `src/diff/reality.ts:379`. + description: 'code2llm reports `God Function: primaryTargetKey` in `src/diff/reality.ts:386`. Function ''primaryTargetKey'' is oversized: CC=14, fan-out=9, mutations=0. @@ -4669,10 +4667,10 @@ tickets: - god-function files: - src/diff/reality.ts - dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:379:God Function: primaryTargetKey' + dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:386:God Function: primaryTargetKey' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: proposals' - description: 'code2llm reports `God Function: proposals` in `src/synthesis/code-change-plan.ts:119`. + description: 'code2llm reports `God Function: proposals` in `src/synthesis/code-change-plan/implementation.ts:119`. Function ''proposals'' is oversized: CC=7, fan-out=18, mutations=0. @@ -4686,12 +4684,12 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:119:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:119:God Function: proposals' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: proposalsByDiagnostic' - description: 'code2llm reports `God Function: proposalsByDiagnostic` in `src/synthesis/code-change-plan.ts:121`. + description: 'code2llm reports `God Function: proposalsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:121`. Function ''proposalsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0. @@ -4705,9 +4703,28 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:121:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:121:God Function: proposalsByDiagnostic' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: read' + description: 'code2llm reports `God Function: read` in `src/communication/intake-store.ts:60`. + + + Function ''read'' is oversized: CC=11, fan-out=17, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-store.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-store.ts:60:God + Function: read' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: readCommunicationSummary' description: 'code2llm reports `God Function: readCommunicationSummary` in `src/interfaces/a2a-history.ts:155`. @@ -4746,9 +4763,28 @@ tickets: - src/services/actions.ts dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:517:God Function: records' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: records' + description: 'code2llm reports `God Function: records` in `src/semantic/reranker/candidate.ts:120`. + + + Function ''records'' is oversized: CC=14, fan-out=9, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/semantic/reranker/candidate.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:120:God + Function: records' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: recordsById' - description: 'code2llm reports `God Function: recordsById` in `src/synthesis/code-change-plan.ts:120`. + description: 'code2llm reports `God Function: recordsById` in `src/synthesis/code-change-plan/implementation.ts:120`. Function ''recordsById'' is oversized: CC=7, fan-out=18, mutations=0. @@ -4762,8 +4798,8 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan.ts:120:God + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:120:God Function: recordsById' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: registerRunArtifacts' @@ -4786,10 +4822,10 @@ tickets: registerRunArtifacts' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: relative' - description: 'code2llm reports `God Function: relative` in `src/extractors/todo.ts:29`. + description: 'code2llm reports `God Function: relative` in `src/extractors/changelog.ts:28`. - Function ''relative'' is oversized: CC=5, fan-out=20, mutations=0. + Function ''relative'' is oversized: CC=7, fan-out=15, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4800,15 +4836,15 @@ tickets: - code-smell - god-function files: - - src/extractors/todo.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:29:God Function: + - src/extractors/changelog.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:28:God Function: relative' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: relative' - description: 'code2llm reports `God Function: relative` in `src/extractors/changelog.ts:28`. + description: 'code2llm reports `God Function: relative` in `src/extractors/todo.ts:29`. - Function ''relative'' is oversized: CC=7, fan-out=15, mutations=0. + Function ''relative'' is oversized: CC=5, fan-out=20, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4819,8 +4855,8 @@ tickets: - code-smell - god-function files: - - src/extractors/changelog.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:28:God Function: + - src/extractors/todo.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:29:God Function: relative' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: renderGraphDiffSvg' @@ -4880,7 +4916,7 @@ tickets: renderTextDiffSvg' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: repositoryRoot' - description: 'code2llm reports `God Function: repositoryRoot` in `src/extractors/markdown-paths.ts:34`. + description: 'code2llm reports `God Function: repositoryRoot` in `src/extractors/markdown-paths.ts:40`. Function ''repositoryRoot'' is oversized: CC=11, fan-out=11, mutations=0. @@ -4895,7 +4931,7 @@ tickets: - god-function files: - src/extractors/markdown-paths.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:34:God + dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:40:God Function: repositoryRoot' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: request' @@ -5012,7 +5048,7 @@ tickets: runtime' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: saveTaskStore' - description: 'code2llm reports `God Function: saveTaskStore` in `src/interfaces/a2a-task-store.ts:256`. + description: 'code2llm reports `God Function: saveTaskStore` in `src/interfaces/a2a-task-store.ts:257`. Function ''saveTaskStore'' is oversized: CC=2, fan-out=12, mutations=0. @@ -5027,7 +5063,7 @@ tickets: - god-function files: - src/interfaces/a2a-task-store.ts - dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-task-store.ts:256:God + dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-task-store.ts:257:God Function: saveTaskStore' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: scanTree' @@ -5049,7 +5085,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:37:God Function: scanTree' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: seen' - description: 'code2llm reports `God Function: seen` in `src/communication/llm.ts:304`. + description: 'code2llm reports `God Function: seen` in `src/communication/llm/implementation.ts:304`. Function ''seen'' is oversized: CC=6, fan-out=11, mutations=0. @@ -5063,12 +5099,12 @@ tickets: - code-smell - god-function files: - - src/communication/llm.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm.ts:304:God Function: - seen' + - src/communication/llm/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:304:God + Function: seen' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: seenIds' - description: 'code2llm reports `God Function: seenIds` in `src/semantic/reranker.ts:203`. + description: 'code2llm reports `God Function: seenIds` in `src/semantic/reranker/candidate.ts:121`. Function ''seenIds'' is oversized: CC=14, fan-out=9, mutations=0. @@ -5082,12 +5118,12 @@ tickets: - code-smell - god-function files: - - src/semantic/reranker.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker.ts:203:God Function: - seenIds' + - src/semantic/reranker/candidate.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:121:God + Function: seenIds' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: seenPairs' - description: 'code2llm reports `God Function: seenPairs` in `src/semantic/reranker.ts:204`. + description: 'code2llm reports `God Function: seenPairs` in `src/semantic/reranker/candidate.ts:122`. Function ''seenPairs'' is oversized: CC=14, fan-out=9, mutations=0. @@ -5101,9 +5137,9 @@ tickets: - code-smell - god-function files: - - src/semantic/reranker.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker.ts:204:God Function: - seenPairs' + - src/semantic/reranker/candidate.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:122:God + Function: seenPairs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: sourcePath' description: 'code2llm reports `God Function: sourcePath` in `src/extractors/nl.ts:42`. @@ -5141,6 +5177,25 @@ tickets: - scripts/verify-module-boundaries.mjs dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:5:God Function: sourceRoot' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: startA2aServer' + description: 'code2llm reports `God Function: startA2aServer` in `src/interfaces/a2a.ts:19`. + + + Function ''startA2aServer'' is oversized: CC=8, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/interfaces/a2a.ts + dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a.ts:19:God Function: + startA2aServer' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: startMcpServer' description: 'code2llm reports `God Function: startMcpServer` in `src/interfaces/mcp.ts:33`. @@ -5293,6 +5348,25 @@ tickets: - src/extractors/docs-record.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:25:God Function: toDocumentIntentRecord' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: toIntentRecord' + description: 'code2llm reports `God Function: toIntentRecord` in `src/extractors/nl-llm.ts:175`. + + + Function ''toIntentRecord'' is oversized: CC=12, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/extractors/nl-llm.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:175:God Function: + toIntentRecord' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: toSideBySideRows' description: 'code2llm reports `God Function: toSideBySideRows` in `src/diff/text-render.ts:41`. @@ -5371,7 +5445,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: validateCodeChangePlanContext' description: 'code2llm reports `God Function: validateCodeChangePlanContext` in - `src/core/schema.ts:621`. + `src/core/schema/code-change.ts:278`. Function ''validateCodeChangePlanContext'' is oversized: CC=11, fan-out=12, mutations=0. @@ -5385,14 +5459,15 @@ tickets: - code-smell - god-function files: - - src/core/schema.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema.ts:621:God Function: validateCodeChangePlanContext' + - src/core/schema/code-change.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:278:God + Function: validateCodeChangePlanContext' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: visit' - description: 'code2llm reports `God Function: visit` in `src/watch/watcher.ts:42`. + title: 'Address code smell: God Function: validateProjection' + description: 'code2llm reports `God Function: validateProjection` in `src/communication/intake-service.ts:183`. - Function ''visit'' is oversized: CC=11, fan-out=13, mutations=0. + Function ''validateProjection'' is oversized: CC=9, fan-out=20, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -5403,8 +5478,9 @@ tickets: - code-smell - god-function files: - - src/watch/watcher.ts - dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:42:God Function: visit' + - src/communication/intake-service.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:183:God + Function: validateProjection' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: visit' description: 'code2llm reports `God Function: visit` in `src/core/io.ts:95`. @@ -5423,6 +5499,24 @@ tickets: files: - src/core/io.ts dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:95:God Function: visit' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: visit' + description: 'code2llm reports `God Function: visit` in `src/watch/watcher.ts:42`. + + + Function ''visit'' is oversized: CC=11, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/watch/watcher.ts + dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:42:God Function: visit' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: visit_item_fn' description: 'code2llm reports `God Function: visit_item_fn` in `rust-ast/src/main.rs:257`. @@ -5480,6 +5574,25 @@ tickets: - src/interfaces/a2a-history.ts dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:118:God Function: warnings' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: writeProjection' + description: 'code2llm reports `God Function: writeProjection` in `src/communication/intake-service.ts:132`. + + + Function ''writeProjection'' is oversized: CC=12, fan-out=18, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-service.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:132:God + Function: writeProjection' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: sdk.go.types' description: 'code2llm reports `God Module: sdk.go.types` in `sdk/go/types.go:1`. @@ -5579,12 +5692,55 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:1:God Module: src.communication.analyzer' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.communication.llm' - description: 'code2llm reports `God Module: src.communication.llm` in `src/communication/llm.ts:1`. + title: 'Address code smell: God Module: src.communication.intake-contract' + description: 'code2llm reports `God Module: src.communication.intake-contract` in + `src/communication/intake-contract.ts:1`. - Module ''src.communication.llm'' is too large (55 functions, 8 classes). Consider - splitting into sub-modules. + Module ''src.communication.intake-contract'' is too large (44 functions, 7 classes). + Consider splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-contract.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:1:God + Module: src.communication.intake-contract' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.communication.intake-service' + description: 'code2llm reports `God Module: src.communication.intake-service` in + `src/communication/intake-service.ts:1`. + + + Module ''src.communication.intake-service'' is too large (82 functions, 2 classes). + Consider splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-service.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:1:God + Module: src.communication.intake-service' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.communication.llm.implementation' + description: 'code2llm reports `God Module: src.communication.llm.implementation` + in `src/communication/llm/implementation.ts:1`. + + + Module ''src.communication.llm.implementation'' is too large (55 functions, 8 + classes). Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -5595,15 +5751,15 @@ tickets: - code-smell - god-function files: - - src/communication/llm.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm.ts:1:God Module: - src.communication.llm' + - src/communication/llm/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:1:God + Module: src.communication.llm.implementation' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.comparison.workspace' description: 'code2llm reports `God Module: src.comparison.workspace` in `src/comparison/workspace.ts:1`. - Module ''src.comparison.workspace'' is too large (55 functions, 3 classes). Consider + Module ''src.comparison.workspace'' is too large (56 functions, 3 classes). Consider splitting into sub-modules. @@ -5618,6 +5774,26 @@ tickets: - src/comparison/workspace.ts dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:1:God Module: src.comparison.workspace' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.core.schema.code-change' + description: 'code2llm reports `God Module: src.core.schema.code-change` in `src/core/schema/code-change.ts:1`. + + + Module ''src.core.schema.code-change'' is too large (44 functions, 0 classes). + Consider splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/schema/code-change.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:1:God Module: + src.core.schema.code-change' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.core.text' description: 'code2llm reports `God Module: src.core.text` in `src/core/text.ts:1`. @@ -5637,12 +5813,52 @@ tickets: files: - src/core/text.ts dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:1:God Module: src.core.text' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.core.types.code-change' + description: 'code2llm reports `God Module: src.core.types.code-change` in `src/core/types/code-change.ts:1`. + + + Module ''src.core.types.code-change'' is too large (0 functions, 16 classes). + Consider splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/types/code-change.ts + dedupe_key: 'code2llm:smell:god_function:src/core/types/code-change.ts:1:God Module: + src.core.types.code-change' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.core.types.intent' + description: 'code2llm reports `God Module: src.core.types.intent` in `src/core/types/intent.ts:1`. + + + Module ''src.core.types.intent'' is too large (0 functions, 15 classes). Consider + splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/types/intent.ts + dedupe_key: 'code2llm:smell:god_function:src/core/types/intent.ts:1:God Module: + src.core.types.intent' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.diff.reality' description: 'code2llm reports `God Module: src.diff.reality` in `src/diff/reality.ts:1`. - Module ''src.diff.reality'' is too large (77 functions, 3 classes). Consider splitting + Module ''src.diff.reality'' is too large (78 functions, 3 classes). Consider splitting into sub-modules. @@ -5720,7 +5936,7 @@ tickets: description: 'code2llm reports `God Module: src.extractors.communication` in `src/extractors/communication.ts:1`. - Module ''src.extractors.communication'' is too large (75 functions, 4 classes). + Module ''src.extractors.communication'' is too large (80 functions, 5 classes). Consider splitting into sub-modules. @@ -5735,12 +5951,52 @@ tickets: - src/extractors/communication.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/communication.ts:1:God Module: src.extractors.communication' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.extractors.docs-deterministic' + description: 'code2llm reports `God Module: src.extractors.docs-deterministic` in + `src/extractors/docs-deterministic.ts:1`. + + + Module ''src.extractors.docs-deterministic'' is too large (46 functions, 3 classes). + Consider splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/extractors/docs-deterministic.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-deterministic.ts:1:God + Module: src.extractors.docs-deterministic' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.extractors.git' + description: 'code2llm reports `God Module: src.extractors.git` in `src/extractors/git.ts:1`. + + + Module ''src.extractors.git'' is too large (64 functions, 6 classes). Consider + splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/extractors/git.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:1:God Module: src.extractors.git' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.extractors.nl-llm' description: 'code2llm reports `God Module: src.extractors.nl-llm` in `src/extractors/nl-llm.ts:1`. - Module ''src.extractors.nl-llm'' is too large (45 functions, 5 classes). Consider + Module ''src.extractors.nl-llm'' is too large (46 functions, 5 classes). Consider splitting into sub-modules. @@ -5799,7 +6055,7 @@ tickets: description: 'code2llm reports `God Module: src.interfaces.a2a` in `src/interfaces/a2a.ts:1`. - Module ''src.interfaces.a2a'' is too large (46 functions, 0 classes). Consider + Module ''src.interfaces.a2a'' is too large (48 functions, 0 classes). Consider splitting into sub-modules. @@ -5818,7 +6074,7 @@ tickets: description: 'code2llm reports `God Module: src.interfaces.a2a-task-store` in `src/interfaces/a2a-task-store.ts:1`. - Module ''src.interfaces.a2a-task-store'' is too large (92 functions, 3 classes). + Module ''src.interfaces.a2a-task-store'' is too large (101 functions, 3 classes). Consider splitting into sub-modules. @@ -5896,7 +6152,7 @@ tickets: description: 'code2llm reports `God Module: src.pipeline.run` in `src/pipeline/run.ts:1`. - Module ''src.pipeline.run'' is too large (64 functions, 1 classes). Consider splitting + Module ''src.pipeline.run'' is too large (65 functions, 1 classes). Consider splitting into sub-modules. @@ -5911,12 +6167,12 @@ tickets: - src/pipeline/run.ts dedupe_key: 'code2llm:smell:god_function:src/pipeline/run.ts:1:God Module: src.pipeline.run' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.semantic.reranker' - description: 'code2llm reports `God Module: src.semantic.reranker` in `src/semantic/reranker.ts:1`. + title: 'Address code smell: God Module: src.semantic.reranker.types' + description: 'code2llm reports `God Module: src.semantic.reranker.types` in `src/semantic/reranker/types.ts:1`. - Module ''src.semantic.reranker'' is too large (40 functions, 11 classes). Consider - splitting into sub-modules. + Module ''src.semantic.reranker.types'' is too large (0 functions, 11 classes). + Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -5927,9 +6183,9 @@ tickets: - code-smell - god-function files: - - src/semantic/reranker.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker.ts:1:God Module: - src.semantic.reranker' + - src/semantic/reranker/types.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/types.ts:1:God Module: + src.semantic.reranker.types' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.services.actions' description: 'code2llm reports `God Module: src.services.actions` in `src/services/actions.ts:1`. diff --git a/project/project.toon.yaml b/project/project.toon.yaml index 342b9fd..1ae4afc 100644 --- a/project/project.toon.yaml +++ b/project/project.toon.yaml @@ -1,52 +1,52 @@ -# todo2code | 3285 func | 152f | 45160L | typescript | 2026-08-01 +# todo2code | 3586 func | 166f | 39601L | typescript | 2026-08-04 # generated in 0.00s HEALTH: - CC̄=4.0 critical=276 (limit:10) dup=28 cycles=0 + CC̄=3.8 critical=279 (limit:10) dup=28 cycles=0 ALERTS[20]: - !!! cc_exceeded main = 95 (limit:15) !!! cc_exceeded assertOperationPlan = 84 (limit:15) !!! cc_exceeded executeAction = 83 (limit:15) !!! cc_exceeded root = 83 (limit:15) - !!! cc_exceeded extractCommunicationIntent = 76 (limit:15) - !!! cc_exceeded identityRegistry = 72 (limit:15) - !!! cc_exceeded communicationFiles = 72 (limit:15) !!! high_fan_out executeAction = 65 (limit:10) !!! high_fan_out root = 64 (limit:10) - !!! cc_exceeded parseCommand = 57 (limit:15) + !!! cc_exceeded parseCommand = 63 (limit:15) + !!! cc_exceeded runPipeline = 56 (limit:15) + !!! high_fan_out runPipeline = 56 (limit:10) + !!! cc_exceeded diffUiHtml = 52 (limit:15) + !!! cc_exceeded extractCommunicationFile = 50 (limit:15) -MODULES[262] (top by size): +MODULES[246] (top by size): M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json) - M[src/synthesis/code-change-plan.ts] 1310L C:10 F:127 CC↑47 D:6 (typescript) - M[src/core/schema.ts] 922L C:4 F:124 CC↑23 D:0 (typescript) - M[docs/SYSTEM_MONITOROWANIA_INTENCJI_I_PRACY_AGENTOW.md] 872L C:0 F:0 CC↑0 D:0 (md) - M[docs/reference/original-monitoring-design.md] 872L C:0 F:0 CC↑0 D:0 (md) - M[README.md] 871L C:0 F:0 CC↑0 D:0 (md) - M[src/cli.ts] 827L C:1 F:83 CC↑95 D:0 (typescript) + M[src/synthesis/code-change-plan/implementation.ts] 1310L C:10 F:127 CC↑47 D:3 (typescript) + M[src/cli.ts] 908L C:1 F:118 CC↑13 D:0 (typescript) M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json) M[src/services/actions.ts] 700L C:0 F:74 CC↑83 D:0 (typescript) - M[src/core/types.ts] 673L C:41 F:0 CC↑0 D:0 (typescript) - M[CHANGELOG.md] 670L C:0 F:0 CC↑0 D:0 (md) - M[src/diff/reality.ts] 609L C:3 F:73 CC↑26 D:0 (typescript) - M[src/pipeline/run.ts] 602L C:1 F:64 CC↑53 D:0 (typescript) - M[docs/TEST_REPORT.md] 587L C:0 F:0 CC↑0 D:0 (md) + M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript) + M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript) M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json) - LANGS: typescript:117/md:52/json:32/javascript:15/python:15/rust:7/go:6/shell:6/php:4/other:2/yml:2/toml:2/java:1/txt:1 + M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript) + M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript) + M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml) + M[src/extractors/communication.ts] 515L C:5 F:76 CC↑50 D:0 (typescript) + M[src/communication/llm/implementation.ts] 514L C:8 F:53 CC↑12 D:0 (typescript) + M[src/core/text.ts] 491L C:0 F:51 CC↑34 D:0 (typescript) + M[src/graph/linker.ts] 489L C:4 F:72 CC↑18 D:3 (typescript) + LANGS: typescript:138/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 HOTSPOTS[10]: ★ executeAction fan=65 // Orchestrates 65 calls ★ root fan=64 // Orchestrates 64 calls - ★ runPipeline fan=54 // Orchestrates 54 calls - ★ main fan=44 // Orchestrates 44 calls + ★ runPipeline fan=56 // Orchestrates 56 calls ★ extractTypeScriptFile fan=44 // Orchestrates 44 calls + ★ diffUiHtml fan=42 // Orchestrates 42 calls REFACTOR[15]: - [1] H/L Split main (CC=95) - [2] H/L Split diffUiHtml (CC=52) - [3] H/L Split assertCodeChangeSourcePatch (CC=47) - [4] H/L Split applyCodeChangeSourcePatch (CC=41) - [5] H/L Split applyUnifiedDiffToText (CC=47) + [1] H/L Split extractCommunicationFile (CC=50) + [2] H/L Split extractTypeScriptFile (CC=43) + [3] H/L Split visit (CC=25) + [4] H/L Split diagnoseGraph (CC=40) + [5] H/L Split neighbors (CC=35) EVOLUTION: - 2026-08-01 CC̄=4.0 crit=276 45160L // Automated analysis + 2026-08-04 CC̄=3.8 crit=279 39601L // Automated analysis diff --git a/project/prompt.txt b/project/prompt.txt index 41409cd..c05f2b1 100644 --- a/project/prompt.txt +++ b/project/prompt.txt @@ -8,14 +8,12 @@ we are in project path: todo2code Files for analysis: Note: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup) -- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [24KB] -- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [136KB] +- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB] +- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [146KB] - evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB] - project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB] -- context.md (LLM narrative - architecture summary and project context) [33KB] - -Missing files (not generated in this run): -- README.md +- context.md (LLM narrative - architecture summary and project context) [35KB] +- README.md (Generated documentation - overview and usage guide) [9KB] Task: - Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits. diff --git a/project/ticket-018/README.md b/project/ticket-018/README.md index 526a549..af1f82a 100644 --- a/project/ticket-018/README.md +++ b/project/ticket-018/README.md @@ -3,7 +3,7 @@ - **ID**: ticket-018 - **Owner**: unresolved:human - **Status**: IN_PROGRESS -- **Workflow state**: EDIT +- **Workflow state**: WAIT_FOR_APPROVAL - **Created**: 2026-08-01 ## Goal and scope @@ -157,11 +157,11 @@ agent self-approved. - [x] AC-23: The workflow uses least-privilege read permissions, never uses `pull_request_target`, and treats fork PRs without secrets as requiring a trusted rerun rather than exposing organization credentials. -- [ ] AC-24: A repository ruleset requires `governance / enforce` and +- [x] AC-24: A repository ruleset requires `governance / enforce` and `koru / code-review`, blocks direct updates to `main`, dismisses stale evidence after new commits and cannot be bypassed by the implementation agent. -- [ ] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths, +- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths, `npm run verify`, governance and relevant Docker checks pass; the pre-existing ticket-019 findings remain separately attributed. diff --git a/project/ticket-018/changelog.md b/project/ticket-018/changelog.md index cf4007f..4ccd9cf 100644 --- a/project/ticket-018/changelog.md +++ b/project/ticket-018/changelog.md @@ -1,5 +1,17 @@ # Ticket Changelog (ticket-018) +## [0.3.0] - 2026-08-04 + +- Confirmed and recorded `koru / code-review` + `governance / enforce` as the + required checks for the `main` ruleset `20186914`; enforced state is active, + `current_user_can_bypass: never`, and bypass actors are empty. +- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax, + positive and negative Koru probes, attestation upload path, workflow failure + handling and local/CI verification commands now satisfy AC-24/AC-25. +- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with + AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers + remain tracked separately. + ## [0.2.0] - 2026-08-01 - Evolved the plan for concurrent humans/agents: named workstreams, diff --git a/project2.sh b/project2.sh new file mode 100755 index 0000000..cdab397 --- /dev/null +++ b/project2.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +set -e +if [ -t 1 ] && [ -n "${TERM:-}" ]; then + clear +fi + +# Canonical venv for koru autonomous + README is .venv (not venv). +if [ -x ".venv/bin/pip" ]; then + VENV=".venv" +elif [ -x "venv/bin/pip" ]; then + VENV="venv" +else + VENV=".venv" +fi +PIP="$VENV/bin/pip" + +if [ ! -f "$PIP" ]; then + echo "Creating virtual environment at $VENV..." + python3 -m venv "$VENV" +fi +echo "Using Python env: $VENV" + +$PIP install regix --upgrade --quiet +#$PIP install pyqual --upgrade --quiet +$PIP install prefact --upgrade --quiet +$PIP install vallm --upgrade --quiet +$PIP install redup --upgrade --quiet +$PIP install glon --upgrade --quiet +$PIP install code2logic --upgrade --quiet +$PIP install code2llm --upgrade --quiet +#$VENV/bin/code2llm ./ -f toon,evolution,code2logic,project-yaml -o ./project --no-chunk +$VENV/bin/code2llm ./ -f all -o ./project --no-chunk --exclude '*.md' +#$VENV/bin/code2llm report --format all # → all views + +#$PIP install code2docs --upgrade --quiet +#$VENV/bin/code2docs ./ --readme-only +# Fast default: scan the main code hotspot and reuse a fresh report for one +# hour. Use REDUP_MODE=full REDUP_MAX_AGE_SECONDS=0 for a whole-workspace audit. +if [ -x "platform/scripts/run-semcod-diagnostics.sh" ]; then + bash platform/scripts/run-semcod-diagnostics.sh . +else + $VENV/bin/redup scan core \ + --ext '.py,.js,.mjs,.cjs,.ts,.tsx,.jsx,.php,.sh' \ + --min-lines 8 \ + --min-sim 0.92 \ + --no-memory-cache \ + --format toon \ + --output ./project/duplication-core.toon.yaml +fi +#$VENV/bin/redup scan . --functions-only -f toon --output ./project +#$VENV/bin/vallm batch ./src --recursive --semantic --model qwen2.5-coder:7b +#$VENV/bin/vallm batch --parallel . +#$VENV/bin/vallm batch . --recursive --format toon --output ./project +$VENV/bin/prefact -a -e "examples/**" + + +$PIP install doql --upgrade --quiet +$VENV/bin/doql adopt . --format less --output app.doql.less --force + +# Disabled: sumd (as of 0.3.60) reads project/*.toon.yaml as input for +# SUMD.md/SUMR.md, but also has a side effect of regenerating map.toon.yaml +# itself with a much smaller, simplified version — silently clobbering +# code2llm's canonical map (271KB+/500+ modules down to ~40KB/10 functions) +# a few seconds after code2llm wrote it. Upstream fix (sumd should skip a +# map.toon.yaml owned by code2llm) is tracked but not yet effective in the +# published version — re-enable once verified fixed on PyPI. +#$PIP install sumd --upgrade --quiet +#$VENV/bin/sumd . +#$VENV/bin/sumr . + + + +if [ -x "./tree.sh" ]; then + bash ./tree.sh +elif command -v tree >/dev/null 2>&1; then + tree -L 2 +else + echo "Skipping tree snapshot: ./tree.sh not found and 'tree' is not installed." +fi diff --git a/sdk/python/pyproject.toml b/sdk/python/pyproject.toml index 250e339..39d8efc 100644 --- a/sdk/python/pyproject.toml +++ b/sdk/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "todo2code-sdk" -version = "0.5.1" +version = "0.5.2" description = "Dependency-free Python SDK for todo2code A2A and the local TypeScript runtime" readme = "README.md" requires-python = ">=3.10" diff --git a/sdk/python/todo2code/__init__.py b/sdk/python/todo2code/__init__.py index 66588d5..c89547f 100644 --- a/sdk/python/todo2code/__init__.py +++ b/sdk/python/todo2code/__init__.py @@ -30,4 +30,4 @@ "TypeScriptRuntime", "TypeScriptRuntimeError", ] -__version__ = "0.5.1" +__version__ = "0.5.2" diff --git a/sdk/rust/Cargo.toml b/sdk/rust/Cargo.toml index 52f6b60..ab81505 100644 --- a/sdk/rust/Cargo.toml +++ b/sdk/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "todo2code" -version = "0.5.1" +version = "0.5.2" edition = "2021" rust-version = "1.70" description = "Rust SDK for the todo2code A2A v1.0 endpoint" diff --git a/sdk/typescript/package.json b/sdk/typescript/package.json index 0209990..486e1b4 100644 --- a/sdk/typescript/package.json +++ b/sdk/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@todo2code/sdk", - "version": "0.5.1", + "version": "0.5.2", "description": "TypeScript SDK for the todo2code A2A v1.0 endpoint.", "type": "module", "private": true, diff --git a/src/cli.ts b/src/cli.ts index 727e4aa..79f0316 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -52,6 +52,12 @@ interface ParsedArgs { options: Map; } + +type CommandHandler = (parsed: ParsedArgs, config: ReturnType) => Promise; +type DiffMode = 'graph' | 'files' | 'git'; +type DiffPayload = { diffs: FileDiff[]; title: string }; +type ExtractHandler = (parsed: ParsedArgs, root: string, out: string | null, config: ReturnType) => Promise; + export async function main(argv = process.argv.slice(2)): Promise { await loadEnvFile(); if (argv[0] === '--help' || argv[0] === '-h') { @@ -63,321 +69,319 @@ export async function main(argv = process.argv.slice(2)): Promise { return; } const parsed = parseArgs(argv); - const command = parsed.positionals.shift() ?? 'help'; + const command = resolveMainCommand(parsed.positionals.shift() ?? 'help'); - if (command === 'help' || command === '--help' || command === '-h') { + if (command === 'help' || parsed.options.has('help')) { printHelp(); return; } // `parseArgs` removes options from positionals, so `pipeline --help` would // otherwise look exactly like `pipeline` and execute a mutating run. Help is // global until command-specific help exists: it must never reach a handler. - if (parsed.options.has('help')) { - printHelp(); - return; - } const config = getConfig(); - if (command === 'version' || command === '--version' || command === '-v') { - process.stdout.write(`todo2code ${T2C_VERSION}\n`); - return; - } - if (command === 'init') { - await initProject(path.resolve(parsed.positionals[0] ?? '.')); - return; - } - if (command === 'doctor') { - await doctor(config); - return; - } - if (command === 'mcp') { - await startMcpServer(config); - return; - } - if (command === 'a2a') { - await startA2aServer(config); - return; - } - if (command === 'intake') { - await handleIntake(parsed, config); - return; + const handler = commandHandlers()[command]; + if (!handler) { + throw new Error(`Unknown command: ${command}. Run t2c help.`); } - if (command === 'extract') { - await handleExtract(parsed, config); - return; - } - if (command === 'communication') { - await handleCommunication(parsed, config); - return; - } - if (command === 'link') { - const files = parsed.positionals; - if (!files.length) throw new Error('Usage: t2c link ... [--out graph.json]'); - const records = (await Promise.all(files.map((file) => readJsonl(path.resolve(file))))).flat(); - const graph = linkIntentRecords(records); - await emitJson(graph, optionString(parsed, 'out')); - return; - } - if (command === 'diagnose') { - const graphFile = parsed.positionals[0]; - if (!graphFile) throw new Error('Usage: t2c diagnose [--out diagnostics.json]'); - const graph = await readJson(path.resolve(graphFile)); - await emitJson(diagnoseGraph(graph), optionString(parsed, 'out')); - return; - } - if (command === 'diff') { - await handleDiff(parsed, config); - return; - } - if (command === 'reality') { - await handleReality(parsed, config); - return; - } - if (command === 'summarize') { - const graphFile = parsed.positionals[0]; - if (!graphFile) throw new Error('Usage: t2c summarize [--diagnostics diagnostics.json] [--mode deterministic|prefer-llm|require-llm] [--out summary.md]'); - const graph = await readJson(path.resolve(graphFile)); - const diagnosticsPath = optionString(parsed, 'diagnostics'); - const diagnostics = diagnosticsPath - ? await readJson(path.resolve(diagnosticsPath)) - : diagnoseGraph(graph); - const result = await summarizeGraph(graph, diagnostics, config, { - mode: optionSummaryMode(parsed), - }); - for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\n`); - const out = optionString(parsed, 'out'); - if (out) await writeText(path.resolve(out), result.markdown); - else process.stdout.write(result.markdown); - return; - } - if (command === 'propose-todo') { - const graphPath = parsed.positionals[0]; - const diagnosticsPath = optionString(parsed, 'diagnostics'); - const output = optionString(parsed, 'out'); - if (!graphPath || !diagnosticsPath || !output) { - throw new Error('Usage: t2c propose-todo --diagnostics diagnostics.json [--mode prefer-llm|require-llm] --out synthesis.json'); - } - const result = await executeAction('propose_todo', { - root: optionString(parsed, 'root') ?? config.root, - graphPath, - diagnosticsPath, - mode: optionTaskMode(parsed), - output, - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; - } - if (command === 'render-todo') { - const synthesisPath = parsed.positionals[0]; - const graphPath = optionString(parsed, 'graph'); - const diagnosticsPath = optionString(parsed, 'diagnostics'); - const patch = optionString(parsed, 'patch'); - const audit = optionString(parsed, 'audit'); - if (!synthesisPath || !graphPath || !diagnosticsPath || !patch || !audit) { - throw new Error('Usage: t2c render-todo --graph graph.json --diagnostics diagnostics.json --todo TODO.md --patch TODO.patch --audit TODO.patch.json'); - } - const result = await executeAction('render_todo', { - root: optionString(parsed, 'root') ?? config.root, - synthesisPath, - graphPath, - diagnosticsPath, - todo: optionString(parsed, 'todo') ?? 'TODO.md', - patch, - audit, - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; - } - if (command === 'apply-todo') { - const patch = optionString(parsed, 'patch'); - const audit = optionString(parsed, 'audit'); - const receipt = optionString(parsed, 'receipt'); - const actor = optionString(parsed, 'actor'); - const approvalHash = optionString(parsed, 'approval-hash'); - if (!patch || !audit || !receipt || !actor || !approvalHash) { - throw new Error('Usage: t2c apply-todo --todo TODO.md --patch TODO.patch --audit TODO.patch.json --receipt receipt.json --actor --approval-hash '); - } - const result = await executeAction('apply_todo', { - root: optionString(parsed, 'root') ?? config.root, - todo: optionString(parsed, 'todo') ?? 'TODO.md', - patch, - audit, - receipt, - actor, - approvalHash, - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; - } - if (command === 'propose-code-change') { - const graphPath = parsed.positionals[0]; - const diagnosticsPath = optionString(parsed, 'diagnostics'); - const output = optionString(parsed, 'out'); - if (!graphPath || !diagnosticsPath || !output) { - throw new Error('Usage: t2c propose-code-change --diagnostics diagnostics.json [--proposals proposals.json] --out plans.json'); - } - const result = await executeAction('propose_code_change', { - root: optionString(parsed, 'root') ?? config.root, - graphPath, - diagnosticsPath, - conclusionsPath: optionString(parsed, 'conclusions'), - proposalsPath: optionString(parsed, 'proposals'), - maxPlans: optionString(parsed, 'max-plans'), - output, - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; + await handler(parsed, config); +} + +function commandHandlers(): Record { + return { + version: async () => { + process.stdout.write(`todo2code ${T2C_VERSION}\n`); + }, + init: async (parsed) => initProject(path.resolve(parsed.positionals[0] ?? '.')), + doctor: async (_parsed, config) => doctor(config), + mcp: async (_parsed, config) => startMcpServer(config), + a2a: async (_parsed, config) => startA2aServer(config), + intake: handleIntake, + extract: handleExtract, + communication: handleCommunication, + link: handleLink, + diagnose: handleDiagnose, + diff: handleDiff, + reality: handleReality, + summarize: handleSummarize, + 'propose-todo': handleProposeTodo, + 'render-todo': handleRenderTodo, + 'apply-todo': handleApplyTodo, + 'propose-code-change': handleProposeCodeChange, + 'render-code-change': handleRenderCodeChange, + 'propose-source-patch': handleProposeSourcePatch, + 'apply-source-patch': handleApplySourcePatch, + 'evaluate-code-change': handleEvaluateCodeChange, + 'close-code-change': handleCloseCodeChange, + watch: handleWatch, + 'compare-workspace': handleCompareWorkspace, + pipeline: handlePipeline, + }; +} + +function resolveMainCommand(raw: string): string { + if (raw === '--help' || raw === '-h') return 'help'; + if (raw === '--version' || raw === '-v') return 'version'; + return raw; +} + +async function handleLink(parsed: ParsedArgs): Promise { + const files = parsed.positionals; + if (!files.length) throw new Error('Usage: t2c link ... [--out graph.json]'); + const records = (await Promise.all(files.map((file) => readJsonl(path.resolve(file))))).flat(); + const graph = linkIntentRecords(records); + await emitJson(graph, optionString(parsed, 'out')); +} + +async function handleDiagnose(parsed: ParsedArgs): Promise { + const graphFile = parsed.positionals[0]; + if (!graphFile) throw new Error('Usage: t2c diagnose [--out diagnostics.json]'); + const graph = await readJson(path.resolve(graphFile)); + await emitJson(diagnoseGraph(graph), optionString(parsed, 'out')); +} + +async function handleSummarize(parsed: ParsedArgs, config: ReturnType): Promise { + const graphFile = parsed.positionals[0]; + if (!graphFile) throw new Error('Usage: t2c summarize [--diagnostics diagnostics.json] [--mode deterministic|prefer-llm|require-llm] [--out summary.md]'); + const graph = await readJson(path.resolve(graphFile)); + const diagnosticsPath = optionString(parsed, 'diagnostics'); + const diagnostics = diagnosticsPath + ? await readJson(path.resolve(diagnosticsPath)) + : diagnoseGraph(graph); + const result = await summarizeGraph(graph, diagnostics, config, { + mode: optionSummaryMode(parsed), + }); + for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\n`); + const out = optionString(parsed, 'out'); + if (out) await writeText(path.resolve(out), result.markdown); + else process.stdout.write(result.markdown); +} + +async function handleProposeTodo(parsed: ParsedArgs, config: ReturnType): Promise { + const graphPath = parsed.positionals[0]; + const diagnosticsPath = optionString(parsed, 'diagnostics'); + const output = optionString(parsed, 'out'); + if (!graphPath || !diagnosticsPath || !output) { + throw new Error('Usage: t2c propose-todo --diagnostics diagnostics.json [--mode prefer-llm|require-llm] --out synthesis.json'); } - if (command === 'render-code-change') { - const plansPath = parsed.positionals[0]; - const patch = optionString(parsed, 'patch') ?? 'CODE_CHANGE.review.md'; - const audit = optionString(parsed, 'audit') ?? 'CODE_CHANGE.review.json'; - if (!plansPath) { - throw new Error('Usage: t2c render-code-change [--patch CODE_CHANGE.review.md] [--audit CODE_CHANGE.review.json]'); - } - const result = await executeAction('render_code_change', { - root: optionString(parsed, 'root') ?? config.root, - plansPath, - patch, - audit, - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; + const result = await executeAction('propose_todo', { + root: optionString(parsed, 'root') ?? config.root, + graphPath, + diagnosticsPath, + mode: optionTaskMode(parsed), + output, + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handleRenderTodo(parsed: ParsedArgs, config: ReturnType): Promise { + const synthesisPath = parsed.positionals[0]; + const graphPath = optionString(parsed, 'graph'); + const diagnosticsPath = optionString(parsed, 'diagnostics'); + const patch = optionString(parsed, 'patch'); + const audit = optionString(parsed, 'audit'); + if (!synthesisPath || !graphPath || !diagnosticsPath || !patch || !audit) { + throw new Error('Usage: t2c render-todo --graph graph.json --diagnostics diagnostics.json --todo TODO.md --patch TODO.patch --audit TODO.patch.json'); } - if (command === 'propose-source-patch') { - const inputPath = parsed.positionals[0]; - const output = optionString(parsed, 'out'); - if (!inputPath || !output) { - throw new Error('Usage: t2c propose-source-patch --out source-patches.json'); - } - const isPlanSet = inputPath.endsWith('plans.json') || optionString(parsed, 'kind') === 'set'; - const result = await executeAction('propose_source_patch', { - root: optionString(parsed, 'root') ?? config.root, - ...(isPlanSet ? { plansPath: inputPath } : { planPath: inputPath }), - output, - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; + const result = await executeAction('render_todo', { + root: optionString(parsed, 'root') ?? config.root, + synthesisPath, + graphPath, + diagnosticsPath, + todo: optionString(parsed, 'todo') ?? 'TODO.md', + patch, + audit, + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handleApplyTodo(parsed: ParsedArgs, config: ReturnType): Promise { + const patch = optionString(parsed, 'patch'); + const audit = optionString(parsed, 'audit'); + const receipt = optionString(parsed, 'receipt'); + const actor = optionString(parsed, 'actor'); + const approvalHash = optionString(parsed, 'approval-hash'); + if (!patch || !audit || !receipt || !actor || !approvalHash) { + throw new Error('Usage: t2c apply-todo --todo TODO.md --patch TODO.patch --audit TODO.patch.json --receipt receipt.json --actor --approval-hash '); } - if (command === 'apply-source-patch') { - const patchPath = parsed.positionals[0]; - const actor = optionString(parsed, 'actor'); - const approvalHash = optionString(parsed, 'approval-hash'); - const receipt = optionString(parsed, 'receipt') ?? 'CODE_CHANGE.source.receipt.json'; - if (!patchPath || !actor || !approvalHash) { - throw new Error('Usage: t2c apply-source-patch --actor --approval-hash [--receipt receipt.json]'); - } - const result = await executeAction('apply_source_patch', { - root: optionString(parsed, 'root') ?? config.root, - patchPath, - actor, - approvalHash, - receipt, - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; + const result = await executeAction('apply_todo', { + root: optionString(parsed, 'root') ?? config.root, + todo: optionString(parsed, 'todo') ?? 'TODO.md', + patch, + audit, + receipt, + actor, + approvalHash, + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handleProposeCodeChange(parsed: ParsedArgs, config: ReturnType): Promise { + const graphPath = parsed.positionals[0]; + const diagnosticsPath = optionString(parsed, 'diagnostics'); + const output = optionString(parsed, 'out'); + if (!graphPath || !diagnosticsPath || !output) { + throw new Error('Usage: t2c propose-code-change --diagnostics diagnostics.json [--proposals proposals.json] --out plans.json'); } - if (command === 'evaluate-code-change') { - const planPath = parsed.positionals[0]; - const beforeGraphPath = optionString(parsed, 'before-graph'); - const afterGraphPath = optionString(parsed, 'after-graph'); - const output = optionString(parsed, 'out'); - if (!planPath || !beforeGraphPath || !afterGraphPath || !output) { - throw new Error('Usage: t2c evaluate-code-change --before-graph before.json --after-graph after.json [--before-diagnostics d.json] --out acceptance.json'); - } - const result = await executeAction('evaluate_code_change', { - root: optionString(parsed, 'root') ?? config.root, - planPath, - beforeGraphPath, - beforeDiagnosticsPath: optionString(parsed, 'before-diagnostics'), - afterGraphPath, - afterDiagnosticsPath: optionString(parsed, 'after-diagnostics'), - output, - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; + const result = await executeAction('propose_code_change', { + root: optionString(parsed, 'root') ?? config.root, + graphPath, + diagnosticsPath, + conclusionsPath: optionString(parsed, 'conclusions'), + proposalsPath: optionString(parsed, 'proposals'), + maxPlans: optionString(parsed, 'max-plans'), + output, + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handleRenderCodeChange(parsed: ParsedArgs, config: ReturnType): Promise { + const plansPath = parsed.positionals[0]; + const patch = optionString(parsed, 'patch') ?? 'CODE_CHANGE.review.md'; + const audit = optionString(parsed, 'audit') ?? 'CODE_CHANGE.review.json'; + if (!plansPath) { + throw new Error('Usage: t2c render-code-change [--patch CODE_CHANGE.review.md] [--audit CODE_CHANGE.review.json]'); } - if (command === 'close-code-change') { - const inputPath = parsed.positionals[0]; - const beforeGraphPath = optionString(parsed, 'before-graph'); - const afterGraphPath = optionString(parsed, 'after-graph'); - const output = optionString(parsed, 'out'); - if (!inputPath || !beforeGraphPath || !afterGraphPath || !output) { - throw new Error('Usage: t2c close-code-change --before-graph before.json --after-graph after.json --out close.json'); - } - const result = await executeAction('close_code_change', { - root: optionString(parsed, 'root') ?? config.root, - inputPath, - beforeGraphPath, - beforeDiagnosticsPath: optionString(parsed, 'before-diagnostics'), - afterGraphPath, - afterDiagnosticsPath: optionString(parsed, 'after-diagnostics'), - output, - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; + const result = await executeAction('render_code_change', { + root: optionString(parsed, 'root') ?? config.root, + plansPath, + patch, + audit, + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handleProposeSourcePatch(parsed: ParsedArgs, config: ReturnType): Promise { + const inputPath = parsed.positionals[0]; + const output = optionString(parsed, 'out'); + if (!inputPath || !output) { + throw new Error('Usage: t2c propose-source-patch --out source-patches.json'); } - if (command === 'watch') { - await handleWatch(parsed, config); - return; + const isPlanSet = inputPath.endsWith('plans.json') || optionString(parsed, 'kind') === 'set'; + const result = await executeAction('propose_source_patch', { + root: optionString(parsed, 'root') ?? config.root, + ...(isPlanSet ? { plansPath: inputPath } : { planPath: inputPath }), + output, + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handleApplySourcePatch(parsed: ParsedArgs, config: ReturnType): Promise { + const patchPath = parsed.positionals[0]; + const actor = optionString(parsed, 'actor'); + const approvalHash = optionString(parsed, 'approval-hash'); + const receipt = optionString(parsed, 'receipt') ?? 'CODE_CHANGE.source.receipt.json'; + if (!patchPath || !actor || !approvalHash) { + throw new Error('Usage: t2c apply-source-patch --actor --approval-hash [--receipt receipt.json]'); } - if (command === 'compare-workspace') { - const root = path.resolve(parsed.positionals[0] ?? config.root); - const result = await compareWorkspaceIntent({ - root, - baseRef: optionString(parsed, 'base') ?? 'origin/main', - taskFile: optionNullableString(parsed, 'task', null), - todoFile: optionNullableString(parsed, 'todo', 'TODO.md'), - changelogFile: optionNullableString(parsed, 'changelog', 'CHANGELOG.md'), - documentPatterns: optionList(parsed, 'docs', config.documentPatterns), - documentExcludes: optionList(parsed, 'doc-excludes', config.documentExcludes), - includeDocumentationLlm: optionBoolean(parsed, 'docs-llm', false), - markdownMode: optionLlmMode(parsed, 'markdown-mode', config.markdownMode), - communicationMode: optionLlmMode(parsed, 'communication-mode', config.communicationMode), - outputDir: optionString(parsed, 'out') ?? config.outputDir, - gitCommitCount: optionNumber(parsed, 'git-count', config.gitCommitCount, 1, 100), - }, config); - process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); - return; + const result = await executeAction('apply_source_patch', { + root: optionString(parsed, 'root') ?? config.root, + patchPath, + actor, + approvalHash, + receipt, + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handleEvaluateCodeChange(parsed: ParsedArgs, config: ReturnType): Promise { + const planPath = parsed.positionals[0]; + const beforeGraphPath = optionString(parsed, 'before-graph'); + const afterGraphPath = optionString(parsed, 'after-graph'); + const output = optionString(parsed, 'out'); + if (!planPath || !beforeGraphPath || !afterGraphPath || !output) { + throw new Error('Usage: t2c evaluate-code-change --before-graph before.json --after-graph after.json [--before-diagnostics d.json] --out acceptance.json'); } - if (command === 'pipeline') { - const root = path.resolve(parsed.positionals[0] ?? config.root); - const options: PipelineOptions = { - root, - taskFile: optionNullableString(parsed, 'task', null), - todoFile: optionNullableString(parsed, 'todo', 'TODO.md'), - changelogFile: optionNullableString(parsed, 'changelog', 'CHANGELOG.md'), - documentPatterns: optionList(parsed, 'docs', config.documentPatterns), - includeDocumentationLlm: !optionBoolean(parsed, 'no-docs-llm', false), - outputDir: optionString(parsed, 'out') ?? config.outputDir, - gitCommitCount: optionNumber(parsed, 'git-count', config.gitCommitCount, 1, 100), - allowSummaryFallback: optionBoolean(parsed, 'summary-fallback', false), - includeSummaryLlm: !optionBoolean(parsed, 'no-summary-llm', false), - nlMode: optionNlMode(parsed, config.nlMode), - markdownMode: optionLlmMode(parsed, 'markdown-mode', config.markdownMode), - communicationMode: optionLlmMode(parsed, 'communication-mode', config.communicationMode), - documentExcludes: optionList(parsed, 'doc-excludes', config.documentExcludes), - taskSynthesisMode: optionPipelineTaskMode(parsed), - includeCommunication: !optionBoolean(parsed, 'no-communication', false), - projectDirectory: optionString(parsed, 'project-dir') ?? 'project', - communicationTicket: optionNullableString(parsed, 'communication-ticket', null), - cycleFile: optionNullableString(parsed, 'cycle', null), - }; - const result = await runPipeline(options, config); - reportPipelineDegradation(result.manifest); - process.stdout.write(`${JSON.stringify({ ...result, manifest: result.manifest }, null, 2)}\n`); - return; + const result = await executeAction('evaluate_code_change', { + root: optionString(parsed, 'root') ?? config.root, + planPath, + beforeGraphPath, + beforeDiagnosticsPath: optionString(parsed, 'before-diagnostics'), + afterGraphPath, + afterDiagnosticsPath: optionString(parsed, 'after-diagnostics'), + output, + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handleCloseCodeChange(parsed: ParsedArgs, config: ReturnType): Promise { + const inputPath = parsed.positionals[0]; + const beforeGraphPath = optionString(parsed, 'before-graph'); + const afterGraphPath = optionString(parsed, 'after-graph'); + const output = optionString(parsed, 'out'); + if (!inputPath || !beforeGraphPath || !afterGraphPath || !output) { + throw new Error('Usage: t2c close-code-change --before-graph before.json --after-graph after.json --out close.json'); } - throw new Error(`Unknown command: ${command}. Run t2c help.`); + const result = await executeAction('close_code_change', { + root: optionString(parsed, 'root') ?? config.root, + inputPath, + beforeGraphPath, + beforeDiagnosticsPath: optionString(parsed, 'before-diagnostics'), + afterGraphPath, + afterDiagnosticsPath: optionString(parsed, 'after-diagnostics'), + output, + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handleCompareWorkspace(parsed: ParsedArgs, config: ReturnType): Promise { + const root = resolvePipelineRoot(parsed, config); + const result = await compareWorkspaceIntent({ + ...buildWorkspaceComparisonOptions(parsed, config, root), + }, config); + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +async function handlePipeline(parsed: ParsedArgs, config: ReturnType): Promise { + const root = resolvePipelineRoot(parsed, config); + const options = buildPipelineOptions(parsed, config, root, optionNullableString(parsed, 'task', null)); + const result = await runPipeline(options, config); + reportPipelineDegradation(result.manifest); + process.stdout.write(`${JSON.stringify({ ...result, manifest: result.manifest }, null, 2)}\n`); } async function handleWatch(parsed: ParsedArgs, config: ReturnType): Promise { - const root = path.resolve(parsed.positionals[0] ?? config.root); - const taskFile = parsed.options.has('task') - ? optionNullableString(parsed, 'task', null) - : await pathExists(path.join(root, 'TASK.md')) ? 'TASK.md' : null; - const pipeline: PipelineOptions = { + const root = resolvePipelineRoot(parsed, config); + const taskFile = await resolveWatchTaskFile(parsed, root); + const pipeline = buildPipelineOptions(parsed, config, root, taskFile); + + const controller = new AbortController(); + const stop = (): void => controller.abort(); + process.once('SIGINT', stop); + process.once('SIGTERM', stop); + + await watchRepository({ + root, + pipeline, + minIntervalMs: optionNumber(parsed, 'interval', 60, 0, 86_400) * 1000, + scanIntervalMs: optionNumber(parsed, 'scan-interval', 2, 1, 3_600) * 1000, + runOnStart: !optionBoolean(parsed, 'no-initial-report', false), + signal: controller.signal, + onEvent: (event) => process.stderr.write(`${formatWatchEvent(event)}\n`), + }, config); +} + +function resolvePipelineRoot(parsed: ParsedArgs, config: ReturnType): string { + return path.resolve(parsed.positionals[0] ?? config.root); +} + +function buildPipelineOptions( + parsed: ParsedArgs, + config: ReturnType, + root: string, + taskFile: string | null, +): PipelineOptions { + return { root, taskFile, + ...buildCommonPipelineOptions(parsed, config), + }; +} + +function buildCommonPipelineOptions( + parsed: ParsedArgs, + config: ReturnType, +): Omit { + return { todoFile: optionNullableString(parsed, 'todo', 'TODO.md'), changelogFile: optionNullableString(parsed, 'changelog', 'CHANGELOG.md'), documentPatterns: optionList(parsed, 'docs', config.documentPatterns), @@ -396,21 +400,45 @@ async function handleWatch(parsed: ParsedArgs, config: ReturnType controller.abort(); - process.once('SIGINT', stop); - process.once('SIGTERM', stop); +async function resolveWatchTaskFile(parsed: ParsedArgs, root: string): Promise { + if (parsed.options.has('task')) return optionNullableString(parsed, 'task', null); + return (await pathExists(path.join(root, 'TASK.md'))) ? 'TASK.md' : null; +} - await watchRepository({ +function buildWorkspaceComparisonOptions( + parsed: ParsedArgs, + config: ReturnType, + root: string, +): { + root: string; + baseRef: string; + taskFile: string | null; + todoFile: string | null; + changelogFile: string | null; + documentPatterns: string[]; + documentExcludes: string[]; + includeDocumentationLlm: boolean; + markdownMode: LlmExtractionMode; + communicationMode: LlmExtractionMode; + outputDir: string; + gitCommitCount: number; +} { + return { root, - pipeline, - minIntervalMs: optionNumber(parsed, 'interval', 60, 0, 86_400) * 1000, - scanIntervalMs: optionNumber(parsed, 'scan-interval', 2, 1, 3_600) * 1000, - runOnStart: !optionBoolean(parsed, 'no-initial-report', false), - signal: controller.signal, - onEvent: (event) => process.stderr.write(`${formatWatchEvent(event)}\n`), - }, config); + baseRef: optionString(parsed, 'base') ?? 'origin/main', + taskFile: optionNullableString(parsed, 'task', null), + todoFile: optionNullableString(parsed, 'todo', 'TODO.md'), + changelogFile: optionNullableString(parsed, 'changelog', 'CHANGELOG.md'), + documentPatterns: optionList(parsed, 'docs', config.documentPatterns), + documentExcludes: optionList(parsed, 'doc-excludes', config.documentExcludes), + includeDocumentationLlm: optionBoolean(parsed, 'docs-llm', false), + markdownMode: optionLlmMode(parsed, 'markdown-mode', config.markdownMode), + communicationMode: optionLlmMode(parsed, 'communication-mode', config.communicationMode), + outputDir: optionString(parsed, 'out') ?? config.outputDir, + gitCommitCount: optionNumber(parsed, 'git-count', config.gitCommitCount, 1, 100), + }; } function formatWatchEvent(event: WatchEvent): string { @@ -434,60 +462,16 @@ function formatWatchEvent(event: WatchEvent): string { } async function handleDiff(parsed: ParsedArgs, config: ReturnType): Promise { - const mode = (optionString(parsed, 'mode') ?? 'graph').toLowerCase(); - const out = optionString(parsed, 'out'); - const svg = optionString(parsed, 'svg'); - const html = optionString(parsed, 'html'); - + const mode = parseDiffMode(parsed); if (mode === 'graph') { - const beforeFile = parsed.positionals[0]; - const afterFile = parsed.positionals[1]; - if (!beforeFile || !afterFile) { - throw new Error('Usage: t2c diff [--out diff.json] [--svg diff.svg]'); - } - const [before, after] = await Promise.all([ - readJson(path.resolve(beforeFile)), - readJson(path.resolve(afterFile)), - ]); - const diff = diffIntentGraphs(before, after); - if (out) await writeJson(path.resolve(out), diff); - if (svg) await writeText(path.resolve(svg), renderGraphDiffSvg(diff, { maxItems: optionNumber(parsed, 'max-items', 18, 1, 100) })); - if (!out && !svg) process.stdout.write(`${JSON.stringify(diff, null, 2)}\n`); + await handleGraphDiff(parsed, config); return; } - - const context = optionNumber(parsed, 'context', 3, 0, 100); + const { diffs, title } = await buildDiffPayload(parsed, config, mode); + const out = optionString(parsed, 'out'); + const svg = optionString(parsed, 'svg'); + const html = optionString(parsed, 'html'); const maxRows = optionNumber(parsed, 'max-rows', 400, 1, 4000); - let diffs: FileDiff[]; - let title: string; - - if (mode === 'files') { - const beforeFile = parsed.positionals[0]; - const afterFile = parsed.positionals[1]; - if (!beforeFile || !afterFile) { - throw new Error('Usage: t2c diff --mode files [--svg diff.svg] [--html diff.html]'); - } - const [beforeText, afterText] = await Promise.all([ - readText(path.resolve(beforeFile), config.maxFileBytes), - readText(path.resolve(afterFile), config.maxFileBytes), - ]); - diffs = [diffText(beforeText, afterText, { beforePath: beforeFile, afterPath: afterFile, path: afterFile, context })]; - title = `${beforeFile} → ${afterFile}`; - } else if (mode === 'git') { - const root = path.resolve(parsed.positionals[0] ?? config.root); - const result = await collectGitDiff({ - root, - revision: optionString(parsed, 'rev') ?? 'HEAD', - staged: optionBoolean(parsed, 'staged', false), - context, - maxFiles: optionNumber(parsed, 'max-files', 50, 1, 500), - }); - for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\n`); - diffs = result.diffs; - title = `git diff ${result.staged ? '--cached ' : ''}${result.revision}`; - } else { - throw new Error(`Unknown --mode ${mode}. Expected graph, files or git.`); - } if (out) await writeJson(path.resolve(out), diffs); if (svg) await writeText(path.resolve(svg), renderTextDiffSvg(diffs, { title, maxRows })); @@ -497,6 +481,69 @@ async function handleDiff(parsed: ParsedArgs, config: ReturnType): Promise { + const beforeFile = parsed.positionals[0]; + const afterFile = parsed.positionals[1]; + if (!beforeFile || !afterFile) { + throw new Error('Usage: t2c diff [--out diff.json] [--svg diff.svg]'); + } + const [before, after] = await Promise.all([ + readJson(path.resolve(beforeFile)), + readJson(path.resolve(afterFile)), + ]); + const diff = diffIntentGraphs(before, after); + const out = optionString(parsed, 'out'); + const svg = optionString(parsed, 'svg'); + if (out) await writeJson(path.resolve(out), diff); + if (svg) await writeText(path.resolve(svg), renderGraphDiffSvg(diff, { maxItems: optionNumber(parsed, 'max-items', 18, 1, 100 })); + if (!out && !svg) process.stdout.write(`${JSON.stringify(diff, null, 2)}\n`); +} + +async function buildDiffPayload(parsed: ParsedArgs, config: ReturnType, mode: DiffMode): Promise { + if (mode === 'files') return buildFileDiff(parsed, config); + return buildGitDiff(parsed, config); +} + +async function buildFileDiff(parsed: ParsedArgs, config: ReturnType): Promise { + const beforeFile = parsed.positionals[0]; + const afterFile = parsed.positionals[1]; + if (!beforeFile || !afterFile) { + throw new Error('Usage: t2c diff --mode files [--svg diff.svg] [--html diff.html]'); + } + const context = optionNumber(parsed, 'context', 3, 0, 100); + const [beforeText, afterText] = await Promise.all([ + readText(path.resolve(beforeFile), config.maxFileBytes), + readText(path.resolve(afterFile), config.maxFileBytes), + ]); + return { + diffs: [diffText(beforeText, afterText, { beforePath: beforeFile, afterPath: afterFile, path: afterFile, context })], + title: `${beforeFile} → ${afterFile}`, + }; +} + +async function buildGitDiff(parsed: ParsedArgs, config: ReturnType): Promise { + const context = optionNumber(parsed, 'context', 3, 0, 100); + const root = path.resolve(parsed.positionals[0] ?? config.root); + const result = await collectGitDiff({ + root, + revision: optionString(parsed, 'rev') ?? 'HEAD', + staged: optionBoolean(parsed, 'staged', false), + context, + maxFiles: optionNumber(parsed, 'max-files', 50, 1, 500), + }); + for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\n`); + return { + diffs: result.diffs, + title: `git diff ${result.staged ? '--cached ' : ''}${result.revision}`, + }; +} + async function handleReality(parsed: ParsedArgs, config: ReturnType): Promise { const graphFile = parsed.positionals[0]; if (!graphFile) { @@ -527,72 +574,86 @@ async function handleExtract(parsed: ParsedArgs, config: ReturnType [--text "..."] [--out records.jsonl]'); - const result = await extractNlIntentAudited( - { root, sourcePath: file ?? 'cli-input.md', ...(inline ? { text: inline } : {}) }, - config, - optionNlMode(parsed, config.nlMode), - ); - await emitExtraction(result, out); - process.stderr.write(`NL -> DSL: ${result.audit.status} (${result.audit.effectiveMode})\n`); - return; - } - if (extractor === 'git') { - const result = await extractGitIntent({ root, count: optionNumber(parsed, 'count', config.gitCommitCount, 1, 100) }, config); - await emitExtraction(result, out); - return; - } - if (extractor === 'ast') { - const result = await extractAstIntent({ root: path.resolve(parsed.positionals[0] ?? root) }, config); - await emitExtraction(result, out); - return; - } - if (extractor === 'config') { - const result = await extractConfigurationIntent(path.resolve(parsed.positionals[0] ?? root), config); - await emitExtraction(result, out); - return; - } - if (extractor === 'runtime') { - const cycle = parsed.positionals[0]; - if (!cycle) throw new Error('Usage: t2c extract runtime [--out runtime.intent.jsonl]'); - const result = await extractRuntimeCycleIntent(cycle, config, root); - await emitExtraction(result, out); - return; - } - if (extractor === 'markdown') { - const result = await extractMarkdownIntentAudited({ - root, - todoPath: optionNullableString(parsed, 'todo', 'TODO.md'), - changelogPath: optionNullableString(parsed, 'changelog', 'CHANGELOG.md'), - }, config, optionLlmMode(parsed, 'markdown-mode', config.markdownMode)); - await emitExtraction(result, out); - process.stderr.write(`TODO/CHANGELOG -> DSL: ${result.audit.status} (${result.audit.effectiveMode})\n`); - return; - } - if (extractor === 'docs') { - const result = await extractDocumentationIntent({ - root, - patterns: optionList(parsed, 'patterns', config.documentPatterns), - excludes: optionList(parsed, 'excludes', config.documentExcludes), - }, config); - await emitExtraction(result, out); - process.stderr.write(`documentation -> DSL: ${result.audit.status} (${result.audit.effectiveMode}), runtime ${result.audit.runtimeVersion}\n`); - return; - } - if (extractor === 'communication') { - const result = await extractCommunicationIntentAudited({ - root, - projectDir: optionString(parsed, 'project-dir') ?? 'project', - ticket: optionNullableString(parsed, 'ticket', null), - }, config, optionLlmMode(parsed, 'communication-mode', config.communicationMode)); - await emitExtraction(result, out); - process.stderr.write(`communication -> DSL: ${result.audit.status} (${result.audit.effectiveMode})\n`); - return; + const handlers: Record = { + nl: handleExtractNl, + git: handleExtractGit, + ast: handleExtractAst, + config: handleExtractConfig, + runtime: handleExtractRuntime, + markdown: handleExtractMarkdown, + docs: handleExtractDocs, + communication: handleExtractCommunication, + }; + const handler = handlers[extractor]; + if (!handler) { + throw new Error('Usage: t2c extract ...'); } - throw new Error('Usage: t2c extract ...'); + await handler(parsed, root, out, config); +} + +async function handleExtractNl(parsed: ParsedArgs, root: string, out: string | null, config: ReturnType): Promise { + const file = parsed.positionals[0]; + const inline = optionString(parsed, 'text'); + if (!file && !inline) throw new Error('Usage: t2c extract nl [--text "..."] [--out records.jsonl]'); + const result = await extractNlIntentAudited( + { root, sourcePath: file ?? 'cli-input.md', ...(inline ? { text: inline } : {}) }, + config, + optionNlMode(parsed, config.nlMode), + ); + await emitExtraction(result, out); + process.stderr.write(`NL -> DSL: ${result.audit.status} (${result.audit.effectiveMode})\n`); +} + +async function handleExtractGit(parsed: ParsedArgs, root: string, out: string | null, config: ReturnType): Promise { + const result = await extractGitIntent({ root, count: optionNumber(parsed, 'count', config.gitCommitCount, 1, 100) }, config); + await emitExtraction(result, out); +} + +async function handleExtractAst(parsed: ParsedArgs, root: string, out: string | null, config: ReturnType): Promise { + const result = await extractAstIntent({ root: path.resolve(parsed.positionals[0] ?? root) }, config); + await emitExtraction(result, out); +} + +async function handleExtractConfig(parsed: ParsedArgs, root: string, out: string | null, config: ReturnType): Promise { + const result = await extractConfigurationIntent(path.resolve(parsed.positionals[0] ?? root), config); + await emitExtraction(result, out); +} + +async function handleExtractRuntime(parsed: ParsedArgs, root: string, out: string | null, config: ReturnType): Promise { + const cycle = parsed.positionals[0]; + if (!cycle) throw new Error('Usage: t2c extract runtime [--out runtime.intent.jsonl]'); + const result = await extractRuntimeCycleIntent(cycle, config, root); + await emitExtraction(result, out); +} + +async function handleExtractMarkdown(parsed: ParsedArgs, root: string, out: string | null, config: ReturnType): Promise { + const result = await extractMarkdownIntentAudited({ + root, + todoPath: optionNullableString(parsed, 'todo', 'TODO.md'), + changelogPath: optionNullableString(parsed, 'changelog', 'CHANGELOG.md'), + }, config, optionLlmMode(parsed, 'markdown-mode', config.markdownMode)); + await emitExtraction(result, out); + process.stderr.write(`TODO/CHANGELOG -> DSL: ${result.audit.status} (${result.audit.effectiveMode})\n`); +} + +async function handleExtractDocs(parsed: ParsedArgs, root: string, out: string | null, config: ReturnType): Promise { + const result = await extractDocumentationIntent({ + root, + patterns: optionList(parsed, 'patterns', config.documentPatterns), + excludes: optionList(parsed, 'excludes', config.documentExcludes), + }, config); + await emitExtraction(result, out); + process.stderr.write(`documentation -> DSL: ${result.audit.status} (${result.audit.effectiveMode}), runtime ${result.audit.runtimeVersion}\n`); +} + +async function handleExtractCommunication(parsed: ParsedArgs, root: string, out: string | null, config: ReturnType): Promise { + const result = await extractCommunicationIntentAudited({ + root, + projectDir: optionString(parsed, 'project-dir') ?? 'project', + ticket: optionNullableString(parsed, 'ticket', null), + }, config, optionLlmMode(parsed, 'communication-mode', config.communicationMode)); + await emitExtraction(result, out); + process.stderr.write(`communication -> DSL: ${result.audit.status} (${result.audit.effectiveMode})\n`); } async function handleCommunication(parsed: ParsedArgs, config: ReturnType): Promise { diff --git a/src/communication/llm.ts b/src/communication/llm.ts index 83cb144..b744ca4 100644 --- a/src/communication/llm.ts +++ b/src/communication/llm.ts @@ -1,514 +1 @@ -import { promises as fs } from 'node:fs'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; -import type { T2CConfig } from '../config/env.js'; -import { createIntentId, sha256, stableStringify } from '../core/id.js'; -import { pathExists } from '../core/io.js'; -import { buildRecord, withRecordGeneration } from '../core/record.js'; -import type { - GroundedGenerationMetadata, - IntentAction, - IntentRecord, - LlmExtractionMode, - LlmResponseMetadata, - PipelineStageAudit, -} from '../core/types.js'; -import { classifyLlmFailure, rejectedLlmResponseMetadata, type LlmFailureReason } from '../llm/failure.js'; -import { openRouterAuditConfiguration } from '../llm/audit.js'; -import { OpenRouterClient, type OpenRouterResult } from '../llm/openrouter.js'; -import { StructuredResponseError, structuredSchema as s, type StructuredSchema } from '../llm/structured-schema.js'; -import { T2C_VERSION } from '../version.js'; -import { - extractCommunicationIntent, - type CommunicationExtractionOptions, - type CommunicationRole, -} from '../extractors/communication.js'; - -const ACTIONS = [ - 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', - 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', -] as const satisfies readonly IntentAction[]; - -interface RawCommunicationEnrichment { - recordId: string; - action: IntentAction; - object: string; - polarity: 'positive' | 'negative'; - confidence: number; - basis: string[]; - target: { paths: string[]; symbols: string[]; versions: string[] }; - topics: string[]; -} - -interface RawParticipantSynthesis { - participantKey: string; - summary: string; - commitments: string[]; - risks: string[]; - recordIds: string[]; - confidence: number; -} - -interface RawCommunicationResponse { - enrichments: RawCommunicationEnrichment[]; - participantSyntheses: RawParticipantSynthesis[]; -} - -export interface ParticipantCommunicationSynthesis { - schemaVersion: 't2c.participant-synthesis/v1'; - id: string; - participant: string; - role: CommunicationRole; - tickets: string[]; - summary: string; - commitments: string[]; - risks: string[]; - recordIds: string[]; - confidence: number; - generation: GroundedGenerationMetadata; -} - -export interface AuditedCommunicationExtractionResult { - schemaVersion: 't2c.communication-enrichment/v1'; - records: IntentRecord[]; - participants: ParticipantCommunicationSynthesis[]; - warnings: string[]; - audit: PipelineStageAudit; -} - -export class CommunicationLlmRequiredError extends Error { - constructor(message: string, readonly audit: PipelineStageAudit) { - super(message); - this.name = 'CommunicationLlmRequiredError'; - } -} - -export async function extractCommunicationIntentAudited( - options: CommunicationExtractionOptions, - config: T2CConfig, - mode: LlmExtractionMode = config.communicationMode, -): Promise { - const startedAt = Date.now(); - const deterministic = await extractCommunicationIntent(options, config); - if (deterministic.records.length === 0) { - return { - schemaVersion: 't2c.communication-enrichment/v1', - ...deterministic, - participants: [], - audit: audit('skipped', mode === 'deterministic' ? 'deterministic' : 'llm', 'none', false, - deterministic.records.length, deterministic.warnings.length, null, - { code: 'NO_COMMUNICATION_RECORDS', message: 'No communication records were available for enrichment' }, - Date.now() - startedAt, [], config, options), - }; - } - if (mode === 'deterministic') { - const records = markDeterministic(deterministic.records, false, null); - return { - schemaVersion: 't2c.communication-enrichment/v1', records, - participants: deterministicSyntheses(records, deterministicGeneration()), - warnings: deterministic.warnings, - audit: audit(deterministic.warnings.length ? 'partial' : 'succeeded', 'deterministic', 'deterministic', false, records.length, - deterministic.warnings.length, null, null, Date.now() - startedAt, [], config, options), - }; - } - - const client = new OpenRouterClient(config.openRouter); - if (!client.isConfigured()) { - return fallbackOrThrow(deterministic.records, deterministic.warnings, config, options, mode, startedAt, { - code: 'LLM_NOT_CONFIGURED', message: 'OPENROUTER_API_KEY is not configured', - }); - } - try { - const groups = participantGroups(deterministic.records); - const { completion, responses } = await enrichWithCorrection(client, [ - { role: 'system', content: await readPrompt() }, - { role: 'user', content: JSON.stringify(promptPayload(deterministic.records, groups)) }, - ], config.openRouter.communicationModel); - const response = completion.value; - const enrichments = validateEnrichments(response.enrichments, deterministic.records); - const enrichedByOriginal = new Map(); - for (const record of deterministic.records) { - enrichedByOriginal.set(record.id, enrichRecord(record, enrichments.get(record.id)!, config, completion.metadata)); - } - const generation = llmGeneration(config, mode, completion.metadata); - const participants = materializeSyntheses( - response.participantSyntheses, - groups, - enrichedByOriginal, - generation, - ); - return { - schemaVersion: 't2c.communication-enrichment/v1', - records: [...enrichedByOriginal.values()], - participants, - warnings: deterministic.warnings, - audit: audit(deterministic.warnings.length ? 'partial' : 'succeeded', 'llm', 'llm', false, deterministic.records.length, - deterministic.warnings.length, config.openRouter.communicationModel, null, - Date.now() - startedAt, responses, config, options), - }; - } catch (error) { - const failure = error instanceof CommunicationAttemptError ? error.failure : error; - const responses = error instanceof CommunicationAttemptError - ? error.responses - : rejectedLlmResponseMetadata(error); - return fallbackOrThrow( - deterministic.records, deterministic.warnings, config, options, mode, startedAt, - classifyLlmFailure(failure), responses, - ); - } -} - -class CommunicationAttemptError extends Error { - constructor(readonly failure: unknown, readonly responses: LlmResponseMetadata[]) { - super(failure instanceof Error ? failure.message : String(failure)); - this.name = 'CommunicationAttemptError'; - } -} - -async function enrichWithCorrection( - client: OpenRouterClient, - baseMessages: Array<{ role: 'system' | 'user'; content: string }>, - model: string, -): Promise<{ completion: OpenRouterResult; responses: LlmResponseMetadata[] }> { - const responses: LlmResponseMetadata[] = []; - let correction: string | null = null; - - for (let attempt = 0; attempt < 2; attempt += 1) { - try { - const completion = await client.chatStructuredWithMetadata([ - ...baseMessages, - ...(correction - ? [{ - role: 'user' as const, - content: `The previous response was rejected: ${correction}\n` - + 'Correct exactly that violation and re-emit the full object. Do not add, rename, or omit properties.\n' - + `The exact required JSON Schema is: ${JSON.stringify(COMMUNICATION_RESPONSE_CONTRACT.jsonSchema)}`, - }] - : []), - ], 't2c_communication_enrichment', COMMUNICATION_RESPONSE_CONTRACT, model); - responses.push(completion.metadata); - return { completion, responses }; - } catch (error) { - if (error instanceof StructuredResponseError) { - if (error.responseMetadata) responses.push(error.responseMetadata); - if (attempt === 0) { - correction = error.message; - continue; - } - } - throw new CommunicationAttemptError(error, [...responses]); - } - } - - throw new CommunicationAttemptError(new Error('Communication correction retry budget exhausted'), responses); -} - -async function fallbackOrThrow( - records: IntentRecord[], - warnings: string[], - config: T2CConfig, - options: CommunicationExtractionOptions, - mode: LlmExtractionMode, - startedAt: number, - reason: LlmFailureReason, - responses: LlmResponseMetadata[] = [], -): Promise { - const failed = audit('failed', 'llm', 'none', true, 0, warnings.length + 1, - config.openRouter.communicationModel, reason, Date.now() - startedAt, responses, config, options); - if (mode === 'require-llm') { - throw new CommunicationLlmRequiredError(`Communication enrichment requires LLM: ${reason.message}`, failed); - } - const warning = `Communication enrichment used deterministic fallback (${reason.code}): ${reason.message}`; - const marked = markDeterministic(records, true, reason.code); - return { - schemaVersion: 't2c.communication-enrichment/v1', - records: marked, - participants: deterministicSyntheses(marked, fallbackGeneration(reason.code)), - warnings: [...warnings, warning], - audit: audit('fallback', 'llm', 'deterministic', true, marked.length, warnings.length + 1, - config.openRouter.communicationModel, reason, Date.now() - startedAt, responses, config, options), - }; -} - -interface ParticipantGroup { - key: string; - participant: string; - role: CommunicationRole; - tickets: string[]; - records: IntentRecord[]; -} - -function participantGroups(records: IntentRecord[]): ParticipantGroup[] { - const grouped = new Map(); - for (const record of records) { - const participant = String(record.metadata.participant ?? record.statement.actor ?? `unknown:${record.id}`); - const role = roleOf(record); - const key = stableStringify({ participant, role }); - const values = grouped.get(key); - if (values) values.push(record); - else grouped.set(key, [record]); - } - return [...grouped.values()].map((values, index) => ({ - key: `participant-${index + 1}`, - participant: String(values[0]?.metadata.participant ?? values[0]?.statement.actor ?? 'unknown'), - role: roleOf(values[0]), - tickets: [...new Set(values.flatMap((record) => record.statement.target.tickets))].sort(), - records: [...values].sort((left, right) => left.id.localeCompare(right.id)), - })).sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)) - .map((group, index) => ({ ...group, key: `participant-${index + 1}` })); -} - -function promptPayload(records: IntentRecord[], groups: ParticipantGroup[]): Record { - return { - records: records.map((record) => ({ - recordId: record.id, - participantKey: groups.find((group) => group.records.some((item) => item.id === record.id))?.key, - text: record.statement.text, - deterministic: { - action: record.statement.action, - object: record.statement.object, - polarity: record.statement.polarity, - paths: record.statement.target.paths, - symbols: record.statement.target.symbols, - versions: record.statement.target.versions, - }, - })), - participants: groups.map((group) => ({ - participantKey: group.key, - recordIds: group.records.map((record) => record.id), - })), - }; -} - -function validateEnrichments(values: RawCommunicationEnrichment[] | undefined, records: IntentRecord[]): Map { - if (!Array.isArray(values)) throw new Error('Structured response does not contain communication enrichments'); - const expected = new Set(records.map((record) => record.id)); - const output = new Map(); - for (const value of values) { - if (!expected.has(value.recordId)) throw new Error(`Structured response contains unknown recordId: ${value.recordId}`); - if (output.has(value.recordId)) throw new Error(`Structured response duplicates recordId: ${value.recordId}`); - output.set(value.recordId, value); - } - if (output.size !== expected.size) throw new Error(`Structured response returned ${output.size} of ${expected.size} enrichments`); - return output; -} - -function materializeSyntheses( - values: RawParticipantSynthesis[] | undefined, - groups: ParticipantGroup[], - enrichedByOriginal: Map, - generation: GroundedGenerationMetadata, -): ParticipantCommunicationSynthesis[] { - if (!Array.isArray(values)) throw new Error('Structured response does not contain participantSyntheses'); - const byKey = new Map(groups.map((group) => [group.key, group])); - const seen = new Set(); - const output = values.map((raw) => { - const group = byKey.get(raw.participantKey); - if (!group) throw new Error(`Structured response contains unknown participantKey: ${raw.participantKey}`); - if (seen.has(raw.participantKey)) throw new Error(`Structured response duplicates participantKey: ${raw.participantKey}`); - seen.add(raw.participantKey); - const permitted = new Set(group.records.map((record) => record.id)); - if (!raw.recordIds.length || raw.recordIds.some((id) => !permitted.has(id))) { - throw new Error(`Participant synthesis ${raw.participantKey} contains ungrounded recordIds`); - } - const recordIds = raw.recordIds.map((id) => enrichedByOriginal.get(id)?.id) - .filter((id): id is string => Boolean(id)).sort(); - return synthesis({ - participant: group.participant, - role: group.role, - tickets: group.tickets, - summary: raw.summary, - commitments: raw.commitments, - risks: raw.risks, - recordIds, - confidence: raw.confidence, - generation, - }); - }); - if (seen.size !== groups.length) throw new Error(`Structured response returned ${seen.size} of ${groups.length} participant syntheses`); - return output.sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)); -} - -function enrichRecord( - record: IntentRecord, - enrichment: RawCommunicationEnrichment, - config: T2CConfig, - response: LlmResponseMetadata, -): IntentRecord { - return buildRecord({ - kind: record.statement.kind, - actor: record.statement.actor, - action: enrichment.action, - subject: record.statement.subject, - object: enrichment.object.trim() || record.statement.object, - target: { - paths: [...record.statement.target.paths, ...enrichment.target.paths], - symbols: [...record.statement.target.symbols, ...enrichment.target.symbols], - // Ticket ownership is structural and never accepted from the model. - tickets: record.statement.target.tickets, - versions: [...record.statement.target.versions, ...enrichment.target.versions], - }, - modality: record.statement.modality, - polarity: enrichment.polarity, - text: record.statement.text, - lifecycle: record.lifecycle.status, - sourceKind: record.source.kind, - sourcePath: record.source.path, - sourceLines: record.source.lines, - revision: record.source.revision, - symbol: record.source.symbol, - commitIndex: record.source.commitIndex, - extractor: 't2c/project-communication-openrouter@1', - rawExcerpt: record.source.rawExcerpt, - // A plan/declaration/claim cannot become a fact through model prose. - epistemicClass: record.epistemic.class, - confidence: Math.min(0.85, Math.max(0.05, enrichment.confidence)), - basis: [...record.epistemic.basis, 'openrouter_communication_enrichment', ...enrichment.basis], - observedAt: record.observedAt, - generation: { - requested: 'llm', used: 'llm', provider: response.provider ?? 'openrouter', - model: response.model ?? config.openRouter.communicationModel, responseId: response.responseId, - }, - metadata: { - ...record.metadata, - llmUsed: true, - topics: sortedUnique(enrichment.topics), - response, - }, - }); -} - -function deterministicSyntheses(records: IntentRecord[], generation: GroundedGenerationMetadata): ParticipantCommunicationSynthesis[] { - return participantGroups(records).map((group) => synthesis({ - participant: group.participant, - role: group.role, - tickets: group.tickets, - summary: `${group.participant} (${group.role}) ma ${group.records.length} uziemionych rekordów komunikacji.`, - commitments: group.records.filter((record) => record.epistemic.class === 'plan') - .map((record) => record.statement.text), - risks: group.records.filter((record) => record.statement.polarity === 'negative') - .map((record) => record.statement.text), - recordIds: group.records.map((record) => record.id).sort(), - confidence: 1, - generation, - })); -} - -function synthesis(input: Omit): ParticipantCommunicationSynthesis { - const semantic = { - participant: input.participant, - role: input.role, - tickets: sortedUnique(input.tickets), - summary: input.summary.trim(), - commitments: sortedUnique(input.commitments), - risks: sortedUnique(input.risks), - recordIds: sortedUnique(input.recordIds), - }; - if (!semantic.summary || !semantic.recordIds.length) throw new Error('Participant synthesis requires a summary and record citations'); - return { - schemaVersion: 't2c.participant-synthesis/v1', - id: createIntentId(semantic, 'COMM-SYN'), - ...semantic, - confidence: Math.min(1, Math.max(0, input.confidence)), - generation: input.generation, - }; -} - -function markDeterministic(records: IntentRecord[], degraded: boolean, fallbackReason: string | null): IntentRecord[] { - return records.map((record) => { - const marked = withRecordGeneration(record, { - requested: degraded ? 'llm' : 'deterministic', used: 'deterministic', degraded, fallbackReason, - }); - return { ...marked, metadata: { ...marked.metadata, llmUsed: false } }; - }); -} - -function deterministicGeneration(): GroundedGenerationMetadata { - return { - generator: 't2c/participant-synthesis', generatorVersion: '1', - runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), - requestedMode: 'deterministic', effectiveMode: 'deterministic', degraded: false, - model: null, provider: null, responseId: null, - configurationFingerprint: sha256('t2c-communication-deterministic/v1'), reason: null, - }; -} - -function fallbackGeneration(reason: string): GroundedGenerationMetadata { - return { - generator: 't2c/participant-synthesis', generatorVersion: '1', - runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), - requestedMode: 'prefer-llm', effectiveMode: 'deterministic', degraded: true, - model: null, provider: null, responseId: null, - configurationFingerprint: sha256(stableStringify({ stage: 'communication', reason })), reason, - }; -} - -function llmGeneration(config: T2CConfig, mode: LlmExtractionMode, response: LlmResponseMetadata): GroundedGenerationMetadata { - return { - generator: 't2c/participant-synthesis', generatorVersion: '1', - runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), - requestedMode: mode, effectiveMode: 'llm', degraded: false, - model: response.model ?? config.openRouter.communicationModel, - provider: response.provider ?? 'openrouter', responseId: response.responseId, - configurationFingerprint: sha256(stableStringify(openRouterAuditConfiguration(config, config.openRouter.communicationModel))), - reason: null, - }; -} - -function audit( - status: PipelineStageAudit['status'], requestedMode: PipelineStageAudit['requestedMode'], - effectiveMode: PipelineStageAudit['effectiveMode'], degraded: boolean, recordCount: number, - warningCount: number, model: string | null, reason: PipelineStageAudit['reason'], durationMs: number, - responses: LlmResponseMetadata[], config: T2CConfig, options: CommunicationExtractionOptions, -): PipelineStageAudit { - return { - runtimeVersion: T2C_VERSION, - configuration: { - ...openRouterAuditConfiguration(config, model), - projectDirectory: options.projectDir ?? 'project', - ticket: options.ticket ?? null, - }, - status, requestedMode, effectiveMode, degraded, recordCount, warningCount, - model, durationMs, reason, responses, - }; -} - -function roleOf(record: IntentRecord | undefined): CommunicationRole { - return record?.metadata.participantRole === 'human' || record?.metadata.participantRole === 'agent' - ? record.metadata.participantRole - : 'unknown'; -} - -function sortedUnique(values: string[]): string[] { - return [...new Set(values.map((value) => value.trim()).filter(Boolean))].sort(); -} - -async function readPrompt(): Promise { - const promptPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../prompts', 'communication-to-intent.system.md'); - if (!(await pathExists(promptPath))) throw new Error(`Prompt not found: ${promptPath}`); - return fs.readFile(promptPath, 'utf8'); -} - -const communicationStrings = () => s.array(s.string()); -const COMMUNICATION_ENRICHMENT_CONTRACT = s.object({ - recordId: s.string(), - action: s.enum(ACTIONS), - object: s.string(), - polarity: s.enum(['positive', 'negative']), - confidence: s.number({ minimum: 0, maximum: 0.85 }), - basis: communicationStrings(), - target: s.object({ paths: communicationStrings(), symbols: communicationStrings(), versions: communicationStrings() }), - topics: communicationStrings(), -}) satisfies StructuredSchema; -const PARTICIPANT_SYNTHESIS_CONTRACT = s.object({ - participantKey: s.string(), - summary: s.string({ minLength: 1, pattern: '.*\\S.*' }), - commitments: communicationStrings(), - risks: communicationStrings(), - recordIds: communicationStrings(), - confidence: s.number({ minimum: 0, maximum: 0.85 }), -}) satisfies StructuredSchema; -const COMMUNICATION_RESPONSE_CONTRACT = s.object({ - enrichments: s.array(COMMUNICATION_ENRICHMENT_CONTRACT), - participantSyntheses: s.array(PARTICIPANT_SYNTHESIS_CONTRACT), -}) satisfies StructuredSchema; +export * from './llm/index.js'; diff --git a/src/communication/llm/implementation.ts b/src/communication/llm/implementation.ts new file mode 100644 index 0000000..0e1778e --- /dev/null +++ b/src/communication/llm/implementation.ts @@ -0,0 +1,514 @@ +import { promises as fs } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import type { T2CConfig } from '../../config/env.js'; +import { createIntentId, sha256, stableStringify } from '../../core/id.js'; +import { pathExists } from '../../core/io.js'; +import { buildRecord, withRecordGeneration } from '../../core/record.js'; +import type { + GroundedGenerationMetadata, + IntentAction, + IntentRecord, + LlmExtractionMode, + LlmResponseMetadata, + PipelineStageAudit, +} from '../../core/types.js'; +import { classifyLlmFailure, rejectedLlmResponseMetadata, type LlmFailureReason } from '../../llm/failure.js'; +import { openRouterAuditConfiguration } from '../../llm/audit.js'; +import { OpenRouterClient, type OpenRouterResult } from '../../llm/openrouter.js'; +import { StructuredResponseError, structuredSchema as s, type StructuredSchema } from '../../llm/structured-schema.js'; +import { T2C_VERSION } from '../../version.js'; +import { + extractCommunicationIntent, + type CommunicationExtractionOptions, + type CommunicationRole, +} from '../extractors/communication.js'; + +const ACTIONS = [ + 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', + 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', +] as const satisfies readonly IntentAction[]; + +interface RawCommunicationEnrichment { + recordId: string; + action: IntentAction; + object: string; + polarity: 'positive' | 'negative'; + confidence: number; + basis: string[]; + target: { paths: string[]; symbols: string[]; versions: string[] }; + topics: string[]; +} + +interface RawParticipantSynthesis { + participantKey: string; + summary: string; + commitments: string[]; + risks: string[]; + recordIds: string[]; + confidence: number; +} + +interface RawCommunicationResponse { + enrichments: RawCommunicationEnrichment[]; + participantSyntheses: RawParticipantSynthesis[]; +} + +export interface ParticipantCommunicationSynthesis { + schemaVersion: 't2c.participant-synthesis/v1'; + id: string; + participant: string; + role: CommunicationRole; + tickets: string[]; + summary: string; + commitments: string[]; + risks: string[]; + recordIds: string[]; + confidence: number; + generation: GroundedGenerationMetadata; +} + +export interface AuditedCommunicationExtractionResult { + schemaVersion: 't2c.communication-enrichment/v1'; + records: IntentRecord[]; + participants: ParticipantCommunicationSynthesis[]; + warnings: string[]; + audit: PipelineStageAudit; +} + +export class CommunicationLlmRequiredError extends Error { + constructor(message: string, readonly audit: PipelineStageAudit) { + super(message); + this.name = 'CommunicationLlmRequiredError'; + } +} + +export async function extractCommunicationIntentAudited( + options: CommunicationExtractionOptions, + config: T2CConfig, + mode: LlmExtractionMode = config.communicationMode, +): Promise { + const startedAt = Date.now(); + const deterministic = await extractCommunicationIntent(options, config); + if (deterministic.records.length === 0) { + return { + schemaVersion: 't2c.communication-enrichment/v1', + ...deterministic, + participants: [], + audit: audit('skipped', mode === 'deterministic' ? 'deterministic' : 'llm', 'none', false, + deterministic.records.length, deterministic.warnings.length, null, + { code: 'NO_COMMUNICATION_RECORDS', message: 'No communication records were available for enrichment' }, + Date.now() - startedAt, [], config, options), + }; + } + if (mode === 'deterministic') { + const records = markDeterministic(deterministic.records, false, null); + return { + schemaVersion: 't2c.communication-enrichment/v1', records, + participants: deterministicSyntheses(records, deterministicGeneration()), + warnings: deterministic.warnings, + audit: audit(deterministic.warnings.length ? 'partial' : 'succeeded', 'deterministic', 'deterministic', false, records.length, + deterministic.warnings.length, null, null, Date.now() - startedAt, [], config, options), + }; + } + + const client = new OpenRouterClient(config.openRouter); + if (!client.isConfigured()) { + return fallbackOrThrow(deterministic.records, deterministic.warnings, config, options, mode, startedAt, { + code: 'LLM_NOT_CONFIGURED', message: 'OPENROUTER_API_KEY is not configured', + }); + } + try { + const groups = participantGroups(deterministic.records); + const { completion, responses } = await enrichWithCorrection(client, [ + { role: 'system', content: await readPrompt() }, + { role: 'user', content: JSON.stringify(promptPayload(deterministic.records, groups)) }, + ], config.openRouter.communicationModel); + const response = completion.value; + const enrichments = validateEnrichments(response.enrichments, deterministic.records); + const enrichedByOriginal = new Map(); + for (const record of deterministic.records) { + enrichedByOriginal.set(record.id, enrichRecord(record, enrichments.get(record.id)!, config, completion.metadata)); + } + const generation = llmGeneration(config, mode, completion.metadata); + const participants = materializeSyntheses( + response.participantSyntheses, + groups, + enrichedByOriginal, + generation, + ); + return { + schemaVersion: 't2c.communication-enrichment/v1', + records: [...enrichedByOriginal.values()], + participants, + warnings: deterministic.warnings, + audit: audit(deterministic.warnings.length ? 'partial' : 'succeeded', 'llm', 'llm', false, deterministic.records.length, + deterministic.warnings.length, config.openRouter.communicationModel, null, + Date.now() - startedAt, responses, config, options), + }; + } catch (error) { + const failure = error instanceof CommunicationAttemptError ? error.failure : error; + const responses = error instanceof CommunicationAttemptError + ? error.responses + : rejectedLlmResponseMetadata(error); + return fallbackOrThrow( + deterministic.records, deterministic.warnings, config, options, mode, startedAt, + classifyLlmFailure(failure), responses, + ); + } +} + +class CommunicationAttemptError extends Error { + constructor(readonly failure: unknown, readonly responses: LlmResponseMetadata[]) { + super(failure instanceof Error ? failure.message : String(failure)); + this.name = 'CommunicationAttemptError'; + } +} + +async function enrichWithCorrection( + client: OpenRouterClient, + baseMessages: Array<{ role: 'system' | 'user'; content: string }>, + model: string, +): Promise<{ completion: OpenRouterResult; responses: LlmResponseMetadata[] }> { + const responses: LlmResponseMetadata[] = []; + let correction: string | null = null; + + for (let attempt = 0; attempt < 2; attempt += 1) { + try { + const completion = await client.chatStructuredWithMetadata([ + ...baseMessages, + ...(correction + ? [{ + role: 'user' as const, + content: `The previous response was rejected: ${correction}\n` + + 'Correct exactly that violation and re-emit the full object. Do not add, rename, or omit properties.\n' + + `The exact required JSON Schema is: ${JSON.stringify(COMMUNICATION_RESPONSE_CONTRACT.jsonSchema)}`, + }] + : []), + ], 't2c_communication_enrichment', COMMUNICATION_RESPONSE_CONTRACT, model); + responses.push(completion.metadata); + return { completion, responses }; + } catch (error) { + if (error instanceof StructuredResponseError) { + if (error.responseMetadata) responses.push(error.responseMetadata); + if (attempt === 0) { + correction = error.message; + continue; + } + } + throw new CommunicationAttemptError(error, [...responses]); + } + } + + throw new CommunicationAttemptError(new Error('Communication correction retry budget exhausted'), responses); +} + +async function fallbackOrThrow( + records: IntentRecord[], + warnings: string[], + config: T2CConfig, + options: CommunicationExtractionOptions, + mode: LlmExtractionMode, + startedAt: number, + reason: LlmFailureReason, + responses: LlmResponseMetadata[] = [], +): Promise { + const failed = audit('failed', 'llm', 'none', true, 0, warnings.length + 1, + config.openRouter.communicationModel, reason, Date.now() - startedAt, responses, config, options); + if (mode === 'require-llm') { + throw new CommunicationLlmRequiredError(`Communication enrichment requires LLM: ${reason.message}`, failed); + } + const warning = `Communication enrichment used deterministic fallback (${reason.code}): ${reason.message}`; + const marked = markDeterministic(records, true, reason.code); + return { + schemaVersion: 't2c.communication-enrichment/v1', + records: marked, + participants: deterministicSyntheses(marked, fallbackGeneration(reason.code)), + warnings: [...warnings, warning], + audit: audit('fallback', 'llm', 'deterministic', true, marked.length, warnings.length + 1, + config.openRouter.communicationModel, reason, Date.now() - startedAt, responses, config, options), + }; +} + +interface ParticipantGroup { + key: string; + participant: string; + role: CommunicationRole; + tickets: string[]; + records: IntentRecord[]; +} + +function participantGroups(records: IntentRecord[]): ParticipantGroup[] { + const grouped = new Map(); + for (const record of records) { + const participant = String(record.metadata.participant ?? record.statement.actor ?? `unknown:${record.id}`); + const role = roleOf(record); + const key = stableStringify({ participant, role }); + const values = grouped.get(key); + if (values) values.push(record); + else grouped.set(key, [record]); + } + return [...grouped.values()].map((values, index) => ({ + key: `participant-${index + 1}`, + participant: String(values[0]?.metadata.participant ?? values[0]?.statement.actor ?? 'unknown'), + role: roleOf(values[0]), + tickets: [...new Set(values.flatMap((record) => record.statement.target.tickets))].sort(), + records: [...values].sort((left, right) => left.id.localeCompare(right.id)), + })).sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)) + .map((group, index) => ({ ...group, key: `participant-${index + 1}` })); +} + +function promptPayload(records: IntentRecord[], groups: ParticipantGroup[]): Record { + return { + records: records.map((record) => ({ + recordId: record.id, + participantKey: groups.find((group) => group.records.some((item) => item.id === record.id))?.key, + text: record.statement.text, + deterministic: { + action: record.statement.action, + object: record.statement.object, + polarity: record.statement.polarity, + paths: record.statement.target.paths, + symbols: record.statement.target.symbols, + versions: record.statement.target.versions, + }, + })), + participants: groups.map((group) => ({ + participantKey: group.key, + recordIds: group.records.map((record) => record.id), + })), + }; +} + +function validateEnrichments(values: RawCommunicationEnrichment[] | undefined, records: IntentRecord[]): Map { + if (!Array.isArray(values)) throw new Error('Structured response does not contain communication enrichments'); + const expected = new Set(records.map((record) => record.id)); + const output = new Map(); + for (const value of values) { + if (!expected.has(value.recordId)) throw new Error(`Structured response contains unknown recordId: ${value.recordId}`); + if (output.has(value.recordId)) throw new Error(`Structured response duplicates recordId: ${value.recordId}`); + output.set(value.recordId, value); + } + if (output.size !== expected.size) throw new Error(`Structured response returned ${output.size} of ${expected.size} enrichments`); + return output; +} + +function materializeSyntheses( + values: RawParticipantSynthesis[] | undefined, + groups: ParticipantGroup[], + enrichedByOriginal: Map, + generation: GroundedGenerationMetadata, +): ParticipantCommunicationSynthesis[] { + if (!Array.isArray(values)) throw new Error('Structured response does not contain participantSyntheses'); + const byKey = new Map(groups.map((group) => [group.key, group])); + const seen = new Set(); + const output = values.map((raw) => { + const group = byKey.get(raw.participantKey); + if (!group) throw new Error(`Structured response contains unknown participantKey: ${raw.participantKey}`); + if (seen.has(raw.participantKey)) throw new Error(`Structured response duplicates participantKey: ${raw.participantKey}`); + seen.add(raw.participantKey); + const permitted = new Set(group.records.map((record) => record.id)); + if (!raw.recordIds.length || raw.recordIds.some((id) => !permitted.has(id))) { + throw new Error(`Participant synthesis ${raw.participantKey} contains ungrounded recordIds`); + } + const recordIds = raw.recordIds.map((id) => enrichedByOriginal.get(id)?.id) + .filter((id): id is string => Boolean(id)).sort(); + return synthesis({ + participant: group.participant, + role: group.role, + tickets: group.tickets, + summary: raw.summary, + commitments: raw.commitments, + risks: raw.risks, + recordIds, + confidence: raw.confidence, + generation, + }); + }); + if (seen.size !== groups.length) throw new Error(`Structured response returned ${seen.size} of ${groups.length} participant syntheses`); + return output.sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)); +} + +function enrichRecord( + record: IntentRecord, + enrichment: RawCommunicationEnrichment, + config: T2CConfig, + response: LlmResponseMetadata, +): IntentRecord { + return buildRecord({ + kind: record.statement.kind, + actor: record.statement.actor, + action: enrichment.action, + subject: record.statement.subject, + object: enrichment.object.trim() || record.statement.object, + target: { + paths: [...record.statement.target.paths, ...enrichment.target.paths], + symbols: [...record.statement.target.symbols, ...enrichment.target.symbols], + // Ticket ownership is structural and never accepted from the model. + tickets: record.statement.target.tickets, + versions: [...record.statement.target.versions, ...enrichment.target.versions], + }, + modality: record.statement.modality, + polarity: enrichment.polarity, + text: record.statement.text, + lifecycle: record.lifecycle.status, + sourceKind: record.source.kind, + sourcePath: record.source.path, + sourceLines: record.source.lines, + revision: record.source.revision, + symbol: record.source.symbol, + commitIndex: record.source.commitIndex, + extractor: 't2c/project-communication-openrouter@1', + rawExcerpt: record.source.rawExcerpt, + // A plan/declaration/claim cannot become a fact through model prose. + epistemicClass: record.epistemic.class, + confidence: Math.min(0.85, Math.max(0.05, enrichment.confidence)), + basis: [...record.epistemic.basis, 'openrouter_communication_enrichment', ...enrichment.basis], + observedAt: record.observedAt, + generation: { + requested: 'llm', used: 'llm', provider: response.provider ?? 'openrouter', + model: response.model ?? config.openRouter.communicationModel, responseId: response.responseId, + }, + metadata: { + ...record.metadata, + llmUsed: true, + topics: sortedUnique(enrichment.topics), + response, + }, + }); +} + +function deterministicSyntheses(records: IntentRecord[], generation: GroundedGenerationMetadata): ParticipantCommunicationSynthesis[] { + return participantGroups(records).map((group) => synthesis({ + participant: group.participant, + role: group.role, + tickets: group.tickets, + summary: `${group.participant} (${group.role}) ma ${group.records.length} uziemionych rekordów komunikacji.`, + commitments: group.records.filter((record) => record.epistemic.class === 'plan') + .map((record) => record.statement.text), + risks: group.records.filter((record) => record.statement.polarity === 'negative') + .map((record) => record.statement.text), + recordIds: group.records.map((record) => record.id).sort(), + confidence: 1, + generation, + })); +} + +function synthesis(input: Omit): ParticipantCommunicationSynthesis { + const semantic = { + participant: input.participant, + role: input.role, + tickets: sortedUnique(input.tickets), + summary: input.summary.trim(), + commitments: sortedUnique(input.commitments), + risks: sortedUnique(input.risks), + recordIds: sortedUnique(input.recordIds), + }; + if (!semantic.summary || !semantic.recordIds.length) throw new Error('Participant synthesis requires a summary and record citations'); + return { + schemaVersion: 't2c.participant-synthesis/v1', + id: createIntentId(semantic, 'COMM-SYN'), + ...semantic, + confidence: Math.min(1, Math.max(0, input.confidence)), + generation: input.generation, + }; +} + +function markDeterministic(records: IntentRecord[], degraded: boolean, fallbackReason: string | null): IntentRecord[] { + return records.map((record) => { + const marked = withRecordGeneration(record, { + requested: degraded ? 'llm' : 'deterministic', used: 'deterministic', degraded, fallbackReason, + }); + return { ...marked, metadata: { ...marked.metadata, llmUsed: false } }; + }); +} + +function deterministicGeneration(): GroundedGenerationMetadata { + return { + generator: 't2c/participant-synthesis', generatorVersion: '1', + runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), + requestedMode: 'deterministic', effectiveMode: 'deterministic', degraded: false, + model: null, provider: null, responseId: null, + configurationFingerprint: sha256('t2c-communication-deterministic/v1'), reason: null, + }; +} + +function fallbackGeneration(reason: string): GroundedGenerationMetadata { + return { + generator: 't2c/participant-synthesis', generatorVersion: '1', + runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), + requestedMode: 'prefer-llm', effectiveMode: 'deterministic', degraded: true, + model: null, provider: null, responseId: null, + configurationFingerprint: sha256(stableStringify({ stage: 'communication', reason })), reason, + }; +} + +function llmGeneration(config: T2CConfig, mode: LlmExtractionMode, response: LlmResponseMetadata): GroundedGenerationMetadata { + return { + generator: 't2c/participant-synthesis', generatorVersion: '1', + runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), + requestedMode: mode, effectiveMode: 'llm', degraded: false, + model: response.model ?? config.openRouter.communicationModel, + provider: response.provider ?? 'openrouter', responseId: response.responseId, + configurationFingerprint: sha256(stableStringify(openRouterAuditConfiguration(config, config.openRouter.communicationModel))), + reason: null, + }; +} + +function audit( + status: PipelineStageAudit['status'], requestedMode: PipelineStageAudit['requestedMode'], + effectiveMode: PipelineStageAudit['effectiveMode'], degraded: boolean, recordCount: number, + warningCount: number, model: string | null, reason: PipelineStageAudit['reason'], durationMs: number, + responses: LlmResponseMetadata[], config: T2CConfig, options: CommunicationExtractionOptions, +): PipelineStageAudit { + return { + runtimeVersion: T2C_VERSION, + configuration: { + ...openRouterAuditConfiguration(config, model), + projectDirectory: options.projectDir ?? 'project', + ticket: options.ticket ?? null, + }, + status, requestedMode, effectiveMode, degraded, recordCount, warningCount, + model, durationMs, reason, responses, + }; +} + +function roleOf(record: IntentRecord | undefined): CommunicationRole { + return record?.metadata.participantRole === 'human' || record?.metadata.participantRole === 'agent' + ? record.metadata.participantRole + : 'unknown'; +} + +function sortedUnique(values: string[]): string[] { + return [...new Set(values.map((value) => value.trim()).filter(Boolean))].sort(); +} + +async function readPrompt(): Promise { + const promptPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../prompts', 'communication-to-intent.system.md'); + if (!(await pathExists(promptPath))) throw new Error(`Prompt not found: ${promptPath}`); + return fs.readFile(promptPath, 'utf8'); +} + +const communicationStrings = () => s.array(s.string()); +const COMMUNICATION_ENRICHMENT_CONTRACT = s.object({ + recordId: s.string(), + action: s.enum(ACTIONS), + object: s.string(), + polarity: s.enum(['positive', 'negative']), + confidence: s.number({ minimum: 0, maximum: 0.85 }), + basis: communicationStrings(), + target: s.object({ paths: communicationStrings(), symbols: communicationStrings(), versions: communicationStrings() }), + topics: communicationStrings(), +}) satisfies StructuredSchema; +const PARTICIPANT_SYNTHESIS_CONTRACT = s.object({ + participantKey: s.string(), + summary: s.string({ minLength: 1, pattern: '.*\\S.*' }), + commitments: communicationStrings(), + risks: communicationStrings(), + recordIds: communicationStrings(), + confidence: s.number({ minimum: 0, maximum: 0.85 }), +}) satisfies StructuredSchema; +const COMMUNICATION_RESPONSE_CONTRACT = s.object({ + enrichments: s.array(COMMUNICATION_ENRICHMENT_CONTRACT), + participantSyntheses: s.array(PARTICIPANT_SYNTHESIS_CONTRACT), +}) satisfies StructuredSchema; diff --git a/src/communication/llm/index.ts b/src/communication/llm/index.ts new file mode 100644 index 0000000..2366584 --- /dev/null +++ b/src/communication/llm/index.ts @@ -0,0 +1 @@ +export * from './implementation.js'; diff --git a/src/core/schema.ts b/src/core/schema.ts index af85c7e..e3c1414 100644 --- a/src/core/schema.ts +++ b/src/core/schema.ts @@ -1,922 +1 @@ -import { - createCodeChangePlanHash, - createCodeChangePlanId, - createConclusionId, - createTodoProposalId, - graphFingerprint, -} from './id.js'; -import type { - CodeChangeAcceptance, - CodeChangePlan, - Conclusion, - DiagnosticReport, - GroundedGenerationMetadata, - IntentGraph, - IntentGraphDiff, - IntentRecord, - IntentRelation, - JsonValue, - TodoProposal, -} from './types.js'; - -const ACTIONS = new Set([ - 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', - 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', -]); -const MODALITIES = new Set(['required', 'recommended', 'optional', 'observed', 'claimed', 'unknown']); -const POLARITIES = new Set(['positive', 'negative']); -const LIFECYCLES = new Set([ - 'proposed', 'planned', 'in_progress', 'implemented', 'verified', 'released', 'completed', 'blocked', 'unknown', -]); -const SOURCE_KINDS = new Set(['nl', 'git', 'ast', 'todo', 'changelog', 'document', 'agent_log', 'test', 'system']); -const EPISTEMIC_CLASSES = new Set(['declaration', 'plan', 'claim', 'fact', 'inference', 'llm_inference']); -const RELATION_TYPES = new Set([ - 'declares', 'plans', 'implements', 'modifies', 'tests', 'documents', 'releases', 'depends_on', - 'blocks', 'supersedes', 'contradicts', 'duplicates', 'evidenced_by', 'claimed_by', 'same_as', 'related_to', -]); -const CONCLUSION_KINDS = new Set(['finding', 'risk', 'decision', 'recommendation']); -const DIAGNOSTIC_SEVERITIES = new Set(['info', 'warning', 'review_required', 'blocking']); -const TODO_PRIORITIES = new Set(['P0', 'P1', 'P2', 'P3']); -const GENERATION_REQUESTED_MODES = new Set(['deterministic', 'prefer-llm', 'require-llm']); -const GENERATION_EFFECTIVE_MODES = new Set(['deterministic', 'llm']); -const RECORD_ID = /^INT-[A-Z]+-[a-f0-9]{20}$/; -const RELATION_ID = /^REL-[a-f0-9]{20}$/; -const DIAGNOSTIC_ID = /^DIAG-[a-f0-9]{20}$/; -const CONCLUSION_ID = /^CONC-[a-f0-9]{20}$/; -const TODO_PROPOSAL_ID = /^TPROP-[a-f0-9]{20}$/; -const CODE_CHANGE_PLAN_ID = /^CPLAN-[a-f0-9]{20}$/; -const CODE_CHANGE_ACTIONS = new Set(['create', 'modify', 'delete']); -const CODE_CHANGE_RISK_LEVELS = new Set(['low', 'medium', 'high']); -const FINGERPRINT = /^[a-f0-9]{64}$/; -const RUNTIME_VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/; -const ISO_DATE_TIME = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/; - -export interface GroundedValidationContext { - graph: IntentGraph; - diagnostics: DiagnosticReport; -} - -export interface TodoProposalValidationContext extends GroundedValidationContext { - conclusions: Conclusion[]; -} - -export interface CodeChangePlanValidationContext extends GroundedValidationContext { - conclusions?: Conclusion[]; - proposals?: TodoProposal[]; -} - -export interface CodeChangeAcceptanceValidationContext { - plan: CodeChangePlan; - before: GroundedValidationContext; - after: GroundedValidationContext; -} - -export function assertIntentRecord(value: unknown): asserts value is IntentRecord { - const record = objectValue(value, 'Intent record'); - exactKeys(record, ['schemaVersion', 'id', 'statement', 'lifecycle', 'source', 'epistemic', 'observedAt', 'metadata'], 'Intent record'); - if (record.schemaVersion !== 't2c.intent/v1') throw new Error('Unsupported intent schemaVersion'); - if (typeof record.id !== 'string' || !RECORD_ID.test(record.id)) throw new Error('Intent record id must match INT--<20 hex>'); - - const statement = objectValue(record.statement, `Intent ${record.id}: statement`); - exactKeys(statement, ['kind', 'actor', 'action', 'subject', 'object', 'target', 'modality', 'polarity', 'text'], `Intent ${record.id}: statement`); - nonEmptyString(statement.kind, `Intent ${record.id}: statement.kind`); - nullableString(statement.actor, `Intent ${record.id}: statement.actor`); - enumValue(statement.action, ACTIONS, `Intent ${record.id}: statement.action`); - nullableString(statement.subject, `Intent ${record.id}: statement.subject`); - nonEmptyString(statement.object, `Intent ${record.id}: statement.object`); - if (typeof statement.text !== 'string') throw new Error(`Intent ${record.id}: statement.text must be a string`); - enumValue(statement.modality, MODALITIES, `Intent ${record.id}: statement.modality`); - enumValue(statement.polarity, POLARITIES, `Intent ${record.id}: statement.polarity`); - - const target = objectValue(statement.target, `Intent ${record.id}: statement.target`); - exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `Intent ${record.id}: statement.target`); - for (const key of ['paths', 'symbols', 'tickets', 'versions'] as const) { - stringArray(target[key], `Intent ${record.id}: statement.target.${key}`, true); - } - - const lifecycle = objectValue(record.lifecycle, `Intent ${record.id}: lifecycle`); - exactKeys(lifecycle, ['status'], `Intent ${record.id}: lifecycle`); - enumValue(lifecycle.status, LIFECYCLES, `Intent ${record.id}: lifecycle.status`); - - const source = objectValue(record.source, `Intent ${record.id}: source`); - exactKeys(source, ['kind', 'path', 'lines', 'revision', 'symbol', 'commitIndex', 'extractor', 'contentHash', 'rawExcerpt'], `Intent ${record.id}: source`); - enumValue(source.kind, SOURCE_KINDS, `Intent ${record.id}: source.kind`); - nullableString(source.path, `Intent ${record.id}: source.path`); - nullableString(source.revision, `Intent ${record.id}: source.revision`); - nullableString(source.symbol, `Intent ${record.id}: source.symbol`); - nullableString(source.rawExcerpt, `Intent ${record.id}: source.rawExcerpt`); - nonEmptyString(source.extractor, `Intent ${record.id}: source.extractor`); - if (typeof source.contentHash !== 'string' || !FINGERPRINT.test(source.contentHash)) { - throw new Error(`Intent ${record.id}: source.contentHash must be SHA-256`); - } - if (source.commitIndex !== null && (!Number.isInteger(source.commitIndex) || (source.commitIndex as number) < 1)) { - throw new Error(`Intent ${record.id}: source.commitIndex must be null or an integer >= 1`); - } - if (source.lines !== null) { - const lines = objectValue(source.lines, `Intent ${record.id}: source.lines`); - exactKeys(lines, ['start', 'end'], `Intent ${record.id}: source.lines`); - if (!Number.isInteger(lines.start) || (lines.start as number) < 1 || !Number.isInteger(lines.end) || (lines.end as number) < (lines.start as number)) { - throw new Error(`Intent ${record.id}: source.lines must be positive and end >= start`); - } - } - - const epistemic = objectValue(record.epistemic, `Intent ${record.id}: epistemic`); - exactKeys(epistemic, ['class', 'confidence', 'basis'], `Intent ${record.id}: epistemic`); - enumValue(epistemic.class, EPISTEMIC_CLASSES, `Intent ${record.id}: epistemic.class`); - if (typeof epistemic.confidence !== 'number' || !Number.isFinite(epistemic.confidence) - || epistemic.confidence < 0 || epistemic.confidence > 1) { - throw new Error(`Intent ${record.id}: epistemic.confidence must be between 0 and 1`); - } - stringArray(epistemic.basis, `Intent ${record.id}: epistemic.basis`, true); - nullableDate(record.observedAt, `Intent ${record.id}: observedAt`); - - const metadata = objectValue(record.metadata, `Intent ${record.id}: metadata`); - if (!isJsonValue(metadata)) throw new Error(`Intent ${record.id}: metadata must contain JSON values only`); - assertIntentGenerationMetadata(metadata.generation, `Intent ${record.id}: metadata.generation`); - assertGenerationMatchesExtractor(metadata.generation, source.extractor as string, `Intent ${record.id}: metadata.generation`); - if (epistemic.class === 'llm_inference' - && (metadata.generation as { used: unknown }).used !== 'llm') { - throw new Error(`Intent ${record.id}: llm_inference requires metadata.generation.used=llm`); - } -} - -function assertGenerationMatchesExtractor(value: unknown, extractor: string, name: string): void { - const generation = value as { generator: string; generatorVersion: string }; - const separator = extractor.lastIndexOf('@'); - const expectedGenerator = separator > 0 ? extractor.slice(0, separator) : extractor; - if (generation.generator !== expectedGenerator) { - throw new Error(`${name}.generator must match source.extractor (${expectedGenerator})`); - } - if (separator > 0 && generation.generatorVersion !== extractor.slice(separator + 1)) { - throw new Error(`${name}.generatorVersion must match source.extractor (${extractor.slice(separator + 1)})`); - } -} - -function assertIntentGenerationMetadata(value: unknown, name: string): void { - const generation = objectValue(value, name); - exactKeys(generation, [ - 'generator', 'generatorVersion', 'runtimeVersion', 'requested', 'used', 'degraded', - 'fallbackReason', 'provider', 'model', 'responseId', - ], name); - nonBlankString(generation.generator, `${name}.generator`); - nonBlankString(generation.generatorVersion, `${name}.generatorVersion`); - if (typeof generation.runtimeVersion !== 'string' || !RUNTIME_VERSION.test(generation.runtimeVersion)) { - throw new Error(`${name}.runtimeVersion must be a semantic version`); - } - enumValue(generation.requested, GENERATION_EFFECTIVE_MODES, `${name}.requested`); - enumValue(generation.used, GENERATION_EFFECTIVE_MODES, `${name}.used`); - if (typeof generation.degraded !== 'boolean') throw new Error(`${name}.degraded must be a boolean`); - nullableString(generation.fallbackReason, `${name}.fallbackReason`); - nullableString(generation.provider, `${name}.provider`); - nullableString(generation.model, `${name}.model`); - nullableString(generation.responseId, `${name}.responseId`); - if (generation.used === 'llm') { - nonBlankString(generation.provider, `${name}.provider`); - nonBlankString(generation.model, `${name}.model`); - } else if (generation.provider !== null || generation.model !== null || generation.responseId !== null) { - throw new Error(`${name}: deterministic generation cannot claim an LLM provider, model or responseId`); - } - if (generation.degraded) { - if (generation.requested !== 'llm' || generation.used !== 'deterministic') { - throw new Error(`${name}: degraded generation must be an LLM request using deterministic fallback`); - } - nonBlankString(generation.fallbackReason, `${name}.fallbackReason`); - } else if (generation.fallbackReason !== null) { - throw new Error(`${name}.fallbackReason must be null when generation is not degraded`); - } -} - -export function assertIntentRecords(values: unknown): asserts values is IntentRecord[] { - if (!Array.isArray(values)) throw new Error('Intent records must be an array'); - values.forEach(assertIntentRecord); -} - -export function assertIntentGraph(value: unknown): asserts value is IntentGraph { - const graph = objectValue(value, 'Intent graph'); - exactKeys(graph, ['schemaVersion', 'generatedAt', 'fingerprint', 'records', 'relations', 'stats'], 'Intent graph'); - if (graph.schemaVersion !== 't2c.graph/v1') throw new Error('Unsupported graph schemaVersion'); - dateString(graph.generatedAt, 'Graph generatedAt'); - fingerprint(graph.fingerprint, 'Graph fingerprint'); - assertIntentRecords(graph.records); - if (!Array.isArray(graph.relations)) throw new Error('Graph relations must be an array'); - const recordIds = new Set((graph.records as IntentRecord[]).map((record) => record.id)); - if (recordIds.size !== (graph.records as IntentRecord[]).length) throw new Error('Graph record IDs must be unique'); - const relationIds = new Set(); - for (const relation of graph.relations) { - assertRelation(relation, recordIds); - if (relationIds.has((relation as IntentRelation).id)) throw new Error(`Duplicate relation id: ${(relation as IntentRelation).id}`); - relationIds.add((relation as IntentRelation).id); - } - const stats = objectValue(graph.stats, 'Graph stats'); - exactKeys(stats, ['bySource', 'byAction', 'byStatus'], 'Graph stats'); - countMap(stats.bySource, 'Graph stats.bySource'); - countMap(stats.byAction, 'Graph stats.byAction'); - countMap(stats.byStatus, 'Graph stats.byStatus'); - const records = graph.records as IntentRecord[]; - exactCounts(stats.bySource, countRecords(records, (record) => record.source.kind), 'Graph stats.bySource'); - exactCounts(stats.byAction, countRecords(records, (record) => record.statement.action), 'Graph stats.byAction'); - exactCounts(stats.byStatus, countRecords(records, (record) => record.lifecycle.status), 'Graph stats.byStatus'); - const expectedFingerprint = graphFingerprint(records, graph.relations as IntentRelation[]); - if (graph.fingerprint !== expectedFingerprint) throw new Error('Graph fingerprint does not match records and relations'); -} - -export function assertIntentGraphDiff(value: unknown): asserts value is IntentGraphDiff { - const diff = objectValue(value, 'Intent graph diff'); - exactKeys(diff, ['schemaVersion', 'generatedAt', 'fingerprint', 'beforeFingerprint', 'afterFingerprint', 'records', 'relations', 'summary'], 'Intent graph diff'); - if (diff.schemaVersion !== 't2c.diff/v1') throw new Error('Unsupported graph diff schemaVersion'); - dateString(diff.generatedAt, 'Graph diff generatedAt'); - fingerprint(diff.fingerprint, 'Graph diff fingerprint'); - fingerprint(diff.beforeFingerprint, 'Graph diff beforeFingerprint'); - fingerprint(diff.afterFingerprint, 'Graph diff afterFingerprint'); - - const records = objectValue(diff.records, 'Graph diff records'); - exactKeys(records, ['added', 'removed', 'changed', 'unchanged'], 'Graph diff records'); - assertIntentRecords(records.added); - assertIntentRecords(records.removed); - if (!Array.isArray(records.changed)) throw new Error('Graph diff changed records must be an array'); - for (const rawChange of records.changed) { - const change = objectValue(rawChange, 'Graph diff record change'); - exactKeys(change, ['identity', 'before', 'after', 'changedFields'], 'Graph diff record change'); - nonEmptyString(change.identity, 'Graph diff record change identity'); - assertIntentRecord(change.before); - assertIntentRecord(change.after); - stringArray(change.changedFields, 'Graph diff changedFields', true); - } - nonNegativeInteger(records.unchanged, 'Graph diff records.unchanged'); - - const relations = objectValue(diff.relations, 'Graph diff relations'); - exactKeys(relations, ['added', 'removed', 'unchanged'], 'Graph diff relations'); - if (!Array.isArray(relations.added) || !Array.isArray(relations.removed)) throw new Error('Graph diff relation sets must be arrays'); - [...relations.added, ...relations.removed].forEach((relation) => assertRelation(relation)); - nonNegativeInteger(relations.unchanged, 'Graph diff relations.unchanged'); - - const summary = objectValue(diff.summary, 'Graph diff summary'); - exactKeys(summary, ['recordsAdded', 'recordsRemoved', 'recordsChanged', 'recordsUnchanged', 'relationsAdded', 'relationsRemoved', 'relationsUnchanged'], 'Graph diff summary'); - for (const [key, count] of Object.entries(summary)) nonNegativeInteger(count, `Graph diff summary.${key}`); - const expectedCounts: Record = { - recordsAdded: (records.added as unknown[]).length, - recordsRemoved: (records.removed as unknown[]).length, - recordsChanged: (records.changed as unknown[]).length, - recordsUnchanged: records.unchanged as number, - relationsAdded: (relations.added as unknown[]).length, - relationsRemoved: (relations.removed as unknown[]).length, - relationsUnchanged: relations.unchanged as number, - }; - exactCounts(summary, expectedCounts, 'Graph diff summary'); -} - -export function assertConclusion( - value: unknown, - context: GroundedValidationContext, -): asserts value is Conclusion { - const known = validateGroundedContext(context); - assertConclusionValue(value, known.recordIds, known.diagnosticIds); -} - -export function assertConclusions( - values: unknown, - context: GroundedValidationContext, -): asserts values is Conclusion[] { - if (!Array.isArray(values)) throw new Error('Conclusions must be an array'); - const known = validateGroundedContext(context); - const ids = new Set(); - for (const value of values) { - assertConclusionValue(value, known.recordIds, known.diagnosticIds); - const id = (value as Conclusion).id; - if (ids.has(id)) throw new Error(`Duplicate conclusion id: ${id}`); - ids.add(id); - } -} - -export function assertTodoProposal( - value: unknown, - context: TodoProposalValidationContext, -): asserts value is TodoProposal { - const known = validateTodoProposalContext(context); - assertTodoProposalValue(value, known.recordIds, known.diagnosticIds, known.conclusionIds); -} - -export function assertTodoProposals( - values: unknown, - context: TodoProposalValidationContext, -): asserts values is TodoProposal[] { - if (!Array.isArray(values)) throw new Error('TODO proposals must be an array'); - const known = validateTodoProposalContext(context); - const proposalIds = new Set(); - for (const value of values) { - assertTodoProposalValue(value, known.recordIds, known.diagnosticIds, known.conclusionIds); - const id = (value as TodoProposal).id; - if (proposalIds.has(id)) throw new Error(`Duplicate TODO proposal id: ${id}`); - proposalIds.add(id); - } - for (const proposal of values as TodoProposal[]) { - for (const dependency of proposal.dependencies) { - if (!proposalIds.has(dependency)) { - throw new Error(`TODO proposal ${proposal.id} references unknown dependency ${dependency}`); - } - } - } - assertAcyclicProposalDependencies(values as TodoProposal[]); -} - -export function assertCodeChangePlan( - value: unknown, - context: CodeChangePlanValidationContext, -): asserts value is CodeChangePlan { - const known = validateCodeChangePlanContext(context); - assertCodeChangePlanValue(value, known); - assertPlanGraphFingerprint(value, context.graph.fingerprint); -} - -export function assertCodeChangePlans( - values: unknown, - context: CodeChangePlanValidationContext, -): asserts values is CodeChangePlan[] { - if (!Array.isArray(values)) throw new Error('Code change plans must be an array'); - const known = validateCodeChangePlanContext(context); - const ids = new Set(); - for (const value of values) { - assertCodeChangePlanValue(value, known); - assertPlanGraphFingerprint(value, context.graph.fingerprint); - const id = (value as CodeChangePlan).id; - if (ids.has(id)) throw new Error(`Duplicate code change plan id: ${id}`); - ids.add(id); - } -} - -/** - * Validate persisted plans for rendering when their source graph and - * diagnostics are not loaded. Evidence references remain syntax-checked and - * content-bound by each plan hash; the supplied graph fingerprint must match. - */ -export function assertCodeChangePlansForReview( - values: unknown, - graphFingerprintValue: string, -): asserts values is CodeChangePlan[] { - if (!Array.isArray(values)) throw new Error('Code change plans must be an array'); - fingerprint(graphFingerprintValue, 'Code change review graphFingerprint'); - const ids = new Set(); - for (const value of values) { - const plan = objectValue(value, 'Code change plan'); - const evidence = objectValue(plan.evidence, 'Code change plan evidence'); - uniqueIdArray(evidence.recordIds, RECORD_ID, 'Code change plan evidence.recordIds'); - uniqueIdArray(evidence.diagnosticIds, DIAGNOSTIC_ID, 'Code change plan evidence.diagnosticIds'); - uniqueIdArray(evidence.conclusionIds, CONCLUSION_ID, 'Code change plan evidence.conclusionIds'); - uniqueIdArray(evidence.proposalIds, TODO_PROPOSAL_ID, 'Code change plan evidence.proposalIds'); - assertCodeChangePlanValue(value, { - recordIds: new Set(evidence.recordIds as string[]), - diagnosticIds: new Set(evidence.diagnosticIds as string[]), - conclusionIds: new Set(evidence.conclusionIds as string[]), - proposalIds: new Set(evidence.proposalIds as string[]), - }); - assertPlanGraphFingerprint(value, graphFingerprintValue); - const id = (value as CodeChangePlan).id; - if (ids.has(id)) throw new Error(`Duplicate code change plan id: ${id}`); - ids.add(id); - } -} - -/** - * Validate a persisted plan before acceptance when its full conclusion and - * TODO-proposal objects are no longer present. Their IDs remain syntax-checked - * and content-bound by the plan hash; records and diagnostics stay grounded in - * the supplied before graph. - */ -export function assertCodeChangePlanForAcceptance( - value: unknown, - context: GroundedValidationContext, -): asserts value is CodeChangePlan { - const known = validateGroundedContext(context); - const plan = objectValue(value, 'Code change plan'); - const evidence = objectValue(plan.evidence, 'Code change plan evidence'); - uniqueIdArray(evidence.conclusionIds, CONCLUSION_ID, 'Code change plan evidence.conclusionIds'); - uniqueIdArray(evidence.proposalIds, TODO_PROPOSAL_ID, 'Code change plan evidence.proposalIds'); - assertCodeChangePlanValue(value, { - ...known, - conclusionIds: new Set(evidence.conclusionIds as string[]), - proposalIds: new Set(evidence.proposalIds as string[]), - }); - assertPlanGraphFingerprint(value, context.graph.fingerprint); -} - -function assertPlanGraphFingerprint(plan: CodeChangePlan, graphFingerprintValue: string): void { - if (plan.evidence.graphFingerprint !== graphFingerprintValue) { - throw new Error('Code change plan evidence.graphFingerprint does not match its graph'); - } -} - -export function assertCodeChangeAcceptance( - value: unknown, - context: CodeChangeAcceptanceValidationContext, -): asserts value is CodeChangeAcceptance { - assertCodeChangePlanForAcceptance(context.plan, context.before); - const beforeKnown = validateGroundedContext(context.before); - const afterKnown = validateGroundedContext(context.after); - const acceptance = objectValue(value, 'Code change acceptance'); - exactKeys(acceptance, [ - 'schemaVersion', 'planId', 'planHash', 'beforeGraphFingerprint', 'afterGraphFingerprint', - 'beforeDiagnosticIds', 'afterDiagnosticIds', 'clearedDiagnosticIds', 'remainingDiagnosticIds', - 'newBlockingDiagnosticIds', 'accepted', 'reasons', 'evaluatedAt', 'generation', - ], 'Code change acceptance'); - if (acceptance.schemaVersion !== 't2c.code-change-acceptance/v1') { - throw new Error('Unsupported code change acceptance schemaVersion'); - } - if (acceptance.planId !== context.plan.id) throw new Error('Code change acceptance planId does not match its plan'); - if (acceptance.planHash !== context.plan.planHash) throw new Error('Code change acceptance planHash does not match its plan'); - if (acceptance.beforeGraphFingerprint !== context.before.graph.fingerprint) { - throw new Error('Code change acceptance beforeGraphFingerprint does not match its graph'); - } - if (acceptance.afterGraphFingerprint !== context.after.graph.fingerprint) { - throw new Error('Code change acceptance afterGraphFingerprint does not match its graph'); - } - for (const key of [ - 'beforeDiagnosticIds', 'afterDiagnosticIds', 'clearedDiagnosticIds', 'remainingDiagnosticIds', - 'newBlockingDiagnosticIds', - ] as const) { - uniqueIdArray(acceptance[key], DIAGNOSTIC_ID, `Code change acceptance ${key}`); - } - const beforeIds = [...beforeKnown.diagnosticIds].sort(); - const afterIds = [...afterKnown.diagnosticIds].sort(); - const targeted = [...context.plan.evidence.diagnosticIds].sort(); - const expectedCleared = targeted.filter((id) => !afterKnown.diagnosticIds.has(id)); - const expectedRemaining = targeted.filter((id) => afterKnown.diagnosticIds.has(id)); - const expectedBlocking = context.after.diagnostics.diagnostics - .filter((item) => item.severity === 'blocking' && !beforeKnown.diagnosticIds.has(item.id)) - .map((item) => item.id) - .sort(); - exactStringSet(acceptance.beforeDiagnosticIds as string[], beforeIds, 'Code change acceptance beforeDiagnosticIds'); - exactStringSet(acceptance.afterDiagnosticIds as string[], afterIds, 'Code change acceptance afterDiagnosticIds'); - exactStringSet(acceptance.clearedDiagnosticIds as string[], expectedCleared, 'Code change acceptance clearedDiagnosticIds'); - exactStringSet(acceptance.remainingDiagnosticIds as string[], expectedRemaining, 'Code change acceptance remainingDiagnosticIds'); - exactStringSet(acceptance.newBlockingDiagnosticIds as string[], expectedBlocking, 'Code change acceptance newBlockingDiagnosticIds'); - const expectedAccepted = expectedRemaining.length === 0 && expectedBlocking.length === 0; - if (acceptance.accepted !== expectedAccepted) throw new Error('Code change acceptance accepted flag is inconsistent'); - nonEmptyUniqueStringArray(acceptance.reasons, 'Code change acceptance reasons'); - dateString(acceptance.evaluatedAt, 'Code change acceptance evaluatedAt'); - assertGroundedGenerationMetadata(acceptance.generation, 'Code change acceptance generation'); - if ((acceptance.generation as GroundedGenerationMetadata).generatedAt !== acceptance.evaluatedAt) { - throw new Error('Code change acceptance generation.generatedAt must match evaluatedAt'); - } -} - -function assertConclusionValue( - value: unknown, - recordIds: Set, - diagnosticIds: Set, -): asserts value is Conclusion { - const conclusion = objectValue(value, 'Conclusion'); - exactKeys(conclusion, [ - 'schemaVersion', 'id', 'kind', 'title', 'detail', 'severity', 'diagnosticIds', 'recordIds', 'confidence', 'generation', - ], 'Conclusion'); - if (conclusion.schemaVersion !== 't2c.conclusion/v1') throw new Error('Unsupported conclusion schemaVersion'); - if (typeof conclusion.id !== 'string' || !CONCLUSION_ID.test(conclusion.id)) { - throw new Error('Conclusion id must match CONC-<20 hex>'); - } - enumValue(conclusion.kind, CONCLUSION_KINDS, `Conclusion ${conclusion.id}: kind`); - nonBlankString(conclusion.title, `Conclusion ${conclusion.id}: title`); - nonBlankString(conclusion.detail, `Conclusion ${conclusion.id}: detail`); - enumValue(conclusion.severity, DIAGNOSTIC_SEVERITIES, `Conclusion ${conclusion.id}: severity`); - nonEmptyUniqueIdArray(conclusion.diagnosticIds, DIAGNOSTIC_ID, `Conclusion ${conclusion.id}: diagnosticIds`); - nonEmptyUniqueIdArray(conclusion.recordIds, RECORD_ID, `Conclusion ${conclusion.id}: recordIds`); - knownReferences(conclusion.diagnosticIds as string[], diagnosticIds, `Conclusion ${conclusion.id}: diagnosticIds`); - knownReferences(conclusion.recordIds as string[], recordIds, `Conclusion ${conclusion.id}: recordIds`); - confidence(conclusion.confidence, `Conclusion ${conclusion.id}: confidence`); - assertGroundedGenerationMetadata(conclusion.generation, `Conclusion ${conclusion.id}: generation`); - const expectedId = createConclusionId(conclusion as unknown as Conclusion); - if (conclusion.id !== expectedId) throw new Error(`Conclusion id does not match semantic content: expected ${expectedId}`); -} - -function assertTodoProposalValue( - value: unknown, - recordIds: Set, - diagnosticIds: Set, - conclusionIds: Set, -): asserts value is TodoProposal { - const proposal = objectValue(value, 'TODO proposal'); - exactKeys(proposal, [ - 'schemaVersion', 'id', 'title', 'description', 'priority', 'status', 'target', 'acceptanceCriteria', - 'dependencies', 'conclusionIds', 'diagnosticIds', 'recordIds', 'confidence', 'generation', - ], 'TODO proposal'); - if (proposal.schemaVersion !== 't2c.todo-proposal/v1') throw new Error('Unsupported TODO proposal schemaVersion'); - if (typeof proposal.id !== 'string' || !TODO_PROPOSAL_ID.test(proposal.id)) { - throw new Error('TODO proposal id must match TPROP-<20 hex>'); - } - nonBlankString(proposal.title, `TODO proposal ${proposal.id}: title`); - nonBlankString(proposal.description, `TODO proposal ${proposal.id}: description`); - enumValue(proposal.priority, TODO_PRIORITIES, `TODO proposal ${proposal.id}: priority`); - if (proposal.status !== 'proposed') throw new Error(`TODO proposal ${proposal.id}: status must be proposed`); - const target = objectValue(proposal.target, `TODO proposal ${proposal.id}: target`); - exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `TODO proposal ${proposal.id}: target`); - for (const key of ['paths', 'symbols', 'tickets', 'versions'] as const) { - stringArray(target[key], `TODO proposal ${proposal.id}: target.${key}`, true); - if ((target[key] as string[]).some((item) => !item.trim())) { - throw new Error(`TODO proposal ${proposal.id}: target.${key} cannot contain blank values`); - } - } - nonEmptyUniqueStringArray(proposal.acceptanceCriteria, `TODO proposal ${proposal.id}: acceptanceCriteria`); - uniqueIdArray(proposal.dependencies, TODO_PROPOSAL_ID, `TODO proposal ${proposal.id}: dependencies`); - if ((proposal.dependencies as string[]).includes(proposal.id as string)) { - throw new Error(`TODO proposal ${proposal.id} cannot depend on itself`); - } - nonEmptyUniqueIdArray(proposal.conclusionIds, CONCLUSION_ID, `TODO proposal ${proposal.id}: conclusionIds`); - nonEmptyUniqueIdArray(proposal.diagnosticIds, DIAGNOSTIC_ID, `TODO proposal ${proposal.id}: diagnosticIds`); - nonEmptyUniqueIdArray(proposal.recordIds, RECORD_ID, `TODO proposal ${proposal.id}: recordIds`); - knownReferences(proposal.conclusionIds as string[], conclusionIds, `TODO proposal ${proposal.id}: conclusionIds`); - knownReferences(proposal.diagnosticIds as string[], diagnosticIds, `TODO proposal ${proposal.id}: diagnosticIds`); - knownReferences(proposal.recordIds as string[], recordIds, `TODO proposal ${proposal.id}: recordIds`); - confidence(proposal.confidence, `TODO proposal ${proposal.id}: confidence`); - assertGroundedGenerationMetadata(proposal.generation, `TODO proposal ${proposal.id}: generation`); - const expectedId = createTodoProposalId(proposal as unknown as TodoProposal); - if (proposal.id !== expectedId) throw new Error(`TODO proposal id does not match semantic content: expected ${expectedId}`); -} - -export function assertGroundedGenerationMetadata(value: unknown, name: string): asserts value is GroundedGenerationMetadata { - const generation = objectValue(value, name); - exactKeys(generation, [ - 'generator', 'generatorVersion', 'runtimeVersion', 'generatedAt', 'requestedMode', 'effectiveMode', - 'degraded', 'model', 'provider', 'responseId', 'configurationFingerprint', 'reason', - ], name); - nonBlankString(generation.generator, `${name}.generator`); - nonBlankString(generation.generatorVersion, `${name}.generatorVersion`); - if (typeof generation.runtimeVersion !== 'string' || !RUNTIME_VERSION.test(generation.runtimeVersion)) { - throw new Error(`${name}.runtimeVersion must be a semantic version`); - } - dateString(generation.generatedAt, `${name}.generatedAt`); - enumValue(generation.requestedMode, GENERATION_REQUESTED_MODES, `${name}.requestedMode`); - enumValue(generation.effectiveMode, GENERATION_EFFECTIVE_MODES, `${name}.effectiveMode`); - if (typeof generation.degraded !== 'boolean') throw new Error(`${name}.degraded must be a boolean`); - nullableString(generation.model, `${name}.model`); - nullableString(generation.provider, `${name}.provider`); - nullableString(generation.responseId, `${name}.responseId`); - fingerprint(generation.configurationFingerprint, `${name}.configurationFingerprint`); - nullableString(generation.reason, `${name}.reason`); - - if (generation.effectiveMode === 'llm') { - nonBlankString(generation.model, `${name}.model`); - nonBlankString(generation.provider, `${name}.provider`); - if (generation.degraded) throw new Error(`${name}.degraded must be false when effectiveMode is llm`); - } - if (generation.requestedMode === 'deterministic') { - if (generation.effectiveMode !== 'deterministic' || generation.degraded - || generation.model !== null || generation.provider !== null || generation.responseId !== null - || generation.reason !== null) { - throw new Error(`${name} deterministic mode cannot contain LLM or degradation metadata`); - } - } - if (generation.requestedMode === 'require-llm' && generation.effectiveMode !== 'llm') { - throw new Error(`${name} require-llm mode cannot use deterministic output`); - } - if (generation.requestedMode === 'prefer-llm' && generation.effectiveMode === 'deterministic' && !generation.degraded) { - throw new Error(`${name} prefer-llm deterministic output must be marked degraded`); - } - if (generation.degraded) { - if (generation.requestedMode !== 'prefer-llm' || generation.effectiveMode !== 'deterministic') { - throw new Error(`${name} degraded output is only valid for prefer-llm deterministic fallback`); - } - nonBlankString(generation.reason, `${name}.reason`); - } else if (generation.reason !== null) { - throw new Error(`${name}.reason must be null when output is not degraded`); - } -} - -function validateGroundedContext(context: GroundedValidationContext): { - recordIds: Set; - diagnosticIds: Set; -} { - assertIntentGraph(context.graph); - const report = objectValue(context.diagnostics, 'Diagnostic report'); - if (report.schemaVersion !== 't2c.diagnostics/v1') throw new Error('Unsupported diagnostic schemaVersion'); - if (report.graphFingerprint !== context.graph.fingerprint) { - throw new Error('Diagnostic report does not describe the supplied graph'); - } - if (!Array.isArray(report.diagnostics)) throw new Error('Diagnostic report diagnostics must be an array'); - const diagnosticIds = new Set(); - for (const value of report.diagnostics) { - const diagnostic = objectValue(value, 'Diagnostic'); - if (typeof diagnostic.id !== 'string' || !DIAGNOSTIC_ID.test(diagnostic.id)) { - throw new Error('Diagnostic id must match DIAG-<20 hex>'); - } - if (diagnosticIds.has(diagnostic.id)) throw new Error(`Duplicate diagnostic id: ${diagnostic.id}`); - diagnosticIds.add(diagnostic.id); - } - return { - recordIds: new Set(context.graph.records.map((record) => record.id)), - diagnosticIds, - }; -} - -function validateTodoProposalContext(context: TodoProposalValidationContext): { - recordIds: Set; - diagnosticIds: Set; - conclusionIds: Set; -} { - const known = validateGroundedContext(context); - assertConclusions(context.conclusions, context); - return { - ...known, - conclusionIds: new Set(context.conclusions.map((conclusion) => conclusion.id)), - }; -} - -function validateCodeChangePlanContext(context: CodeChangePlanValidationContext): { - recordIds: Set; - diagnosticIds: Set; - conclusionIds: Set; - proposalIds: Set; -} { - const known = validateGroundedContext(context); - const conclusions = context.conclusions ?? []; - const proposals = context.proposals ?? []; - if (conclusions.length) assertConclusions(conclusions, context); - // Full proposal contracts need conclusions. When only proposal IDs are - // supplied as evidence references, accept the IDs after a light shape check. - if (proposals.length && conclusions.length) { - assertTodoProposals(proposals, { graph: context.graph, diagnostics: context.diagnostics, conclusions }); - } else if (proposals.length) { - const referencedConclusionIds = new Set(); - for (const [index, value] of proposals.entries()) { - const proposal = objectValue(value, `TODO proposal reference[${index}]`); - uniqueIdArray(proposal.conclusionIds, CONCLUSION_ID, `TODO proposal reference[${index}].conclusionIds`); - for (const id of proposal.conclusionIds as string[]) referencedConclusionIds.add(id); - } - const proposalIds = new Set(); - for (const proposal of proposals) { - assertTodoProposalValue( - proposal, - known.recordIds, - known.diagnosticIds, - referencedConclusionIds, - ); - if (proposalIds.has(proposal.id)) throw new Error(`Duplicate TODO proposal id: ${proposal.id}`); - proposalIds.add(proposal.id); - } - } - return { - ...known, - conclusionIds: new Set(conclusions.map((item) => item.id)), - proposalIds: new Set(proposals.map((item) => item.id)), - }; -} - -function assertCodeChangePlanValue( - value: unknown, - known: { - recordIds: Set; - diagnosticIds: Set; - conclusionIds: Set; - proposalIds: Set; - }, -): asserts value is CodeChangePlan { - const plan = objectValue(value, 'Code change plan'); - exactKeys(plan, [ - 'schemaVersion', 'id', 'planHash', 'status', 'createdAt', 'title', 'description', 'priority', - 'target', 'acceptanceCriteria', 'changes', 'risk', 'rollback', 'evidence', 'confidence', 'generation', - ], 'Code change plan'); - if (plan.schemaVersion !== 't2c.code-change-plan/v1') { - throw new Error('Unsupported code change plan schemaVersion'); - } - if (typeof plan.id !== 'string' || !CODE_CHANGE_PLAN_ID.test(plan.id)) { - throw new Error('Code change plan id must match CPLAN-<20 hex>'); - } - fingerprint(plan.planHash, `Code change plan ${plan.id}: planHash`); - if (plan.status !== 'proposed') throw new Error(`Code change plan ${plan.id}: status must be proposed`); - dateString(plan.createdAt, `Code change plan ${plan.id}: createdAt`); - nonBlankString(plan.title, `Code change plan ${plan.id}: title`); - nonBlankString(plan.description, `Code change plan ${plan.id}: description`); - enumValue(plan.priority, TODO_PRIORITIES, `Code change plan ${plan.id}: priority`); - const target = objectValue(plan.target, `Code change plan ${plan.id}: target`); - exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `Code change plan ${plan.id}: target`); - for (const key of ['paths', 'symbols', 'tickets', 'versions'] as const) { - stringArray(target[key], `Code change plan ${plan.id}: target.${key}`, true); - if ((target[key] as string[]).some((item) => !item.trim())) { - throw new Error(`Code change plan ${plan.id}: target.${key} cannot contain blank values`); - } - } - const targetPaths = new Set((target.paths as string[]).map((item, index) => ( - repositoryPath(item, `Code change plan ${plan.id}: target.paths[${index}]`) - ))); - nonEmptyUniqueStringArray(plan.acceptanceCriteria, `Code change plan ${plan.id}: acceptanceCriteria`); - if (!Array.isArray(plan.changes) || plan.changes.length === 0) { - throw new Error(`Code change plan ${plan.id}: changes must be a non-empty array`); - } - const changePaths = new Set(); - for (const [index, rawChange] of plan.changes.entries()) { - const change = objectValue(rawChange, `Code change plan ${plan.id}: changes[${index}]`); - exactKeys(change, ['path', 'action', 'symbols', 'rationale'], `Code change plan ${plan.id}: changes[${index}]`); - nonBlankString(change.path, `Code change plan ${plan.id}: changes[${index}].path`); - const normalizedPath = repositoryPath(change.path, `Code change plan ${plan.id}: changes[${index}].path`); - if (!targetPaths.has(normalizedPath)) { - throw new Error(`Code change plan ${plan.id}: changes[${index}].path is not present in target.paths`); - } - enumValue(change.action, CODE_CHANGE_ACTIONS, `Code change plan ${plan.id}: changes[${index}].action`); - stringArray(change.symbols, `Code change plan ${plan.id}: changes[${index}].symbols`, true); - if ((change.symbols as string[]).some((item) => !item.trim())) { - throw new Error(`Code change plan ${plan.id}: changes[${index}].symbols cannot contain blank values`); - } - nonBlankString(change.rationale, `Code change plan ${plan.id}: changes[${index}].rationale`); - if (changePaths.has(normalizedPath)) { - throw new Error(`Code change plan ${plan.id}: duplicate change for ${normalizedPath}`); - } - changePaths.add(normalizedPath); - } - const risk = objectValue(plan.risk, `Code change plan ${plan.id}: risk`); - exactKeys(risk, ['level', 'reasons'], `Code change plan ${plan.id}: risk`); - enumValue(risk.level, CODE_CHANGE_RISK_LEVELS, `Code change plan ${plan.id}: risk.level`); - nonEmptyUniqueStringArray(risk.reasons, `Code change plan ${plan.id}: risk.reasons`); - nonBlankString(plan.rollback, `Code change plan ${plan.id}: rollback`); - const evidence = objectValue(plan.evidence, `Code change plan ${plan.id}: evidence`); - exactKeys(evidence, [ - 'graphFingerprint', 'recordIds', 'diagnosticIds', 'conclusionIds', 'proposalIds', - ], `Code change plan ${plan.id}: evidence`); - fingerprint(evidence.graphFingerprint, `Code change plan ${plan.id}: evidence.graphFingerprint`); - nonEmptyUniqueIdArray(evidence.recordIds, RECORD_ID, `Code change plan ${plan.id}: evidence.recordIds`); - nonEmptyUniqueIdArray(evidence.diagnosticIds, DIAGNOSTIC_ID, `Code change plan ${plan.id}: evidence.diagnosticIds`); - uniqueIdArray(evidence.conclusionIds, CONCLUSION_ID, `Code change plan ${plan.id}: evidence.conclusionIds`); - uniqueIdArray(evidence.proposalIds, TODO_PROPOSAL_ID, `Code change plan ${plan.id}: evidence.proposalIds`); - knownReferences(evidence.recordIds as string[], known.recordIds, `Code change plan ${plan.id}: evidence.recordIds`); - knownReferences(evidence.diagnosticIds as string[], known.diagnosticIds, `Code change plan ${plan.id}: evidence.diagnosticIds`); - knownReferences(evidence.conclusionIds as string[], known.conclusionIds, `Code change plan ${plan.id}: evidence.conclusionIds`); - knownReferences(evidence.proposalIds as string[], known.proposalIds, `Code change plan ${plan.id}: evidence.proposalIds`); - confidence(plan.confidence, `Code change plan ${plan.id}: confidence`); - assertGroundedGenerationMetadata(plan.generation, `Code change plan ${plan.id}: generation`); - - const semantic = plan as unknown as CodeChangePlan; - const expectedHash = createCodeChangePlanHash(semantic); - if (plan.planHash !== expectedHash) { - throw new Error(`Code change plan planHash does not match semantic content: expected ${expectedHash}`); - } - const expectedId = createCodeChangePlanId(semantic); - if (plan.id !== expectedId) { - throw new Error(`Code change plan id does not match semantic content: expected ${expectedId}`); - } -} - -function assertRelation(value: unknown, knownRecords?: Set): asserts value is IntentRelation { - const relation = objectValue(value, 'Intent relation'); - exactKeys(relation, ['id', 'from', 'to', 'type', 'confidence', 'basis'], 'Intent relation'); - if (typeof relation.id !== 'string' || !RELATION_ID.test(relation.id)) throw new Error('Intent relation id must match REL-<20 hex>'); - nonEmptyString(relation.from, `Relation ${relation.id}: from`); - nonEmptyString(relation.to, `Relation ${relation.id}: to`); - enumValue(relation.type, RELATION_TYPES, `Relation ${relation.id}: type`); - if (typeof relation.confidence !== 'number' || !Number.isFinite(relation.confidence) - || relation.confidence < 0 || relation.confidence > 1) { - throw new Error(`Relation ${relation.id}: confidence must be between 0 and 1`); - } - stringArray(relation.basis, `Relation ${relation.id}: basis`, true); - if (knownRecords && (!knownRecords.has(relation.from as string) || !knownRecords.has(relation.to as string))) { - throw new Error(`Relation ${relation.id} references unknown records`); - } -} - -function objectValue(value: unknown, name: string): Record { - if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${name} must be an object`); - return value as Record; -} - -function exactKeys(value: Record, expected: string[], name: string): void { - const expectedSet = new Set(expected); - const missing = expected.filter((key) => !(key in value)); - const extra = Object.keys(value).filter((key) => !expectedSet.has(key)); - if (missing.length) throw new Error(`${name} is missing: ${missing.join(', ')}`); - if (extra.length) throw new Error(`${name} has unsupported fields: ${extra.join(', ')}`); -} - -function nonEmptyString(value: unknown, name: string): asserts value is string { - if (typeof value !== 'string' || !value.length) throw new Error(`${name} must be a non-empty string`); -} - -function nonBlankString(value: unknown, name: string): asserts value is string { - if (typeof value !== 'string' || !value.trim().length) throw new Error(`${name} must be a non-blank string`); -} - -function nullableString(value: unknown, name: string): void { - if (value !== null && typeof value !== 'string') throw new Error(`${name} must be a string or null`); -} - -function enumValue(value: unknown, allowed: Set, name: string): asserts value is string { - if (typeof value !== 'string' || !allowed.has(value)) throw new Error(`${name} has unsupported value: ${String(value)}`); -} - -function stringArray(value: unknown, name: string, unique = false): asserts value is string[] { - if (!Array.isArray(value) || !value.every((item) => typeof item === 'string')) throw new Error(`${name} must be an array of strings`); - if (unique && new Set(value).size !== value.length) throw new Error(`${name} must contain unique values`); -} - -function nonEmptyUniqueStringArray(value: unknown, name: string): asserts value is string[] { - stringArray(value, name, true); - if (!value.length || value.some((item) => !item.trim().length)) { - throw new Error(`${name} must contain at least one non-blank string`); - } - if (new Set(value.map((item) => item.trim())).size !== value.length) { - throw new Error(`${name} must remain unique after trimming whitespace`); - } -} - -function repositoryPath(value: unknown, name: string): string { - nonBlankString(value, name); - const normalized = value.trim().replace(/\\/g, '/'); - if (normalized.startsWith('/') || normalized.split('/').some((part) => part === '..')) { - throw new Error(`${name} must be a relative repository path without parent traversal`); - } - return normalized; -} - -function exactStringSet(actual: string[], expected: string[], name: string): void { - const normalizedActual = [...actual].sort(); - if (normalizedActual.length !== expected.length - || normalizedActual.some((value, index) => value !== expected[index])) { - throw new Error(`${name} does not match the grounded diagnostic set`); - } -} - -function uniqueIdArray(value: unknown, pattern: RegExp, name: string): asserts value is string[] { - stringArray(value, name, true); - if (value.some((item) => !pattern.test(item))) throw new Error(`${name} contains an invalid id`); -} - -function nonEmptyUniqueIdArray(value: unknown, pattern: RegExp, name: string): asserts value is string[] { - uniqueIdArray(value, pattern, name); - if (!value.length) throw new Error(`${name} must contain at least one id`); -} - -function knownReferences(values: string[], known: Set, name: string): void { - const unknown = values.filter((value) => !known.has(value)); - if (unknown.length) throw new Error(`${name} references unknown ids: ${unknown.join(', ')}`); -} - -function confidence(value: unknown, name: string): asserts value is number { - if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || value > 1) { - throw new Error(`${name} must be between 0 and 1`); - } -} - -function assertAcyclicProposalDependencies(proposals: TodoProposal[]): void { - const byId = new Map(proposals.map((proposal) => [proposal.id, proposal])); - const visiting = new Set(); - const visited = new Set(); - const visit = (id: string, chain: string[]): void => { - if (visiting.has(id)) { - const start = chain.indexOf(id); - throw new Error(`TODO proposal dependency cycle: ${[...chain.slice(Math.max(0, start)), id].join(' -> ')}`); - } - if (visited.has(id)) return; - visiting.add(id); - for (const dependency of byId.get(id)?.dependencies ?? []) visit(dependency, [...chain, id]); - visiting.delete(id); - visited.add(id); - }; - for (const proposal of proposals) visit(proposal.id, []); -} - -function dateString(value: unknown, name: string): asserts value is string { - if (typeof value !== 'string' || !ISO_DATE_TIME.test(value) || !Number.isFinite(Date.parse(value))) { - throw new Error(`${name} must be an ISO date-time string`); - } -} - -function nullableDate(value: unknown, name: string): void { - if (value !== null) dateString(value, name); -} - -function fingerprint(value: unknown, name: string): void { - if (typeof value !== 'string' || !FINGERPRINT.test(value)) throw new Error(`${name} must be SHA-256`); -} - -function nonNegativeInteger(value: unknown, name: string): void { - if (!Number.isInteger(value) || (value as number) < 0) throw new Error(`${name} must be an integer >= 0`); -} - -function countMap(value: unknown, name: string): void { - const map = objectValue(value, name); - for (const [key, count] of Object.entries(map)) { - if (!key) throw new Error(`${name} keys must be non-empty`); - nonNegativeInteger(count, `${name}.${key}`); - } -} - -function countRecords(records: IntentRecord[], selector: (record: IntentRecord) => string): Record { - const counts: Record = {}; - for (const record of records) { - const key = selector(record); - counts[key] = (counts[key] ?? 0) + 1; - } - return counts; -} - -function exactCounts(value: unknown, expected: Record, name: string): void { - const actual = objectValue(value, name); - const keys = [...new Set([...Object.keys(actual), ...Object.keys(expected)])].sort(); - for (const key of keys) { - if (actual[key] !== expected[key]) { - throw new Error(`${name} is inconsistent for ${key}: expected ${expected[key] ?? 0}, received ${String(actual[key] ?? 0)}`); - } - } -} - -function isJsonValue(value: unknown): value is JsonValue { - if (value === null || typeof value === 'string' || typeof value === 'boolean') return true; - if (typeof value === 'number') return Number.isFinite(value); - if (Array.isArray(value)) return value.every(isJsonValue); - if (value && typeof value === 'object') return Object.values(value as Record).every(isJsonValue); - return false; -} +export * from './schema/index.js'; diff --git a/src/core/schema/code-change.ts b/src/core/schema/code-change.ts new file mode 100644 index 0000000..b6247c0 --- /dev/null +++ b/src/core/schema/code-change.ts @@ -0,0 +1,322 @@ +import { createCodeChangePlanId, createCodeChangePlanHash } from '../id.js'; +import type { + CodeChangeAcceptance, + CodeChangePlan, +} from '../types.js'; +import { + CodeChangePlanValidationContext, + CodeChangeAcceptanceValidationContext, + GroundedValidationContext, +} from './intent.js'; +import { + CONCLUSION_ID, + CODE_CHANGE_ACTIONS, + CODE_CHANGE_PLAN_ID, + CODE_CHANGE_RISK_LEVELS, + DIAGNOSTIC_ID, + RECORD_ID, + TODO_PRIORITIES, + TODO_PROPOSAL_ID, +} from './constants.js'; +import { + assertGroundedGenerationMetadata, + confidence, + dateString, + exactKeys, + enumValue, + fingerprint, + knownReferences, + nonBlankString, + nonEmptyUniqueIdArray, + nonEmptyUniqueStringArray, + objectValue, + repositoryPath, + stringArray, + uniqueIdArray, +} from './utils.js'; +import { + assertConclusions, + assertTodoProposals, + validateGroundedContext, + assertTodoProposalReferenceValue, +} from './conclusions.js'; +import type { GroundedGenerationMetadata } from '../types.js'; + +export function assertCodeChangePlan( + value: unknown, + context: CodeChangePlanValidationContext, +): asserts value is CodeChangePlan { + const known = validateCodeChangePlanContext(context); + assertCodeChangePlanValue(value, known); + assertPlanGraphFingerprint(value, context.graph.fingerprint); +} + +export function assertCodeChangePlans( + values: unknown, + context: CodeChangePlanValidationContext, +): asserts values is CodeChangePlan[] { + if (!Array.isArray(values)) throw new Error('Code change plans must be an array'); + const known = validateCodeChangePlanContext(context); + const ids = new Set(); + for (const value of values) { + assertCodeChangePlanValue(value, known); + assertPlanGraphFingerprint(value, context.graph.fingerprint); + const id = (value as CodeChangePlan).id; + if (ids.has(id)) throw new Error(`Duplicate code change plan id: ${id}`); + ids.add(id); + } +} + +/** + * Validate persisted plans for review when their source graph and diagnostics are + * not loaded. Evidence references remain syntax-checked and content-bound by each + * plan hash; the supplied graph fingerprint must match. + */ +export function assertCodeChangePlansForReview( + values: unknown, + graphFingerprintValue: string, +): asserts values is CodeChangePlan[] { + if (!Array.isArray(values)) throw new Error('Code change plans must be an array'); + fingerprint(graphFingerprintValue, 'Code change review graphFingerprint'); + const ids = new Set(); + for (const value of values) { + const plan = objectValue(value, 'Code change plan'); + const evidence = objectValue(plan.evidence, 'Code change plan evidence'); + uniqueIdArray(evidence.recordIds, RECORD_ID, 'Code change plan evidence.recordIds'); + uniqueIdArray(evidence.diagnosticIds, DIAGNOSTIC_ID, 'Code change plan evidence.diagnosticIds'); + uniqueIdArray(evidence.conclusionIds, CONCLUSION_ID, 'Code change plan evidence.conclusionIds'); + uniqueIdArray(evidence.proposalIds, TODO_PROPOSAL_ID, 'Code change plan evidence.proposalIds'); + assertCodeChangePlanValue(value, { + recordIds: new Set(evidence.recordIds as string[]), + diagnosticIds: new Set(evidence.diagnosticIds as string[]), + conclusionIds: new Set(evidence.conclusionIds as string[]), + proposalIds: new Set(evidence.proposalIds as string[]), + }); + assertPlanGraphFingerprint(value, graphFingerprintValue); + const id = (value as CodeChangePlan).id; + if (ids.has(id)) throw new Error(`Duplicate code change plan id: ${id}`); + ids.add(id); + } +} + +/** + * Validate a persisted plan before acceptance when its full conclusion and TODO + * proposal objects are no longer present. Their IDs remain syntax-checked and + * content-bound by the plan hash; records and diagnostics stay grounded in the + * supplied before graph. + */ +export function assertCodeChangePlanForAcceptance( + value: unknown, + context: GroundedValidationContext, +): asserts value is CodeChangePlan { + const known = validateGroundedContext(context); + const plan = objectValue(value, 'Code change plan'); + const evidence = objectValue(plan.evidence, 'Code change plan evidence'); + uniqueIdArray(evidence.conclusionIds, CONCLUSION_ID, 'Code change plan evidence.conclusionIds'); + uniqueIdArray(evidence.proposalIds, TODO_PROPOSAL_ID, 'Code change plan evidence.proposalIds'); + assertCodeChangePlanValue(value, { + ...known, + conclusionIds: new Set(evidence.conclusionIds as string[]), + proposalIds: new Set(evidence.proposalIds as string[]), + }); + assertPlanGraphFingerprint(value, context.graph.fingerprint); +} + +export function assertCodeChangeAcceptance( + value: unknown, + context: CodeChangeAcceptanceValidationContext, +): asserts value is CodeChangeAcceptance { + assertCodeChangePlanForAcceptance(context.plan, context.before); + const beforeKnown = validateGroundedContext(context.before); + const afterKnown = validateGroundedContext(context.after); + const acceptance = objectValue(value, 'Code change acceptance'); + exactKeys(acceptance, [ + 'schemaVersion', 'planId', 'planHash', 'beforeGraphFingerprint', 'afterGraphFingerprint', + 'beforeDiagnosticIds', 'afterDiagnosticIds', 'clearedDiagnosticIds', 'remainingDiagnosticIds', + 'newBlockingDiagnosticIds', 'accepted', 'reasons', 'evaluatedAt', 'generation', + ], 'Code change acceptance'); + if (acceptance.schemaVersion !== 't2c.code-change-acceptance/v1') { + throw new Error('Unsupported code change acceptance schemaVersion'); + } + if (acceptance.planId !== context.plan.id) throw new Error('Code change acceptance planId does not match its plan'); + if (acceptance.planHash !== context.plan.planHash) throw new Error('Code change acceptance planHash does not match its plan'); + if (acceptance.beforeGraphFingerprint !== context.before.graph.fingerprint) { + throw new Error('Code change acceptance beforeGraphFingerprint does not match its graph'); + } + if (acceptance.afterGraphFingerprint !== context.after.graph.fingerprint) { + throw new Error('Code change acceptance afterGraphFingerprint does not match its graph'); + } + for (const key of [ + 'beforeDiagnosticIds', 'afterDiagnosticIds', 'clearedDiagnosticIds', 'remainingDiagnosticIds', + 'newBlockingDiagnosticIds', + ] as const) { + uniqueIdArray(acceptance[key], DIAGNOSTIC_ID, `Code change acceptance ${key}`); + } + const beforeIds = [...beforeKnown.diagnosticIds].sort(); + const afterIds = [...afterKnown.diagnosticIds].sort(); + const targeted = [...context.plan.evidence.diagnosticIds].sort(); + const expectedCleared = targeted.filter((id) => !afterKnown.diagnosticIds.has(id)); + const expectedRemaining = targeted.filter((id) => afterKnown.diagnosticIds.has(id)); + const expectedBlocking = context.after.diagnostics.diagnostics + .filter((item) => item.severity === 'blocking' && !beforeKnown.diagnosticIds.has(item.id)) + .map((item) => item.id) + .sort(); + assertStringSetMatch(acceptance.beforeDiagnosticIds as string[], beforeIds, 'Code change acceptance beforeDiagnosticIds'); + assertStringSetMatch(acceptance.afterDiagnosticIds as string[], afterIds, 'Code change acceptance afterDiagnosticIds'); + assertStringSetMatch(acceptance.clearedDiagnosticIds as string[], expectedCleared, 'Code change acceptance clearedDiagnosticIds'); + assertStringSetMatch(acceptance.remainingDiagnosticIds as string[], expectedRemaining, 'Code change acceptance remainingDiagnosticIds'); + assertStringSetMatch(acceptance.newBlockingDiagnosticIds as string[], expectedBlocking, 'Code change acceptance newBlockingDiagnosticIds'); + const expectedAccepted = expectedRemaining.length === 0 && expectedBlocking.length === 0; + if (acceptance.accepted !== expectedAccepted) throw new Error('Code change acceptance accepted flag is inconsistent'); + nonEmptyUniqueStringArray(acceptance.reasons, 'Code change acceptance reasons'); + dateString(acceptance.evaluatedAt, 'Code change acceptance evaluatedAt'); + assertGroundedGenerationMetadata(acceptance.generation, 'Code change acceptance generation'); + if ((acceptance.generation as GroundedGenerationMetadata).generatedAt !== acceptance.evaluatedAt) { + throw new Error('Code change acceptance generation.generatedAt must match evaluatedAt'); + } +} + +function assertPlanGraphFingerprint(plan: CodeChangePlan, graphFingerprintValue: string): void { + if (plan.evidence.graphFingerprint !== graphFingerprintValue) { + throw new Error('Code change plan evidence.graphFingerprint does not match its graph'); + } +} + +function assertCodeChangePlanValue( + value: unknown, + known: { + recordIds: Set; + diagnosticIds: Set; + conclusionIds: Set; + proposalIds: Set; + }, +): asserts value is CodeChangePlan { + const plan = objectValue(value, 'Code change plan'); + exactKeys(plan, [ + 'schemaVersion', 'id', 'planHash', 'status', 'createdAt', 'title', 'description', 'priority', + 'target', 'acceptanceCriteria', 'changes', 'risk', 'rollback', 'evidence', 'confidence', 'generation', + ], 'Code change plan'); + if (plan.schemaVersion !== 't2c.code-change-plan/v1') { + throw new Error('Unsupported code change plan schemaVersion'); + } + if (typeof plan.id !== 'string' || !CODE_CHANGE_PLAN_ID.test(plan.id)) { + throw new Error('Code change plan id must match CPLAN-<20 hex>'); + } + fingerprint(plan.planHash, `Code change plan ${plan.id}: planHash`); + if (plan.status !== 'proposed') throw new Error(`Code change plan ${plan.id}: status must be proposed`); + dateString(plan.createdAt, `Code change plan ${plan.id}: createdAt`); + nonBlankString(plan.title, `Code change plan ${plan.id}: title`); + nonBlankString(plan.description, `Code change plan ${plan.id}: description`); + enumValue(plan.priority, TODO_PRIORITIES, `Code change plan ${plan.id}: priority`); + const target = objectValue(plan.target, `Code change plan ${plan.id}: target`); + exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `Code change plan ${plan.id}: target`); + for (const key of ['paths', 'symbols', 'tickets', 'versions'] as const) { + stringArray(target[key], `Code change plan ${plan.id}: target.${key}`, true); + if ((target[key] as string[]).some((item) => !item.trim())) { + throw new Error(`Code change plan ${plan.id}: target.${key} cannot contain blank values`); + } + } + const targetPaths = new Set((target.paths as string[]).map((item, index) => ( + repositoryPath(item, `Code change plan ${plan.id}: target.paths[${index}]`) + ))); + nonEmptyUniqueStringArray(plan.acceptanceCriteria, `Code change plan ${plan.id}: acceptanceCriteria`); + if (!Array.isArray(plan.changes) || plan.changes.length === 0) { + throw new Error(`Code change plan ${plan.id}: changes must be a non-empty array`); + } + const changePaths = new Set(); + for (const [index, rawChange] of plan.changes.entries()) { + const change = objectValue(rawChange, `Code change plan ${plan.id}: changes[${index}]`); + exactKeys(change, ['path', 'action', 'symbols', 'rationale'], `Code change plan ${plan.id}: changes[${index}]`); + nonBlankString(change.path, `Code change plan ${plan.id}: changes[${index}].path`); + const normalizedPath = repositoryPath(change.path, `Code change plan ${plan.id}: changes[${index}].path`); + if (!targetPaths.has(normalizedPath)) { + throw new Error(`Code change plan ${plan.id}: changes[${index}].path is not present in target.paths`); + } + enumValue(change.action, CODE_CHANGE_ACTIONS, `Code change plan ${plan.id}: changes[${index}].action`); + stringArray(change.symbols, `Code change plan ${plan.id}: changes[${index}].symbols`, true); + if ((change.symbols as string[]).some((item) => !item.trim())) { + throw new Error(`Code change plan ${plan.id}: changes[${index}].symbols cannot contain blank values`); + } + nonBlankString(change.rationale, `Code change plan ${plan.id}: changes[${index}].rationale`); + if (changePaths.has(normalizedPath)) { + throw new Error(`Code change plan ${plan.id}: duplicate change for ${normalizedPath}`); + } + changePaths.add(normalizedPath); + } + const risk = objectValue(plan.risk, `Code change plan ${plan.id}: risk`); + exactKeys(risk, ['level', 'reasons'], `Code change plan ${plan.id}: risk`); + enumValue(risk.level, CODE_CHANGE_RISK_LEVELS, `Code change plan ${plan.id}: risk.level`); + nonEmptyUniqueStringArray(risk.reasons, `Code change plan ${plan.id}: risk.reasons`); + nonBlankString(plan.rollback, `Code change plan ${plan.id}: rollback`); + const evidence = objectValue(plan.evidence, `Code change plan ${plan.id}: evidence`); + exactKeys(evidence, [ + 'graphFingerprint', 'recordIds', 'diagnosticIds', 'conclusionIds', 'proposalIds', + ], `Code change plan ${plan.id}: evidence`); + fingerprint(evidence.graphFingerprint, `Code change plan ${plan.id}: evidence.graphFingerprint`); + nonEmptyUniqueIdArray(evidence.recordIds, RECORD_ID, `Code change plan ${plan.id}: evidence.recordIds`); + nonEmptyUniqueIdArray(evidence.diagnosticIds, DIAGNOSTIC_ID, `Code change plan ${plan.id}: evidence.diagnosticIds`); + uniqueIdArray(evidence.conclusionIds, CONCLUSION_ID, `Code change plan ${plan.id}: evidence.conclusionIds`); + uniqueIdArray(evidence.proposalIds, TODO_PROPOSAL_ID, `Code change plan ${plan.id}: evidence.proposalIds`); + knownReferences(evidence.recordIds as string[], known.recordIds, `Code change plan ${plan.id}: evidence.recordIds`); + knownReferences(evidence.diagnosticIds as string[], known.diagnosticIds, `Code change plan ${plan.id}: evidence.diagnosticIds`); + knownReferences(evidence.conclusionIds as string[], known.conclusionIds, `Code change plan ${plan.id}: evidence.conclusionIds`); + knownReferences(evidence.proposalIds as string[], known.proposalIds, `Code change plan ${plan.id}: evidence.proposalIds`); + confidence(plan.confidence, `Code change plan ${plan.id}: confidence`); + assertGroundedGenerationMetadata(plan.generation, `Code change plan ${plan.id}: generation`); + + const semantic = plan as unknown as CodeChangePlan; + const expectedHash = createCodeChangePlanHash(semantic); + if (plan.planHash !== expectedHash) { + throw new Error(`Code change plan planHash does not match semantic content: expected ${expectedHash}`); + } + const expectedId = createCodeChangePlanId(semantic); + if (plan.id !== expectedId) { + throw new Error(`Code change plan id does not match semantic content: expected ${expectedId}`); + } +} + +function validateCodeChangePlanContext(context: CodeChangePlanValidationContext): { + recordIds: Set; + diagnosticIds: Set; + conclusionIds: Set; + proposalIds: Set; +} { + const known = validateGroundedContext(context); + const conclusions = context.conclusions ?? []; + const proposals = context.proposals ?? []; + if (conclusions.length) assertConclusions(conclusions, context); + if (proposals.length && conclusions.length) { + assertTodoProposals(proposals, { graph: context.graph, diagnostics: context.diagnostics, conclusions }); + } else if (proposals.length) { + const referencedConclusionIds = new Set(); + for (const [index, value] of proposals.entries()) { + const proposal = objectValue(value, `TODO proposal reference[${index}]`); + uniqueIdArray(proposal.conclusionIds, CONCLUSION_ID, `TODO proposal reference[${index}].conclusionIds`); + for (const id of proposal.conclusionIds as string[]) referencedConclusionIds.add(id); + } + const proposalIds = new Set(); + for (const proposal of proposals) { + assertTodoProposalReferenceValue( + proposal, + known.recordIds, + known.diagnosticIds, + referencedConclusionIds, + ); + if (proposalIds.has(proposal.id)) throw new Error(`Duplicate TODO proposal id: ${proposal.id}`); + proposalIds.add(proposal.id); + } + } + return { + ...known, + conclusionIds: new Set(conclusions.map((item) => item.id)), + proposalIds: new Set(proposals.map((item) => item.id)), + }; +} + +function assertStringSetMatch(actual: string[], expected: string[], name: string): void { + const normalizedActual = [...actual].sort(); + if (normalizedActual.length !== expected.length + || normalizedActual.some((value, index) => value !== expected[index])) { + throw new Error(`${name} does not match the grounded diagnostic set`); + } +} diff --git a/src/core/schema/conclusions.ts b/src/core/schema/conclusions.ts new file mode 100644 index 0000000..6763aac --- /dev/null +++ b/src/core/schema/conclusions.ts @@ -0,0 +1,210 @@ +import { createConclusionId, createTodoProposalId } from '../id.js'; +import type { + Conclusion, + TodoProposal, +} from '../types.js'; +import { + DIAGNOSTIC_ID, + CONCLUSION_ID, + TODO_PROPOSAL_ID, + TODO_PRIORITIES, + CONCLUSION_KINDS, + DIAGNOSTIC_SEVERITIES, +} from './constants.js'; +import { + assertAcyclicProposalDependencies, + assertGroundedGenerationMetadata, + confidence, + enumValue, + exactKeys, + nonBlankString, + nonEmptyUniqueIdArray, + nonEmptyUniqueStringArray, + objectValue, + uniqueIdArray, + knownReferences, + stringArray, +} from './utils.js'; +import { + assertIntentGraph, + assertIntentRecord, + TodoProposalValidationContext, + GroundedValidationContext, +} from './intent.js'; + +export function assertConclusion( + value: unknown, + context: GroundedValidationContext, +): asserts value is Conclusion { + const known = validateGroundedContext(context); + assertConclusionValue(value, known.recordIds, known.diagnosticIds); +} + +export function assertConclusions( + values: unknown, + context: GroundedValidationContext, +): asserts values is Conclusion[] { + if (!Array.isArray(values)) throw new Error('Conclusions must be an array'); + const known = validateGroundedContext(context); + const ids = new Set(); + for (const value of values) { + assertConclusionValue(value, known.recordIds, known.diagnosticIds); + const id = (value as Conclusion).id; + if (ids.has(id)) throw new Error(`Duplicate conclusion id: ${id}`); + ids.add(id); + } +} + +export function assertTodoProposal( + value: unknown, + context: TodoProposalValidationContext, +): asserts value is TodoProposal { + const known = validateTodoProposalContext(context); + assertTodoProposalValue(value, known.recordIds, known.diagnosticIds, known.conclusionIds); +} + +export function assertTodoProposals( + values: unknown, + context: TodoProposalValidationContext, +): asserts values is TodoProposal[] { + if (!Array.isArray(values)) throw new Error('TODO proposals must be an array'); + const known = validateTodoProposalContext(context); + const proposalIds = new Set(); + for (const value of values) { + assertTodoProposalValue(value, known.recordIds, known.diagnosticIds, known.conclusionIds); + const id = (value as TodoProposal).id; + if (proposalIds.has(id)) throw new Error(`Duplicate TODO proposal id: ${id}`); + proposalIds.add(id); + } + for (const proposal of values as TodoProposal[]) { + for (const dependency of proposal.dependencies) { + if (!proposalIds.has(dependency)) { + throw new Error(`TODO proposal ${proposal.id} references unknown dependency ${dependency}`); + } + } + } + assertAcyclicProposalDependencies(values as TodoProposal[]); +} + +function assertConclusionValue( + value: unknown, + recordIds: Set, + diagnosticIds: Set, +): asserts value is Conclusion { + const conclusion = objectValue(value, 'Conclusion'); + exactKeys(conclusion, [ + 'schemaVersion', 'id', 'kind', 'title', 'detail', 'severity', 'diagnosticIds', 'recordIds', 'confidence', 'generation', + ], 'Conclusion'); + if (conclusion.schemaVersion !== 't2c.conclusion/v1') throw new Error('Unsupported conclusion schemaVersion'); + if (typeof conclusion.id !== 'string' || !CONCLUSION_ID.test(conclusion.id)) { + throw new Error('Conclusion id must match CONC-<20 hex>'); + } + enumValue(conclusion.kind, CONCLUSION_KINDS, `Conclusion ${conclusion.id}: kind`); + nonBlankString(conclusion.title, `Conclusion ${conclusion.id}: title`); + nonBlankString(conclusion.detail, `Conclusion ${conclusion.id}: detail`); + enumValue(conclusion.severity, DIAGNOSTIC_SEVERITIES, `Conclusion ${conclusion.id}: severity`); + nonEmptyUniqueIdArray(conclusion.diagnosticIds, DIAGNOSTIC_ID, `Conclusion ${conclusion.id}: diagnosticIds`); + nonEmptyUniqueIdArray(conclusion.recordIds, createRecordIdRegex(), `Conclusion ${conclusion.id}: recordIds`); + knownReferences(conclusion.diagnosticIds, diagnosticIds, `Conclusion ${conclusion.id}: diagnosticIds`); + knownReferences(conclusion.recordIds, recordIds, `Conclusion ${conclusion.id}: recordIds`); + confidence(conclusion.confidence, `Conclusion ${conclusion.id}: confidence`); + assertGroundedGenerationMetadata(conclusion.generation, `Conclusion ${conclusion.id}: generation`); + const expectedId = createConclusionId(conclusion as unknown as Conclusion); + if (conclusion.id !== expectedId) throw new Error(`Conclusion id does not match semantic content: expected ${expectedId}`); +} + +export function assertTodoProposalValue( + value: unknown, + recordIds: Set, + diagnosticIds: Set, + conclusionIds: Set, +): asserts value is TodoProposal { + const proposal = objectValue(value, 'TODO proposal'); + exactKeys(proposal, [ + 'schemaVersion', 'id', 'title', 'description', 'priority', 'status', 'target', 'acceptanceCriteria', + 'dependencies', 'conclusionIds', 'diagnosticIds', 'recordIds', 'confidence', 'generation', + ], 'TODO proposal'); + if (proposal.schemaVersion !== 't2c.todo-proposal/v1') throw new Error('Unsupported TODO proposal schemaVersion'); + if (typeof proposal.id !== 'string' || !TODO_PROPOSAL_ID.test(proposal.id)) { + throw new Error('TODO proposal id must match TPROP-<20 hex>'); + } + nonBlankString(proposal.title, `TODO proposal ${proposal.id}: title`); + nonBlankString(proposal.description, `TODO proposal ${proposal.id}: description`); + enumValue(proposal.priority, TODO_PRIORITIES, `TODO proposal ${proposal.id}: priority`); + if (proposal.status !== 'proposed') throw new Error(`TODO proposal ${proposal.id}: status must be proposed`); + const target = objectValue(proposal.target, `TODO proposal ${proposal.id}: target`); + exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `TODO proposal ${proposal.id}: target`); + for (const key of ['paths', 'symbols', 'tickets', 'versions'] as const) { + stringArray(target[key], `TODO proposal ${proposal.id}: target.${key}`, true); + if ((target[key] as string[]).some((item) => !item.trim())) { + throw new Error(`TODO proposal ${proposal.id}: target.${key} cannot contain blank values`); + } + } + nonEmptyUniqueStringArray(proposal.acceptanceCriteria, `TODO proposal ${proposal.id}: acceptanceCriteria`); + uniqueIdArray(proposal.dependencies, TODO_PROPOSAL_ID, `TODO proposal ${proposal.id}: dependencies`); + if ((proposal.dependencies as string[]).includes(proposal.id as string)) { + throw new Error(`TODO proposal ${proposal.id} cannot depend on itself`); + } + nonEmptyUniqueIdArray(proposal.conclusionIds, CONCLUSION_ID, `TODO proposal ${proposal.id}: conclusionIds`); + nonEmptyUniqueIdArray(proposal.diagnosticIds, DIAGNOSTIC_ID, `TODO proposal ${proposal.id}: diagnosticIds`); + nonEmptyUniqueIdArray(proposal.recordIds, createRecordIdRegex(), `TODO proposal ${proposal.id}: recordIds`); + knownReferences(proposal.conclusionIds, conclusionIds, `TODO proposal ${proposal.id}: conclusionIds`); + knownReferences(proposal.diagnosticIds, diagnosticIds, `TODO proposal ${proposal.id}: diagnosticIds`); + knownReferences(proposal.recordIds, recordIds, `TODO proposal ${proposal.id}: recordIds`); + confidence(proposal.confidence, `TODO proposal ${proposal.id}: confidence`); + assertGroundedGenerationMetadata(proposal.generation, `TODO proposal ${proposal.id}: generation`); + const expectedId = createTodoProposalId(proposal as unknown as TodoProposal); + if (proposal.id !== expectedId) throw new Error(`TODO proposal id does not match semantic content: expected ${expectedId}`); +} + +export function assertTodoProposalReferenceValue( + value: unknown, + recordIds: Set, + diagnosticIds: Set, + conclusionIds: Set, +): void { + assertTodoProposalValue(value, recordIds, diagnosticIds, conclusionIds); +} + +function createRecordIdRegex(): RegExp { + return /^INT-[A-Z]+-[a-f0-9]{20}$/; +} + +export function validateGroundedContext(context: GroundedValidationContext): { + recordIds: Set; + diagnosticIds: Set; +} { + assertIntentGraph(context.graph); + const report = objectValue(context.diagnostics, 'Diagnostic report'); + if (report.schemaVersion !== 't2c.diagnostics/v1') throw new Error('Unsupported diagnostic schemaVersion'); + if (report.graphFingerprint !== context.graph.fingerprint) { + throw new Error('Diagnostic report does not describe the supplied graph'); + } + if (!Array.isArray(report.diagnostics)) throw new Error('Diagnostic report diagnostics must be an array'); + const diagnosticIds = new Set(); + for (const value of report.diagnostics) { + const diagnostic = objectValue(value, 'Diagnostic'); + if (typeof diagnostic.id !== 'string' || !DIAGNOSTIC_ID.test(diagnostic.id)) { + throw new Error('Diagnostic id must match DIAG-<20 hex>'); + } + if (diagnosticIds.has(diagnostic.id)) throw new Error(`Duplicate diagnostic id: ${diagnostic.id}`); + diagnosticIds.add(diagnostic.id); + } + return { + recordIds: new Set(context.graph.records.map((record) => record.id)), + diagnosticIds, + }; +} + +export function validateTodoProposalContext(context: TodoProposalValidationContext): { + recordIds: Set; + diagnosticIds: Set; + conclusionIds: Set; +} { + const known = validateGroundedContext(context); + assertConclusions(context.conclusions, context); + return { + ...known, + conclusionIds: new Set(context.conclusions.map((conclusion) => conclusion.id)), + }; +} diff --git a/src/core/schema/constants.ts b/src/core/schema/constants.ts new file mode 100644 index 0000000..2f52361 --- /dev/null +++ b/src/core/schema/constants.ts @@ -0,0 +1,31 @@ +export const ACTIONS = new Set([ + 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', + 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', +]); +export const MODALITIES = new Set(['required', 'recommended', 'optional', 'observed', 'claimed', 'unknown']); +export const POLARITIES = new Set(['positive', 'negative']); +export const LIFECYCLES = new Set([ + 'proposed', 'planned', 'in_progress', 'implemented', 'verified', 'released', 'completed', 'blocked', 'unknown', +]); +export const SOURCE_KINDS = new Set(['nl', 'git', 'ast', 'todo', 'changelog', 'document', 'agent_log', 'test', 'system']); +export const EPISTEMIC_CLASSES = new Set(['declaration', 'plan', 'claim', 'fact', 'inference', 'llm_inference']); +export const RELATION_TYPES = new Set([ + 'declares', 'plans', 'implements', 'modifies', 'tests', 'documents', 'releases', 'depends_on', + 'blocks', 'supersedes', 'contradicts', 'duplicates', 'evidenced_by', 'claimed_by', 'same_as', 'related_to', +]); +export const CONCLUSION_KINDS = new Set(['finding', 'risk', 'decision', 'recommendation']); +export const DIAGNOSTIC_SEVERITIES = new Set(['info', 'warning', 'review_required', 'blocking']); +export const TODO_PRIORITIES = new Set(['P0', 'P1', 'P2', 'P3']); +export const GENERATION_REQUESTED_MODES = new Set(['deterministic', 'prefer-llm', 'require-llm']); +export const GENERATION_EFFECTIVE_MODES = new Set(['deterministic', 'llm']); +export const RECORD_ID = /^INT-[A-Z]+-[a-f0-9]{20}$/; +export const RELATION_ID = /^REL-[a-f0-9]{20}$/; +export const DIAGNOSTIC_ID = /^DIAG-[a-f0-9]{20}$/; +export const CONCLUSION_ID = /^CONC-[a-f0-9]{20}$/; +export const TODO_PROPOSAL_ID = /^TPROP-[a-f0-9]{20}$/; +export const CODE_CHANGE_PLAN_ID = /^CPLAN-[a-f0-9]{20}$/; +export const CODE_CHANGE_ACTIONS = new Set(['create', 'modify', 'delete']); +export const CODE_CHANGE_RISK_LEVELS = new Set(['low', 'medium', 'high']); +export const FINGERPRINT = /^[a-f0-9]{64}$/; +export const RUNTIME_VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/; +export const ISO_DATE_TIME = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/; diff --git a/src/core/schema/index.ts b/src/core/schema/index.ts new file mode 100644 index 0000000..a9d7a6e --- /dev/null +++ b/src/core/schema/index.ts @@ -0,0 +1,4 @@ +export * from './intent.js'; +export * from './conclusions.js'; +export * from './code-change.js'; +export { assertGroundedGenerationMetadata } from './utils.js'; diff --git a/src/core/schema/intent.ts b/src/core/schema/intent.ts new file mode 100644 index 0000000..481c355 --- /dev/null +++ b/src/core/schema/intent.ts @@ -0,0 +1,276 @@ +import { graphFingerprint } from '../id.js'; +import type { + CodeChangeAcceptance, + CodeChangePlan, + Conclusion, + DiagnosticReport, + IntentGraph, + IntentGraphDiff, + IntentRecord, + IntentRelation, + TodoProposal, +} from '../types.js'; +import { + ACTIONS, + EPISTEMIC_CLASSES, + FINGERPRINT, + GENERATION_EFFECTIVE_MODES, + ISO_DATE_TIME, + LIFECYCLES, + MODALITIES, + SOURCE_KINDS, + RECORD_ID, + RELATION_ID, + RELATION_TYPES, + RUNTIME_VERSION, + POLARITIES, +} from './constants.js'; +import { + assertGroundedGenerationMetadata, + countMap, + countRecords, + dateString, + exactCounts, + exactKeys, + enumValue, + fingerprint, + nonBlankString, + nonEmptyString, + nonNegativeInteger, + nullableDate, + nullableString, + objectValue, + stringArray, + isJsonValue, +} from './utils.js'; + +export interface GroundedValidationContext { + graph: IntentGraph; + diagnostics: DiagnosticReport; +} + +export interface TodoProposalValidationContext extends GroundedValidationContext { + conclusions: Conclusion[]; +} + +export interface CodeChangePlanValidationContext extends GroundedValidationContext { + conclusions?: Conclusion[]; + proposals?: TodoProposal[]; +} + +export interface CodeChangeAcceptanceValidationContext { + plan: CodeChangePlan; + before: GroundedValidationContext; + after: GroundedValidationContext; +} + +export function assertIntentRecord(value: unknown): asserts value is IntentRecord { + const record = objectValue(value, 'Intent record'); + exactKeys(record, ['schemaVersion', 'id', 'statement', 'lifecycle', 'source', 'epistemic', 'observedAt', 'metadata'], 'Intent record'); + if (record.schemaVersion !== 't2c.intent/v1') throw new Error('Unsupported intent schemaVersion'); + if (typeof record.id !== 'string' || !RECORD_ID.test(record.id)) throw new Error('Intent record id must match INT--<20 hex>'); + + const statement = objectValue(record.statement, `Intent ${record.id}: statement`); + exactKeys(statement, ['kind', 'actor', 'action', 'subject', 'object', 'target', 'modality', 'polarity', 'text'], `Intent ${record.id}: statement`); + nonEmptyString(statement.kind, `Intent ${record.id}: statement.kind`); + nullableString(statement.actor, `Intent ${record.id}: statement.actor`); + enumValue(statement.action, ACTIONS, `Intent ${record.id}: statement.action`); + nullableString(statement.subject, `Intent ${record.id}: statement.subject`); + nonEmptyString(statement.object, `Intent ${record.id}: statement.object`); + if (typeof statement.text !== 'string') throw new Error(`Intent ${record.id}: statement.text must be a string`); + enumValue(statement.modality, MODALITIES, `Intent ${record.id}: statement.modality`); + enumValue(statement.polarity, POLARITIES, `Intent ${record.id}: statement.polarity`); + + const target = objectValue(statement.target, `Intent ${record.id}: statement.target`); + exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `Intent ${record.id}: statement.target`); + for (const key of ['paths', 'symbols', 'tickets', 'versions'] as const) { + stringArray(target[key], `Intent ${record.id}: statement.target.${key}`, true); + } + + const lifecycle = objectValue(record.lifecycle, `Intent ${record.id}: lifecycle`); + exactKeys(lifecycle, ['status'], `Intent ${record.id}: lifecycle`); + enumValue(lifecycle.status, LIFECYCLES, `Intent ${record.id}: lifecycle.status`); + + const source = objectValue(record.source, `Intent ${record.id}: source`); + exactKeys(source, ['kind', 'path', 'lines', 'revision', 'symbol', 'commitIndex', 'extractor', 'contentHash', 'rawExcerpt'], `Intent ${record.id}: source`); + enumValue(source.kind, SOURCE_KINDS, `Intent ${record.id}: source.kind`); + nullableString(source.path, `Intent ${record.id}: source.path`); + nullableString(source.revision, `Intent ${record.id}: source.revision`); + nullableString(source.symbol, `Intent ${record.id}: source.symbol`); + nullableString(source.rawExcerpt, `Intent ${record.id}: source.rawExcerpt`); + nonEmptyString(source.extractor, `Intent ${record.id}: source.extractor`); + if (typeof source.contentHash !== 'string' || !FINGERPRINT.test(source.contentHash)) { + throw new Error(`Intent ${record.id}: source.contentHash must be SHA-256`); + } + if (source.commitIndex !== null && (!Number.isInteger(source.commitIndex) || (source.commitIndex as number) < 1)) { + throw new Error(`Intent ${record.id}: source.commitIndex must be null or an integer >= 1`); + } + if (source.lines !== null) { + const lines = objectValue(source.lines, `Intent ${record.id}: source.lines`); + exactKeys(lines, ['start', 'end'], `Intent ${record.id}: source.lines`); + if (!Number.isInteger(lines.start) || (lines.start as number) < 1 || !Number.isInteger(lines.end) || (lines.end as number) < (lines.start as number)) { + throw new Error(`Intent ${record.id}: source.lines must be positive and end >= start`); + } + } + + const epistemic = objectValue(record.epistemic, `Intent ${record.id}: epistemic`); + exactKeys(epistemic, ['class', 'confidence', 'basis'], `Intent ${record.id}: epistemic`); + enumValue(epistemic.class, EPISTEMIC_CLASSES, `Intent ${record.id}: epistemic.class`); + if (typeof epistemic.confidence !== 'number' || !Number.isFinite(epistemic.confidence) + || epistemic.confidence < 0 || epistemic.confidence > 1) { + throw new Error(`Intent ${record.id}: epistemic.confidence must be between 0 and 1`); + } + stringArray(epistemic.basis, `Intent ${record.id}: epistemic.basis`, true); + nullableDate(record.observedAt, `Intent ${record.id}: observedAt`); + + const metadata = objectValue(record.metadata, `Intent ${record.id}: metadata`); + if (!isJsonValue(metadata)) throw new Error(`Intent ${record.id}: metadata must contain JSON values only`); + assertIntentGenerationMetadata(metadata.generation, `Intent ${record.id}: metadata.generation`); + assertGenerationMatchesExtractor(metadata.generation, source.extractor as string, `Intent ${record.id}: metadata.generation`); + if (epistemic.class === 'llm_inference' + && (metadata.generation as { used: unknown }).used !== 'llm') { + throw new Error(`Intent ${record.id}: llm_inference requires metadata.generation.used=llm`); + } +} + +function assertGenerationMatchesExtractor(value: unknown, extractor: string, name: string): void { + const generation = value as { generator: string; generatorVersion: string }; + const separator = extractor.lastIndexOf('@'); + const expectedGenerator = separator > 0 ? extractor.slice(0, separator) : extractor; + if (generation.generator !== expectedGenerator) { + throw new Error(`${name}.generator must match source.extractor (${expectedGenerator})`); + } + if (separator > 0 && generation.generatorVersion !== extractor.slice(separator + 1)) { + throw new Error(`${name}.generatorVersion must match source.extractor (${extractor.slice(separator + 1)})`); + } +} + +function assertIntentGenerationMetadata(value: unknown, name: string): void { + const generation = objectValue(value, name); + exactKeys(generation, [ + 'generator', 'generatorVersion', 'runtimeVersion', 'requested', 'used', 'degraded', + 'fallbackReason', 'provider', 'model', 'responseId', + ], name); + nonBlankString(generation.generator, `${name}.generator`); + nonBlankString(generation.generatorVersion, `${name}.generatorVersion`); + if (typeof generation.runtimeVersion !== 'string' || !RUNTIME_VERSION.test(generation.runtimeVersion)) { + throw new Error(`${name}.runtimeVersion must be a semantic version`); + } + enumValue(generation.requested, GENERATION_EFFECTIVE_MODES, `${name}.requested`); + enumValue(generation.used, GENERATION_EFFECTIVE_MODES, `${name}.used`); + if (typeof generation.degraded !== 'boolean') throw new Error(`${name}.degraded must be a boolean`); + nullableString(generation.fallbackReason, `${name}.fallbackReason`); + nullableString(generation.provider, `${name}.provider`); + nullableString(generation.model, `${name}.model`); + nullableString(generation.responseId, `${name}.responseId`); + if (generation.used === 'llm') { + nonBlankString(generation.provider, `${name}.provider`); + nonBlankString(generation.model, `${name}.model`); + } else if (generation.provider !== null || generation.model !== null || generation.responseId !== null) { + throw new Error(`${name}: deterministic generation cannot claim an LLM provider, model or responseId`); + } + if (generation.degraded) { + if (generation.requested !== 'llm' || generation.used !== 'deterministic') { + throw new Error(`${name}: degraded generation must be an LLM request using deterministic fallback`); + } + nonBlankString(generation.fallbackReason, `${name}.fallbackReason`); + } else if (generation.fallbackReason !== null) { + throw new Error(`${name}.fallbackReason must be null when generation is not degraded`); + } +} + +export function assertIntentRecords(values: unknown): asserts values is IntentRecord[] { + if (!Array.isArray(values)) throw new Error('Intent records must be an array'); + values.forEach(assertIntentRecord); +} + +export function assertIntentGraph(value: unknown): asserts value is IntentGraph { + const graph = objectValue(value, 'Intent graph'); + exactKeys(graph, ['schemaVersion', 'generatedAt', 'fingerprint', 'records', 'relations', 'stats'], 'Intent graph'); + if (graph.schemaVersion !== 't2c.graph/v1') throw new Error('Unsupported graph schemaVersion'); + dateString(graph.generatedAt, 'Graph generatedAt'); + fingerprint(graph.fingerprint, 'Graph fingerprint'); + assertIntentRecords(graph.records); + if (!Array.isArray(graph.relations)) throw new Error('Graph relations must be an array'); + const recordIds = new Set((graph.records as IntentRecord[]).map((record) => record.id)); + if (recordIds.size !== (graph.records as IntentRecord[]).length) throw new Error('Graph record IDs must be unique'); + const relationIds = new Set(); + for (const relation of graph.relations) { + assertRelation(relation, recordIds); + if (relationIds.has((relation as IntentRelation).id)) throw new Error(`Duplicate relation id: ${(relation as IntentRelation).id}`); + relationIds.add((relation as IntentRelation).id); + } + const stats = objectValue(graph.stats, 'Graph stats'); + exactKeys(stats, ['bySource', 'byAction', 'byStatus'], 'Graph stats'); + countMap(stats.bySource, 'Graph stats.bySource'); + countMap(stats.byAction, 'Graph stats.byAction'); + countMap(stats.byStatus, 'Graph stats.byStatus'); + const records = graph.records as IntentRecord[]; + exactCounts(stats.bySource, countRecords(records, (record) => record.source.kind), 'Graph stats.bySource'); + exactCounts(stats.byAction, countRecords(records, (record) => record.statement.action), 'Graph stats.byAction'); + exactCounts(stats.byStatus, countRecords(records, (record) => record.lifecycle.status), 'Graph stats.byStatus'); + const expectedFingerprint = graphFingerprint(records, graph.relations as IntentRelation[]); + if (graph.fingerprint !== expectedFingerprint) throw new Error('Graph fingerprint does not match records and relations'); +} + +export function assertIntentGraphDiff(value: unknown): asserts value is IntentGraphDiff { + const diff = objectValue(value, 'Intent graph diff'); + exactKeys(diff, ['schemaVersion', 'generatedAt', 'fingerprint', 'beforeFingerprint', 'afterFingerprint', 'records', 'relations', 'summary'], 'Intent graph diff'); + if (diff.schemaVersion !== 't2c.diff/v1') throw new Error('Unsupported graph diff schemaVersion'); + dateString(diff.generatedAt, 'Graph diff generatedAt'); + fingerprint(diff.fingerprint, 'Graph diff fingerprint'); + fingerprint(diff.beforeFingerprint, 'Graph diff beforeFingerprint'); + fingerprint(diff.afterFingerprint, 'Graph diff afterFingerprint'); + + const records = objectValue(diff.records, 'Graph diff records'); + exactKeys(records, ['added', 'removed', 'changed', 'unchanged'], 'Graph diff records'); + assertIntentRecords(records.added); + assertIntentRecords(records.removed); + if (!Array.isArray(records.changed)) throw new Error('Graph diff changed records must be an array'); + for (const rawChange of records.changed) { + const change = objectValue(rawChange, 'Graph diff record change'); + exactKeys(change, ['identity', 'before', 'after', 'changedFields'], 'Graph diff record change'); + nonEmptyString(change.identity, 'Graph diff record change identity'); + assertIntentRecord(change.before); + assertIntentRecord(change.after); + stringArray(change.changedFields, 'Graph diff changedFields', true); + } + nonNegativeInteger(records.unchanged, 'Graph diff records.unchanged'); + + const relations = objectValue(diff.relations, 'Graph diff relations'); + exactKeys(relations, ['added', 'removed', 'unchanged'], 'Graph diff relations'); + if (!Array.isArray(relations.added) || !Array.isArray(relations.removed)) throw new Error('Graph diff relation sets must be arrays'); + [...relations.added, ...relations.removed].forEach((relation) => assertRelation(relation)); + nonNegativeInteger(relations.unchanged, 'Graph diff relations.unchanged'); + + const summary = objectValue(diff.summary, 'Graph diff summary'); + exactKeys(summary, ['recordsAdded', 'recordsRemoved', 'recordsChanged', 'recordsUnchanged', 'relationsAdded', 'relationsRemoved', 'relationsUnchanged'], 'Graph diff summary'); + for (const [key, count] of Object.entries(summary)) nonNegativeInteger(count, `Graph diff summary.${key}`); + const expectedCounts: Record = { + recordsAdded: (records.added as unknown[]).length, + recordsRemoved: (records.removed as unknown[]).length, + recordsChanged: (records.changed as unknown[]).length, + recordsUnchanged: records.unchanged as number, + relationsAdded: (relations.added as unknown[]).length, + relationsRemoved: (relations.removed as unknown[]).length, + relationsUnchanged: relations.unchanged as number, + }; + exactCounts(summary, expectedCounts, 'Graph diff summary'); +} + +export function assertRelation(value: unknown, knownRecords?: Set): asserts value is IntentRelation { + const relation = objectValue(value, 'Intent relation'); + exactKeys(relation, ['id', 'from', 'to', 'type', 'confidence', 'basis'], 'Intent relation'); + if (typeof relation.id !== 'string' || !RELATION_ID.test(relation.id)) throw new Error('Intent relation id must match REL-<20 hex>'); + nonEmptyString(relation.from, `Relation ${relation.id}: from`); + nonEmptyString(relation.to, `Relation ${relation.id}: to`); + enumValue(relation.type, RELATION_TYPES, `Relation ${relation.id}: type`); + if (typeof relation.confidence !== 'number' || !Number.isFinite(relation.confidence) + || relation.confidence < 0 || relation.confidence > 1) { + throw new Error(`Relation ${relation.id}: confidence must be between 0 and 1`); + } + stringArray(relation.basis, `Relation ${relation.id}: basis`, true); + if (knownRecords && (!knownRecords.has(relation.from as string) || !knownRecords.has(relation.to as string))) { + throw new Error(`Relation ${relation.id} references unknown records`); + } +} diff --git a/src/core/schema/utils.ts b/src/core/schema/utils.ts new file mode 100644 index 0000000..1195bc0 --- /dev/null +++ b/src/core/schema/utils.ts @@ -0,0 +1,219 @@ +import type { JsonValue, IntentRecord, GroundedGenerationMetadata } from '../types.js'; +import { + GENERATION_EFFECTIVE_MODES, + GENERATION_REQUESTED_MODES, + FINGERPRINT, + ISO_DATE_TIME, + RUNTIME_VERSION, +} from './constants.js'; + +export function objectValue(value: unknown, name: string): Record { + if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${name} must be an object`); + return value as Record; +} + +export function exactKeys(value: Record, expected: string[], name: string): void { + const expectedSet = new Set(expected); + const missing = expected.filter((key) => !(key in value)); + const extra = Object.keys(value).filter((key) => !expectedSet.has(key)); + if (missing.length) throw new Error(`${name} is missing: ${missing.join(', ')}`); + if (extra.length) throw new Error(`${name} has unsupported fields: ${extra.join(', ')}`); +} + +export function nonEmptyString(value: unknown, name: string): asserts value is string { + if (typeof value !== 'string' || !value.length) throw new Error(`${name} must be a non-empty string`); +} + +export function nonBlankString(value: unknown, name: string): asserts value is string { + if (typeof value !== 'string' || !value.trim().length) throw new Error(`${name} must be a non-blank string`); +} + +export function nullableString(value: unknown, name: string): void { + if (value !== null && typeof value !== 'string') throw new Error(`${name} must be a string or null`); +} + +export function enumValue(value: unknown, allowed: Set, name: string): asserts value is string { + if (typeof value !== 'string' || !allowed.has(value)) throw new Error(`${name} has unsupported value: ${String(value)}`); +} + +export function stringArray(value: unknown, name: string, unique = false): asserts value is string[] { + if (!Array.isArray(value) || !value.every((item) => typeof item === 'string')) { + throw new Error(`${name} must be an array of strings`); + } + if (unique && new Set(value).size !== value.length) { + throw new Error(`${name} must contain unique values`); + } +} + +export function nonEmptyUniqueStringArray(value: unknown, name: string): asserts value is string[] { + stringArray(value, name, true); + if (!value.length || value.some((item) => !item.trim().length)) { + throw new Error(`${name} must contain at least one non-blank string`); + } + if (new Set(value.map((item) => item.trim())).size !== value.length) { + throw new Error(`${name} must remain unique after trimming whitespace`); + } +} + +export function repositoryPath(value: unknown, name: string): string { + nonBlankString(value, name); + const normalized = value.trim().replace(/\\/g, '/'); + if (normalized.startsWith('/') || normalized.split('/').some((part) => part === '..')) { + throw new Error(`${name} must be a relative repository path without parent traversal`); + } + return normalized; +} + +export function exactStringSet(actual: string[], expected: string[], name: string): void { + const normalizedActual = [...actual].sort(); + if (normalizedActual.length !== expected.length + || normalizedActual.some((value, index) => value !== expected[index])) { + throw new Error(`${name} does not match the grounded diagnostic set`); + } +} + +export function uniqueIdArray(value: unknown, pattern: RegExp, name: string): asserts value is string[] { + stringArray(value, name, true); + if (value.some((item) => !pattern.test(item))) throw new Error(`${name} contains an invalid id`); +} + +export function nonEmptyUniqueIdArray(value: unknown, pattern: RegExp, name: string): asserts value is string[] { + uniqueIdArray(value, pattern, name); + if (!value.length) throw new Error(`${name} must contain at least one id`); +} + +export function knownReferences(values: string[], known: Set, name: string): void { + const unknown = values.filter((value) => !known.has(value)); + if (unknown.length) throw new Error(`${name} references unknown ids: ${unknown.join(', ')}`); +} + +export function confidence(value: unknown, name: string): asserts value is number { + if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || value > 1) { + throw new Error(`${name} must be between 0 and 1`); + } +} + +export function assertAcyclicProposalDependencies(proposals: { id: string; dependencies: string[] }[]): void { + const byId = new Map(proposals.map((proposal) => [proposal.id, proposal])); + const visiting = new Set(); + const visited = new Set(); + const visit = (id: string, chain: string[]): void => { + if (visiting.has(id)) { + const start = chain.indexOf(id); + throw new Error(`TODO proposal dependency cycle: ${[...chain.slice(Math.max(0, start)), id].join(' -> ')}`); + } + if (visited.has(id)) return; + visiting.add(id); + for (const dependency of byId.get(id)?.dependencies ?? []) visit(dependency, [...chain, id]); + visiting.delete(id); + visited.add(id); + }; + for (const proposal of proposals) visit(proposal.id, []); +} + +export function dateString(value: unknown, name: string): asserts value is string { + if (typeof value !== 'string' || !ISO_DATE_TIME.test(value) || !Number.isFinite(Date.parse(value))) { + throw new Error(`${name} must be an ISO date-time string`); + } +} + +export function nullableDate(value: unknown, name: string): void { + if (value !== null) dateString(value, name); +} + +export function fingerprint(value: unknown, name: string): void { + if (typeof value !== 'string' || !FINGERPRINT.test(value)) throw new Error(`${name} must be SHA-256`); +} + +export function nonNegativeInteger(value: unknown, name: string): void { + if (!Number.isInteger(value) || (value as number) < 0) throw new Error(`${name} must be an integer >= 0`); +} + +export function countMap(value: unknown, name: string): void { + const map = objectValue(value, name); + for (const [key, count] of Object.entries(map)) { + if (!key) throw new Error(`${name} keys must be non-empty`); + nonNegativeInteger(count, `${name}.${key}`); + } +} + +export function countRecords(records: IntentRecord[], selector: (record: IntentRecord) => string): Record { + const counts: Record = {}; + for (const record of records) { + const key = selector(record); + counts[key] = (counts[key] ?? 0) + 1; + } + return counts; +} + +export function exactCounts(value: unknown, expected: Record, name: string): void { + const actual = objectValue(value, name); + const keys = [...new Set([...Object.keys(actual), ...Object.keys(expected)])].sort(); + for (const key of keys) { + if (actual[key] !== expected[key]) { + throw new Error(`${name} is inconsistent for ${key}: expected ${expected[key] ?? 0}, received ${String(actual[key] ?? 0)}`); + } + } +} + +export function isJsonValue(value: unknown): value is JsonValue { + if (value === null || typeof value === 'string' || typeof value === 'boolean') return true; + if (typeof value === 'number') return Number.isFinite(value); + if (Array.isArray(value)) return value.every(isJsonValue); + if (value && typeof value === 'object') return Object.values(value as Record).every(isJsonValue); + return false; +} + +export function assertGroundedGenerationMetadata( + value: unknown, + name: string, +): asserts value is GroundedGenerationMetadata { + const generation = objectValue(value, name); + exactKeys(generation, [ + 'generator', 'generatorVersion', 'runtimeVersion', 'generatedAt', 'requestedMode', 'effectiveMode', + 'degraded', 'model', 'provider', 'responseId', 'configurationFingerprint', 'reason', + ], name); + nonBlankString(generation.generator, `${name}.generator`); + nonBlankString(generation.generatorVersion, `${name}.generatorVersion`); + if (typeof generation.runtimeVersion !== 'string' || !RUNTIME_VERSION.test(generation.runtimeVersion)) { + throw new Error(`${name}.runtimeVersion must be a semantic version`); + } + dateString(generation.generatedAt, `${name}.generatedAt`); + enumValue(generation.requestedMode, GENERATION_REQUESTED_MODES, `${name}.requestedMode`); + enumValue(generation.effectiveMode, GENERATION_EFFECTIVE_MODES, `${name}.effectiveMode`); + if (typeof generation.degraded !== 'boolean') throw new Error(`${name}.degraded must be a boolean`); + nullableString(generation.model, `${name}.model`); + nullableString(generation.provider, `${name}.provider`); + nullableString(generation.responseId, `${name}.responseId`); + fingerprint(generation.configurationFingerprint, `${name}.configurationFingerprint`); + nullableString(generation.reason, `${name}.reason`); + + if (generation.effectiveMode === 'llm') { + nonBlankString(generation.model, `${name}.model`); + nonBlankString(generation.provider, `${name}.provider`); + if (generation.degraded) throw new Error(`${name}.degraded must be false when effectiveMode is llm`); + } + if (generation.requestedMode === 'deterministic') { + if ( + generation.effectiveMode !== 'deterministic' || generation.degraded + || generation.model !== null || generation.provider !== null || generation.responseId !== null + || generation.reason !== null + ) { + throw new Error(`${name} deterministic mode cannot contain LLM or degradation metadata`); + } + } + if (generation.requestedMode === 'require-llm' && generation.effectiveMode !== 'llm') { + throw new Error(`${name} require-llm mode cannot use deterministic output`); + } + if (generation.requestedMode === 'prefer-llm' && generation.effectiveMode === 'deterministic' && !generation.degraded) { + throw new Error(`${name} prefer-llm deterministic output must be marked degraded`); + } + if (generation.degraded) { + if (generation.requestedMode !== 'prefer-llm' || generation.effectiveMode !== 'deterministic') { + throw new Error(`${name} degraded output is only valid for prefer-llm deterministic fallback`); + } + nonBlankString(generation.reason, `${name}.reason`); + } else if (generation.reason !== null) { + throw new Error(`${name}.reason must be null when output is not degraded`); + } +} diff --git a/src/core/types.ts b/src/core/types.ts index 16aa0c3..314a00e 100644 --- a/src/core/types.ts +++ b/src/core/types.ts @@ -1,676 +1 @@ -export type JsonPrimitive = string | number | boolean | null; -export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue }; - -export type SourceKind = - | 'nl' - | 'git' - | 'ast' - | 'todo' - | 'changelog' - | 'document' - | 'agent_log' - | 'test' - | 'system'; - -export type EpistemicClass = - | 'declaration' - | 'plan' - | 'claim' - | 'fact' - | 'inference' - | 'llm_inference'; - -export type LifecycleStatus = - | 'proposed' - | 'planned' - | 'in_progress' - | 'implemented' - | 'verified' - | 'released' - | 'completed' - | 'blocked' - | 'unknown'; - -export type IntentAction = - | 'add' - | 'fix' - | 'remove' - | 'refactor' - | 'test' - | 'document' - | 'configure' - | 'analyze' - | 'validate' - | 'call' - | 'depend_on' - | 'declare' - | 'release' - | 'change' - | 'preserve' - | 'block' - | 'approve' - | 'unknown'; - -export type Modality = 'required' | 'recommended' | 'optional' | 'observed' | 'claimed' | 'unknown'; -export type Polarity = 'positive' | 'negative'; - -export interface SourceLineRange { - start: number; - end: number; -} - -export interface IntentTarget { - paths: string[]; - symbols: string[]; - tickets: string[]; - versions: string[]; -} - -export interface IntentStatement { - kind: string; - actor: string | null; - action: IntentAction; - subject: string | null; - object: string; - target: IntentTarget; - modality: Modality; - polarity: Polarity; - text: string; -} - -export interface IntentSource { - kind: SourceKind; - path: string | null; - lines: SourceLineRange | null; - revision: string | null; - symbol: string | null; - commitIndex: number | null; - extractor: string; - contentHash: string; - rawExcerpt: string | null; -} - -export interface IntentEpistemic { - class: EpistemicClass; - confidence: number; - basis: string[]; -} - -export interface IntentLifecycle { - status: LifecycleStatus; -} - -export type IntentGenerationMode = 'deterministic' | 'llm'; - -/** - * Runtime-owned provenance of the conversion that materialized one DSL record. - * This is required even for deterministic records: `source` identifies the - * evidence, while `generation` identifies the software or model that converted - * that evidence to Intent DSL. - */ -export interface IntentGenerationMetadata extends Record { - generator: string; - generatorVersion: string; - runtimeVersion: string; - requested: IntentGenerationMode; - used: IntentGenerationMode; - degraded: boolean; - fallbackReason: string | null; - provider: string | null; - model: string | null; - responseId: string | null; -} - -export interface IntentRecordMetadata extends Record { - generation: IntentGenerationMetadata; -} - -export interface IntentRecord { - schemaVersion: 't2c.intent/v1'; - id: string; - statement: IntentStatement; - lifecycle: IntentLifecycle; - source: IntentSource; - epistemic: IntentEpistemic; - observedAt: string | null; - metadata: IntentRecordMetadata; -} - -export type RelationType = - | 'declares' - | 'plans' - | 'implements' - | 'modifies' - | 'tests' - | 'documents' - | 'releases' - | 'depends_on' - | 'blocks' - | 'supersedes' - | 'contradicts' - | 'duplicates' - | 'evidenced_by' - | 'claimed_by' - | 'same_as' - | 'related_to'; - -export interface IntentRelation { - id: string; - from: string; - to: string; - type: RelationType; - confidence: number; - basis: string[]; -} - -export interface IntentGraph { - schemaVersion: 't2c.graph/v1'; - generatedAt: string; - fingerprint: string; - records: IntentRecord[]; - relations: IntentRelation[]; - stats: { - bySource: Record; - byAction: Record; - byStatus: Record; - }; -} - -export interface IntentRecordChange { - identity: string; - before: IntentRecord; - after: IntentRecord; - changedFields: string[]; -} - -export interface IntentGraphDiff { - schemaVersion: 't2c.diff/v1'; - generatedAt: string; - fingerprint: string; - beforeFingerprint: string; - afterFingerprint: string; - records: { - added: IntentRecord[]; - removed: IntentRecord[]; - changed: IntentRecordChange[]; - unchanged: number; - }; - relations: { - added: IntentRelation[]; - removed: IntentRelation[]; - unchanged: number; - }; - summary: { - recordsAdded: number; - recordsRemoved: number; - recordsChanged: number; - recordsUnchanged: number; - relationsAdded: number; - relationsRemoved: number; - relationsUnchanged: number; - }; -} - -export type DiagnosticCode = - | 'ALIGNED' - | 'PLANNED_NOT_IMPLEMENTED' - | 'IMPLEMENTED_NOT_PLANNED' - | 'IMPLEMENTED_NOT_DOCUMENTED' - | 'CHANGELOG_WITHOUT_IMPLEMENTATION' - | 'CONFLICTING_INTENT' - | 'AMBIGUOUS_REQUIREMENT' - | 'UNLINKED_RECORD' - | 'LOW_CONFIDENCE' - | 'INSUFFICIENT_EVIDENCE' - | 'LLM_NOT_CONFIGURED' - | 'SOURCE_UNAVAILABLE' - | 'PARTICIPANT_IDENTITY_UNRESOLVED' - | 'HUMAN_COMMUNICATION_CONFLICT' - | 'AGENT_COMMUNICATION_CONFLICT' - | 'HUMAN_AGENT_CONFLICT' - | 'REQUEST_WITHOUT_AGENT_RESPONSE' - | 'AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED' - | 'AGENT_CLAIM_WITHOUT_EVIDENCE' - | 'AGENT_WORK_OUTSIDE_REQUEST'; - -export type DiagnosticSeverity = 'info' | 'warning' | 'review_required' | 'blocking'; - -export interface Diagnostic { - id: string; - code: DiagnosticCode; - severity: DiagnosticSeverity; - title: string; - detail: string; - recordIds: string[]; - suggestedAction: string; -} - -export interface DiagnosticReport { - schemaVersion: 't2c.diagnostics/v1'; - generatedAt: string; - graphFingerprint: string; - diagnostics: Diagnostic[]; - counts: Record; -} - -export type ConclusionKind = 'finding' | 'risk' | 'decision' | 'recommendation'; -export type TodoPriority = 'P0' | 'P1' | 'P2' | 'P3'; - -export interface GroundedGenerationMetadata { - generator: string; - generatorVersion: string; - runtimeVersion: string; - generatedAt: string; - requestedMode: 'deterministic' | 'prefer-llm' | 'require-llm'; - effectiveMode: 'deterministic' | 'llm'; - degraded: boolean; - model: string | null; - provider: string | null; - responseId: string | null; - configurationFingerprint: string; - reason: string | null; -} - -export interface Conclusion { - schemaVersion: 't2c.conclusion/v1'; - id: string; - kind: ConclusionKind; - title: string; - detail: string; - severity: DiagnosticSeverity; - diagnosticIds: string[]; - recordIds: string[]; - confidence: number; - generation: GroundedGenerationMetadata; -} - -export interface TodoProposal { - schemaVersion: 't2c.todo-proposal/v1'; - id: string; - title: string; - description: string; - priority: TodoPriority; - status: 'proposed'; - target: IntentTarget; - acceptanceCriteria: string[]; - dependencies: string[]; - conclusionIds: string[]; - diagnosticIds: string[]; - recordIds: string[]; - confidence: number; - generation: GroundedGenerationMetadata; -} - -/** - * Grounded proposal to change source files so that a plan/diagnostic can be - * closed by later re-analysis. Status is always `proposed`: the runtime never - * applies a code change and never marks work DONE from this contract alone. - */ -export type CodeChangeFileAction = 'create' | 'modify' | 'delete'; - -export interface CodeChangeFile { - path: string; - action: CodeChangeFileAction; - symbols: string[]; - rationale: string; -} - -export type CodeChangeRiskLevel = 'low' | 'medium' | 'high'; - -export interface CodeChangeRisk { - level: CodeChangeRiskLevel; - reasons: string[]; -} - -export interface CodeChangePlan { - schemaVersion: 't2c.code-change-plan/v1'; - id: string; - planHash: string; - status: 'proposed'; - createdAt: string; - title: string; - description: string; - priority: TodoPriority; - target: IntentTarget; - acceptanceCriteria: string[]; - changes: CodeChangeFile[]; - risk: CodeChangeRisk; - rollback: string; - evidence: { - graphFingerprint: string; - recordIds: string[]; - diagnosticIds: string[]; - conclusionIds: string[]; - proposalIds: string[]; - }; - confidence: number; - generation: GroundedGenerationMetadata; -} - -/** - * Result of re-diagnosing a graph after an attempted implementation. - * Acceptance requires every cited diagnostic to clear and no new blocking - * diagnostics to appear. Remaining non-targeted warnings do not fail the gate. - */ -export interface CodeChangeAcceptance { - schemaVersion: 't2c.code-change-acceptance/v1'; - planId: string; - planHash: string; - beforeGraphFingerprint: string; - afterGraphFingerprint: string; - beforeDiagnosticIds: string[]; - afterDiagnosticIds: string[]; - clearedDiagnosticIds: string[]; - remainingDiagnosticIds: string[]; - newBlockingDiagnosticIds: string[]; - accepted: boolean; - reasons: string[]; - evaluatedAt: string; - generation: GroundedGenerationMetadata; -} - -/** Aggregate, non-authoritative result for closing one or more code-change plans. */ -export interface CodeChangeCloseResult { - schemaVersion: 't2c.code-change-close-result/v1'; - evaluatedAt: string; - graphFingerprintBefore: string; - graphFingerprintAfter: string; - planCount: number; - acceptedCount: number; - rejectedCount: number; - allAccepted: boolean; - acceptances: CodeChangeAcceptance[]; - generation: GroundedGenerationMetadata; -} - -/** - * Reviewable, non-executable projection of code-change plans. - * Carries a content hash of the Markdown so reviewers can detect tampering. - * The runtime never applies this artifact to source files. - */ -export interface CodeChangeReviewPatch { - schemaVersion: 't2c.code-change-review/v1'; - createdAt: string; - graphFingerprint: string; - planIds: string[]; - planHashes: string[]; - renderedPatchHash: string; - generation: GroundedGenerationMetadata; -} - -/** - * Structured source-edit proposal bound to one code-change plan. - * Instructions (and optional unified diffs) may only name paths declared by the - * plan. Application requires an explicit approval hash and never runs by default. - */ -export interface CodeChangeSourceEdit { - path: string; - action: CodeChangeFileAction; - symbols: string[]; - instruction: string; - /** - * Optional unified diff body for the single file. Null for instruction-only - * deterministic proposals. When set, the runtime checks path headers and - * rejects parent traversal / absolute host paths. Apply requires a non-null - * diff for every edit. - */ - unifiedDiff: string | null; -} - -export interface CodeChangeSourcePatch { - schemaVersion: 't2c.code-change-source-patch/v1'; - id: string; - patchHash: string; - status: 'proposed'; - createdAt: string; - planId: string; - planHash: string; - graphFingerprint: string; - diagnosticIds: string[]; - recordIds: string[]; - edits: CodeChangeSourceEdit[]; - acceptanceCriteria: string[]; - generation: GroundedGenerationMetadata; -} - -export interface CodeChangeSourcePatchSet { - schemaVersion: 't2c.code-change-source-patch-set/v1'; - generatedAt: string; - graphFingerprint: string; - patches: CodeChangeSourcePatch[]; - generation: GroundedGenerationMetadata; -} - -export interface CodeChangeSourcePatchApproval { - actor: string; - patchHash: string; -} - -export interface CodeChangeSourceApplyReceipt { - schemaVersion: 't2c.code-change-source-apply-receipt/v1'; - patchId: string; - patchHash: string; - planId: string; - approvedBy: string; - approvedAt: string; - appliedAt: string; - appliedPaths: string[]; - fileHashesAfter: Record; - generation: GroundedGenerationMetadata; -} - -export interface TodoPatchDuplicateClassification { - proposalId: string; - existingRecordIds: string[]; - basis: string[]; -} - -export interface TodoPatchArtifact { - schemaVersion: 't2c.todo-patch/v1'; - createdAt: string; - sourceTodo: { - path: string; - contentHash: string; - }; - graphFingerprint: string; - diagnosticsFingerprint: string; - selectedProposalIds: string[]; - duplicateProposalIds: string[]; - duplicates: TodoPatchDuplicateClassification[]; - synthesisAudit: PipelineStageAudit; - renderedPatchHash: string; -} - -export interface TodoPatchApproval { - actor: string; - patchHash: string; -} - -export interface TodoApplyReceipt { - schemaVersion: 't2c.todo-apply-receipt/v1'; - patchHash: string; - sourceTodoHash: string; - resultTodoHash: string; - selectedProposalIds: string[]; - approvedBy: string; - approvedAt: string; - appliedAt: string; -} - -export interface TodoApplyResult { - applied: boolean; - idempotent: boolean; - receipt: TodoApplyReceipt; -} - -export interface ExtractionResult { - records: IntentRecord[]; - warnings: string[]; -} - -export interface ContentCacheStats { - hits: number; - misses: number; - writes: number; - recoveries: number; - errors: number; - bypassed: number; -} - -export interface CachedExtractionResult extends ExtractionResult { - cache: ContentCacheStats; -} - -export type LlmExtractionMode = 'deterministic' | 'prefer-llm' | 'require-llm'; -export type NlExtractionMode = LlmExtractionMode; - -export type PipelineStageStatus = 'succeeded' | 'partial' | 'fallback' | 'failed' | 'skipped'; -export type PipelineFailureStage = - | 'setup' - | 'naturalLanguageExtraction' - | 'gitExtraction' - | 'astExtraction' - | 'markdownExtraction' - | 'documentationExtraction' - | 'configurationExtraction' - | 'runtimeExtraction' - | 'communicationAnalysis' - | 'linking' - | 'diagnostics' - | 'taskSynthesis' - | 'todoRendering' - | 'codeChangePlanning' - | 'summary' - | 'persistence'; - -export interface LlmResponseMetadata extends Record { - responseId: string | null; - model: string | null; - provider: string | null; - usage: { - promptTokens: number | null; - completionTokens: number | null; - totalTokens: number | null; - cost: number | null; - } | null; -} - -export interface PipelineStageAudit { - runtimeVersion: string; - configuration: Record; - status: PipelineStageStatus; - requestedMode: 'deterministic' | 'llm' | 'disabled'; - effectiveMode: 'deterministic' | 'llm' | 'none'; - degraded: boolean; - recordCount: number; - warningCount: number; - model: string | null; - durationMs: number; - reason: { code: string; message: string } | null; - responses: LlmResponseMetadata[]; -} - -export interface PipelineOptions { - root: string; - taskFile: string | null; - todoFile: string | null; - changelogFile: string | null; - documentPatterns: string[]; - includeDocumentationLlm: boolean; - outputDir: string; - gitCommitCount: number; - allowSummaryFallback: boolean; - includeSummaryLlm?: boolean; - nlMode?: NlExtractionMode; - markdownMode?: LlmExtractionMode; - communicationMode?: LlmExtractionMode; - documentExcludes?: string[]; - taskSynthesisMode?: 'disabled' | 'prefer-llm' | 'require-llm'; - includeCommunication?: boolean; - projectDirectory?: string; - communicationTicket?: string | null; - /** autonom cycle document; runtime evidence is skipped when absent. */ - cycleFile?: string | null; -} - -export interface PipelineManifest { - schemaVersion: 't2c.run/v1'; - runId: string; - root: string; - createdAt: string; - graphFingerprint: string | null; - files: Record; - warnings: string[]; - status: 'succeeded' | 'degraded' | 'failed'; - failure: { stage: PipelineFailureStage; code: string; message: string } | null; - runtime: { - name: 'todo2code'; - version: string; - }; - configuration: { - fingerprint: string; - nlMode: NlExtractionMode; - markdownMode: LlmExtractionMode; - communicationMode: LlmExtractionMode; - gitCommitCount: number; - maxFileBytes: number; - markdownConcurrency: number; - documentConcurrency: number; - documentChunkChars: number; - documentMaxChunks: number; - documentRecordsPerChunk: number; - documentTimeoutMs: number; - summaryLlm: boolean; - taskSynthesisMode: 'disabled' | 'prefer-llm' | 'require-llm'; - includeCommunication: boolean; - projectDirectory: string; - communicationTicket: string | null; - documentPatterns: string[]; - documentExcludes: string[]; - adapters: { - python: { enabled: boolean; executable: string }; - go: { enabled: boolean; executable: string }; - java: { enabled: boolean; executable: string }; - rust: { enabled: boolean; executable: string }; - php: { enabled: boolean; executable: string }; - tensorflow: { - enabled: boolean; - modelPath: string | null; - modulePath: string; - labels: string[]; - }; - }; - llm: { - configured: boolean; - baseUrl: string; - nlModel: string; - markdownModel: string; - communicationModel: string; - documentModel: string; - summaryModel: string; - taskModel: string; - timeoutMs: number; - maxTokens: number; - temperature: number; - requireStructuredOutput: boolean; - responseHealing: boolean; - }; - }; - stages: { - naturalLanguageExtraction: PipelineStageAudit; - markdownExtraction: PipelineStageAudit; - documentationExtraction: PipelineStageAudit; - communicationAnalysis: PipelineStageAudit; - taskSynthesis: PipelineStageAudit; - codeChangePlanning: PipelineStageAudit; - summary: PipelineStageAudit; - }; - llm: { - naturalLanguageExtraction: boolean; - markdownExtraction: boolean; - communicationEnrichment: boolean; - documentationExtraction: boolean; - taskSynthesis: boolean; - summary: boolean; - }; -} +export * from './types/index.js'; diff --git a/src/core/types/code-change.ts b/src/core/types/code-change.ts new file mode 100644 index 0000000..8e2ef10 --- /dev/null +++ b/src/core/types/code-change.ts @@ -0,0 +1,221 @@ +import type { IntentTarget } from './intent.js'; +import type { ConclusionKind, DiagnosticSeverity, TodoPriority } from './diagnostics.js'; +import type { PipelineStageAudit } from './pipeline.js'; + +export interface GroundedGenerationMetadata { + generator: string; + generatorVersion: string; + runtimeVersion: string; + generatedAt: string; + requestedMode: 'deterministic' | 'prefer-llm' | 'require-llm'; + effectiveMode: 'deterministic' | 'llm'; + degraded: boolean; + model: string | null; + provider: string | null; + responseId: string | null; + configurationFingerprint: string; + reason: string | null; +} + +export interface Conclusion { + schemaVersion: 't2c.conclusion/v1'; + id: string; + kind: ConclusionKind; + title: string; + detail: string; + severity: DiagnosticSeverity; + diagnosticIds: string[]; + recordIds: string[]; + confidence: number; + generation: GroundedGenerationMetadata; +} + +export interface TodoProposal { + schemaVersion: 't2c.todo-proposal/v1'; + id: string; + title: string; + description: string; + priority: TodoPriority; + status: 'proposed'; + target: IntentTarget; + acceptanceCriteria: string[]; + dependencies: string[]; + conclusionIds: string[]; + diagnosticIds: string[]; + recordIds: string[]; + confidence: number; + generation: GroundedGenerationMetadata; +} + +/** + * Grounded proposal to change source files so that a plan/diagnostic can be + * closed by later re-analysis. Status is always `proposed`: the runtime never + * applies a code change and never marks work DONE from this contract alone. + */ +export type CodeChangeFileAction = 'create' | 'modify' | 'delete'; + +export interface CodeChangeFile { + path: string; + action: CodeChangeFileAction; + symbols: string[]; + rationale: string; +} + +export type CodeChangeRiskLevel = 'low' | 'medium' | 'high'; + +export interface CodeChangeRisk { + level: CodeChangeRiskLevel; + reasons: string[]; +} + +export interface CodeChangePlan { + schemaVersion: 't2c.code-change-plan/v1'; + id: string; + planHash: string; + status: 'proposed'; + createdAt: string; + title: string; + description: string; + priority: TodoPriority; + target: IntentTarget; + acceptanceCriteria: string[]; + changes: CodeChangeFile[]; + risk: CodeChangeRisk; + rollback: string; + evidence: { + graphFingerprint: string; + recordIds: string[]; + diagnosticIds: string[]; + conclusionIds: string[]; + proposalIds: string[]; + }; + confidence: number; + generation: GroundedGenerationMetadata; +} + +/** + * Result of re-diagnosing a graph after an attempted implementation. + * Acceptance requires every cited diagnostic to clear and no new blocking + * diagnostics to appear. Remaining non-targeted warnings do not fail the gate. + */ +export interface CodeChangeAcceptance { + schemaVersion: 't2c.code-change-acceptance/v1'; + planId: string; + planHash: string; + beforeGraphFingerprint: string; + afterGraphFingerprint: string; + beforeDiagnosticIds: string[]; + afterDiagnosticIds: string[]; + clearedDiagnosticIds: string[]; + remainingDiagnosticIds: string[]; + newBlockingDiagnosticIds: string[]; + accepted: boolean; + reasons: string[]; + evaluatedAt: string; + generation: GroundedGenerationMetadata; +} + +/** Aggregate, non-authoritative result for closing one or more code-change plans. */ +export interface CodeChangeCloseResult { + schemaVersion: 't2c.code-change-close-result/v1'; + evaluatedAt: string; + graphFingerprintBefore: string; + graphFingerprintAfter: string; + planCount: number; + acceptedCount: number; + rejectedCount: number; + allAccepted: boolean; + acceptances: CodeChangeAcceptance[]; + generation: GroundedGenerationMetadata; +} + +/** + * Reviewable, non-executable projection of code-change plans. + * Carries a content hash of the Markdown so reviewers can detect tampering. + * The runtime never applies this artifact to source files. + */ +export interface CodeChangeReviewPatch { + schemaVersion: 't2c.code-change-review/v1'; + createdAt: string; + graphFingerprint: string; + planIds: string[]; + planHashes: string[]; + renderedPatchHash: string; + generation: GroundedGenerationMetadata; +} + +/** + * Structured source-edit proposal bound to one code-change plan. + * Instructions (and optional unified diffs) may only name paths declared by the + * plan. Application requires an explicit approval hash and never runs by default. + */ +export interface CodeChangeSourceEdit { + path: string; + action: CodeChangeFileAction; + symbols: string[]; + instruction: string; + /** + * Optional unified diff body for the single file. Null for instruction-only + * deterministic proposals. When set, the runtime checks path headers and + * rejects parent traversal / absolute host paths. Apply requires a non-null + * diff for every edit. + */ + unifiedDiff: string | null; +} + +export interface CodeChangeSourcePatch { + schemaVersion: 't2c.code-change-source-patch/v1'; + id: string; + patchHash: string; + status: 'proposed'; + createdAt: string; + planId: string; + planHash: string; + graphFingerprint: string; + diagnosticIds: string[]; + recordIds: string[]; + edits: CodeChangeSourceEdit[]; + acceptanceCriteria: string[]; + generation: GroundedGenerationMetadata; +} + +export interface CodeChangeSourcePatchSet { + schemaVersion: 't2c.code-change-source-patch-set/v1'; + generatedAt: string; + graphFingerprint: string; + patches: CodeChangeSourcePatch[]; + generation: GroundedGenerationMetadata; +} + +export interface CodeChangeSourcePatchApproval { + actor: string; + patchHash: string; +} + +export interface CodeChangeSourceApplyReceipt { + schemaVersion: 't2c.code-change-source-apply-receipt/v1'; + patchId: string; + patchHash: string; + planId: string; + approvedBy: string; + approvedAt: string; + appliedAt: string; + appliedPaths: string[]; + fileHashesAfter: Record; + generation: GroundedGenerationMetadata; +} + +export interface TodoPatchDuplicateClassification { + proposalId: string; + existingRecordIds: string[]; + basis: string[]; +} + +export interface TodoPatchArtifact { + schemaVersion: 't2c.todo-patch/v1'; + createdAt: string; + sourceTodo: { + path: string; + contentHash: string; + }; + graphFingerprint: string; diff --git a/src/core/types/diagnostics.ts b/src/core/types/diagnostics.ts new file mode 100644 index 0000000..e6b03c4 --- /dev/null +++ b/src/core/types/diagnostics.ts @@ -0,0 +1,45 @@ +export type DiagnosticCode = + | 'ALIGNED' + | 'PLANNED_NOT_IMPLEMENTED' + | 'IMPLEMENTED_NOT_PLANNED' + | 'IMPLEMENTED_NOT_DOCUMENTED' + | 'CHANGELOG_WITHOUT_IMPLEMENTATION' + | 'CONFLICTING_INTENT' + | 'AMBIGUOUS_REQUIREMENT' + | 'UNLINKED_RECORD' + | 'LOW_CONFIDENCE' + | 'INSUFFICIENT_EVIDENCE' + | 'LLM_NOT_CONFIGURED' + | 'SOURCE_UNAVAILABLE' + | 'PARTICIPANT_IDENTITY_UNRESOLVED' + | 'HUMAN_COMMUNICATION_CONFLICT' + | 'AGENT_COMMUNICATION_CONFLICT' + | 'HUMAN_AGENT_CONFLICT' + | 'REQUEST_WITHOUT_AGENT_RESPONSE' + | 'AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED' + | 'AGENT_CLAIM_WITHOUT_EVIDENCE' + | 'AGENT_WORK_OUTSIDE_REQUEST'; + +export type DiagnosticSeverity = 'info' | 'warning' | 'review_required' | 'blocking'; + +export interface Diagnostic { + id: string; + code: DiagnosticCode; + severity: DiagnosticSeverity; + title: string; + detail: string; + recordIds: string[]; + suggestedAction: string; +} + +export interface DiagnosticReport { + schemaVersion: 't2c.diagnostics/v1'; + generatedAt: string; + graphFingerprint: string; + diagnostics: Diagnostic[]; + counts: Record; +} + +export type ConclusionKind = 'finding' | 'risk' | 'decision' | 'recommendation'; +export type TodoPriority = 'P0' | 'P1' | 'P2' | 'P3'; + diff --git a/src/core/types/index.ts b/src/core/types/index.ts new file mode 100644 index 0000000..0dc4287 --- /dev/null +++ b/src/core/types/index.ts @@ -0,0 +1,4 @@ +export * from './intent.js'; +export * from './diagnostics.js'; +export * from './code-change.js'; +export * from './pipeline.js'; diff --git a/src/core/types/intent.ts b/src/core/types/intent.ts new file mode 100644 index 0000000..e8234a7 --- /dev/null +++ b/src/core/types/intent.ts @@ -0,0 +1,258 @@ +export type JsonPrimitive = string | number | boolean | null; +export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue }; + +export type SourceKind = + | 'nl' + | 'git' + | 'ast' + | 'todo' + | 'changelog' + | 'document' + | 'agent_log' + | 'test' + | 'system'; + +export type EpistemicClass = + | 'declaration' + | 'plan' + | 'claim' + | 'fact' + | 'inference' + | 'llm_inference'; + +export type LifecycleStatus = + | 'proposed' + | 'planned' + | 'in_progress' + | 'implemented' + | 'verified' + | 'released' + | 'completed' + | 'blocked' + | 'unknown'; + +export type IntentAction = + | 'add' + | 'fix' + | 'remove' + | 'refactor' + | 'test' + | 'document' + | 'configure' + | 'analyze' + | 'validate' + | 'call' + | 'depend_on' + | 'declare' + | 'release' + | 'change' + | 'preserve' + | 'block' + | 'approve' + | 'unknown'; + +export type Modality = 'required' | 'recommended' | 'optional' | 'observed' | 'claimed' | 'unknown'; +export type Polarity = 'positive' | 'negative'; + +export interface SourceLineRange { + start: number; + end: number; +} + +export interface IntentTarget { + paths: string[]; + symbols: string[]; + tickets: string[]; + versions: string[]; +} + +export interface IntentStatement { + kind: string; + actor: string | null; + action: IntentAction; + subject: string | null; + object: string; + target: IntentTarget; + modality: Modality; + polarity: Polarity; + text: string; +} + +export interface IntentSource { + kind: SourceKind; + path: string | null; + lines: SourceLineRange | null; + revision: string | null; + symbol: string | null; + commitIndex: number | null; + extractor: string; + contentHash: string; + rawExcerpt: string | null; +} + +export interface IntentEpistemic { + class: EpistemicClass; + confidence: number; + basis: string[]; +} + +export interface IntentLifecycle { + status: LifecycleStatus; +} + +export type IntentGenerationMode = 'deterministic' | 'llm'; + +/** + * Runtime-owned provenance of the conversion that materialized one DSL record. + * This is required even for deterministic records: `source` identifies the + * evidence, while `generation` identifies the software or model that converted + * that evidence to Intent DSL. + */ +export interface IntentGenerationMetadata extends Record { + generator: string; + generatorVersion: string; + runtimeVersion: string; + requested: IntentGenerationMode; + used: IntentGenerationMode; + degraded: boolean; + fallbackReason: string | null; + provider: string | null; + model: string | null; + responseId: string | null; +} + +export interface IntentRecordMetadata extends Record { + generation: IntentGenerationMetadata; +} + +export interface IntentRecord { + schemaVersion: 't2c.intent/v1'; + id: string; + statement: IntentStatement; + lifecycle: IntentLifecycle; + source: IntentSource; + epistemic: IntentEpistemic; + observedAt: string | null; + metadata: IntentRecordMetadata; +} + +export type RelationType = + | 'declares' + | 'plans' + | 'implements' + | 'modifies' + | 'tests' + | 'documents' + | 'releases' + | 'depends_on' + | 'blocks' + | 'supersedes' + | 'contradicts' + | 'duplicates' + | 'evidenced_by' + | 'claimed_by' + | 'same_as' + | 'related_to'; + +export interface IntentRelation { + id: string; + from: string; + to: string; + type: RelationType; + confidence: number; + basis: string[]; +} + +export interface IntentGraph { + schemaVersion: 't2c.graph/v1'; + generatedAt: string; + fingerprint: string; + records: IntentRecord[]; + relations: IntentRelation[]; + stats: { + bySource: Record; + byAction: Record; + byStatus: Record; + }; +} + +export interface IntentRecordChange { + identity: string; + before: IntentRecord; + after: IntentRecord; + changedFields: string[]; +} + +export interface IntentGraphDiff { + schemaVersion: 't2c.diff/v1'; + generatedAt: string; + fingerprint: string; + beforeFingerprint: string; + afterFingerprint: string; + records: { + added: IntentRecord[]; + removed: IntentRecord[]; + changed: IntentRecordChange[]; + unchanged: number; + }; + relations: { + added: IntentRelation[]; + removed: IntentRelation[]; + unchanged: number; + }; + summary: { + recordsAdded: number; + recordsRemoved: number; + recordsChanged: number; + recordsUnchanged: number; + relationsAdded: number; + relationsRemoved: number; + relationsUnchanged: number; + }; +} + +export type DiagnosticCode = + | 'ALIGNED' + | 'PLANNED_NOT_IMPLEMENTED' + | 'IMPLEMENTED_NOT_PLANNED' + | 'IMPLEMENTED_NOT_DOCUMENTED' + | 'CHANGELOG_WITHOUT_IMPLEMENTATION' + | 'CONFLICTING_INTENT' + | 'AMBIGUOUS_REQUIREMENT' + | 'UNLINKED_RECORD' + | 'LOW_CONFIDENCE' + | 'INSUFFICIENT_EVIDENCE' + | 'LLM_NOT_CONFIGURED' + | 'SOURCE_UNAVAILABLE' + | 'PARTICIPANT_IDENTITY_UNRESOLVED' + | 'HUMAN_COMMUNICATION_CONFLICT' + | 'AGENT_COMMUNICATION_CONFLICT' + | 'HUMAN_AGENT_CONFLICT' + | 'REQUEST_WITHOUT_AGENT_RESPONSE' + | 'AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED' + | 'AGENT_CLAIM_WITHOUT_EVIDENCE' + | 'AGENT_WORK_OUTSIDE_REQUEST'; + +export type DiagnosticSeverity = 'info' | 'warning' | 'review_required' | 'blocking'; + +export interface Diagnostic { + id: string; + code: DiagnosticCode; + severity: DiagnosticSeverity; + title: string; + detail: string; + recordIds: string[]; + suggestedAction: string; +} + +export interface DiagnosticReport { + schemaVersion: 't2c.diagnostics/v1'; + generatedAt: string; + graphFingerprint: string; + diagnostics: Diagnostic[]; + counts: Record; +} + +export type ConclusionKind = 'finding' | 'risk' | 'decision' | 'recommendation'; +export type TodoPriority = 'P0' | 'P1' | 'P2' | 'P3'; + diff --git a/src/core/types/pipeline.ts b/src/core/types/pipeline.ts new file mode 100644 index 0000000..910814d --- /dev/null +++ b/src/core/types/pipeline.ts @@ -0,0 +1,173 @@ +import type { JsonValue } from './intent.js'; + +export interface ExtractionResult { + records: IntentRecord[]; + warnings: string[]; +} + +export interface ContentCacheStats { + hits: number; + misses: number; + writes: number; + recoveries: number; + errors: number; + bypassed: number; +} + +export interface CachedExtractionResult extends ExtractionResult { + cache: ContentCacheStats; +} + +export type LlmExtractionMode = 'deterministic' | 'prefer-llm' | 'require-llm'; +export type NlExtractionMode = LlmExtractionMode; + +export type PipelineStageStatus = 'succeeded' | 'partial' | 'fallback' | 'failed' | 'skipped'; +export type PipelineFailureStage = + | 'setup' + | 'naturalLanguageExtraction' + | 'gitExtraction' + | 'astExtraction' + | 'markdownExtraction' + | 'documentationExtraction' + | 'configurationExtraction' + | 'runtimeExtraction' + | 'communicationAnalysis' + | 'linking' + | 'diagnostics' + | 'taskSynthesis' + | 'todoRendering' + | 'codeChangePlanning' + | 'summary' + | 'persistence'; + +export interface LlmResponseMetadata extends Record { + responseId: string | null; + model: string | null; + provider: string | null; + usage: { + promptTokens: number | null; + completionTokens: number | null; + totalTokens: number | null; + cost: number | null; + } | null; +} + +export interface PipelineStageAudit { + runtimeVersion: string; + configuration: Record; + status: PipelineStageStatus; + requestedMode: 'deterministic' | 'llm' | 'disabled'; + effectiveMode: 'deterministic' | 'llm' | 'none'; + degraded: boolean; + recordCount: number; + warningCount: number; + model: string | null; + durationMs: number; + reason: { code: string; message: string } | null; + responses: LlmResponseMetadata[]; +} + +export interface PipelineOptions { + root: string; + taskFile: string | null; + todoFile: string | null; + changelogFile: string | null; + documentPatterns: string[]; + includeDocumentationLlm: boolean; + outputDir: string; + gitCommitCount: number; + allowSummaryFallback: boolean; + includeSummaryLlm?: boolean; + nlMode?: NlExtractionMode; + markdownMode?: LlmExtractionMode; + communicationMode?: LlmExtractionMode; + documentExcludes?: string[]; + taskSynthesisMode?: 'disabled' | 'prefer-llm' | 'require-llm'; + includeCommunication?: boolean; + projectDirectory?: string; + communicationTicket?: string | null; + /** autonom cycle document; runtime evidence is skipped when absent. */ + cycleFile?: string | null; +} + +export interface PipelineManifest { + schemaVersion: 't2c.run/v1'; + runId: string; + root: string; + createdAt: string; + graphFingerprint: string | null; + files: Record; + warnings: string[]; + status: 'succeeded' | 'degraded' | 'failed'; + failure: { stage: PipelineFailureStage; code: string; message: string } | null; + runtime: { + name: 'todo2code'; + version: string; + }; + configuration: { + fingerprint: string; + nlMode: NlExtractionMode; + markdownMode: LlmExtractionMode; + communicationMode: LlmExtractionMode; + gitCommitCount: number; + maxFileBytes: number; + markdownConcurrency: number; + documentConcurrency: number; + documentChunkChars: number; + documentMaxChunks: number; + documentRecordsPerChunk: number; + documentTimeoutMs: number; + summaryLlm: boolean; + taskSynthesisMode: 'disabled' | 'prefer-llm' | 'require-llm'; + includeCommunication: boolean; + projectDirectory: string; + communicationTicket: string | null; + documentPatterns: string[]; + documentExcludes: string[]; + adapters: { + python: { enabled: boolean; executable: string }; + go: { enabled: boolean; executable: string }; + java: { enabled: boolean; executable: string }; + rust: { enabled: boolean; executable: string }; + php: { enabled: boolean; executable: string }; + tensorflow: { + enabled: boolean; + modelPath: string | null; + modulePath: string; + labels: string[]; + }; + }; + llm: { + configured: boolean; + baseUrl: string; + nlModel: string; + markdownModel: string; + communicationModel: string; + documentModel: string; + summaryModel: string; + taskModel: string; + timeoutMs: number; + maxTokens: number; + temperature: number; + requireStructuredOutput: boolean; + responseHealing: boolean; + }; + }; + stages: { + naturalLanguageExtraction: PipelineStageAudit; + markdownExtraction: PipelineStageAudit; + documentationExtraction: PipelineStageAudit; + communicationAnalysis: PipelineStageAudit; + taskSynthesis: PipelineStageAudit; + codeChangePlanning: PipelineStageAudit; + summary: PipelineStageAudit; + }; + llm: { + naturalLanguageExtraction: boolean; + markdownExtraction: boolean; + communicationEnrichment: boolean; + documentationExtraction: boolean; + taskSynthesis: boolean; + summary: boolean; + }; +} diff --git a/src/extractors/communication.ts b/src/extractors/communication.ts index 1671c37..a326d3f 100644 --- a/src/extractors/communication.ts +++ b/src/extractors/communication.ts @@ -14,6 +14,7 @@ import { splitIntentLines, } from '../core/text.js'; import type { EpistemicClass, ExtractionResult, LifecycleStatus } from '../core/types.js'; +import type { IntentRecord } from '../core/types.js'; import { classifyAction } from '../tf/classifier.js'; import { loadParticipantIdentityRegistry, type ParticipantIdentityEntry } from '../communication/identity.js'; @@ -74,144 +75,236 @@ export async function extractCommunicationIntent( let communicationFiles = 0; for (const file of files) { - const relativeToProject = relativePosix(projectRoot, file); - const parts = relativeToProject.split('/'); - const pathTicket = parts.length > 1 ? parts[0] ?? '' : ''; - if (!pathTicket) continue; - if (options.ticket && pathTicket.toLowerCase() !== options.ticket.toLowerCase()) continue; - - let body: string; - try { - body = await readText(file, config.maxFileBytes); - } catch (error) { - warnings.push(`${relativeToProject}: ${error instanceof Error ? error.message : String(error)}`); - continue; - } - const envelope = parseEnvelope(body); - const inferred = inferIdentity(relativeToProject); - const explicitEnvelope = Boolean(first( - envelope.metadata.participant, - envelope.metadata.participant_id, - envelope.metadata['participant-id'], - envelope.metadata.role, - envelope.metadata.type, - envelope.metadata.ticket, - )); - if (!explicitEnvelope && isTicketEvidenceFile(relativeToProject)) continue; - if (!options.ticket && !identityRegistry && !looksLikeTicket(pathTicket) - && !inferred.role && !explicitEnvelope) continue; - communicationFiles += 1; - const declaredParticipant = first(envelope.metadata.participant, envelope.metadata.actor, inferred.participant); - const declaredRole = normalizeRole(first(envelope.metadata.role, inferred.role)); - const declaredParticipantId = first(envelope.metadata.participant_id, envelope.metadata['participant-id']); - const identity = resolveIdentity(identityRegistry?.byId ?? null, declaredParticipantId); - const participant = identity.entry?.id ?? declaredParticipantId ?? declaredParticipant ?? `unknown:${path.basename(file)}`; - const role = identity.entry?.role ?? declaredRole; - const displayName = identity.entry?.displayName ?? declaredParticipant ?? participant; - const explicitMessageType = first(envelope.metadata.type, envelope.metadata.kind); - const messageType = normalizeType(first(explicitMessageType, inferred.type)); - const ticket = first(envelope.metadata.ticket, pathTicket) ?? pathTicket; - const recipient = first(envelope.metadata.recipient, envelope.metadata.to); - const timestamp = validTimestamp(first(envelope.metadata.timestamp, envelope.metadata.created_at, envelope.metadata.createdat)); - const declaredGitAuthors = listValue(first(envelope.metadata.git_authors, envelope.metadata['git-authors'], envelope.metadata.git_author)); - const gitAuthors = identity.entry ? [...identity.entry.gitAuthors] : declaredGitAuthors; - const declaredA2aAgentId = first(envelope.metadata.a2a_agent_id, envelope.metadata['a2a-agent-id']); - const explicitPaths = listValue(first(envelope.metadata.paths, envelope.metadata.target_paths, envelope.metadata['target-paths'])); - const explicitSymbols = listValue(first(envelope.metadata.symbols, envelope.metadata.target_symbols, envelope.metadata['target-symbols'])); - - if (role === 'unknown') warnings.push(`${relativeToProject}: role must be human or agent`); - if (participant.startsWith('unknown:')) warnings.push(`${relativeToProject}: participant is missing`); - if (identityRegistry && !declaredParticipantId) { - warnings.push(`${relativeToProject}: participant-id is required when project/participants.json exists`); - } else if (identityRegistry && !identity.entry) { - warnings.push(`${relativeToProject}: participant-id is not present in project/participants.json`); - } - if (identity.entry && declaredRole !== 'unknown' && declaredRole !== identity.entry.role) { - warnings.push(`${relativeToProject}: declared role conflicts with participant registry`); - } - if (identity.entry && declaredGitAuthors.length - && !sameStrings(declaredGitAuthors, identity.entry.gitAuthors)) { - warnings.push(`${relativeToProject}: git-authors differ from participant registry and were ignored`); - } - if (declaredA2aAgentId && (!identity.entry || !identity.entry.a2aAgentIds.includes(declaredA2aAgentId))) { - warnings.push(`${relativeToProject}: a2a-agent-id is not assigned to participant-id in the registry`); - } - if (!timestamp && first(envelope.metadata.timestamp, envelope.metadata.created_at, envelope.metadata.createdat)) { - warnings.push(`${relativeToProject}: invalid timestamp`); - } - - const segments = communicationSegments( - envelope.body, - messageType, - inferred.governanceParticipantFile && !explicitMessageType ? role : null, + const fileResult = await extractCommunicationFile( + file, + projectRoot, + root, + options, + config, + identityRegistry, ); - if (segments.length === 0 - && inferred.governanceParticipantFile - && envelope.body.trim()) { - warnings.push( - `${relativeToProject}: no recognized intent sections for ${role}:${participant}; ` - + `${role} participant must classify the content under a supported heading or add explicit type front matter`, - ); - } - for (const segment of segments) { - const segmentType = segment.type; - const semantics = semanticsFor(segmentType, role); - const classified = await classifyAction(segment.text, config); - const action = segmentType === 'decision' && classified.action === 'unknown' ? 'approve' : classified.action; - const line = envelope.bodyStartLine + segment.line - 1; - const tickets = [...new Set([ticket.toUpperCase(), ...extractTickets(segment.text)])]; - const symbols = [...new Set([...explicitSymbols, ...extractSymbols(segment.text)])] - .filter((symbol) => !tickets.some((item) => item === symbol.toUpperCase() || item.startsWith(`${symbol.toUpperCase()}-`))); - records.push(buildRecord({ - kind: `communication_${segmentType}`, - actor: participant, - action, - subject: recipient ? `to:${recipient}` : `ticket:${ticket}`, - object: inferObject(segment.text, action), - target: { - paths: [...new Set([...explicitPaths, ...extractPaths(segment.text)])], - symbols, - tickets, - versions: extractVersions(segment.text), - }, - modality: segmentType === 'report' || segmentType === 'result' || segmentType === 'claim' - ? 'claimed' - : detectModality(segment.text), - polarity: detectPolarity(segment.text), - text: segment.text, - lifecycle: semantics.lifecycle, - sourceKind: 'agent_log', - sourcePath: relativePosix(root, file), - sourceLines: { start: line, end: line }, - extractor: 't2c/project-communication@1', - epistemicClass: semantics.epistemicClass, - confidence: role === 'unknown' || participant.startsWith('unknown:') ? 0.55 : 0.88, - basis: ['project_ticket_path', 'communication_front_matter', classified.basis], - observedAt: timestamp, - metadata: { - participant, - participantId: identity.entry?.id ?? null, - displayName, - participantRole: role, - messageType: segmentType, - ticket, - recipient, - gitAuthors, - a2aAgentIds: identity.entry?.a2aAgentIds ?? [], - humanAliases: identity.entry?.humanAliases ?? [], - identityResolved: identityRegistry ? Boolean(identity.entry) : role !== 'unknown' && !participant.startsWith('unknown:'), - identitySource: identity.entry ? 'registry' : identityRegistry ? 'unresolved' : 'legacy', - participantRegistry: identityRegistry ? relativePosix(root, identityRegistry.path) : null, - llmUsed: false, - }, - })); - } + if (!fileResult) continue; + communicationFiles += fileResult.communicationFiles; + records.push(...fileResult.records); + warnings.push(...fileResult.warnings); } if (records.length === 0 && communicationFiles > 0) warnings.push('No intent-like communication statements were found'); return { records, warnings: [...new Set(warnings)].sort() }; } +interface CommunicationFileOutcome { + records: ExtractionResult['records']; + warnings: string[]; + communicationFiles: number; +} + +async function extractCommunicationFile( + file: string, + projectRoot: string, + root: string, + options: CommunicationExtractionOptions, + config: T2CConfig, + identityRegistry: Awaited> | null, +): Promise { + const relativeToProject = relativePosix(projectRoot, file); + const segments = relativeToProject.split('/'); + const pathTicket = segments.length > 1 ? segments[0] ?? '' : ''; + if (!pathTicket) return null; + if (options.ticket && pathTicket.toLowerCase() !== options.ticket.toLowerCase()) return null; + + let body: string; + try { + body = await readText(file, config.maxFileBytes); + } catch (error) { + return { + records: [], + warnings: [`${relativeToProject}: ${error instanceof Error ? error.message : String(error)}`], + communicationFiles: 0, + }; + } + + const envelope = parseEnvelope(body); + const inferred = inferIdentity(relativeToProject); + const explicitEnvelope = Boolean(first( + envelope.metadata.participant, + envelope.metadata.participant_id, + envelope.metadata['participant-id'], + envelope.metadata.role, + envelope.metadata.type, + envelope.metadata.ticket, + )); + if (!explicitEnvelope && isTicketEvidenceFile(relativeToProject)) return null; + if (!options.ticket && !identityRegistry && !looksLikeTicket(pathTicket) + && !inferred.role && !explicitEnvelope) return null; + + const declaredParticipant = first(envelope.metadata.participant, envelope.metadata.actor, inferred.participant); + const declaredRole = normalizeRole(first(envelope.metadata.role, inferred.role)); + const declaredParticipantId = first(envelope.metadata.participant_id, envelope.metadata['participant-id']); + const identity = resolveIdentity(identityRegistry?.byId ?? null, declaredParticipantId); + const participant = identity.entry?.id ?? declaredParticipantId ?? declaredParticipant ?? `unknown:${path.basename(file)}`; + const role = identity.entry?.role ?? declaredRole; + const displayName = identity.entry?.displayName ?? declaredParticipant ?? participant; + const explicitMessageType = first(envelope.metadata.type, envelope.metadata.kind); + const messageType = normalizeType(first(explicitMessageType, inferred.type)); + const ticket = first(envelope.metadata.ticket, pathTicket) ?? pathTicket; + const recipient = first(envelope.metadata.recipient, envelope.metadata.to); + const rawTimestamp = first(envelope.metadata.timestamp, envelope.metadata.created_at, envelope.metadata.createdat); + const timestamp = validTimestamp(rawTimestamp); + const declaredGitAuthors = listValue(first( + envelope.metadata.git_authors, + envelope.metadata['git-authors'], + envelope.metadata.git_author, + )); + const gitAuthors = identity.entry ? [...identity.entry.gitAuthors] : declaredGitAuthors; + const declaredA2aAgentId = first(envelope.metadata.a2a_agent_id, envelope.metadata['a2a-agent-id']); + const explicitPaths = listValue(first( + envelope.metadata.paths, + envelope.metadata.target_paths, + envelope.metadata['target-paths'], + )); + const explicitSymbols = listValue(first( + envelope.metadata.symbols, + envelope.metadata.target_symbols, + envelope.metadata['target-symbols'], + )); + + const localWarnings: string[] = []; + if (role === 'unknown') localWarnings.push(`${relativeToProject}: role must be human or agent`); + if (participant.startsWith('unknown:')) localWarnings.push(`${relativeToProject}: participant is missing`); + if (identityRegistry && !declaredParticipantId) { + localWarnings.push(`${relativeToProject}: participant-id is required when project/participants.json exists`); + } else if (identityRegistry && !identity.entry) { + localWarnings.push(`${relativeToProject}: participant-id is not present in project/participants.json`); + } + if (identity.entry && declaredRole !== 'unknown' && declaredRole !== identity.entry.role) { + localWarnings.push(`${relativeToProject}: declared role conflicts with participant registry`); + } + if (identity.entry && declaredGitAuthors.length + && !sameStrings(declaredGitAuthors, identity.entry.gitAuthors)) { + localWarnings.push(`${relativeToProject}: git-authors differ from participant registry and were ignored`); + } + if (declaredA2aAgentId && (!identity.entry || !identity.entry.a2aAgentIds.includes(declaredA2aAgentId))) { + localWarnings.push(`${relativeToProject}: a2a-agent-id is not assigned to participant-id in the registry`); + } + if (!timestamp && rawTimestamp) localWarnings.push(`${relativeToProject}: invalid timestamp`); + + const classifiedSegments = communicationSegments( + envelope.body, + messageType, + inferred.governanceParticipantFile && !explicitMessageType ? role : null, + ); + if (classifiedSegments.length === 0 + && inferred.governanceParticipantFile + && envelope.body.trim()) { + localWarnings.push( + `${relativeToProject}: no recognized intent sections for ${role}:${participant}; ` + + `${role} participant must classify the content under a supported heading or add explicit type front matter`, + ); + } + + const newRecords = await buildCommunicationRecords( + root, + file, + role, + ticket, + participant, + identity, + recipient, + identityRegistry, + timestamp, + explicitPaths, + explicitSymbols, + gitAuthors, + displayName, + classifiedSegments, + config, + envelope.bodyStartLine, + ); + + return { + records: newRecords, + warnings: localWarnings, + communicationFiles: 1, + }; +} + +async function buildCommunicationRecords( + root: string, + file: string, + role: CommunicationRole, + ticket: string, + participant: string, + identity: { entry: ParticipantIdentityEntry | null }, + recipient: string | null, + identityRegistry: Awaited> | null, + timestamp: string | null, + explicitPaths: string[], + explicitSymbols: string[], + gitAuthors: string[], + displayName: string, + segments: CommunicationSegment[], + config: T2CConfig, + bodyStartLine: number, +): Promise { + const records: IntentRecord[] = []; + for (const segment of segments) { + const segmentType = segment.type; + const semantics = semanticsFor(segmentType, role); + const classified = await classifyAction(segment.text, config); + const action = segmentType === 'decision' && classified.action === 'unknown' ? 'approve' : classified.action; + const line = bodyStartLine + segment.line - 1; + const segmentTickets = [...new Set([ticket.toUpperCase(), ...extractTickets(segment.text)])]; + const symbols = [...new Set([...explicitSymbols, ...extractSymbols(segment.text)])] + .filter((symbol) => !segmentTickets.some((item) => item === symbol.toUpperCase() || item.startsWith(`${symbol.toUpperCase()}-`))); + + records.push(buildRecord({ + kind: `communication_${segmentType}`, + actor: participant, + action, + subject: recipient ? `to:${recipient}` : `ticket:${ticket}`, + object: inferObject(segment.text, action), + target: { + paths: [...new Set([...explicitPaths, ...extractPaths(segment.text)])], + symbols, + tickets: segmentTickets, + versions: extractVersions(segment.text), + }, + modality: segmentType === 'report' || segmentType === 'result' || segmentType === 'claim' + ? 'claimed' + : detectModality(segment.text), + polarity: detectPolarity(segment.text), + text: segment.text, + lifecycle: semantics.lifecycle, + sourceKind: 'agent_log', + sourcePath: relativePosix(root, file), + sourceLines: { start: line, end: line }, + extractor: 't2c/project-communication@1', + epistemicClass: semantics.epistemicClass, + confidence: role === 'unknown' || participant.startsWith('unknown:') ? 0.55 : 0.88, + basis: ['project_ticket_path', 'communication_front_matter', classified.basis], + observedAt: timestamp, + metadata: { + participant, + participantId: identity.entry?.id ?? null, + displayName, + participantRole: role, + messageType: segmentType, + ticket, + recipient, + gitAuthors, + a2aAgentIds: identity.entry?.a2aAgentIds ?? [], + humanAliases: identity.entry?.humanAliases ?? [], + identityResolved: identityRegistry ? Boolean(identity.entry) : role !== 'unknown' && !participant.startsWith('unknown:'), + identitySource: identity.entry ? 'registry' : identityRegistry ? 'unresolved' : 'legacy', + participantRegistry: identityRegistry ? relativePosix(root, identityRegistry.path) : null, + llmUsed: false, + }, + })); + } + return records; +} + function resolveIdentity( byId: Map | null, participantId: string | null, diff --git a/src/extractors/docs-deterministic.ts b/src/extractors/docs-deterministic.ts index def2085..b3a0346 100644 --- a/src/extractors/docs-deterministic.ts +++ b/src/extractors/docs-deterministic.ts @@ -101,69 +101,134 @@ function convertDocument(root: string, filePath: string, body: string, resolvePa const relative = relativePosix(root, filePath); const lines = body.split(/\r?\n/); const records: IntentRecord[] = []; - const headings: string[] = []; - let fence: string | null = null; + const context: DocumentationContext = { + relative, + headings: [], + fence: null, + }; for (let index = 0; index < lines.length; index += 1) { const raw = lines[index] ?? ''; + const lineResult = handleDocumentationLine(raw, index, lines, context, resolvePaths); + records.push(...lineResult.records); + index = lineResult.nextIndex; + } - // Fenced blocks are transparent to statement scanning: their content is - // code, not documentation prose, and would otherwise produce records for - // every commented line inside an example. - const fenceMatch = raw.match(/^\s*(```+|~~~+)\s*([A-Za-z0-9_+-]*)/); - if (fenceMatch) { - const marker = fenceMatch[1] ?? ''; - if (fence === null) { - fence = marker; - const language = (fenceMatch[2] ?? '').trim(); - const record = codeBlockRecord(relative, headings, language, index + 1); - if (record) records.push(record); - } else if (marker.startsWith(fence.slice(0, 3))) { - fence = null; - } - continue; - } - if (fence !== null) continue; + return records; +} - const heading = raw.match(/^\s{0,3}(#{1,6})\s+(.+?)\s*#*\s*$/); - if (heading) { - const level = heading[1]?.length ?? 1; - const title = heading[2]?.trim() ?? ''; - headings.splice(level - 1); - headings[level - 1] = title; - if (level <= MAX_HEADING_LEVEL && title) { - records.push(statementRecord(relative, headings, title, { start: index + 1, end: index + 1 }, 'heading', resolvePaths)); - } - continue; - } +interface DocumentationContext { + relative: string; + headings: string[]; + fence: string | null; +} - const bullet = raw.match(/^\s*[-*+]\s+(?:\[[ xX]\]\s+)?(.+?)\s*$/); - if (bullet) { - const block = readListBlock(lines, index, bullet[1] ?? ''); - index = block.endIndex; - const record = qualifyingStatement(relative, headings, block.text, { start: block.startLine, end: block.endLine }, resolvePaths); - if (record) records.push(record); - continue; - } +interface LineResult { + nextIndex: number; + records: IntentRecord[]; + consumed: boolean; +} - if (raw.trim()) { - // Prose wraps across lines. Reading one line at a time cuts sentences - // mid-clause and drops the very words that name the target — the same - // defect the TODO and CHANGELOG converters had. - const paragraph = readParagraph(lines, index); - index = paragraph.endIndex; - const record = qualifyingStatement( - relative, - headings, - paragraph.text, - { start: paragraph.startLine, end: paragraph.endLine }, - resolvePaths, - ); - if (record) records.push(record); - } +function handleDocumentationLine( + raw: string, + index: number, + lines: string[], + context: DocumentationContext, + resolvePaths: PathMapper, +): LineResult { + const headingRecord = parseFenceBlock(raw, index, context, resolvePaths); + if (headingRecord.consumed) return headingRecord; + + const sectionHeading = parseSectionHeading(raw, index, context, resolvePaths); + if (sectionHeading.consumed) return sectionHeading; + + const bulletRecord = parseBulletStatement(raw, index, lines, context, resolvePaths); + if (bulletRecord.consumed) return bulletRecord; + + const paragraphResult = parseParagraphStatement(raw, index, lines, context, resolvePaths); + if (paragraphResult.consumed) return paragraphResult; + + return { nextIndex: index, records: [], consumed: false }; +} + +function parseFenceBlock( + raw: string, + index: number, + context: DocumentationContext, + resolvePaths: PathMapper, +): LineResult { + const match = raw.match(/^\s*(```+|~~~+)\s*([A-Za-z0-9_+-]*)/); + if (!match) return { nextIndex: index, records: [], consumed: false }; + const marker = match[1] ?? ''; + if (context.fence === null) { + context.fence = marker; + const language = (match[2] ?? '').trim(); + const record = codeBlockRecord(context.relative, context.headings, language, index + 1); + return { nextIndex: index, records: record ? [record] : [], consumed: true }; } + if (marker.startsWith(context.fence.slice(0, 3))) context.fence = null; + return { nextIndex: index, records: [], consumed: true }; +} - return records; +function parseSectionHeading( + raw: string, + index: number, + context: DocumentationContext, + resolvePaths: PathMapper, +): LineResult { + if (context.fence !== null) return { nextIndex: index, records: [], consumed: false }; + const heading = raw.match(/^\s{0,3}(#{1,6})\s+(.+?)\s*#*\s*$/); + if (!heading) return { nextIndex: index, records: [], consumed: false }; + const level = heading[1]?.length ?? 1; + const title = heading[2]?.trim() ?? ''; + context.headings.splice(level - 1); + context.headings[level - 1] = title; + if (level > MAX_HEADING_LEVEL || !title) return { nextIndex: index, records: [], consumed: true }; + const record = statementRecord(context.relative, context.headings, title, { start: index + 1, end: index + 1 }, 'heading', resolvePaths); + return { nextIndex: index, records: [record], consumed: true }; +} + +function parseBulletStatement( + raw: string, + index: number, + lines: string[], + context: DocumentationContext, + resolvePaths: PathMapper, +): LineResult { + if (context.fence !== null) return { nextIndex: index, records: [], consumed: false }; + const bullet = raw.match(/^\s*[-*+]\s+(?:\[[ xX]\]\s+)?(.+?)\s*$/); + if (!bullet) return { nextIndex: index, records: [], consumed: false }; + const block = readListBlock(lines, index, bullet[1] ?? ''); + const record = qualifyingStatement( + context.relative, + context.headings, + block.text, + { start: block.startLine, end: block.endLine }, + resolvePaths, + ); + return { nextIndex: block.endIndex, records: record ? [record] : [], consumed: true }; +} + +function parseParagraphStatement( + raw: string, + index: number, + lines: string[], + context: DocumentationContext, + resolvePaths: PathMapper, +): LineResult { + if (context.fence !== null || !raw.trim()) return { nextIndex: index, records: [], consumed: false }; + // Prose wraps across lines. Reading one line at a time cuts sentences + // mid-clause and drops the very words that name the target — the same + // defect the TODO and CHANGELOG converters had. + const paragraph = readParagraph(lines, index); + const record = qualifyingStatement( + context.relative, + context.headings, + paragraph.text, + { start: paragraph.startLine, end: paragraph.endLine }, + resolvePaths, + ); + return { nextIndex: paragraph.endIndex, records: record ? [record] : [], consumed: true }; } /** Consecutive non-blank prose lines, joined into one statement. */ diff --git a/src/extractors/git.ts b/src/extractors/git.ts index 6ba0976..d5081aa 100644 --- a/src/extractors/git.ts +++ b/src/extractors/git.ts @@ -159,62 +159,119 @@ interface RepositoryDiscoveryResult { warnings: string[]; } -async function discoverGitRepositories(root: string): Promise { - const repositories: DiscoveredRepository[] = []; - const warnings: string[] = []; - const queue: DiscoveredRepository[] = [{ root, prefix: '' }]; - let cursor = 0; - let directoriesVisited = 0; +interface DiscoveryState { + root: string; + cursor: number; + directoriesVisited: number; + queue: DiscoveredRepository[]; + repositories: DiscoveredRepository[]; + warnings: string[]; +} - while (cursor < queue.length - && repositories.length < MAX_DISCOVERED_REPOSITORIES - && directoriesVisited < MAX_DISCOVERY_DIRECTORIES) { - const current = queue[cursor]; - cursor += 1; +async function discoverGitRepositories(root: string): Promise { + const state = createDiscoveryState(root); + while (hasMoreDiscoveryWork(state)) { + const current = takeNextDiscoveryDirectory(state); if (!current) continue; - directoriesVisited += 1; - - let entries: Dirent[]; - try { - entries = await fs.readdir(current.root, { withFileTypes: true }); - } catch (error) { - const message = error instanceof Error ? error.message : String(error); - warnings.push(`Git repository discovery unavailable at ${current.root}: ${message}`); + const entries = await readDiscoveryEntries(current.root, state.warnings); + if (!entries) continue; + await processDiscoveryDirectory(current, filterDiscoveryChildren(entries), state); + } + + return finishDiscovery(root, state); +} + +function createDiscoveryState(root: string): DiscoveryState { + return { + root, + cursor: 0, + directoriesVisited: 0, + queue: [{ root, prefix: '' }], + repositories: [], + warnings: [], + }; +} + +function hasMoreDiscoveryWork(state: DiscoveryState): boolean { + return state.cursor < state.queue.length + && state.repositories.length < MAX_DISCOVERED_REPOSITORIES + && state.directoriesVisited < MAX_DISCOVERY_DIRECTORIES; +} + +function takeNextDiscoveryDirectory(state: DiscoveryState): DiscoveredRepository | null { + const current = state.queue[state.cursor]; + state.cursor += 1; + if (!current) return null; + state.directoriesVisited += 1; + return current; +} + +async function readDiscoveryEntries( + directory: string, + warnings: string[], +): Promise[] | null> { + try { + return await fs.readdir(directory, { withFileTypes: true }); + } catch (error) { + warnings.push(`Git repository discovery unavailable at ${directory}: ${error instanceof Error ? error.message : String(error)}`); + return null; + } +} + +function filterDiscoveryChildren(entries: Dirent[]): Dirent[] { + return entries + .filter((entry) => entry.isDirectory() && !entry.isSymbolicLink()) + .filter((entry) => !entry.name.startsWith('.') && !DISCOVERY_EXCLUDED_DIRECTORIES.has(entry.name)) + .sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0); +} + +async function processDiscoveryDirectory( + current: DiscoveredRepository, + directories: Dirent[], + state: DiscoveryState, +): Promise { + for (const entry of directories) { + const child = path.join(current.root, entry.name); + const prefix = resolveDiscoveryPrefix(current.prefix, entry.name); + const marker = await gitMarkerState(child); + if (marker === 'unsafe') { + state.warnings.push(`Git repository marker is a symlink at ${child}`); continue; } - - const directories = entries - .filter((entry) => entry.isDirectory() && !entry.isSymbolicLink()) - .filter((entry) => !entry.name.startsWith('.') && !DISCOVERY_EXCLUDED_DIRECTORIES.has(entry.name)) - .sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0); - - for (const entry of directories) { - const absolute = path.join(current.root, entry.name); - const prefix = current.prefix ? path.posix.join(current.prefix, entry.name) : entry.name; - const marker = await gitMarkerState(absolute); - if (marker === 'unsafe') { - warnings.push(`Git repository marker is a symlink at ${absolute}`); - continue; - } - if (marker === 'candidate') { - if (await isGitWorkTree(absolute)) repositories.push({ root: absolute, prefix }); - else warnings.push(`Git repository marker is invalid at ${absolute}`); - if (repositories.length >= MAX_DISCOVERED_REPOSITORIES) break; - // A checkout owns everything below it, including submodules, vendored - // repositories and temporary coding-agent worktrees. - continue; - } - queue.push({ root: absolute, prefix }); + if (marker === 'candidate') { + await registerDiscoveredRepository(child, prefix, state); + if (state.repositories.length >= MAX_DISCOVERED_REPOSITORIES) break; + // A checkout owns everything below it, including submodules, vendored + // repositories and temporary coding-agent worktrees. + continue; } + state.queue.push({ root: child, prefix }); } +} - if (repositories.length >= MAX_DISCOVERED_REPOSITORIES) { - warnings.push(`Git repository discovery stopped at ${MAX_DISCOVERED_REPOSITORIES} repositories under ${root}`); - } else if (directoriesVisited >= MAX_DISCOVERY_DIRECTORIES && cursor < queue.length) { - warnings.push(`Git repository discovery stopped after ${MAX_DISCOVERY_DIRECTORIES} directories under ${root}`); +async function registerDiscoveredRepository( + directory: string, + prefix: string, + state: DiscoveryState, +): Promise { + if (await isGitWorkTree(directory)) { + state.repositories.push({ root: directory, prefix }); + return; } + state.warnings.push(`Git repository marker is invalid at ${directory}`); +} + +function resolveDiscoveryPrefix(base: string, childName: string): string { + return base ? path.posix.join(base, childName) : childName; +} - return { repositories, warnings }; +function finishDiscovery(root: string, state: DiscoveryState): RepositoryDiscoveryResult { + if (state.repositories.length >= MAX_DISCOVERED_REPOSITORIES) { + state.warnings.push(`Git repository discovery stopped at ${MAX_DISCOVERED_REPOSITORIES} repositories under ${root}`); + } else if (state.directoriesVisited >= MAX_DISCOVERY_DIRECTORIES && state.cursor < state.queue.length) { + state.warnings.push(`Git repository discovery stopped after ${MAX_DISCOVERY_DIRECTORIES} directories under ${root}`); + } + return { repositories: state.repositories, warnings: state.warnings }; } async function gitMarkerState(root: string): Promise<'none' | 'candidate' | 'unsafe'> { diff --git a/src/extractors/markdown-paths.ts b/src/extractors/markdown-paths.ts index 242f741..071c4f1 100644 --- a/src/extractors/markdown-paths.ts +++ b/src/extractors/markdown-paths.ts @@ -30,6 +30,12 @@ const PATH_SEARCH_EXCLUDES = new Set([ /** Bound the walk so a pathological tree cannot stall extraction. */ const MAX_INDEXED_FILES = 20_000; +interface BasenameIndexState { + base: string; + pending: string[]; + seen: number; +} + export function createMarkdownPathResolver(root: string): MarkdownPathResolver { const repositoryRoot = path.resolve(root); let index: Promise> | null = null; @@ -83,40 +89,70 @@ function headingScopes(headings: string[]): string[] { async function buildBasenameIndex(root: string): Promise> { const index = new Map(); - const base = path.resolve(root); - const pending = [base]; - let seen = 0; - while (pending.length && seen < MAX_INDEXED_FILES) { - const directory = pending.pop()!; - let entries: Dirent[]; - try { - entries = await fs.readdir(directory, { withFileTypes: true, encoding: 'utf8' }); - } catch { - continue; - } - // A directory carrying its own `.git` is a nested checkout or agent - // worktree. Indexing its copy of the tree duplicates every basename and - // blocks resolution repository-wide: on `if-uri/urirun`, 63 worktrees - // under `.claude/worktrees/` shadowed the real `docs/ARCHITECTURE.md`. - if (directory !== base && entries.some((entry) => entry.name === '.git')) continue; - for (const entry of entries) { - if (entry.isSymbolicLink()) continue; - const absolute = path.join(directory, entry.name); - if (entry.isDirectory()) { - if (!PATH_SEARCH_EXCLUDES.has(entry.name) && !entry.name.startsWith('.intent-')) { - pending.push(absolute); - } - continue; - } - if (!entry.isFile()) continue; - seen += 1; - if (seen > MAX_INDEXED_FILES) break; - const matches = index.get(entry.name); - // Two hits already prove ambiguity; more of them change no decision. - if (!matches) index.set(entry.name, [relativePosix(root, absolute)]); - else if (matches.length < 2) matches.push(relativePosix(root, absolute)); - } + const state = createBasenameIndexState(root); + while (state.pending.length && state.seen < MAX_INDEXED_FILES) { + const directory = state.pending.pop(); + if (!directory) continue; + const entries = await readBasenameDirectoryEntries(directory); + if (!entries) continue; + if (isNestedCheckout(directory, state.base, entries)) continue; + scanDirectoryForBasenames(directory, entries, root, index, state); } for (const matches of index.values()) matches.sort(); return index; } + +function createBasenameIndexState(root: string): BasenameIndexState { + return { + base: path.resolve(root), + pending: [path.resolve(root)], + seen: 0, + }; +} + +async function readBasenameDirectoryEntries(directory: string): Promise[] | null> { + try { + return await fs.readdir(directory, { withFileTypes: true, encoding: 'utf8' }); + } catch { + return null; + } +} + +function isNestedCheckout(directory: string, base: string, entries: Dirent[]): boolean { + return directory !== base && entries.some((entry) => entry.name === '.git'); +} + +function scanDirectoryForBasenames( + directory: string, + entries: Dirent[], + root: string, + index: Map, + state: BasenameIndexState, +): void { + for (const entry of entries) { + if (entry.isSymbolicLink()) continue; + const absolute = path.join(directory, entry.name); + if (entry.isDirectory()) { + if (!PATH_SEARCH_EXCLUDES.has(entry.name) && !entry.name.startsWith('.intent-')) { + state.pending.push(absolute); + } + continue; + } + if (!entry.isFile()) continue; + state.seen += 1; + if (state.seen > MAX_INDEXED_FILES) break; + addBasenameIndexMatch(index, root, absolute, entry.name); + } +} + +function addBasenameIndexMatch( + index: Map, + root: string, + absolute: string, + filename: string, +): void { + const matches = index.get(filename); + // Two hits already prove ambiguity; more of them change no decision. + if (!matches) index.set(filename, [relativePosix(root, absolute)]); + else if (matches.length < 2) matches.push(relativePosix(root, absolute)); +} diff --git a/src/extractors/nl-llm.ts b/src/extractors/nl-llm.ts index 35673f3..8929c81 100644 --- a/src/extractors/nl-llm.ts +++ b/src/extractors/nl-llm.ts @@ -173,14 +173,11 @@ function markDeterministic(records: IntentRecord[], degraded: boolean, fallbackR } function toIntentRecord(raw: RawNlRecord, sourcePath: string, body: string, maxLine: number, config: T2CConfig, response: LlmResponseMetadata): IntentRecord { - const start = clampLine(raw.sourceLines?.start ?? 1, 1, maxLine); - const end = clampLine(raw.sourceLines?.end ?? start, start, maxLine); const lines = body.split(/\r?\n/); - const excerpt = lines.slice(start - 1, end).join('\n').slice(0, 2000); - const action = allowedAction(raw.action) ? raw.action : 'unknown'; - const { object, missingFields } = resolveObject(raw, action); + const { start, end, excerpt } = sourceExcerpt(raw, lines, maxLine); + const action = resolveAction(raw.action); const normalizedText = nonEmptyText(raw.text); - if (normalizedText === null) missingFields.push('text'); + const { object, missingFields } = resolveObject(raw, action, normalizedText); const statementText = normalizedText ?? object; return buildRecord({ kind: raw.kind || 'declared_intent', @@ -213,6 +210,20 @@ function toIntentRecord(raw: RawNlRecord, sourcePath: string, body: string, maxL }); } +function sourceExcerpt( + raw: RawNlRecord, + lines: string[], + maxLine: number, +): { start: number; end: number; excerpt: string } { + const start = clampLine(raw.sourceLines?.start ?? 1, 1, maxLine); + const end = clampLine(raw.sourceLines?.end ?? start, start, maxLine); + return { start, end, excerpt: lines.slice(start - 1, end).join('\n').slice(0, 2000) }; +} + +function resolveAction(rawAction: string): IntentAction { + return allowedAction(rawAction) ? rawAction : 'unknown'; +} + /** * `statement.object` is free text, but neighbouring fields (`action`, `modality`, * `lifecycle`) are enums that include the literal `unknown`. Models copy that @@ -235,16 +246,26 @@ function isPlaceholder(value: unknown): boolean { return text === null || OBJECT_PLACEHOLDERS.has(text.toLowerCase()); } -function resolveObject(raw: RawNlRecord, action: IntentAction): { object: string; missingFields: string[] } { +function resolveObject( + raw: RawNlRecord, + action: IntentAction, + normalizedText: string | null, +): { object: string; missingFields: string[] } { const missingFields: string[] = []; if (action === 'unknown') missingFields.push('action'); + if (normalizedText === null) { + missingFields.push('text'); + } if (!isPlaceholder(raw.object)) return { object: nonEmptyText(raw.object) as string, missingFields }; missingFields.push('object'); // Falling back to the statement text keeps the record linkable by its own // wording instead of by a placeholder shared with unrelated records. - const fallback = nonEmptyText(raw.text); + const fallback = normalizedText; + if (fallback === null) { + return { object: 'unspecified', missingFields }; + } return { object: isPlaceholder(fallback) ? 'unspecified' : (fallback as string), missingFields }; } diff --git a/src/semantic/reranker.ts b/src/semantic/reranker.ts index de6a512..3fe58e5 100644 --- a/src/semantic/reranker.ts +++ b/src/semantic/reranker.ts @@ -1,509 +1 @@ -import { createRelationId, graphFingerprint, sha256, stableStringify } from '../core/id.js'; -import { assertIntentGraph } from '../core/schema.js'; -import type { IntentGraph, IntentRecord, IntentRelation } from '../core/types.js'; -import { T2C_VERSION } from '../version.js'; - -export type SemanticRerankVerdict = 'accept' | 'reject' | 'abstain'; -export type SemanticRerankReason = - | 'repository_evidence_supports_match' - | 'wrong_target' - | 'contradicted' - | 'insufficient_evidence' - | 'ambiguous' - | 'multi_module'; - -export const SEMANTIC_RERANK_VERDICTS = ['accept', 'reject', 'abstain'] as const; -export const SEMANTIC_RERANK_REASONS = [ - 'repository_evidence_supports_match', - 'wrong_target', - 'contradicted', - 'insufficient_evidence', - 'ambiguous', - 'multi_module', -] as const; - -export interface SemanticRetrievalIdentity { - provider: string; - model: string; - revision: string; - metric: string; - inputHash: string; -} - -export interface SemanticCandidate { - id: string; - declarationRecordId: string; - moduleRecordId: string; - score: number; - rank: number; -} - -export interface SemanticCandidateSet { - schemaVersion: 't2c.semantic-candidate-set/v1'; - generatedAt: string; - graphFingerprint: string; - maxCandidatesPerDeclaration: number; - retrieval: SemanticRetrievalIdentity; - candidates: SemanticCandidate[]; - candidateSetHash: string; -} - -export interface SemanticCandidateInput { - declarationRecordId: string; - moduleRecordId: string; - score: number; -} - -export interface SemanticRetrievalInput { - provider: string; - model: string; - revision: string; - metric: string; -} - -export interface SemanticEvidenceCitation { - recordId: string; - quote: string; -} - -export interface SemanticRerankDecisionInput { - candidateId: string; - verdict: SemanticRerankVerdict; - confidence: number; - reasonCode: SemanticRerankReason; - rationale: string; - citedRecordIds: string[]; - evidence: SemanticEvidenceCitation[]; -} - -export interface SemanticRerankDecision extends SemanticRerankDecisionInput { - id: string; -} - -export interface SemanticRerankGeneration { - generator: 't2c/cross-language-reranker'; - generatorVersion: '1'; - runtimeVersion: string; - provider: string; - requestedModel: string; - model: string; - modelRevision: string; - responseId: string | null; - promptHash: string; -} - -export interface SemanticRerankResult { - schemaVersion: 't2c.semantic-rerank/v1'; - generatedAt: string; - graphFingerprint: string; - candidateSetHash: string; - generation: SemanticRerankGeneration; - decisions: SemanticRerankDecision[]; - resultHash: string; -} - -export interface SemanticRerankGenerationInput { - provider: string; - requestedModel?: string; - model: string; - modelRevision: string; - responseId?: string | null; -} - -export function createSemanticCandidateSet( - graph: IntentGraph, - inputs: SemanticCandidateInput[], - retrieval: SemanticRetrievalInput, - maxCandidatesPerDeclaration = 5, - generatedAt = new Date().toISOString(), -): SemanticCandidateSet { - assertIntentGraph(graph); - if (!Number.isInteger(maxCandidatesPerDeclaration) - || maxCandidatesPerDeclaration < 1 - || maxCandidatesPerDeclaration > 10) { - throw new Error('maxCandidatesPerDeclaration must be an integer between 1 and 10'); - } - const identity = { - provider: requiredText(retrieval.provider, 'retrieval.provider'), - model: requiredText(retrieval.model, 'retrieval.model'), - revision: requiredText(retrieval.revision, 'retrieval.revision'), - metric: requiredText(retrieval.metric, 'retrieval.metric'), - inputHash: sha256(stableStringify({ - graphFingerprint: graph.fingerprint, - pairs: inputs.map((item) => ({ - declarationRecordId: item.declarationRecordId, - moduleRecordId: item.moduleRecordId, - })).sort(comparePair), - })), - } satisfies SemanticRetrievalIdentity; - const grouped = new Map(); - for (const input of inputs) { - const values = grouped.get(input.declarationRecordId); - if (values) values.push(input); - else grouped.set(input.declarationRecordId, [input]); - } - const candidates: SemanticCandidate[] = []; - for (const [declarationRecordId, values] of [...grouped.entries()].sort(([left], [right]) => left.localeCompare(right))) { - const ranked = [...values] - .sort((left, right) => right.score - left.score || left.moduleRecordId.localeCompare(right.moduleRecordId)) - .slice(0, maxCandidatesPerDeclaration); - ranked.forEach((input, index) => { - const seed = { - graphFingerprint: graph.fingerprint, - retrieval: identity, - declarationRecordId, - moduleRecordId: input.moduleRecordId, - score: boundedScore(input.score), - rank: index + 1, - }; - candidates.push({ - id: `SCAND-${sha256(stableStringify(seed)).slice(0, 20)}`, - declarationRecordId, - moduleRecordId: input.moduleRecordId, - score: seed.score, - rank: seed.rank, - }); - }); - } - const payload = { - graphFingerprint: graph.fingerprint, - maxCandidatesPerDeclaration, - retrieval: identity, - candidates, - }; - const result: SemanticCandidateSet = { - schemaVersion: 't2c.semantic-candidate-set/v1', - generatedAt, - ...payload, - candidateSetHash: sha256(stableStringify(payload)), - }; - assertSemanticCandidateSet(result, graph); - return result; -} - -export function assertSemanticCandidateSet( - value: SemanticCandidateSet, - graph: IntentGraph, -): void { - assertIntentGraph(graph); - if (value.schemaVersion !== 't2c.semantic-candidate-set/v1') { - throw new Error('Unsupported semantic candidate-set schemaVersion'); - } - validDate(value.generatedAt, 'candidateSet.generatedAt'); - if (value.graphFingerprint !== graph.fingerprint) { - throw new Error('Semantic candidate set graphFingerprint does not match the graph'); - } - if (!Number.isInteger(value.maxCandidatesPerDeclaration) - || value.maxCandidatesPerDeclaration < 1 - || value.maxCandidatesPerDeclaration > 10) { - throw new Error('candidateSet.maxCandidatesPerDeclaration must be an integer between 1 and 10'); - } - validateRetrieval(value.retrieval); - const records = new Map(graph.records.map((record) => [record.id, record])); - const seenIds = new Set(); - const seenPairs = new Set(); - const byDeclaration = new Map(); - for (const candidate of value.candidates) { - if (!/^SCAND-[a-f0-9]{20}$/.test(candidate.id)) throw new Error(`Invalid semantic candidate ID: ${candidate.id}`); - if (seenIds.has(candidate.id)) throw new Error(`Duplicate semantic candidate ID: ${candidate.id}`); - seenIds.add(candidate.id); - const declaration = records.get(candidate.declarationRecordId); - const module = records.get(candidate.moduleRecordId); - if (!declaration || !module) throw new Error(`Semantic candidate ${candidate.id} cites an unknown record`); - if (declaration.statement.kind === 'module_fact') { - throw new Error(`Semantic candidate ${candidate.id} declarationRecordId points to a module`); - } - if (module.statement.kind !== 'module_fact' || module.source.kind !== 'ast') { - throw new Error(`Semantic candidate ${candidate.id} moduleRecordId must point to an AST module_fact`); - } - const pair = `${candidate.declarationRecordId}|${candidate.moduleRecordId}`; - if (seenPairs.has(pair)) throw new Error(`Duplicate semantic candidate pair: ${pair}`); - seenPairs.add(pair); - boundedScore(candidate.score); - if (!Number.isInteger(candidate.rank) || candidate.rank < 1 || candidate.rank > value.maxCandidatesPerDeclaration) { - throw new Error(`Semantic candidate ${candidate.id} has an invalid rank`); - } - const values = byDeclaration.get(candidate.declarationRecordId); - if (values) values.push(candidate); - else byDeclaration.set(candidate.declarationRecordId, [candidate]); - } - for (const [declarationRecordId, candidates] of byDeclaration) { - if (candidates.length > value.maxCandidatesPerDeclaration) { - throw new Error(`Declaration ${declarationRecordId} exceeds the bounded candidate limit`); - } - const ranked = [...candidates].sort((left, right) => left.rank - right.rank); - ranked.forEach((candidate, index) => { - if (candidate.rank !== index + 1) throw new Error(`Declaration ${declarationRecordId} has non-contiguous ranks`); - if (index > 0 && candidate.score > (ranked[index - 1]?.score ?? 1)) { - throw new Error(`Declaration ${declarationRecordId} ranks a higher score below a lower score`); - } - }); - } - const expectedHash = sha256(stableStringify({ - graphFingerprint: value.graphFingerprint, - maxCandidatesPerDeclaration: value.maxCandidatesPerDeclaration, - retrieval: value.retrieval, - candidates: value.candidates, - })); - if (value.candidateSetHash !== expectedHash) throw new Error('Semantic candidateSetHash does not match its content'); -} - -export function createSemanticRerankResult( - graph: IntentGraph, - candidateSet: SemanticCandidateSet, - inputs: SemanticRerankDecisionInput[], - generation: SemanticRerankGenerationInput, - generatedAt = new Date().toISOString(), -): SemanticRerankResult { - assertSemanticCandidateSet(candidateSet, graph); - const generationValue: SemanticRerankGeneration = { - generator: 't2c/cross-language-reranker', - generatorVersion: '1', - runtimeVersion: T2C_VERSION, - provider: requiredText(generation.provider, 'generation.provider'), - requestedModel: requiredText(generation.requestedModel ?? generation.model, 'generation.requestedModel'), - model: requiredText(generation.model, 'generation.model'), - modelRevision: requiredText(generation.modelRevision, 'generation.modelRevision'), - responseId: generation.responseId ?? null, - promptHash: sha256(stableStringify({ - graphFingerprint: graph.fingerprint, - candidateSetHash: candidateSet.candidateSetHash, - candidates: candidateSet.candidates, - })), - }; - const decisions = inputs.map((input) => { - const seed = { - candidateSetHash: candidateSet.candidateSetHash, - candidateId: input.candidateId, - verdict: input.verdict, - confidence: roundedConfidence(input.confidence), - reasonCode: input.reasonCode, - rationale: requiredText(input.rationale, 'decision.rationale'), - citedRecordIds: [...new Set(input.citedRecordIds)].sort(), - evidence: [...input.evidence] - .map((item) => ({ - recordId: item.recordId, - quote: requiredText(item.quote, 'decision.evidence.quote'), - })) - .sort((left, right) => left.recordId.localeCompare(right.recordId) || left.quote.localeCompare(right.quote)), - }; - return { - id: `SDEC-${sha256(stableStringify(seed)).slice(0, 20)}`, - ...seed, - } satisfies SemanticRerankDecision; - }).sort((left, right) => left.candidateId.localeCompare(right.candidateId)); - const payload = { - graphFingerprint: graph.fingerprint, - candidateSetHash: candidateSet.candidateSetHash, - generation: generationValue, - decisions, - }; - const result: SemanticRerankResult = { - schemaVersion: 't2c.semantic-rerank/v1', - generatedAt, - ...payload, - resultHash: sha256(stableStringify(payload)), - }; - assertSemanticRerankResult(result, candidateSet, graph); - return result; -} - -export function assertSemanticRerankResult( - value: SemanticRerankResult, - candidateSet: SemanticCandidateSet, - graph: IntentGraph, -): void { - assertSemanticCandidateSet(candidateSet, graph); - if (value.schemaVersion !== 't2c.semantic-rerank/v1') { - throw new Error('Unsupported semantic rerank schemaVersion'); - } - validDate(value.generatedAt, 'rerank.generatedAt'); - if (value.graphFingerprint !== graph.fingerprint || value.candidateSetHash !== candidateSet.candidateSetHash) { - throw new Error('Semantic rerank result does not match its graph or candidate set'); - } - validateGeneration(value.generation); - const candidates = new Map(candidateSet.candidates.map((candidate) => [candidate.id, candidate])); - const records = new Map(graph.records.map((record) => [record.id, record])); - const seenDecisions = new Set(); - const acceptedDeclarations = new Set(); - for (const decision of value.decisions) { - if (!/^SDEC-[a-f0-9]{20}$/.test(decision.id)) throw new Error(`Invalid semantic decision ID: ${decision.id}`); - if (seenDecisions.has(decision.candidateId)) throw new Error(`Duplicate decision for candidate ${decision.candidateId}`); - seenDecisions.add(decision.candidateId); - const candidate = candidates.get(decision.candidateId); - if (!candidate) throw new Error(`Semantic decision cites unknown candidate ${decision.candidateId}`); - roundedConfidence(decision.confidence); - validateVerdictReason(decision); - requiredText(decision.rationale, `Decision ${decision.id} rationale`); - const expectedRecords = [candidate.declarationRecordId, candidate.moduleRecordId].sort(); - const citedRecords = [...new Set(decision.citedRecordIds)].sort(); - if (stableStringify(citedRecords) !== stableStringify(expectedRecords)) { - throw new Error(`Decision ${decision.id} must cite exactly both candidate records`); - } - for (const recordId of expectedRecords) { - const citations = decision.evidence.filter((item) => item.recordId === recordId); - if (citations.length === 0) throw new Error(`Decision ${decision.id} lacks evidence for ${recordId}`); - const record = records.get(recordId); - if (!record) throw new Error(`Decision ${decision.id} cites unknown record ${recordId}`); - for (const citation of citations) assertGroundedQuote(citation, record, decision.id); - } - if (decision.evidence.some((item) => !expectedRecords.includes(item.recordId))) { - throw new Error(`Decision ${decision.id} evidence escapes its candidate pair`); - } - if (decision.verdict === 'accept') { - if (acceptedDeclarations.has(candidate.declarationRecordId)) { - throw new Error(`Reranker accepted more than one module for ${candidate.declarationRecordId}`); - } - acceptedDeclarations.add(candidate.declarationRecordId); - } - } - if (seenDecisions.size !== candidates.size) { - throw new Error('Semantic rerank result must decide every bounded candidate'); - } - const expectedHash = sha256(stableStringify({ - graphFingerprint: value.graphFingerprint, - candidateSetHash: value.candidateSetHash, - generation: value.generation, - decisions: value.decisions, - })); - if (value.resultHash !== expectedHash) throw new Error('Semantic rerank resultHash does not match its content'); -} - -export function applyAcceptedSemanticRelations( - graph: IntentGraph, - candidateSet: SemanticCandidateSet, - rerank: SemanticRerankResult, - generatedAt = new Date().toISOString(), -): IntentGraph { - assertSemanticRerankResult(rerank, candidateSet, graph); - const candidates = new Map(candidateSet.candidates.map((candidate) => [candidate.id, candidate])); - const added = rerank.decisions - .filter((decision) => decision.verdict === 'accept') - .map((decision): IntentRelation => { - const candidate = candidates.get(decision.candidateId); - if (!candidate) throw new Error(`Accepted decision cites unknown candidate ${decision.candidateId}`); - const relationWithoutId = { - from: candidate.declarationRecordId, - to: candidate.moduleRecordId, - type: 'evidenced_by' as const, - confidence: Math.min(0.95, decision.confidence), - basis: [ - 'cross_language_reranker', - `candidate:${candidate.id}`, - `decision:${decision.id}`, - `retrieval:${candidateSet.retrieval.provider}/${candidateSet.retrieval.model}@${candidateSet.retrieval.revision}`, - `retrieval_score:${candidate.score}`, - `reranker:${rerank.generation.provider}/${rerank.generation.model}@${rerank.generation.modelRevision}`, - ...decision.evidence.map((item) => `citation:${item.recordId}`), - ], - }; - return { id: createRelationId(relationWithoutId), ...relationWithoutId }; - }); - const relations = [...new Map([...graph.relations, ...added].map((relation) => [relation.id, relation])).values()] - .sort((left, right) => left.id.localeCompare(right.id)); - const output: IntentGraph = { - ...graph, - generatedAt, - fingerprint: graphFingerprint(graph.records, relations), - relations, - }; - assertIntentGraph(output); - return output; -} - -function validateRetrieval(value: SemanticRetrievalIdentity): void { - requiredText(value.provider, 'retrieval.provider'); - requiredText(value.model, 'retrieval.model'); - requiredText(value.revision, 'retrieval.revision'); - requiredText(value.metric, 'retrieval.metric'); - if (!/^[a-f0-9]{64}$/.test(value.inputHash)) throw new Error('retrieval.inputHash must be SHA-256'); -} - -function validateGeneration(value: SemanticRerankGeneration): void { - if (value.generator !== 't2c/cross-language-reranker' || value.generatorVersion !== '1') { - throw new Error('Unsupported semantic reranker generator'); - } - requiredText(value.runtimeVersion, 'generation.runtimeVersion'); - requiredText(value.provider, 'generation.provider'); - requiredText(value.requestedModel, 'generation.requestedModel'); - requiredText(value.model, 'generation.model'); - requiredText(value.modelRevision, 'generation.modelRevision'); - if (value.responseId !== null) requiredText(value.responseId, 'generation.responseId'); - if (!/^[a-f0-9]{64}$/.test(value.promptHash)) throw new Error('generation.promptHash must be SHA-256'); -} - -function validateVerdictReason(decision: SemanticRerankDecision): void { - assertSemanticVerdictReason( - decision.verdict, - decision.reasonCode, - `Decision ${decision.id}`, - ); -} - -export function assertSemanticVerdictReason( - verdict: SemanticRerankVerdict, - reasonCode: SemanticRerankReason, - location = 'Semantic decision', -): void { - const allowed = new Set(SEMANTIC_RERANK_VERDICTS); - if (!allowed.has(verdict)) throw new Error(`${location} has invalid verdict`); - const reasons = new Set(SEMANTIC_RERANK_REASONS); - if (!reasons.has(reasonCode)) throw new Error(`${location} has invalid reasonCode`); - if (verdict === 'accept' && reasonCode !== 'repository_evidence_supports_match') { - throw new Error(`${location}: accept requires repository_evidence_supports_match`); - } - if (verdict !== 'accept' && reasonCode === 'repository_evidence_supports_match') { - throw new Error(`${location}: non-accept cannot use repository_evidence_supports_match`); - } -} - -function assertGroundedQuote( - citation: SemanticEvidenceCitation, - record: IntentRecord, - decisionId: string, -): void { - const quote = requiredText(citation.quote, `Decision ${decisionId} evidence.quote`); - const evidence = [ - record.statement.text, - record.statement.object, - ...record.statement.target.paths, - ...record.statement.target.symbols, - ...(Array.isArray(record.metadata.capabilities) - ? record.metadata.capabilities.filter((item): item is string => typeof item === 'string') - : []), - ].join('\n').toLowerCase(); - if (!evidence.includes(quote.toLowerCase())) { - throw new Error(`Decision ${decisionId} quote is not grounded in record ${record.id}`); - } -} - -function boundedScore(value: number): number { - if (!Number.isFinite(value) || value < -1 || value > 1) { - throw new Error('Semantic retrieval score must be a finite number between -1 and 1'); - } - return Math.round(value * 1_000_000) / 1_000_000; -} - -function roundedConfidence(value: number): number { - if (!Number.isFinite(value) || value < 0 || value > 1) { - throw new Error('Semantic rerank confidence must be a finite number between 0 and 1'); - } - return Math.round(value * 1_000_000) / 1_000_000; -} - -function requiredText(value: string, name: string): string { - if (typeof value !== 'string' || !value.trim()) throw new Error(`${name} must be non-blank`); - return value.trim(); -} - -function validDate(value: string, name: string): void { - if (!value || Number.isNaN(Date.parse(value))) throw new Error(`${name} must be an ISO date-time`); -} - -function comparePair( - left: Pick, - right: Pick, -): number { - return left.declarationRecordId.localeCompare(right.declarationRecordId) - || left.moduleRecordId.localeCompare(right.moduleRecordId); -} +export * from './reranker/index.js'; diff --git a/src/semantic/reranker/candidate.ts b/src/semantic/reranker/candidate.ts new file mode 100644 index 0000000..7dbf6c6 --- /dev/null +++ b/src/semantic/reranker/candidate.ts @@ -0,0 +1,200 @@ +import { + sha256, + stableStringify, +} from '../../core/id.js'; +import { assertIntentGraph } from '../../core/schema.js'; +import type { IntentGraph } from '../../core/types.js'; +import { boundedScore, requiredText, validDate, validateRetrieval } from './validation.js'; +import { + type SemanticCandidate, + type SemanticCandidateInput, + type SemanticCandidateSet, + type SemanticRetrievalIdentity, + type SemanticRetrievalInput, +} from './types.js'; + +export function createSemanticCandidateSet( + graph: IntentGraph, + inputs: SemanticCandidateInput[], + retrieval: SemanticRetrievalInput, + maxCandidatesPerDeclaration = 5, + generatedAt = new Date().toISOString(), +): SemanticCandidateSet { + assertIntentGraph(graph); + if ( + !Number.isInteger(maxCandidatesPerDeclaration) + || maxCandidatesPerDeclaration < 1 + || maxCandidatesPerDeclaration > 10 + ) { + throw new Error('maxCandidatesPerDeclaration must be an integer between 1 and 10'); + } + + const identity = { + provider: requiredText(retrieval.provider, 'retrieval.provider'), + model: requiredText(retrieval.model, 'retrieval.model'), + revision: requiredText(retrieval.revision, 'retrieval.revision'), + metric: requiredText(retrieval.metric, 'retrieval.metric'), + inputHash: sha256(stableStringify({ + graphFingerprint: graph.fingerprint, + pairs: inputs + .map((item) => ({ + declarationRecordId: item.declarationRecordId, + moduleRecordId: item.moduleRecordId, + })) + .sort(comparePair), + })), + } satisfies SemanticRetrievalIdentity; + + const grouped = new Map(); + for (const input of inputs) { + const values = grouped.get(input.declarationRecordId); + if (values) { + values.push(input); + } else { + grouped.set(input.declarationRecordId, [input]); + } + } + + const candidates: SemanticCandidate[] = []; + for (const [declarationRecordId, values] of [...grouped.entries()].sort(([left], [right]) => left.localeCompare(right))) { + const ranked = [...values] + .sort((left, right) => right.score - left.score || left.moduleRecordId.localeCompare(right.moduleRecordId)) + .slice(0, maxCandidatesPerDeclaration); + ranked.forEach((input, index) => { + const seed = { + graphFingerprint: graph.fingerprint, + retrieval: identity, + declarationRecordId, + moduleRecordId: input.moduleRecordId, + score: boundedScore(input.score), + rank: index + 1, + }; + candidates.push({ + id: `SCAND-${sha256(stableStringify(seed)).slice(0, 20)}`, + declarationRecordId, + moduleRecordId: input.moduleRecordId, + score: seed.score, + rank: seed.rank, + }); + }); + } + + const payload = { + graphFingerprint: graph.fingerprint, + maxCandidatesPerDeclaration, + retrieval: identity, + candidates, + }; + const result: SemanticCandidateSet = { + schemaVersion: 't2c.semantic-candidate-set/v1', + generatedAt, + ...payload, + candidateSetHash: sha256(stableStringify(payload)), + }; + assertSemanticCandidateSet(result, graph); + return result; +} + +export function assertSemanticCandidateSet( + value: SemanticCandidateSet, + graph: IntentGraph, +): void { + assertIntentGraph(graph); + if (value.schemaVersion !== 't2c.semantic-candidate-set/v1') { + throw new Error('Unsupported semantic candidate-set schemaVersion'); + } + validDate(value.generatedAt, 'candidateSet.generatedAt'); + if (value.graphFingerprint !== graph.fingerprint) { + throw new Error('Semantic candidate set graphFingerprint does not match the graph'); + } + if ( + !Number.isInteger(value.maxCandidatesPerDeclaration) + || value.maxCandidatesPerDeclaration < 1 + || value.maxCandidatesPerDeclaration > 10 + ) { + throw new Error('candidateSet.maxCandidatesPerDeclaration must be an integer between 1 and 10'); + } + + validateRetrieval(value.retrieval); + + const records = new Map(graph.records.map((record) => [record.id, record])); + const seenIds = new Set(); + const seenPairs = new Set(); + const byDeclaration = new Map(); + + for (const candidate of value.candidates) { + if (!/^SCAND-[a-f0-9]{20}$/.test(candidate.id)) { + throw new Error(`Invalid semantic candidate ID: ${candidate.id}`); + } + if (seenIds.has(candidate.id)) { + throw new Error(`Duplicate semantic candidate ID: ${candidate.id}`); + } + seenIds.add(candidate.id); + + const declaration = records.get(candidate.declarationRecordId); + const module = records.get(candidate.moduleRecordId); + if (!declaration || !module) { + throw new Error(`Semantic candidate ${candidate.id} cites an unknown record`); + } + if (declaration.statement.kind === 'module_fact') { + throw new Error(`Semantic candidate ${candidate.id} declarationRecordId points to a module`); + } + if (module.statement.kind !== 'module_fact' || module.source.kind !== 'ast') { + throw new Error(`Semantic candidate ${candidate.id} moduleRecordId must point to an AST module_fact`); + } + + const pair = `${candidate.declarationRecordId}|${candidate.moduleRecordId}`; + if (seenPairs.has(pair)) { + throw new Error(`Duplicate semantic candidate pair: ${pair}`); + } + seenPairs.add(pair); + boundedScore(candidate.score); + + if (!Number.isInteger(candidate.rank) + || candidate.rank < 1 + || candidate.rank > value.maxCandidatesPerDeclaration + ) { + throw new Error(`Semantic candidate ${candidate.id} has an invalid rank`); + } + + const existing = byDeclaration.get(candidate.declarationRecordId); + if (existing) { + existing.push(candidate); + } else { + byDeclaration.set(candidate.declarationRecordId, [candidate]); + } + } + + for (const [declarationRecordId, candidates] of byDeclaration) { + if (candidates.length > value.maxCandidatesPerDeclaration) { + throw new Error(`Declaration ${declarationRecordId} exceeds the bounded candidate limit`); + } + const ranked = [...candidates].sort((left, right) => left.rank - right.rank); + ranked.forEach((candidate, index) => { + if (candidate.rank !== index + 1) { + throw new Error(`Declaration ${declarationRecordId} has non-contiguous ranks`); + } + if (index > 0 && candidate.score > (ranked[index - 1]?.score ?? 1)) { + throw new Error(`Declaration ${declarationRecordId} ranks a higher score below a lower score`); + } + }); + } + + const expectedHash = sha256(stableStringify({ + graphFingerprint: value.graphFingerprint, + maxCandidatesPerDeclaration: value.maxCandidatesPerDeclaration, + retrieval: value.retrieval, + candidates: value.candidates, + })); + if (value.candidateSetHash !== expectedHash) { + throw new Error('Semantic candidateSetHash does not match its content'); + } +} + +function comparePair( + left: Pick, + right: Pick, +): number { + return left.declarationRecordId.localeCompare(right.declarationRecordId) + || left.moduleRecordId.localeCompare(right.moduleRecordId); +} diff --git a/src/semantic/reranker/index.ts b/src/semantic/reranker/index.ts new file mode 100644 index 0000000..8a639da --- /dev/null +++ b/src/semantic/reranker/index.ts @@ -0,0 +1,8 @@ +export * from './types.js'; +export { createSemanticCandidateSet, assertSemanticCandidateSet } from './candidate.js'; +export { + createSemanticRerankResult, + assertSemanticRerankResult, + applyAcceptedSemanticRelations, + assertSemanticVerdictReason, +} from './result.js'; diff --git a/src/semantic/reranker/result.ts b/src/semantic/reranker/result.ts new file mode 100644 index 0000000..fe41aa3 --- /dev/null +++ b/src/semantic/reranker/result.ts @@ -0,0 +1,264 @@ +import { createRelationId, graphFingerprint, sha256, stableStringify } from '../../core/id.js'; +import { assertIntentGraph } from '../../core/schema.js'; +import { T2C_VERSION } from '../../version.js'; +import type { IntentGraph, IntentRelation } from '../../core/types.js'; +import { assertSemanticCandidateSet } from './candidate.js'; +import { + assertGroundedQuote, + requiredText, + roundedConfidence, + validateGeneration, + validateVerdictReason, + validDate, +} from './validation.js'; +import { + type SemanticCandidateSet, + type SemanticRerankDecision, + type SemanticRerankDecisionInput, + type SemanticRerankGeneration, + type SemanticRerankGenerationInput, + type SemanticRerankResult, +} from './types.js'; + +export function createSemanticRerankResult( + graph: IntentGraph, + candidateSet: SemanticCandidateSet, + inputs: SemanticRerankDecisionInput[], + generation: SemanticRerankGenerationInput, + generatedAt = new Date().toISOString(), +): SemanticRerankResult { + assertSemanticCandidateSet(candidateSet, graph); + + const generationValue: SemanticRerankGeneration = { + generator: 't2c/cross-language-reranker', + generatorVersion: '1', + runtimeVersion: T2C_VERSION, + provider: requiredText(generation.provider, 'generation.provider'), + requestedModel: requiredText(generation.requestedModel ?? generation.model, 'generation.requestedModel'), + model: requiredText(generation.model, 'generation.model'), + modelRevision: requiredText(generation.modelRevision, 'generation.modelRevision'), + responseId: generation.responseId ?? null, + promptHash: sha256(stableStringify({ + graphFingerprint: graph.fingerprint, + candidateSetHash: candidateSet.candidateSetHash, + candidates: candidateSet.candidates, + })), + }; + + const decisions = inputs + .map((input) => { + const seed = { + candidateSetHash: candidateSet.candidateSetHash, + candidateId: input.candidateId, + verdict: input.verdict, + confidence: roundedConfidence(input.confidence), + reasonCode: input.reasonCode, + rationale: requiredText(input.rationale, 'decision.rationale'), + citedRecordIds: [...new Set(input.citedRecordIds)].sort(), + evidence: [...input.evidence] + .map((item) => ({ + recordId: item.recordId, + quote: requiredText(item.quote, 'decision.evidence.quote'), + })) + .sort((left, right) => left.recordId.localeCompare(right.recordId) + || left.quote.localeCompare(right.quote)), + }; + return { + id: `SDEC-${sha256(stableStringify(seed)).slice(0, 20)}`, + ...seed, + } satisfies SemanticRerankDecision; + }) + .sort((left, right) => left.candidateId.localeCompare(right.candidateId)); + + const payload = { + graphFingerprint: graph.fingerprint, + candidateSetHash: candidateSet.candidateSetHash, + generation: generationValue, + decisions, + }; + + const result: SemanticRerankResult = { + schemaVersion: 't2c.semantic-rerank/v1', + generatedAt, + ...payload, + resultHash: sha256(stableStringify(payload)), + }; + + assertSemanticRerankResult(result, candidateSet, graph); + return result; +} + +export function assertSemanticRerankResult( + value: SemanticRerankResult, + candidateSet: SemanticCandidateSet, + graph: IntentGraph, +): void { + assertSemanticCandidateSet(candidateSet, graph); + + if (value.schemaVersion !== 't2c.semantic-rerank/v1') { + throw new Error('Unsupported semantic rerank schemaVersion'); + } + validDate(value.generatedAt, 'rerank.generatedAt'); + + if (value.graphFingerprint !== graph.fingerprint || value.candidateSetHash !== candidateSet.candidateSetHash) { + throw new Error('Semantic rerank result does not match its graph or candidate set'); + } + + validateGeneration(value.generation); + + const candidates = new Map(candidateSet.candidates.map((candidate) => [candidate.id, candidate])); + const records = new Map(graph.records.map((record) => [record.id, record])); + const seenDecisions = new Set(); + const acceptedDeclarations = new Set(); + + for (const decision of value.decisions) { + if (!/^SDEC-[a-f0-9]{20}$/.test(decision.id)) { + throw new Error(`Invalid semantic decision ID: ${decision.id}`); + } + if (seenDecisions.has(decision.candidateId)) { + throw new Error(`Duplicate decision for candidate ${decision.candidateId}`); + } + seenDecisions.add(decision.candidateId); + + const candidate = candidates.get(decision.candidateId); + if (!candidate) { + throw new Error(`Semantic decision cites unknown candidate ${decision.candidateId}`); + } + + roundedConfidence(decision.confidence); + validateVerdictReason(decision); + requiredText(decision.rationale, `Decision ${decision.id} rationale`); + + const expectedRecords = [candidate.declarationRecordId, candidate.moduleRecordId].sort(); + const citedRecords = [...new Set(decision.citedRecordIds)].sort(); + if (stableStringify(citedRecords) !== stableStringify(expectedRecords)) { + throw new Error(`Decision ${decision.id} must cite exactly both candidate records`); + } + + for (const recordId of expectedRecords) { + const citations = decision.evidence.filter((item) => item.recordId === recordId); + if (citations.length === 0) { + throw new Error(`Decision ${decision.id} lacks evidence for ${recordId}`); + } + const record = records.get(recordId); + if (!record) { + throw new Error(`Decision ${decision.id} cites unknown record ${recordId}`); + } + for (const citation of citations) { + assertGroundedQuote(citation, record, decision.id); + } + } + + if (decision.evidence.some((item) => !expectedRecords.includes(item.recordId))) { + throw new Error(`Decision ${decision.id} evidence escapes its candidate pair`); + } + + if (decision.verdict === 'accept') { + if (acceptedDeclarations.has(candidate.declarationRecordId)) { + throw new Error(`Reranker accepted more than one module for ${candidate.declarationRecordId}`); + } + acceptedDeclarations.add(candidate.declarationRecordId); + } + } + + if (seenDecisions.size !== candidates.size) { + throw new Error('Semantic rerank result must decide every bounded candidate'); + } + + const expectedHash = sha256(stableStringify({ + graphFingerprint: value.graphFingerprint, + candidateSetHash: value.candidateSetHash, + generation: value.generation, + decisions: value.decisions, + })); + if (value.resultHash !== expectedHash) { + throw new Error('Semantic rerank resultHash does not match its content'); + } +} + +export function applyAcceptedSemanticRelations( + graph: IntentGraph, + candidateSet: SemanticCandidateSet, + rerank: SemanticRerankResult, + generatedAt = new Date().toISOString(), +): IntentGraph { + assertSemanticRerankResult(rerank, candidateSet, graph); + + const candidates = new Map(candidateSet.candidates.map((candidate) => [candidate.id, candidate])); + const added = rerank.decisions + .filter((decision) => decision.verdict === 'accept') + .map((decision): IntentRelation => { + const candidate = candidates.get(decision.candidateId); + if (!candidate) { + throw new Error(`Accepted decision cites unknown candidate ${decision.candidateId}`); + } + + const relationWithoutId = { + from: candidate.declarationRecordId, + to: candidate.moduleRecordId, + type: 'evidenced_by' as const, + confidence: Math.min(0.95, decision.confidence), + basis: [ + 'cross_language_reranker', + `candidate:${candidate.id}`, + `decision:${decision.id}`, + `retrieval:${candidateSet.retrieval.provider}/${candidateSet.retrieval.model}@${candidateSet.retrieval.revision}`, + `retrieval_score:${candidate.score}`, + `reranker:${rerank.generation.provider}/${rerank.generation.model}@${rerank.generation.modelRevision}`, + ...decision.evidence.map((item) => `citation:${item.recordId}`), + ], + }; + return { + id: createRelationId(relationWithoutId), + ...relationWithoutId, + }; + }); + + const relations = [...new Map([...graph.relations, ...added].map((relation) => [relation.id, relation])).values()] + .sort((left, right) => left.id.localeCompare(right.id)); + + const output: IntentGraph = { + ...graph, + generatedAt, + fingerprint: graphFingerprint(graph.records, relations), + relations, + }; + assertIntentGraph(output); + return output; +} + +export function assertSemanticVerdictReason( + verdict: 'accept' | 'reject' | 'abstain', + reasonCode: + | 'repository_evidence_supports_match' + | 'wrong_target' + | 'contradicted' + | 'insufficient_evidence' + | 'ambiguous' + | 'multi_module', + location = 'Semantic decision', +): void { + const allowedVerdicts = new Set(['accept', 'reject', 'abstain']); + if (!allowedVerdicts.has(verdict)) { + throw new Error(`${location} has invalid verdict`); + } + + const allowedReasons = new Set([ + 'repository_evidence_supports_match', + 'wrong_target', + 'contradicted', + 'insufficient_evidence', + 'ambiguous', + 'multi_module', + ]); + if (!allowedReasons.has(reasonCode)) { + throw new Error(`${location} has invalid reasonCode`); + } + + if (verdict === 'accept' && reasonCode !== 'repository_evidence_supports_match') { + throw new Error(`${location}: accept requires repository_evidence_supports_match`); + } + if (verdict !== 'accept' && reasonCode === 'repository_evidence_supports_match') { + throw new Error(`${location}: non-accept cannot use repository_evidence_supports_match`); + } +} diff --git a/src/semantic/reranker/types.ts b/src/semantic/reranker/types.ts new file mode 100644 index 0000000..88d81e1 --- /dev/null +++ b/src/semantic/reranker/types.ts @@ -0,0 +1,106 @@ +export type SemanticRerankVerdict = 'accept' | 'reject' | 'abstain'; +export type SemanticRerankReason = + | 'repository_evidence_supports_match' + | 'wrong_target' + | 'contradicted' + | 'insufficient_evidence' + | 'ambiguous' + | 'multi_module'; + +export const SEMANTIC_RERANK_VERDICTS = ['accept', 'reject', 'abstain'] as const; +export const SEMANTIC_RERANK_REASONS = [ + 'repository_evidence_supports_match', + 'wrong_target', + 'contradicted', + 'insufficient_evidence', + 'ambiguous', + 'multi_module', +] as const; + +export interface SemanticRetrievalIdentity { + provider: string; + model: string; + revision: string; + metric: string; + inputHash: string; +} + +export interface SemanticCandidate { + id: string; + declarationRecordId: string; + moduleRecordId: string; + score: number; + rank: number; +} + +export interface SemanticCandidateSet { + schemaVersion: 't2c.semantic-candidate-set/v1'; + generatedAt: string; + graphFingerprint: string; + maxCandidatesPerDeclaration: number; + retrieval: SemanticRetrievalIdentity; + candidates: SemanticCandidate[]; + candidateSetHash: string; +} + +export interface SemanticCandidateInput { + declarationRecordId: string; + moduleRecordId: string; + score: number; +} + +export interface SemanticRetrievalInput { + provider: string; + model: string; + revision: string; + metric: string; +} + +export interface SemanticEvidenceCitation { + recordId: string; + quote: string; +} + +export interface SemanticRerankDecisionInput { + candidateId: string; + verdict: SemanticRerankVerdict; + confidence: number; + reasonCode: SemanticRerankReason; + rationale: string; + citedRecordIds: string[]; + evidence: SemanticEvidenceCitation[]; +} + +export interface SemanticRerankDecision extends SemanticRerankDecisionInput { + id: string; +} + +export interface SemanticRerankGeneration { + generator: 't2c/cross-language-reranker'; + generatorVersion: '1'; + runtimeVersion: string; + provider: string; + requestedModel: string; + model: string; + modelRevision: string; + responseId: string | null; + promptHash: string; +} + +export interface SemanticRerankResult { + schemaVersion: 't2c.semantic-rerank/v1'; + generatedAt: string; + graphFingerprint: string; + candidateSetHash: string; + generation: SemanticRerankGeneration; + decisions: SemanticRerankDecision[]; + resultHash: string; +} + +export interface SemanticRerankGenerationInput { + provider: string; + requestedModel?: string; + model: string; + modelRevision: string; + responseId?: string | null; +} diff --git a/src/semantic/reranker/validation.ts b/src/semantic/reranker/validation.ts new file mode 100644 index 0000000..ed7a4c8 --- /dev/null +++ b/src/semantic/reranker/validation.ts @@ -0,0 +1,111 @@ +import type { IntentRecord } from '../../core/types.js'; +import type { + SemanticRerankDecision, + SemanticRerankGeneration, + SemanticRetrievalIdentity, +} from './types.js'; + +function requiredText(value: string, name: string): string { + if (typeof value !== 'string' || !value.trim()) { + throw new Error(`${name} must be non-blank`); + } + return value.trim(); +} + +export function validateRetrieval(value: SemanticRetrievalIdentity): void { + requiredText(value.provider, 'retrieval.provider'); + requiredText(value.model, 'retrieval.model'); + requiredText(value.revision, 'retrieval.revision'); + requiredText(value.metric, 'retrieval.metric'); + if (!/^[a-f0-9]{64}$/.test(value.inputHash)) { + throw new Error('retrieval.inputHash must be SHA-256'); + } +} + +export function validateGeneration(value: SemanticRerankGeneration): void { + if (value.generator !== 't2c/cross-language-reranker' || value.generatorVersion !== '1') { + throw new Error('Unsupported semantic reranker generator'); + } + requiredText(value.runtimeVersion, 'generation.runtimeVersion'); + requiredText(value.provider, 'generation.provider'); + requiredText(value.requestedModel, 'generation.requestedModel'); + requiredText(value.model, 'generation.model'); + requiredText(value.modelRevision, 'generation.modelRevision'); + if (value.responseId !== null) { + requiredText(value.responseId, 'generation.responseId'); + } + if (!/^[a-f0-9]{64}$/.test(value.promptHash)) { + throw new Error('generation.promptHash must be SHA-256'); + } +} + +export function validateVerdictReason(decision: SemanticRerankDecision): void { + const allowedVerdicts = new Set(['accept', 'reject', 'abstain']); + if (!allowedVerdicts.has(decision.verdict)) { + throw new Error(`Decision ${decision.id} has invalid verdict`); + } + + const allowedReasons = new Set([ + 'repository_evidence_supports_match', + 'wrong_target', + 'contradicted', + 'insufficient_evidence', + 'ambiguous', + 'multi_module', + ]); + if (!allowedReasons.has(decision.reasonCode)) { + throw new Error(`Decision ${decision.id} has invalid reasonCode`); + } + + if (decision.verdict === 'accept' && decision.reasonCode !== 'repository_evidence_supports_match') { + throw new Error(`Decision ${decision.id}: accept requires repository_evidence_supports_match`); + } + if (decision.verdict !== 'accept' && decision.reasonCode === 'repository_evidence_supports_match') { + throw new Error(`Decision ${decision.id}: non-accept cannot use repository_evidence_supports_match`); + } +} + +export function assertGroundedQuote( + citation: { + recordId: string; + quote: string; + }, + record: IntentRecord, + decisionId: string, +): void { + const quote = requiredText(citation.quote, `Decision ${decisionId} evidence.quote`); + const evidence = [ + record.statement.text, + record.statement.object, + ...record.statement.target.paths, + ...record.statement.target.symbols, + ...(Array.isArray(record.metadata.capabilities) + ? record.metadata.capabilities.filter((item): item is string => typeof item === 'string') + : []), + ].join('\n').toLowerCase(); + if (!evidence.includes(quote.toLowerCase())) { + throw new Error(`Decision ${decisionId} quote is not grounded in record ${record.id}`); + } +} + +export function validDate(value: string, name: string): void { + if (!value || Number.isNaN(Date.parse(value))) { + throw new Error(`${name} must be an ISO date-time`); + } +} + +export function boundedScore(value: number): number { + if (!Number.isFinite(value) || value < -1 || value > 1) { + throw new Error('Semantic retrieval score must be a finite number between -1 and 1'); + } + return Math.round(value * 1_000_000) / 1_000_000; +} + +export function roundedConfidence(value: number): number { + if (!Number.isFinite(value) || value < 0 || value > 1) { + throw new Error('Semantic rerank confidence must be a finite number between 0 and 1'); + } + return Math.round(value * 1_000_000) / 1_000_000; +} + +export { requiredText }; diff --git a/src/synthesis/code-change-plan.ts b/src/synthesis/code-change-plan.ts index f85f36c..eb82c02 100644 --- a/src/synthesis/code-change-plan.ts +++ b/src/synthesis/code-change-plan.ts @@ -1,1310 +1 @@ -import { randomUUID } from 'node:crypto'; -import { existsSync, promises as fs } from 'node:fs'; -import path from 'node:path'; -import { - createCodeChangePlanHash, - createCodeChangePlanId, - createCodeChangeSourcePatchHash, - createCodeChangeSourcePatchId, - sha256, - stableStringify, -} from '../core/id.js'; -import { ensureDir, pathExists, readJson, readText } from '../core/io.js'; -import { assertPathWithinRoot } from '../core/security.js'; -import { - assertCodeChangeAcceptance, - assertCodeChangePlanForAcceptance, - assertCodeChangePlans, - assertCodeChangePlansForReview, - assertConclusions, - assertGroundedGenerationMetadata, - assertIntentGraph, -} from '../core/schema.js'; -import type { - CodeChangeAcceptance, - CodeChangeCloseResult, - CodeChangeFile, - CodeChangeFileAction, - CodeChangePlan, - CodeChangeReviewPatch, - CodeChangeSourceApplyReceipt, - CodeChangeSourceEdit, - CodeChangeSourcePatch, - CodeChangeSourcePatchApproval, - CodeChangeSourcePatchSet, - Conclusion, - Diagnostic, - DiagnosticReport, - GroundedGenerationMetadata, - IntentGraph, - IntentRecord, - IntentTarget, - TodoPriority, - TodoProposal, -} from '../core/types.js'; -import { normalizeTarget } from '../core/target.js'; -import { diagnoseGraph } from '../graph/diagnostics.js'; -import { T2C_VERSION } from '../version.js'; -import { isUsefulCodeChangePath } from './code-change-path.js'; - -export { isUsefulCodeChangePath } from './code-change-path.js'; - -const IMPLEMENTATION_DIAGNOSTIC_CODES = new Set([ - 'PLANNED_NOT_IMPLEMENTED', - 'CHANGELOG_WITHOUT_IMPLEMENTATION', -]); - -export interface ProposeCodeChangePlansOptions { - graph: IntentGraph; - diagnostics: DiagnosticReport; - conclusions?: Conclusion[]; - proposals?: TodoProposal[]; - generatedAt?: string; - /** Limit how many plans are materialised from open diagnostics. Default 50. */ - maxPlans?: number; - /** - * Repository probe used to tell `create` from `modify`. Injected rather than - * read here so plan synthesis stays pure and deterministic; when omitted the - * plan cannot know and keeps the conservative `modify`. - * See {@link createRepositoryPathProbe}. - */ - pathExists?: (relativePath: string) => boolean; -} - -export interface ProposeCodeChangePlansResult { - schemaVersion: 't2c.code-change-plan-set/v1'; - plans: CodeChangePlan[]; - generatedAt: string; - graphFingerprint: string; - sourceDiagnosticCount: number; - generation: GroundedGenerationMetadata; -} - -export interface EvaluateCodeChangeAcceptanceOptions { - plan: CodeChangePlan; - /** Graph and diagnostics that the plan was grounded on. */ - before: { graph: IntentGraph; diagnostics: DiagnosticReport }; - /** Graph after an attempted implementation (re-extracted and re-linked). */ - afterGraph: IntentGraph; - /** Optional precomputed after diagnostics; derived when omitted. */ - afterDiagnostics?: DiagnosticReport; - evaluatedAt?: string; -} - -export interface CloseCodeChangesOptions { - plans: CodeChangePlan[]; - before: { graph: IntentGraph; diagnostics: DiagnosticReport }; - afterGraph: IntentGraph; - afterDiagnostics?: DiagnosticReport; - evaluatedAt?: string; -} - -/** - * Build grounded code-change plans from open implementation diagnostics. - * - * One plan is produced per diagnostic that can name at least one target path - * (from the diagnostic's records or a matching TODO proposal). The runtime - * never invents file paths and never marks work complete. - */ -export function proposeCodeChangePlans(options: ProposeCodeChangePlansOptions): ProposeCodeChangePlansResult { - assertIntentGraph(options.graph); - assertConclusions([], { graph: options.graph, diagnostics: options.diagnostics }); - const generatedAt = options.generatedAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(generatedAt))) throw new Error('generatedAt must be an ISO date-time'); - const maxPlans = options.maxPlans ?? 50; - if (!Number.isInteger(maxPlans) || maxPlans < 1 || maxPlans > 500) { - throw new Error('maxPlans must be an integer between 1 and 500'); - } - const conclusions = options.conclusions ?? []; - const proposals = options.proposals ?? []; - const recordsById = new Map(options.graph.records.map((record) => [record.id, record])); - const proposalsByDiagnostic = indexProposalsByDiagnostic(proposals); - const conclusionsByDiagnostic = indexConclusionsByDiagnostic(conclusions); - - const candidates = options.diagnostics.diagnostics - .filter((diagnostic) => IMPLEMENTATION_DIAGNOSTIC_CODES.has(diagnostic.code)) - // A released CHANGELOG entry is an audit signal; an open TODO is an - // explicit request for work. With a bounded plan set, sorting only by - // content id allowed historical release notes to consume every slot and - // hide the repository's actual backlog from autonomous executors. - .sort((left, right) => implementationDiagnosticRank(left) - - implementationDiagnosticRank(right) || left.id.localeCompare(right.id)); - - const plans: CodeChangePlan[] = []; - for (const diagnostic of candidates) { - if (plans.length >= maxPlans) break; - const relatedRecords = diagnostic.recordIds - .map((id) => recordsById.get(id)) - .filter((record): record is IntentRecord => Boolean(record)); - if (!relatedRecords.length) continue; - - const matchingProposals = proposalsByDiagnostic.get(diagnostic.id) ?? []; - const matchingConclusions = conclusionsByDiagnostic.get(diagnostic.id) ?? []; - const target = collectTarget(relatedRecords, matchingProposals); - const changes = buildChanges(target, relatedRecords, diagnostic, options.pathExists); - if (!changes.length) continue; - - const generation = deterministicGeneration(generatedAt, 't2c/code-change-plan'); - const evidence = { - graphFingerprint: options.graph.fingerprint, - recordIds: uniqueSorted(relatedRecords.map((record) => record.id)), - diagnosticIds: [diagnostic.id], - conclusionIds: uniqueSorted(matchingConclusions.map((item) => item.id)), - proposalIds: uniqueSorted(matchingProposals.map((item) => item.id)), - }; - const semantic = { - title: titleFor(diagnostic, relatedRecords), - description: descriptionFor(diagnostic, relatedRecords, target), - priority: priorityFor(diagnostic), - target, - acceptanceCriteria: acceptanceCriteriaFor(diagnostic, target), - changes, - risk: riskFor(diagnostic, changes), - rollback: rollbackFor(changes), - evidence, - }; - const planHash = createCodeChangePlanHash(semantic); - const plan: CodeChangePlan = { - schemaVersion: 't2c.code-change-plan/v1', - id: createCodeChangePlanId(semantic), - planHash, - status: 'proposed', - createdAt: generatedAt, - ...semantic, - confidence: confidenceFor(diagnostic, matchingProposals), - generation, - }; - plans.push(plan); - } - - assertCodeChangePlans(plans, { - graph: options.graph, - diagnostics: options.diagnostics, - conclusions, - proposals, - }); - - return { - schemaVersion: 't2c.code-change-plan-set/v1', - plans, - generatedAt, - graphFingerprint: options.graph.fingerprint, - sourceDiagnosticCount: candidates.length, - generation: deterministicGeneration(generatedAt, 't2c/code-change-plan-set'), - }; -} - -/** - * Build the repository probe for {@link ProposeCodeChangePlansOptions.pathExists}. - * - * A path that escapes the analysed root is reported as existing, so an unusual - * value degrades to today's conservative `modify` instead of instructing an - * executor to create a file outside the repository. - */ -export function createRepositoryPathProbe(root: string): (relativePath: string) => boolean { - const base = path.resolve(root); - return (relativePath: string): boolean => { - const absolute = path.resolve(base, relativePath); - if (absolute !== base && !absolute.startsWith(base + path.sep)) return true; - return existsSync(absolute); - }; -} - -function implementationDiagnosticRank(diagnostic: Diagnostic): number { - return diagnostic.code === 'PLANNED_NOT_IMPLEMENTED' ? 0 : 1; -} - -/** - * Re-diagnose an after graph and decide whether the plan's targeted - * diagnostics cleared without introducing new blocking findings. - * - * Diagnostic IDs are content-bound, so a still-open finding on the same - * records keeps the same ID. Cleared findings simply disappear. - */ -export function evaluateCodeChangeAcceptance( - options: EvaluateCodeChangeAcceptanceOptions, -): CodeChangeAcceptance { - assertIntentGraph(options.before.graph); - assertIntentGraph(options.afterGraph); - assertConclusions([], options.before); - assertCodeChangePlanForAcceptance(options.plan, options.before); - - const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph( - options.afterGraph, - options.evaluatedAt ?? new Date().toISOString(), - ); - assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); - - const beforeIds = new Set(options.before.diagnostics.diagnostics.map((item) => item.id)); - const afterById = new Map(afterDiagnostics.diagnostics.map((item) => [item.id, item])); - const afterIds = [...afterById.keys()].sort(); - const targeted = options.plan.evidence.diagnosticIds; - const clearedDiagnosticIds = targeted.filter((id) => !afterById.has(id)).sort(); - const remainingDiagnosticIds = targeted.filter((id) => afterById.has(id)).sort(); - const newBlockingDiagnosticIds = afterDiagnostics.diagnostics - .filter((item) => item.severity === 'blocking' && !beforeIds.has(item.id)) - .map((item) => item.id) - .sort(); - - const reasons: string[] = []; - if (remainingDiagnosticIds.length) { - reasons.push( - `Targeted diagnostics still open: ${remainingDiagnosticIds.join(', ')}.`, - ); - } else { - reasons.push('All targeted diagnostics cleared after re-analysis.'); - } - if (newBlockingDiagnosticIds.length) { - reasons.push( - `New blocking diagnostics appeared: ${newBlockingDiagnosticIds.join(', ')}.`, - ); - } else { - reasons.push('No new blocking diagnostics appeared.'); - } - - const accepted = remainingDiagnosticIds.length === 0 && newBlockingDiagnosticIds.length === 0; - if (accepted) { - reasons.push('Acceptance gate passed; human approval is still required before DONE.'); - } else { - reasons.push('Acceptance gate failed.'); - } - - const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); - const acceptance: CodeChangeAcceptance = { - schemaVersion: 't2c.code-change-acceptance/v1', - planId: options.plan.id, - planHash: options.plan.planHash, - beforeGraphFingerprint: options.before.graph.fingerprint, - afterGraphFingerprint: options.afterGraph.fingerprint, - beforeDiagnosticIds: [...beforeIds].sort(), - afterDiagnosticIds: afterIds, - clearedDiagnosticIds, - remainingDiagnosticIds, - newBlockingDiagnosticIds, - accepted, - reasons: uniqueSorted(reasons), - evaluatedAt, - generation: deterministicGeneration(evaluatedAt, 't2c/code-change-acceptance'), - }; - assertCodeChangeAcceptance(acceptance, { - plan: options.plan, - before: options.before, - after: { graph: options.afterGraph, diagnostics: afterDiagnostics }, - }); - return acceptance; -} - -/** Evaluate a plan set under one timestamp without applying changes or marking DONE. */ -export function closeCodeChanges(options: CloseCodeChangesOptions): CodeChangeCloseResult { - const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(evaluatedAt))) throw new Error('evaluatedAt must be an ISO date-time'); - assertIntentGraph(options.before.graph); - assertIntentGraph(options.afterGraph); - assertConclusions([], options.before); - const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); - assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); - const planIds = options.plans.map((plan) => plan.id); - if (new Set(planIds).size !== planIds.length) throw new Error('Code change close plans must have unique ids'); - - const acceptances = options.plans.map((plan) => evaluateCodeChangeAcceptance({ - plan, - before: options.before, - afterGraph: options.afterGraph, - afterDiagnostics, - evaluatedAt, - })); - const acceptedCount = acceptances.filter((item) => item.accepted).length; - return { - schemaVersion: 't2c.code-change-close-result/v1', - evaluatedAt, - graphFingerprintBefore: options.before.graph.fingerprint, - graphFingerprintAfter: options.afterGraph.fingerprint, - planCount: options.plans.length, - acceptedCount, - rejectedCount: options.plans.length - acceptedCount, - allAccepted: options.plans.length > 0 && acceptedCount === options.plans.length, - acceptances, - generation: deterministicGeneration(evaluatedAt, 't2c/code-change-close-result'), - }; -} - -function indexProposalsByDiagnostic(proposals: TodoProposal[]): Map { - const index = new Map(); - for (const proposal of proposals) { - for (const diagnosticId of proposal.diagnosticIds) { - const list = index.get(diagnosticId) ?? []; - list.push(proposal); - index.set(diagnosticId, list); - } - } - return index; -} - -function indexConclusionsByDiagnostic(conclusions: Conclusion[]): Map { - const index = new Map(); - for (const conclusion of conclusions) { - for (const diagnosticId of conclusion.diagnosticIds) { - const list = index.get(diagnosticId) ?? []; - list.push(conclusion); - index.set(diagnosticId, list); - } - } - return index; -} - -function collectTarget(records: IntentRecord[], proposals: TodoProposal[]): IntentTarget { - const paths = new Set(); - const symbols = new Set(); - const tickets = new Set(); - const versions = new Set(); - for (const record of records) { - for (const path of record.statement.target.paths) paths.add(path); - for (const symbol of record.statement.target.symbols) symbols.add(symbol); - for (const ticket of record.statement.target.tickets) tickets.add(ticket); - for (const version of record.statement.target.versions) versions.add(version); - } - for (const proposal of proposals) { - for (const path of proposal.target.paths) paths.add(path); - for (const symbol of proposal.target.symbols) symbols.add(symbol); - for (const ticket of proposal.target.tickets) tickets.add(ticket); - for (const version of proposal.target.versions) versions.add(version); - } - return normalizeTarget({ - paths: [...paths].filter(isUsefulCodeChangePath), - symbols: [...symbols], - tickets: [...tickets], - versions: [...versions], - }); -} - -function buildChanges( - target: IntentTarget, - records: IntentRecord[], - diagnostic: Diagnostic, - pathExistsInRepository?: (relativePath: string) => boolean, -): CodeChangeFile[] { - const symbols = uniqueSorted(target.symbols); - // The diagnostic explains why evidence is missing; it is not necessarily an - // implementation instruction. Reusing its generic remediation here produced - // contradictory tickets such as “replace magic number 50” followed by - // “provide a missing function”. The lossless source declaration is the work - // to perform, while the diagnostic remains available in the plan evidence. - const sourceIntents = uniqueSorted(records.map((record) => record.statement.text)); - const rationale = sourceIntents.length - ? `Implement the source intent: ${sourceIntents.join(' | ')}` - : diagnostic.detail || `Address ${diagnostic.code}.`; - - if (target.paths.length) { - const changes: CodeChangeFile[] = []; - for (const declared of uniqueSorted(target.paths)) { - const normalized = declared.replace(/\\/g, '/'); - const exists = pathExistsInRepository?.(normalized); - // A path without a directory is shorthand that never said *where* the - // file belongs. Creating one at the repository root invents a location: - // measured across seven foreign repositories this proposed `__init__.py` - // beside 22 real ones, `pyproject.toml` beside 32, and files named after - // prose fragments such as `it.md`. The diagnostic still reports the gap; - // only the invented instruction is withheld. - if (exists === false && !normalized.includes('/')) continue; - // Documentation routinely plans files that do not exist yet (a target - // repository's `docs/ARCHITECTURE.md`). Telling an executor to modify - // them is an instruction it cannot follow, and `apply-source-patch` - // rejects a create edit whose target already exists, so the two actions - // must not be guessed. - const action: CodeChangeFileAction = exists === false ? 'create' : 'modify'; - changes.push({ path: normalized, action, symbols, rationale }); - } - return changes; - } - - // Without a path the plan cannot safely name a source file. Skip rather than invent. - return []; -} - -function titleFor(diagnostic: Diagnostic, records: IntentRecord[]): string { - const record = records[0]; - const object = record?.statement.object?.trim(); - // `inferObject` removes the verb selected by the action classifier. In a - // compound sentence a later high-precedence verb can win (`verify` before - // `implement`), leaving the original leading imperative inside `object` and - // a broken fragment after the removed verb. The source statement is the - // lossless title whenever that mismatch is visible. - if (object && startsWithImperative(object) && record?.statement.text.trim()) { - return record.statement.text.trim().replace(/[.!?]+$/, ''); - } - if (object) return `Implement ${object}`; - return diagnostic.title.trim() || `Resolve ${diagnostic.code}`; -} - -function startsWithImperative(value: string): boolean { - return /^(?:add|build|change|configure|create|delete|document|fix|implement|preserve|refactor|remove|test|update|validate|verify)\b/i.test(value) - || /^(?:dodać|dodac|naprawić|naprawic|przetestować|przetestowac|usunąć|usunac|utworzyć|utworzyc|wdrożyć|wdrozyc|zmienić|zmienic|zweryfikować|zweryfikowac)\b/i.test(value); -} - -function descriptionFor( - diagnostic: Diagnostic, - records: IntentRecord[], - target: IntentTarget, -): string { - const parts = [ - diagnostic.detail.trim(), - records[0] ? `Source intent: ${records[0].statement.text.trim()}` : '', - target.paths.length ? `Paths: ${target.paths.join(', ')}.` : '', - target.symbols.length ? `Symbols: ${target.symbols.join(', ')}.` : '', - target.tickets.length ? `Tickets: ${target.tickets.join(', ')}.` : '', - ].filter(Boolean); - return parts.join(' '); -} - -function acceptanceCriteriaFor(diagnostic: Diagnostic, target: IntentTarget): string[] { - const criteria = [ - `Re-run todo2code link+diagnose and clear diagnostic ${diagnostic.id} (${diagnostic.code}).`, - 'Do not introduce new blocking diagnostics.', - ]; - if (target.paths.length) { - criteria.push(`Touch only the declared paths: ${uniqueSorted(target.paths).join(', ')}.`); - } - if (target.symbols.length) { - criteria.push(`Provide AST evidence for symbols: ${uniqueSorted(target.symbols).join(', ')}.`); - } - return uniqueSorted(criteria); -} - -function priorityFor(diagnostic: Diagnostic): TodoPriority { - if (diagnostic.severity === 'blocking') return 'P0'; - if (diagnostic.severity === 'review_required') return 'P1'; - if (diagnostic.severity === 'warning') return 'P2'; - return 'P3'; -} - -function confidenceFor(diagnostic: Diagnostic, proposals: TodoProposal[]): number { - if (proposals.length) { - return Math.min(0.92, Math.max(...proposals.map((item) => item.confidence))); - } - if (diagnostic.severity === 'blocking') return 0.88; - if (diagnostic.severity === 'review_required') return 0.8; - return 0.72; -} - -function riskFor(diagnostic: Diagnostic, changes: CodeChangeFile[]): CodeChangePlan['risk'] { - const level = diagnostic.severity === 'blocking' ? 'high' - : diagnostic.severity === 'review_required' ? 'medium' - : 'low'; - const reasons = [ - `Derived from ${diagnostic.severity} diagnostic ${diagnostic.id}.`, - `Touches ${changes.length} declared ${changes.length === 1 ? 'path' : 'paths'}.`, - ]; - return { level, reasons: uniqueSorted(reasons) }; -} - -function rollbackFor(changes: CodeChangeFile[]): string { - return `Revert the proposed changes to ${uniqueSorted(changes.map((item) => item.path)).join(', ')} and re-run todo2code diagnostics.`; -} - -function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { - return { - generator, - generatorVersion: '1', - runtimeVersion: T2C_VERSION, - generatedAt, - requestedMode: 'deterministic', - effectiveMode: 'deterministic', - degraded: false, - model: null, - provider: null, - responseId: null, - configurationFingerprint: sha256(stableStringify({ - generator, - generatorVersion: '1', - codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), - })), - reason: null, - }; -} - -function uniqueSorted(values: string[]): string[] { - return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); -} - -export interface CreateCodeChangeReviewOptions { - plans: CodeChangePlan[]; - graphFingerprint: string; - createdAt?: string; -} - -export interface CreatedCodeChangeReview { - markdown: string; - artifact: CodeChangeReviewPatch; -} - -/** - * Render a stable, reviewable Markdown brief for grounded code-change plans. - * - * This is not a source patch and is never applied to the tree. It exists so - * humans and agents share one hash-bound artifact that lists exact paths, - * acceptance criteria, evidence IDs, risk and rollback instructions. - */ -export function createCodeChangeReviewPatch( - options: CreateCodeChangeReviewOptions, -): CreatedCodeChangeReview { - if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { - throw new Error('graphFingerprint must be a SHA-256 hex digest'); - } - assertCodeChangePlansForReview(options.plans, options.graphFingerprint); - const plans = [...options.plans].sort((left, right) => - priorityRank(left.priority) - priorityRank(right.priority) || left.id.localeCompare(right.id)); - const createdAt = options.createdAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); - const markdown = renderCodeChangeReviewMarkdown(plans, options.graphFingerprint); - const artifact: CodeChangeReviewPatch = { - schemaVersion: 't2c.code-change-review/v1', - createdAt, - graphFingerprint: options.graphFingerprint, - planIds: plans.map((plan) => plan.id), - planHashes: plans.map((plan) => plan.planHash), - renderedPatchHash: sha256(markdown), - generation: deterministicGeneration(createdAt, 't2c/code-change-review'), - }; - assertCodeChangeReviewPatch(artifact); - return { markdown, artifact }; -} - -export function renderCodeChangeReviewMarkdown( - plans: CodeChangePlan[], - graphFingerprint: string, -): string { - const lines = [ - '', - '# todo2code proposed code changes', - '', - 'This document is a grounded **review brief**, not an auto-applied source patch.', - 'Implement the listed paths in a normal branch, re-run the pipeline, then', - '`t2c evaluate-code-change`. Acceptance still requires human/CI approval before DONE.', - '', - `Graph fingerprint: \`${graphFingerprint}\``, - '', - ]; - if (!plans.length) { - lines.push('_No grounded code-change plans. Open diagnostics either cleared or lack repository paths._', ''); - return lines.join('\n'); - } - let currentPriority: CodeChangePlan['priority'] | null = null; - for (const plan of plans) { - if (plan.priority !== currentPriority) { - if (currentPriority !== null) lines.push(''); - currentPriority = plan.priority; - lines.push(`## ${plan.priority}`, ''); - } - lines.push(`### ${inline(plan.title)} (\`${plan.id}\`)`, ''); - lines.push(`- Plan hash: \`${plan.planHash}\``); - lines.push(`- Risk: **${plan.risk.level}** — ${plan.risk.reasons.map(inline).join('; ')}`); - lines.push(`- Confidence: ${plan.confidence.toFixed(2)}`); - lines.push(`- Description: ${inline(plan.description)}`); - lines.push('- Changes:'); - for (const change of plan.changes) { - const symbols = change.symbols.length ? ` symbols: ${change.symbols.map((item) => `\`${item}\``).join(', ')}` : ''; - lines.push(` - \`${change.action}\` \`${change.path}\`${symbols}`); - lines.push(` - ${inline(change.rationale)}`); - } - lines.push('- Acceptance criteria:'); - for (const criterion of plan.acceptanceCriteria) lines.push(` - [ ] ${inline(criterion)}`); - lines.push(`- Diagnostics: ${renderIds(plan.evidence.diagnosticIds)}`); - lines.push(`- Evidence records: ${renderIds(plan.evidence.recordIds)}`); - if (plan.evidence.proposalIds.length) lines.push(`- TODO proposals: ${renderIds(plan.evidence.proposalIds)}`); - if (plan.evidence.conclusionIds.length) lines.push(`- Conclusions: ${renderIds(plan.evidence.conclusionIds)}`); - lines.push(`- Rollback: ${inline(plan.rollback)}`); - lines.push(''); - } - lines.push('## After implementation', ''); - lines.push('1. Re-run `t2c pipeline` (or extract + link + diagnose) on the changed tree.'); - lines.push('2. `t2c evaluate-code-change --before-graph … --after-graph … --out acceptance.json`.'); - lines.push('3. Require `accepted=true` and human/CI review before marking work DONE.'); - lines.push(''); - return lines.join('\n'); -} - -export function assertCodeChangeReviewPatch(value: unknown): asserts value is CodeChangeReviewPatch { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change review patch must be an object'); - } - const artifact = value as Record; - const required = [ - 'schemaVersion', 'createdAt', 'graphFingerprint', 'planIds', 'planHashes', - 'renderedPatchHash', 'generation', - ]; - for (const key of required) { - if (!(key in artifact)) throw new Error(`Code change review patch is missing: ${key}`); - } - if (artifact.schemaVersion !== 't2c.code-change-review/v1') { - throw new Error('Unsupported code change review schemaVersion'); - } - if (typeof artifact.createdAt !== 'string' || Number.isNaN(Date.parse(artifact.createdAt))) { - throw new Error('Code change review createdAt must be an ISO date-time'); - } - if (typeof artifact.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.graphFingerprint)) { - throw new Error('Code change review graphFingerprint must be SHA-256'); - } - if (typeof artifact.renderedPatchHash !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.renderedPatchHash)) { - throw new Error('Code change review renderedPatchHash must be SHA-256'); - } - if (!Array.isArray(artifact.planIds) || !artifact.planIds.every((id) => typeof id === 'string' && /^CPLAN-[a-f0-9]{20}$/.test(id))) { - throw new Error('Code change review planIds must be CPLAN ids'); - } - if (!Array.isArray(artifact.planHashes) || !artifact.planHashes.every((hash) => typeof hash === 'string' && /^[a-f0-9]{64}$/.test(hash))) { - throw new Error('Code change review planHashes must be SHA-256 digests'); - } - if (artifact.planIds.length !== artifact.planHashes.length) { - throw new Error('Code change review planIds and planHashes must have equal length'); - } - if (new Set(artifact.planIds as string[]).size !== (artifact.planIds as string[]).length) { - throw new Error('Code change review planIds must be unique'); - } - assertGroundedGenerationMetadata(artifact.generation, 'Code change review generation'); - const generation = artifact.generation as GroundedGenerationMetadata; - if (generation.generatedAt !== artifact.createdAt) { - throw new Error('Code change review generation.generatedAt must match createdAt'); - } - if (generation.generator !== 't2c/code-change-review') { - throw new Error('Code change review generation.generator must be t2c/code-change-review'); - } -} - -function priorityRank(priority: TodoPriority): number { - return ({ P0: 0, P1: 1, P2: 2, P3: 3 } as const)[priority]; -} - -function inline(value: string): string { - return value.replace(/\s+/g, ' ').trim(); -} - -function renderIds(ids: string[]): string { - return ids.length ? ids.map((id) => `\`${id}\``).join(', ') : '_none_'; -} - -export interface CreateCodeChangeSourcePatchOptions { - plan: CodeChangePlan; - /** Optional per-path unified diffs keyed by relative repository path. */ - unifiedDiffs?: Record; - createdAt?: string; -} - -/** - * Build a structured source-edit proposal from one grounded code-change plan. - * - * Deterministic by default: each planned file gets an imperative instruction. - * Callers may attach a unified diff per path; the runtime validates path headers - * and rejects traversal / host paths. Nothing is written to the working tree. - */ -export function createCodeChangeSourcePatch( - options: CreateCodeChangeSourcePatchOptions, -): CodeChangeSourcePatch { - const plan = options.plan; - const graphFingerprint = plan?.evidence?.graphFingerprint; - assertCodeChangePlansForReview( - [plan], - typeof graphFingerprint === 'string' ? graphFingerprint : '', - ); - const createdAt = options.createdAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); - const allowed = new Set(plan.target.paths.map((path) => path.replace(/\\/g, '/'))); - const diffs = options.unifiedDiffs ?? {}; - for (const path of Object.keys(diffs)) { - const normalized = path.replace(/\\/g, '/'); - if (!allowed.has(normalized)) { - throw new Error(`Unified diff path ${normalized} is not declared by plan ${plan.id}`); - } - } - const edits: CodeChangeSourceEdit[] = [...plan.changes] - .map((change) => { - const path = change.path.replace(/\\/g, '/'); - if (!allowed.has(path)) { - throw new Error(`Edit path ${path} is not present in plan target.paths`); - } - const rawDiff = diffs[path]; - const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); - return { - path, - action: change.action, - symbols: uniqueSorted(change.symbols), - instruction: instructionFor(change, plan), - unifiedDiff, - }; - }) - .sort((left, right) => left.path.localeCompare(right.path) || left.action.localeCompare(right.action)); - if (!edits.length) throw new Error(`Plan ${plan.id} has no editable paths`); - - const semantic = { - planId: plan.id, - planHash: plan.planHash, - graphFingerprint: plan.evidence.graphFingerprint, - diagnosticIds: uniqueSorted(plan.evidence.diagnosticIds), - recordIds: uniqueSorted(plan.evidence.recordIds), - edits, - acceptanceCriteria: uniqueSorted(plan.acceptanceCriteria), - }; - const patchHash = createCodeChangeSourcePatchHash(semantic); - const patch: CodeChangeSourcePatch = { - schemaVersion: 't2c.code-change-source-patch/v1', - id: createCodeChangeSourcePatchId(semantic), - patchHash, - status: 'proposed', - createdAt, - ...semantic, - generation: deterministicGeneration(createdAt, 't2c/code-change-source-patch'), - }; - assertCodeChangeSourcePatch(patch, plan); - return patch; -} - -export function createCodeChangeSourcePatchSet(options: { - plans: CodeChangePlan[]; - graphFingerprint: string; - unifiedDiffsByPlanId?: Record>; - generatedAt?: string; -}): CodeChangeSourcePatchSet { - if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { - throw new Error('graphFingerprint must be a SHA-256 hex digest'); - } - assertCodeChangePlansForReview(options.plans, options.graphFingerprint); - const generatedAt = options.generatedAt ?? new Date().toISOString(); - const patches = [...options.plans] - .sort((left, right) => left.id.localeCompare(right.id)) - .map((plan) => createCodeChangeSourcePatch({ - plan, - createdAt: generatedAt, - ...(options.unifiedDiffsByPlanId?.[plan.id] - ? { unifiedDiffs: options.unifiedDiffsByPlanId[plan.id] } - : {}), - })); - const result: CodeChangeSourcePatchSet = { - schemaVersion: 't2c.code-change-source-patch-set/v1', - generatedAt, - graphFingerprint: options.graphFingerprint, - patches, - generation: deterministicGeneration(generatedAt, 't2c/code-change-source-patch-set'), - }; - assertCodeChangeSourcePatchSet(result, options.plans); - return result; -} - -export function assertCodeChangeSourcePatch( - value: unknown, - plan?: CodeChangePlan, -): asserts value is CodeChangeSourcePatch { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change source patch must be an object'); - } - const patch = value as CodeChangeSourcePatch; - exactSourcePatchKeys(patch as unknown as Record, [ - 'schemaVersion', 'id', 'patchHash', 'status', 'createdAt', 'planId', 'planHash', - 'graphFingerprint', 'diagnosticIds', 'recordIds', 'edits', 'acceptanceCriteria', 'generation', - ], 'Source patch'); - if (patch.schemaVersion !== 't2c.code-change-source-patch/v1') { - throw new Error('Unsupported code change source patch schemaVersion'); - } - if (typeof patch.id !== 'string' || !/^SPATCH-[a-f0-9]{20}$/.test(patch.id)) { - throw new Error('Source patch id must match SPATCH-<20 hex>'); - } - if (typeof patch.patchHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.patchHash)) { - throw new Error('Source patch patchHash must be SHA-256'); - } - if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); - if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { - throw new Error('Source patch createdAt must be an ISO date-time'); - } - if (typeof patch.planId !== 'string' || !/^CPLAN-[a-f0-9]{20}$/.test(patch.planId)) { - throw new Error('Source patch planId must match CPLAN-<20 hex>'); - } - if (typeof patch.planHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.planHash)) { - throw new Error('Source patch planHash must be SHA-256'); - } - if (typeof patch.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(patch.graphFingerprint)) { - throw new Error('Source patch graphFingerprint must be SHA-256'); - } - if (!Array.isArray(patch.edits) || patch.edits.length === 0) { - throw new Error('Source patch edits must be a non-empty array'); - } - assertSourcePatchIds(patch.diagnosticIds, /^DIAG-[a-f0-9]{20}$/, 'diagnosticIds'); - assertSourcePatchIds(patch.recordIds, /^INT-[A-Z]+-[a-f0-9]{20}$/, 'recordIds'); - assertSourcePatchStrings(patch.acceptanceCriteria, 'acceptanceCriteria', false); - const paths = new Set(); - for (const edit of patch.edits) { - if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); - exactSourcePatchKeys(edit as unknown as Record, [ - 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', - ], 'Source patch edit'); - const path = edit.path?.trim().replace(/\\/g, '/') ?? ''; - if (!path || path.startsWith('/') || path.split('/').includes('..')) { - throw new Error(`Source patch edit path is not a relative repository path: ${path}`); - } - if (!['create', 'modify', 'delete'].includes(edit.action)) { - throw new Error(`Source patch edit action is unsupported: ${String(edit.action)}`); - } - if (typeof edit.instruction !== 'string' || !edit.instruction.trim()) { - throw new Error('Source patch edit instruction must be non-blank'); - } - assertSourcePatchStrings(edit.symbols, `edits[${path}].symbols`, true); - if (edit.unifiedDiff !== null) { - if (typeof edit.unifiedDiff !== 'string') throw new Error('Source patch unifiedDiff must be string or null'); - normalizeUnifiedDiff(edit.unifiedDiff, path); - } - const key = `${path}::${edit.action}`; - if (paths.has(key)) throw new Error(`Duplicate source patch edit for ${path}`); - paths.add(key); - } - const expectedHash = createCodeChangeSourcePatchHash(patch); - if (patch.patchHash !== expectedHash) { - throw new Error(`Source patch patchHash does not match semantic content: expected ${expectedHash}`); - } - if (patch.id !== createCodeChangeSourcePatchId(patch)) { - throw new Error('Source patch id does not match semantic content'); - } - assertGroundedGenerationMetadata(patch.generation, 'Source patch generation'); - if (patch.generation.generatedAt !== patch.createdAt) { - throw new Error('Source patch generation.generatedAt must match createdAt'); - } - if (patch.generation.generator !== 't2c/code-change-source-patch') { - throw new Error('Source patch generation.generator must be t2c/code-change-source-patch'); - } - if (plan) { - if (patch.planId !== plan.id || patch.planHash !== plan.planHash) { - throw new Error('Source patch is not bound to the supplied plan'); - } - if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { - throw new Error('Source patch graphFingerprint does not match the plan'); - } - const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); - const expectedChanges = new Map(plan.changes.map((item) => [ - item.path.replace(/\\/g, '/'), item.action, - ])); - for (const edit of patch.edits) { - const editPath = edit.path.replace(/\\/g, '/'); - if (!allowed.has(editPath)) { - throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); - } - if (expectedChanges.get(editPath) !== edit.action) { - throw new Error(`Source patch action for ${edit.path} does not match the plan`); - } - } - exactSourcePatchSet(patch.edits.map((item) => item.path.replace(/\\/g, '/')), [...expectedChanges.keys()], 'edit paths'); - exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); - exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); - exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); - } -} - -export function assertCodeChangeSourcePatchSet( - value: unknown, - plans?: CodeChangePlan[], -): asserts value is CodeChangeSourcePatchSet { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change source patch set must be an object'); - } - const set = value as CodeChangeSourcePatchSet; - exactSourcePatchKeys(set as unknown as Record, [ - 'schemaVersion', 'generatedAt', 'graphFingerprint', 'patches', 'generation', - ], 'Source patch set'); - if (set.schemaVersion !== 't2c.code-change-source-patch-set/v1') { - throw new Error('Unsupported code change source patch set schemaVersion'); - } - if (typeof set.generatedAt !== 'string' || Number.isNaN(Date.parse(set.generatedAt))) { - throw new Error('Source patch set generatedAt must be an ISO date-time'); - } - if (typeof set.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(set.graphFingerprint)) { - throw new Error('Source patch set graphFingerprint must be SHA-256'); - } - if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); - const plansById = new Map((plans ?? []).map((plan) => [plan.id, plan])); - const patchIds = new Set(); - for (const patch of set.patches) { - assertCodeChangeSourcePatch(patch, plans ? plansById.get(patch.planId) : undefined); - if (patch.graphFingerprint !== set.graphFingerprint) { - throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); - } - if (patchIds.has(patch.id)) throw new Error(`Duplicate source patch id: ${patch.id}`); - patchIds.add(patch.id); - } - if (plans) exactSourcePatchSet(set.patches.map((patch) => patch.planId), plans.map((plan) => plan.id), 'planIds'); - assertGroundedGenerationMetadata(set.generation, 'Source patch set generation'); - if (set.generation.generatedAt !== set.generatedAt) { - throw new Error('Source patch set generation.generatedAt must match generatedAt'); - } - if (set.generation.generator !== 't2c/code-change-source-patch-set') { - throw new Error('Source patch set generation.generator must be t2c/code-change-source-patch-set'); - } -} - -function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { - const actual = Object.keys(value).sort(); - const wanted = [...expected].sort(); - if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { - throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); - } -} - -function assertSourcePatchIds(value: unknown, pattern: RegExp, name: string): asserts value is string[] { - if (!Array.isArray(value) || value.length === 0 - || value.some((item) => typeof item !== 'string' || !pattern.test(item))) { - throw new Error(`Source patch ${name} must be a non-empty array of valid IDs`); - } - if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); -} - -function assertSourcePatchStrings(value: unknown, name: string, emptyAllowed: boolean): asserts value is string[] { - if (!Array.isArray(value) || (!emptyAllowed && value.length === 0) - || value.some((item) => typeof item !== 'string' || !item.trim())) { - throw new Error(`Source patch ${name} must contain ${emptyAllowed ? 'only ' : ''}non-blank strings`); - } - if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); -} - -function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { - const left = [...new Set(actual)].sort(); - const right = [...new Set(expected)].sort(); - if (left.length !== right.length || left.some((item, index) => item !== right[index])) { - throw new Error(`Source patch ${name} do not match the plan`); - } -} - -function instructionFor(change: CodeChangeFile, plan: CodeChangePlan): string { - const symbols = change.symbols.length - ? ` Focus on symbols: ${change.symbols.join(', ')}.` - : ''; - const criteria = plan.acceptanceCriteria.length - ? ` Acceptance: ${plan.acceptanceCriteria.join(' ')}` - : ''; - return `${change.action} \`${change.path}\`. ${change.rationale.trim()}.${symbols}${criteria}`.replace(/\s+/g, ' ').trim(); -} - -/** - * Validate a single-file unified diff body. - * Accepts optional `--- a/path` / `+++ b/path` headers and rejects foreign paths. - */ -function normalizeUnifiedDiff(diff: string, expectedPath: string): string { - const normalized = diff.replace(/\r\n/g, '\n'); - if (!normalized.trim()) throw new Error(`Unified diff for ${expectedPath} is empty`); - if (normalized.includes('\0')) throw new Error(`Unified diff for ${expectedPath} contains NUL bytes`); - // Lightweight secret heuristic — refuse obvious credential dumps in proposed diffs. - if (/(?:api[_-]?key|secret|password|private[_-]?key)\s*[:=]\s*['"]?[^'"\s]{8,}/i.test(normalized)) { - throw new Error(`Unified diff for ${expectedPath} appears to contain a secret assignment`); - } - const headers = [...normalized.matchAll(/^(?:---|\+\+\+)\s+(?:[ab]\/)?(.+)$/gm)].map((match) => match[1]!.trim()); - for (const header of headers) { - if (header === '/dev/null') continue; - const path = header.replace(/\\/g, '/'); - if (path.startsWith('/') || path.split('/').includes('..')) { - throw new Error(`Unified diff for ${expectedPath} uses a non-repository path header: ${path}`); - } - if (path !== expectedPath && path !== `a/${expectedPath}` && path !== `b/${expectedPath}`) { - // Headers may include timestamps after a tab; strip them. - const bare = path.split('\t')[0] ?? path; - const stripped = bare.replace(/^[ab]\//, ''); - if (stripped !== expectedPath) { - throw new Error(`Unified diff for ${expectedPath} references foreign path: ${path}`); - } - } - } - return normalized; -} - -export interface ApplyCodeChangeSourcePatchOptions { - root: string; - patch: CodeChangeSourcePatch; - approval: CodeChangeSourcePatchApproval; - receiptPath: string; - now?: Date; -} - -export interface ApplyCodeChangeSourcePatchResult { - applied: boolean; - idempotent: boolean; - receipt: CodeChangeSourceApplyReceipt; -} - -/** - * Apply a fully-diffed source patch after explicit hash approval. - * - * Instruction-only edits (null unifiedDiff) are rejected. Paths must stay - * relative and inside `root`. Re-applying with an existing matching receipt is - * idempotent. - */ -export async function applyCodeChangeSourcePatch( - options: ApplyCodeChangeSourcePatchOptions, -): Promise { - assertCodeChangeSourcePatch(options.patch); - if (!options.approval?.actor?.trim()) throw new Error('Explicit source patch approval actor is required'); - if (options.approval.patchHash !== options.patch.patchHash) { - throw new Error('Source patch approval hash does not match the patch'); - } - for (const edit of options.patch.edits) { - if (edit.unifiedDiff === null) { - throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); - } - } - - const root = path.resolve(options.root); - const receiptPath = await assertPathWithinRoot(root, path.resolve(options.receiptPath)); - const lockPath = `${receiptPath}.t2c-apply.lock`; - await ensureDir(path.dirname(receiptPath)); - let lock: Awaited> | null = null; - try { - lock = await fs.open(lockPath, 'wx'); - } catch (error) { - if ((error as NodeJS.ErrnoException).code === 'EEXIST') { - throw new Error('Another source patch apply operation is in progress'); - } - throw error; - } - - try { - if (await pathExists(receiptPath)) { - const existing = await readJson(receiptPath, 1024 * 1024); - await assertExistingSourceReceipt(existing, options.patch, root); - return { applied: false, idempotent: true, receipt: existing }; - } - - const prepared: PreparedSourceEdit[] = []; - for (const edit of options.patch.edits) { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - if (absolute === receiptPath) { - throw new Error(`Source patch target collides with its receipt path: ${relative}`); - } - const exists = await pathExists(absolute); - if (exists && (await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Refusing to apply through a symlink: ${relative}`); - } - if (edit.action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); - if (edit.action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); - if (edit.action === 'modify' && !exists) { - const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(edit.unifiedDiff!) - || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(edit.unifiedDiff!); - if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); - } - const before = exists ? await readText(absolute, 16 * 1024 * 1024) : ''; - const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, relative); - if (edit.action === 'delete' && after !== '') { - throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); - } - prepared.push({ relative, absolute, action: edit.action, before, after, existed: exists }); - } - - const changed: PreparedSourceEdit[] = []; - try { - for (const edit of prepared) { - if (edit.action === 'delete') await fs.unlink(edit.absolute); - else await atomicWriteRaw(edit.absolute, edit.after); - changed.push(edit); - } - const now = (options.now ?? new Date()).toISOString(); - const fileHashesAfter = Object.fromEntries(prepared - .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) - .sort(([left], [right]) => left.localeCompare(right))); - const receipt: CodeChangeSourceApplyReceipt = { - schemaVersion: 't2c.code-change-source-apply-receipt/v1', - patchId: options.patch.id, - patchHash: options.patch.patchHash, - planId: options.patch.planId, - approvedBy: options.approval.actor.trim(), - approvedAt: now, - appliedAt: now, - appliedPaths: prepared.map((edit) => edit.relative).sort(), - fileHashesAfter, - generation: deterministicGeneration(now, 't2c/code-change-source-apply'), - }; - assertSourceApplyReceipt(receipt, options.patch); - // The receipt is part of the transaction: without it a retry could apply - // the same approved patch again. Roll files back if persisting it fails. - await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); - return { applied: true, idempotent: false, receipt }; - } catch (error) { - const rollbackErrors: string[] = []; - for (const edit of [...changed].reverse()) { - try { - if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); - else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { - if (failure.code !== 'ENOENT') throw failure; - }); - } catch (rollbackError) { - rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); - } - } - if (rollbackErrors.length) { - throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); - } - throw error; - } - } finally { - await lock.close(); - await fs.unlink(lockPath).catch(() => undefined); - } -} - -interface PreparedSourceEdit { - relative: string; - absolute: string; - action: CodeChangeFileAction; - before: string; - after: string; - existed: boolean; -} - -async function assertExistingSourceReceipt( - receipt: CodeChangeSourceApplyReceipt, - patch: CodeChangeSourcePatch, - root: string, -): Promise { - try { - assertSourceApplyReceipt(receipt, patch); - } catch { - throw new Error('A different or invalid source patch receipt already exists at the receipt path'); - } - for (const edit of patch.edits) { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - const exists = await pathExists(absolute); - if (edit.action === 'delete') { - if (exists) throw new Error(`Applied source patch state changed after receipt: ${relative}`); - continue; - } - if (!exists || (await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Applied source patch state changed after receipt: ${relative}`); - } - const current = await readText(absolute, 16 * 1024 * 1024); - if (receipt.fileHashesAfter[relative] !== sha256(current)) { - throw new Error(`Applied source patch state changed after receipt: ${relative}`); - } - } -} - -function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: CodeChangeSourcePatch): void { - exactSourcePatchKeys(receipt as unknown as Record, [ - 'schemaVersion', 'patchId', 'patchHash', 'planId', 'approvedBy', 'approvedAt', - 'appliedAt', 'appliedPaths', 'fileHashesAfter', 'generation', - ], 'Code change source apply receipt'); - if (receipt.schemaVersion !== 't2c.code-change-source-apply-receipt/v1' - || receipt.patchId !== patch.id || receipt.patchHash !== patch.patchHash || receipt.planId !== patch.planId) { - throw new Error('Code change source apply receipt does not match its patch'); - } - if (!receipt.approvedBy.trim()) throw new Error('Code change source apply receipt approvedBy is required'); - if (!Number.isFinite(Date.parse(receipt.approvedAt)) || !Number.isFinite(Date.parse(receipt.appliedAt))) { - throw new Error('Code change source apply receipt timestamps must be ISO date-times'); - } - const expectedPaths = patch.edits.map((edit) => edit.path).sort(); - exactSourcePatchSet(receipt.appliedPaths, expectedPaths, 'receipt appliedPaths'); - const hashPaths = Object.keys(receipt.fileHashesAfter).sort(); - exactSourcePatchSet(hashPaths, expectedPaths, 'receipt fileHashesAfter paths'); - if (Object.values(receipt.fileHashesAfter).some((value) => !/^[a-f0-9]{64}$/.test(value))) { - throw new Error('Code change source apply receipt file hashes must be SHA-256'); - } - assertGroundedGenerationMetadata(receipt.generation, 'Code change source apply receipt generation'); - if (receipt.generation.generatedAt !== receipt.appliedAt - || receipt.generation.generator !== 't2c/code-change-source-apply') { - throw new Error('Code change source apply receipt generation does not match the apply operation'); - } -} - -async function atomicWriteRaw(target: string, content: string): Promise { - await ensureDir(path.dirname(target)); - const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`; - try { - await fs.writeFile(temporary, content, 'utf8'); - await fs.rename(temporary, target); - } finally { - await fs.unlink(temporary).catch(() => undefined); - } -} - -/** - * Apply a single-file unified diff to a text buffer. - * Supports standard hunks with space/+/− prefixes. Throws on context mismatch. - */ -export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: string): string { - const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); - const baseLines = splitKeep(base); - const diffLines = normalizedDiff.split('\n'); - // Drop trailing empty element only if the original split introduced it - // without a final newline — normalize by working on lines as split. - const hunks: Array<{ oldStart: number; oldCount: number; newCount: number; lines: string[] }> = []; - let current: { oldStart: number; oldCount: number; newCount: number; lines: string[] } | null = null; - for (const line of diffLines) { - if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { - continue; - } - const header = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); - if (header) { - if (current) hunks.push(current); - current = { - oldStart: Number(header[1]), - oldCount: header[2] === undefined ? 1 : Number(header[2]), - newCount: header[4] === undefined ? 1 : Number(header[4]), - lines: [], - }; - continue; - } - if (!current) { - if (line === '') continue; - throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); - } - // Blank lines without a unified-diff prefix separate hunks in some emitters. - if (line === '') continue; - current.lines.push(line); - } - if (current) hunks.push(current); - if (!hunks.length) throw new Error(`Unified diff for ${expectedPath} contains no hunks`); - - let cursor = 0; - const output: string[] = []; - for (const hunk of hunks) { - const oldIndex = Math.max(0, hunk.oldStart - 1); - if (oldIndex < cursor) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); - const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; - const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; - if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { - throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); - } - while (cursor < oldIndex) { - if (cursor >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); - output.push(baseLines[cursor]!); - cursor += 1; - } - for (const line of hunk.lines) { - if (line.startsWith('\\')) continue; // "\ No newline at end of file" - const mark = line[0]; - const body = line.slice(1); - if (mark === ' ') { - if (baseLines[cursor] !== body) { - throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor + 1}`); - } - output.push(baseLines[cursor]!); - cursor += 1; - } else if (mark === '-') { - if (baseLines[cursor] !== body) { - throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor + 1}`); - } - cursor += 1; - } else if (mark === '+') { - output.push(body); - } else if (line === '') { - // empty line inside hunk without prefix is invalid in strict unified diffs - throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); - } else { - throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); - } - } - } - while (cursor < baseLines.length) { - output.push(baseLines[cursor]!); - cursor += 1; - } - // Reconstruct text. Files without a trailing newline end without an empty last segment. - if (base.endsWith('\n') || output.length === 0) return `${output.join('\n')}${output.length ? '\n' : ''}`; - return output.join('\n'); -} - -function splitKeep(text: string): string[] { - if (text === '') return []; - const lines = text.split('\n'); - if (text.endsWith('\n')) lines.pop(); - return lines; -} +export * from './code-change-plan/index.js'; diff --git a/src/synthesis/code-change-plan/implementation.ts b/src/synthesis/code-change-plan/implementation.ts new file mode 100644 index 0000000..b5eabc6 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation.ts @@ -0,0 +1,1310 @@ +import { randomUUID } from 'node:crypto'; +import { existsSync, promises as fs } from 'node:fs'; +import path from 'node:path'; +import { + createCodeChangePlanHash, + createCodeChangePlanId, + createCodeChangeSourcePatchHash, + createCodeChangeSourcePatchId, + sha256, + stableStringify, +} from '../../core/id.js'; +import { ensureDir, pathExists, readJson, readText } from '../../core/io.js'; +import { assertPathWithinRoot } from '../../core/security.js'; +import { + assertCodeChangeAcceptance, + assertCodeChangePlanForAcceptance, + assertCodeChangePlans, + assertCodeChangePlansForReview, + assertConclusions, + assertGroundedGenerationMetadata, + assertIntentGraph, +} from '../../core/schema.js'; +import type { + CodeChangeAcceptance, + CodeChangeCloseResult, + CodeChangeFile, + CodeChangeFileAction, + CodeChangePlan, + CodeChangeReviewPatch, + CodeChangeSourceApplyReceipt, + CodeChangeSourceEdit, + CodeChangeSourcePatch, + CodeChangeSourcePatchApproval, + CodeChangeSourcePatchSet, + Conclusion, + Diagnostic, + DiagnosticReport, + GroundedGenerationMetadata, + IntentGraph, + IntentRecord, + IntentTarget, + TodoPriority, + TodoProposal, +} from '../../core/types.js'; +import { normalizeTarget } from '../../core/target.js'; +import { diagnoseGraph } from '../../graph/diagnostics.js'; +import { T2C_VERSION } from '../../version.js'; +import { isUsefulCodeChangePath } from '../code-change-path.js'; + +export { isUsefulCodeChangePath } from '../code-change-path.js'; + +const IMPLEMENTATION_DIAGNOSTIC_CODES = new Set([ + 'PLANNED_NOT_IMPLEMENTED', + 'CHANGELOG_WITHOUT_IMPLEMENTATION', +]); + +export interface ProposeCodeChangePlansOptions { + graph: IntentGraph; + diagnostics: DiagnosticReport; + conclusions?: Conclusion[]; + proposals?: TodoProposal[]; + generatedAt?: string; + /** Limit how many plans are materialised from open diagnostics. Default 50. */ + maxPlans?: number; + /** + * Repository probe used to tell `create` from `modify`. Injected rather than + * read here so plan synthesis stays pure and deterministic; when omitted the + * plan cannot know and keeps the conservative `modify`. + * See {@link createRepositoryPathProbe}. + */ + pathExists?: (relativePath: string) => boolean; +} + +export interface ProposeCodeChangePlansResult { + schemaVersion: 't2c.code-change-plan-set/v1'; + plans: CodeChangePlan[]; + generatedAt: string; + graphFingerprint: string; + sourceDiagnosticCount: number; + generation: GroundedGenerationMetadata; +} + +export interface EvaluateCodeChangeAcceptanceOptions { + plan: CodeChangePlan; + /** Graph and diagnostics that the plan was grounded on. */ + before: { graph: IntentGraph; diagnostics: DiagnosticReport }; + /** Graph after an attempted implementation (re-extracted and re-linked). */ + afterGraph: IntentGraph; + /** Optional precomputed after diagnostics; derived when omitted. */ + afterDiagnostics?: DiagnosticReport; + evaluatedAt?: string; +} + +export interface CloseCodeChangesOptions { + plans: CodeChangePlan[]; + before: { graph: IntentGraph; diagnostics: DiagnosticReport }; + afterGraph: IntentGraph; + afterDiagnostics?: DiagnosticReport; + evaluatedAt?: string; +} + +/** + * Build grounded code-change plans from open implementation diagnostics. + * + * One plan is produced per diagnostic that can name at least one target path + * (from the diagnostic's records or a matching TODO proposal). The runtime + * never invents file paths and never marks work complete. + */ +export function proposeCodeChangePlans(options: ProposeCodeChangePlansOptions): ProposeCodeChangePlansResult { + assertIntentGraph(options.graph); + assertConclusions([], { graph: options.graph, diagnostics: options.diagnostics }); + const generatedAt = options.generatedAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(generatedAt))) throw new Error('generatedAt must be an ISO date-time'); + const maxPlans = options.maxPlans ?? 50; + if (!Number.isInteger(maxPlans) || maxPlans < 1 || maxPlans > 500) { + throw new Error('maxPlans must be an integer between 1 and 500'); + } + const conclusions = options.conclusions ?? []; + const proposals = options.proposals ?? []; + const recordsById = new Map(options.graph.records.map((record) => [record.id, record])); + const proposalsByDiagnostic = indexProposalsByDiagnostic(proposals); + const conclusionsByDiagnostic = indexConclusionsByDiagnostic(conclusions); + + const candidates = options.diagnostics.diagnostics + .filter((diagnostic) => IMPLEMENTATION_DIAGNOSTIC_CODES.has(diagnostic.code)) + // A released CHANGELOG entry is an audit signal; an open TODO is an + // explicit request for work. With a bounded plan set, sorting only by + // content id allowed historical release notes to consume every slot and + // hide the repository's actual backlog from autonomous executors. + .sort((left, right) => implementationDiagnosticRank(left) + - implementationDiagnosticRank(right) || left.id.localeCompare(right.id)); + + const plans: CodeChangePlan[] = []; + for (const diagnostic of candidates) { + if (plans.length >= maxPlans) break; + const relatedRecords = diagnostic.recordIds + .map((id) => recordsById.get(id)) + .filter((record): record is IntentRecord => Boolean(record)); + if (!relatedRecords.length) continue; + + const matchingProposals = proposalsByDiagnostic.get(diagnostic.id) ?? []; + const matchingConclusions = conclusionsByDiagnostic.get(diagnostic.id) ?? []; + const target = collectTarget(relatedRecords, matchingProposals); + const changes = buildChanges(target, relatedRecords, diagnostic, options.pathExists); + if (!changes.length) continue; + + const generation = deterministicGeneration(generatedAt, 't2c/code-change-plan'); + const evidence = { + graphFingerprint: options.graph.fingerprint, + recordIds: uniqueSorted(relatedRecords.map((record) => record.id)), + diagnosticIds: [diagnostic.id], + conclusionIds: uniqueSorted(matchingConclusions.map((item) => item.id)), + proposalIds: uniqueSorted(matchingProposals.map((item) => item.id)), + }; + const semantic = { + title: titleFor(diagnostic, relatedRecords), + description: descriptionFor(diagnostic, relatedRecords, target), + priority: priorityFor(diagnostic), + target, + acceptanceCriteria: acceptanceCriteriaFor(diagnostic, target), + changes, + risk: riskFor(diagnostic, changes), + rollback: rollbackFor(changes), + evidence, + }; + const planHash = createCodeChangePlanHash(semantic); + const plan: CodeChangePlan = { + schemaVersion: 't2c.code-change-plan/v1', + id: createCodeChangePlanId(semantic), + planHash, + status: 'proposed', + createdAt: generatedAt, + ...semantic, + confidence: confidenceFor(diagnostic, matchingProposals), + generation, + }; + plans.push(plan); + } + + assertCodeChangePlans(plans, { + graph: options.graph, + diagnostics: options.diagnostics, + conclusions, + proposals, + }); + + return { + schemaVersion: 't2c.code-change-plan-set/v1', + plans, + generatedAt, + graphFingerprint: options.graph.fingerprint, + sourceDiagnosticCount: candidates.length, + generation: deterministicGeneration(generatedAt, 't2c/code-change-plan-set'), + }; +} + +/** + * Build the repository probe for {@link ProposeCodeChangePlansOptions.pathExists}. + * + * A path that escapes the analysed root is reported as existing, so an unusual + * value degrades to today's conservative `modify` instead of instructing an + * executor to create a file outside the repository. + */ +export function createRepositoryPathProbe(root: string): (relativePath: string) => boolean { + const base = path.resolve(root); + return (relativePath: string): boolean => { + const absolute = path.resolve(base, relativePath); + if (absolute !== base && !absolute.startsWith(base + path.sep)) return true; + return existsSync(absolute); + }; +} + +function implementationDiagnosticRank(diagnostic: Diagnostic): number { + return diagnostic.code === 'PLANNED_NOT_IMPLEMENTED' ? 0 : 1; +} + +/** + * Re-diagnose an after graph and decide whether the plan's targeted + * diagnostics cleared without introducing new blocking findings. + * + * Diagnostic IDs are content-bound, so a still-open finding on the same + * records keeps the same ID. Cleared findings simply disappear. + */ +export function evaluateCodeChangeAcceptance( + options: EvaluateCodeChangeAcceptanceOptions, +): CodeChangeAcceptance { + assertIntentGraph(options.before.graph); + assertIntentGraph(options.afterGraph); + assertConclusions([], options.before); + assertCodeChangePlanForAcceptance(options.plan, options.before); + + const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph( + options.afterGraph, + options.evaluatedAt ?? new Date().toISOString(), + ); + assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); + + const beforeIds = new Set(options.before.diagnostics.diagnostics.map((item) => item.id)); + const afterById = new Map(afterDiagnostics.diagnostics.map((item) => [item.id, item])); + const afterIds = [...afterById.keys()].sort(); + const targeted = options.plan.evidence.diagnosticIds; + const clearedDiagnosticIds = targeted.filter((id) => !afterById.has(id)).sort(); + const remainingDiagnosticIds = targeted.filter((id) => afterById.has(id)).sort(); + const newBlockingDiagnosticIds = afterDiagnostics.diagnostics + .filter((item) => item.severity === 'blocking' && !beforeIds.has(item.id)) + .map((item) => item.id) + .sort(); + + const reasons: string[] = []; + if (remainingDiagnosticIds.length) { + reasons.push( + `Targeted diagnostics still open: ${remainingDiagnosticIds.join(', ')}.`, + ); + } else { + reasons.push('All targeted diagnostics cleared after re-analysis.'); + } + if (newBlockingDiagnosticIds.length) { + reasons.push( + `New blocking diagnostics appeared: ${newBlockingDiagnosticIds.join(', ')}.`, + ); + } else { + reasons.push('No new blocking diagnostics appeared.'); + } + + const accepted = remainingDiagnosticIds.length === 0 && newBlockingDiagnosticIds.length === 0; + if (accepted) { + reasons.push('Acceptance gate passed; human approval is still required before DONE.'); + } else { + reasons.push('Acceptance gate failed.'); + } + + const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); + const acceptance: CodeChangeAcceptance = { + schemaVersion: 't2c.code-change-acceptance/v1', + planId: options.plan.id, + planHash: options.plan.planHash, + beforeGraphFingerprint: options.before.graph.fingerprint, + afterGraphFingerprint: options.afterGraph.fingerprint, + beforeDiagnosticIds: [...beforeIds].sort(), + afterDiagnosticIds: afterIds, + clearedDiagnosticIds, + remainingDiagnosticIds, + newBlockingDiagnosticIds, + accepted, + reasons: uniqueSorted(reasons), + evaluatedAt, + generation: deterministicGeneration(evaluatedAt, 't2c/code-change-acceptance'), + }; + assertCodeChangeAcceptance(acceptance, { + plan: options.plan, + before: options.before, + after: { graph: options.afterGraph, diagnostics: afterDiagnostics }, + }); + return acceptance; +} + +/** Evaluate a plan set under one timestamp without applying changes or marking DONE. */ +export function closeCodeChanges(options: CloseCodeChangesOptions): CodeChangeCloseResult { + const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(evaluatedAt))) throw new Error('evaluatedAt must be an ISO date-time'); + assertIntentGraph(options.before.graph); + assertIntentGraph(options.afterGraph); + assertConclusions([], options.before); + const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); + assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); + const planIds = options.plans.map((plan) => plan.id); + if (new Set(planIds).size !== planIds.length) throw new Error('Code change close plans must have unique ids'); + + const acceptances = options.plans.map((plan) => evaluateCodeChangeAcceptance({ + plan, + before: options.before, + afterGraph: options.afterGraph, + afterDiagnostics, + evaluatedAt, + })); + const acceptedCount = acceptances.filter((item) => item.accepted).length; + return { + schemaVersion: 't2c.code-change-close-result/v1', + evaluatedAt, + graphFingerprintBefore: options.before.graph.fingerprint, + graphFingerprintAfter: options.afterGraph.fingerprint, + planCount: options.plans.length, + acceptedCount, + rejectedCount: options.plans.length - acceptedCount, + allAccepted: options.plans.length > 0 && acceptedCount === options.plans.length, + acceptances, + generation: deterministicGeneration(evaluatedAt, 't2c/code-change-close-result'), + }; +} + +function indexProposalsByDiagnostic(proposals: TodoProposal[]): Map { + const index = new Map(); + for (const proposal of proposals) { + for (const diagnosticId of proposal.diagnosticIds) { + const list = index.get(diagnosticId) ?? []; + list.push(proposal); + index.set(diagnosticId, list); + } + } + return index; +} + +function indexConclusionsByDiagnostic(conclusions: Conclusion[]): Map { + const index = new Map(); + for (const conclusion of conclusions) { + for (const diagnosticId of conclusion.diagnosticIds) { + const list = index.get(diagnosticId) ?? []; + list.push(conclusion); + index.set(diagnosticId, list); + } + } + return index; +} + +function collectTarget(records: IntentRecord[], proposals: TodoProposal[]): IntentTarget { + const paths = new Set(); + const symbols = new Set(); + const tickets = new Set(); + const versions = new Set(); + for (const record of records) { + for (const path of record.statement.target.paths) paths.add(path); + for (const symbol of record.statement.target.symbols) symbols.add(symbol); + for (const ticket of record.statement.target.tickets) tickets.add(ticket); + for (const version of record.statement.target.versions) versions.add(version); + } + for (const proposal of proposals) { + for (const path of proposal.target.paths) paths.add(path); + for (const symbol of proposal.target.symbols) symbols.add(symbol); + for (const ticket of proposal.target.tickets) tickets.add(ticket); + for (const version of proposal.target.versions) versions.add(version); + } + return normalizeTarget({ + paths: [...paths].filter(isUsefulCodeChangePath), + symbols: [...symbols], + tickets: [...tickets], + versions: [...versions], + }); +} + +function buildChanges( + target: IntentTarget, + records: IntentRecord[], + diagnostic: Diagnostic, + pathExistsInRepository?: (relativePath: string) => boolean, +): CodeChangeFile[] { + const symbols = uniqueSorted(target.symbols); + // The diagnostic explains why evidence is missing; it is not necessarily an + // implementation instruction. Reusing its generic remediation here produced + // contradictory tickets such as “replace magic number 50” followed by + // “provide a missing function”. The lossless source declaration is the work + // to perform, while the diagnostic remains available in the plan evidence. + const sourceIntents = uniqueSorted(records.map((record) => record.statement.text)); + const rationale = sourceIntents.length + ? `Implement the source intent: ${sourceIntents.join(' | ')}` + : diagnostic.detail || `Address ${diagnostic.code}.`; + + if (target.paths.length) { + const changes: CodeChangeFile[] = []; + for (const declared of uniqueSorted(target.paths)) { + const normalized = declared.replace(/\\/g, '/'); + const exists = pathExistsInRepository?.(normalized); + // A path without a directory is shorthand that never said *where* the + // file belongs. Creating one at the repository root invents a location: + // measured across seven foreign repositories this proposed `__init__.py` + // beside 22 real ones, `pyproject.toml` beside 32, and files named after + // prose fragments such as `it.md`. The diagnostic still reports the gap; + // only the invented instruction is withheld. + if (exists === false && !normalized.includes('/')) continue; + // Documentation routinely plans files that do not exist yet (a target + // repository's `docs/ARCHITECTURE.md`). Telling an executor to modify + // them is an instruction it cannot follow, and `apply-source-patch` + // rejects a create edit whose target already exists, so the two actions + // must not be guessed. + const action: CodeChangeFileAction = exists === false ? 'create' : 'modify'; + changes.push({ path: normalized, action, symbols, rationale }); + } + return changes; + } + + // Without a path the plan cannot safely name a source file. Skip rather than invent. + return []; +} + +function titleFor(diagnostic: Diagnostic, records: IntentRecord[]): string { + const record = records[0]; + const object = record?.statement.object?.trim(); + // `inferObject` removes the verb selected by the action classifier. In a + // compound sentence a later high-precedence verb can win (`verify` before + // `implement`), leaving the original leading imperative inside `object` and + // a broken fragment after the removed verb. The source statement is the + // lossless title whenever that mismatch is visible. + if (object && startsWithImperative(object) && record?.statement.text.trim()) { + return record.statement.text.trim().replace(/[.!?]+$/, ''); + } + if (object) return `Implement ${object}`; + return diagnostic.title.trim() || `Resolve ${diagnostic.code}`; +} + +function startsWithImperative(value: string): boolean { + return /^(?:add|build|change|configure|create|delete|document|fix|implement|preserve|refactor|remove|test|update|validate|verify)\b/i.test(value) + || /^(?:dodać|dodac|naprawić|naprawic|przetestować|przetestowac|usunąć|usunac|utworzyć|utworzyc|wdrożyć|wdrozyc|zmienić|zmienic|zweryfikować|zweryfikowac)\b/i.test(value); +} + +function descriptionFor( + diagnostic: Diagnostic, + records: IntentRecord[], + target: IntentTarget, +): string { + const parts = [ + diagnostic.detail.trim(), + records[0] ? `Source intent: ${records[0].statement.text.trim()}` : '', + target.paths.length ? `Paths: ${target.paths.join(', ')}.` : '', + target.symbols.length ? `Symbols: ${target.symbols.join(', ')}.` : '', + target.tickets.length ? `Tickets: ${target.tickets.join(', ')}.` : '', + ].filter(Boolean); + return parts.join(' '); +} + +function acceptanceCriteriaFor(diagnostic: Diagnostic, target: IntentTarget): string[] { + const criteria = [ + `Re-run todo2code link+diagnose and clear diagnostic ${diagnostic.id} (${diagnostic.code}).`, + 'Do not introduce new blocking diagnostics.', + ]; + if (target.paths.length) { + criteria.push(`Touch only the declared paths: ${uniqueSorted(target.paths).join(', ')}.`); + } + if (target.symbols.length) { + criteria.push(`Provide AST evidence for symbols: ${uniqueSorted(target.symbols).join(', ')}.`); + } + return uniqueSorted(criteria); +} + +function priorityFor(diagnostic: Diagnostic): TodoPriority { + if (diagnostic.severity === 'blocking') return 'P0'; + if (diagnostic.severity === 'review_required') return 'P1'; + if (diagnostic.severity === 'warning') return 'P2'; + return 'P3'; +} + +function confidenceFor(diagnostic: Diagnostic, proposals: TodoProposal[]): number { + if (proposals.length) { + return Math.min(0.92, Math.max(...proposals.map((item) => item.confidence))); + } + if (diagnostic.severity === 'blocking') return 0.88; + if (diagnostic.severity === 'review_required') return 0.8; + return 0.72; +} + +function riskFor(diagnostic: Diagnostic, changes: CodeChangeFile[]): CodeChangePlan['risk'] { + const level = diagnostic.severity === 'blocking' ? 'high' + : diagnostic.severity === 'review_required' ? 'medium' + : 'low'; + const reasons = [ + `Derived from ${diagnostic.severity} diagnostic ${diagnostic.id}.`, + `Touches ${changes.length} declared ${changes.length === 1 ? 'path' : 'paths'}.`, + ]; + return { level, reasons: uniqueSorted(reasons) }; +} + +function rollbackFor(changes: CodeChangeFile[]): string { + return `Revert the proposed changes to ${uniqueSorted(changes.map((item) => item.path)).join(', ')} and re-run todo2code diagnostics.`; +} + +function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { + return { + generator, + generatorVersion: '1', + runtimeVersion: T2C_VERSION, + generatedAt, + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + model: null, + provider: null, + responseId: null, + configurationFingerprint: sha256(stableStringify({ + generator, + generatorVersion: '1', + codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), + })), + reason: null, + }; +} + +function uniqueSorted(values: string[]): string[] { + return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); +} + +export interface CreateCodeChangeReviewOptions { + plans: CodeChangePlan[]; + graphFingerprint: string; + createdAt?: string; +} + +export interface CreatedCodeChangeReview { + markdown: string; + artifact: CodeChangeReviewPatch; +} + +/** + * Render a stable, reviewable Markdown brief for grounded code-change plans. + * + * This is not a source patch and is never applied to the tree. It exists so + * humans and agents share one hash-bound artifact that lists exact paths, + * acceptance criteria, evidence IDs, risk and rollback instructions. + */ +export function createCodeChangeReviewPatch( + options: CreateCodeChangeReviewOptions, +): CreatedCodeChangeReview { + if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { + throw new Error('graphFingerprint must be a SHA-256 hex digest'); + } + assertCodeChangePlansForReview(options.plans, options.graphFingerprint); + const plans = [...options.plans].sort((left, right) => + priorityRank(left.priority) - priorityRank(right.priority) || left.id.localeCompare(right.id)); + const createdAt = options.createdAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); + const markdown = renderCodeChangeReviewMarkdown(plans, options.graphFingerprint); + const artifact: CodeChangeReviewPatch = { + schemaVersion: 't2c.code-change-review/v1', + createdAt, + graphFingerprint: options.graphFingerprint, + planIds: plans.map((plan) => plan.id), + planHashes: plans.map((plan) => plan.planHash), + renderedPatchHash: sha256(markdown), + generation: deterministicGeneration(createdAt, 't2c/code-change-review'), + }; + assertCodeChangeReviewPatch(artifact); + return { markdown, artifact }; +} + +export function renderCodeChangeReviewMarkdown( + plans: CodeChangePlan[], + graphFingerprint: string, +): string { + const lines = [ + '', + '# todo2code proposed code changes', + '', + 'This document is a grounded **review brief**, not an auto-applied source patch.', + 'Implement the listed paths in a normal branch, re-run the pipeline, then', + '`t2c evaluate-code-change`. Acceptance still requires human/CI approval before DONE.', + '', + `Graph fingerprint: \`${graphFingerprint}\``, + '', + ]; + if (!plans.length) { + lines.push('_No grounded code-change plans. Open diagnostics either cleared or lack repository paths._', ''); + return lines.join('\n'); + } + let currentPriority: CodeChangePlan['priority'] | null = null; + for (const plan of plans) { + if (plan.priority !== currentPriority) { + if (currentPriority !== null) lines.push(''); + currentPriority = plan.priority; + lines.push(`## ${plan.priority}`, ''); + } + lines.push(`### ${inline(plan.title)} (\`${plan.id}\`)`, ''); + lines.push(`- Plan hash: \`${plan.planHash}\``); + lines.push(`- Risk: **${plan.risk.level}** — ${plan.risk.reasons.map(inline).join('; ')}`); + lines.push(`- Confidence: ${plan.confidence.toFixed(2)}`); + lines.push(`- Description: ${inline(plan.description)}`); + lines.push('- Changes:'); + for (const change of plan.changes) { + const symbols = change.symbols.length ? ` symbols: ${change.symbols.map((item) => `\`${item}\``).join(', ')}` : ''; + lines.push(` - \`${change.action}\` \`${change.path}\`${symbols}`); + lines.push(` - ${inline(change.rationale)}`); + } + lines.push('- Acceptance criteria:'); + for (const criterion of plan.acceptanceCriteria) lines.push(` - [ ] ${inline(criterion)}`); + lines.push(`- Diagnostics: ${renderIds(plan.evidence.diagnosticIds)}`); + lines.push(`- Evidence records: ${renderIds(plan.evidence.recordIds)}`); + if (plan.evidence.proposalIds.length) lines.push(`- TODO proposals: ${renderIds(plan.evidence.proposalIds)}`); + if (plan.evidence.conclusionIds.length) lines.push(`- Conclusions: ${renderIds(plan.evidence.conclusionIds)}`); + lines.push(`- Rollback: ${inline(plan.rollback)}`); + lines.push(''); + } + lines.push('## After implementation', ''); + lines.push('1. Re-run `t2c pipeline` (or extract + link + diagnose) on the changed tree.'); + lines.push('2. `t2c evaluate-code-change --before-graph … --after-graph … --out acceptance.json`.'); + lines.push('3. Require `accepted=true` and human/CI review before marking work DONE.'); + lines.push(''); + return lines.join('\n'); +} + +export function assertCodeChangeReviewPatch(value: unknown): asserts value is CodeChangeReviewPatch { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change review patch must be an object'); + } + const artifact = value as Record; + const required = [ + 'schemaVersion', 'createdAt', 'graphFingerprint', 'planIds', 'planHashes', + 'renderedPatchHash', 'generation', + ]; + for (const key of required) { + if (!(key in artifact)) throw new Error(`Code change review patch is missing: ${key}`); + } + if (artifact.schemaVersion !== 't2c.code-change-review/v1') { + throw new Error('Unsupported code change review schemaVersion'); + } + if (typeof artifact.createdAt !== 'string' || Number.isNaN(Date.parse(artifact.createdAt))) { + throw new Error('Code change review createdAt must be an ISO date-time'); + } + if (typeof artifact.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.graphFingerprint)) { + throw new Error('Code change review graphFingerprint must be SHA-256'); + } + if (typeof artifact.renderedPatchHash !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.renderedPatchHash)) { + throw new Error('Code change review renderedPatchHash must be SHA-256'); + } + if (!Array.isArray(artifact.planIds) || !artifact.planIds.every((id) => typeof id === 'string' && /^CPLAN-[a-f0-9]{20}$/.test(id))) { + throw new Error('Code change review planIds must be CPLAN ids'); + } + if (!Array.isArray(artifact.planHashes) || !artifact.planHashes.every((hash) => typeof hash === 'string' && /^[a-f0-9]{64}$/.test(hash))) { + throw new Error('Code change review planHashes must be SHA-256 digests'); + } + if (artifact.planIds.length !== artifact.planHashes.length) { + throw new Error('Code change review planIds and planHashes must have equal length'); + } + if (new Set(artifact.planIds as string[]).size !== (artifact.planIds as string[]).length) { + throw new Error('Code change review planIds must be unique'); + } + assertGroundedGenerationMetadata(artifact.generation, 'Code change review generation'); + const generation = artifact.generation as GroundedGenerationMetadata; + if (generation.generatedAt !== artifact.createdAt) { + throw new Error('Code change review generation.generatedAt must match createdAt'); + } + if (generation.generator !== 't2c/code-change-review') { + throw new Error('Code change review generation.generator must be t2c/code-change-review'); + } +} + +function priorityRank(priority: TodoPriority): number { + return ({ P0: 0, P1: 1, P2: 2, P3: 3 } as const)[priority]; +} + +function inline(value: string): string { + return value.replace(/\s+/g, ' ').trim(); +} + +function renderIds(ids: string[]): string { + return ids.length ? ids.map((id) => `\`${id}\``).join(', ') : '_none_'; +} + +export interface CreateCodeChangeSourcePatchOptions { + plan: CodeChangePlan; + /** Optional per-path unified diffs keyed by relative repository path. */ + unifiedDiffs?: Record; + createdAt?: string; +} + +/** + * Build a structured source-edit proposal from one grounded code-change plan. + * + * Deterministic by default: each planned file gets an imperative instruction. + * Callers may attach a unified diff per path; the runtime validates path headers + * and rejects traversal / host paths. Nothing is written to the working tree. + */ +export function createCodeChangeSourcePatch( + options: CreateCodeChangeSourcePatchOptions, +): CodeChangeSourcePatch { + const plan = options.plan; + const graphFingerprint = plan?.evidence?.graphFingerprint; + assertCodeChangePlansForReview( + [plan], + typeof graphFingerprint === 'string' ? graphFingerprint : '', + ); + const createdAt = options.createdAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); + const allowed = new Set(plan.target.paths.map((path) => path.replace(/\\/g, '/'))); + const diffs = options.unifiedDiffs ?? {}; + for (const path of Object.keys(diffs)) { + const normalized = path.replace(/\\/g, '/'); + if (!allowed.has(normalized)) { + throw new Error(`Unified diff path ${normalized} is not declared by plan ${plan.id}`); + } + } + const edits: CodeChangeSourceEdit[] = [...plan.changes] + .map((change) => { + const path = change.path.replace(/\\/g, '/'); + if (!allowed.has(path)) { + throw new Error(`Edit path ${path} is not present in plan target.paths`); + } + const rawDiff = diffs[path]; + const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); + return { + path, + action: change.action, + symbols: uniqueSorted(change.symbols), + instruction: instructionFor(change, plan), + unifiedDiff, + }; + }) + .sort((left, right) => left.path.localeCompare(right.path) || left.action.localeCompare(right.action)); + if (!edits.length) throw new Error(`Plan ${plan.id} has no editable paths`); + + const semantic = { + planId: plan.id, + planHash: plan.planHash, + graphFingerprint: plan.evidence.graphFingerprint, + diagnosticIds: uniqueSorted(plan.evidence.diagnosticIds), + recordIds: uniqueSorted(plan.evidence.recordIds), + edits, + acceptanceCriteria: uniqueSorted(plan.acceptanceCriteria), + }; + const patchHash = createCodeChangeSourcePatchHash(semantic); + const patch: CodeChangeSourcePatch = { + schemaVersion: 't2c.code-change-source-patch/v1', + id: createCodeChangeSourcePatchId(semantic), + patchHash, + status: 'proposed', + createdAt, + ...semantic, + generation: deterministicGeneration(createdAt, 't2c/code-change-source-patch'), + }; + assertCodeChangeSourcePatch(patch, plan); + return patch; +} + +export function createCodeChangeSourcePatchSet(options: { + plans: CodeChangePlan[]; + graphFingerprint: string; + unifiedDiffsByPlanId?: Record>; + generatedAt?: string; +}): CodeChangeSourcePatchSet { + if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { + throw new Error('graphFingerprint must be a SHA-256 hex digest'); + } + assertCodeChangePlansForReview(options.plans, options.graphFingerprint); + const generatedAt = options.generatedAt ?? new Date().toISOString(); + const patches = [...options.plans] + .sort((left, right) => left.id.localeCompare(right.id)) + .map((plan) => createCodeChangeSourcePatch({ + plan, + createdAt: generatedAt, + ...(options.unifiedDiffsByPlanId?.[plan.id] + ? { unifiedDiffs: options.unifiedDiffsByPlanId[plan.id] } + : {}), + })); + const result: CodeChangeSourcePatchSet = { + schemaVersion: 't2c.code-change-source-patch-set/v1', + generatedAt, + graphFingerprint: options.graphFingerprint, + patches, + generation: deterministicGeneration(generatedAt, 't2c/code-change-source-patch-set'), + }; + assertCodeChangeSourcePatchSet(result, options.plans); + return result; +} + +export function assertCodeChangeSourcePatch( + value: unknown, + plan?: CodeChangePlan, +): asserts value is CodeChangeSourcePatch { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change source patch must be an object'); + } + const patch = value as CodeChangeSourcePatch; + exactSourcePatchKeys(patch as unknown as Record, [ + 'schemaVersion', 'id', 'patchHash', 'status', 'createdAt', 'planId', 'planHash', + 'graphFingerprint', 'diagnosticIds', 'recordIds', 'edits', 'acceptanceCriteria', 'generation', + ], 'Source patch'); + if (patch.schemaVersion !== 't2c.code-change-source-patch/v1') { + throw new Error('Unsupported code change source patch schemaVersion'); + } + if (typeof patch.id !== 'string' || !/^SPATCH-[a-f0-9]{20}$/.test(patch.id)) { + throw new Error('Source patch id must match SPATCH-<20 hex>'); + } + if (typeof patch.patchHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.patchHash)) { + throw new Error('Source patch patchHash must be SHA-256'); + } + if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); + if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { + throw new Error('Source patch createdAt must be an ISO date-time'); + } + if (typeof patch.planId !== 'string' || !/^CPLAN-[a-f0-9]{20}$/.test(patch.planId)) { + throw new Error('Source patch planId must match CPLAN-<20 hex>'); + } + if (typeof patch.planHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.planHash)) { + throw new Error('Source patch planHash must be SHA-256'); + } + if (typeof patch.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(patch.graphFingerprint)) { + throw new Error('Source patch graphFingerprint must be SHA-256'); + } + if (!Array.isArray(patch.edits) || patch.edits.length === 0) { + throw new Error('Source patch edits must be a non-empty array'); + } + assertSourcePatchIds(patch.diagnosticIds, /^DIAG-[a-f0-9]{20}$/, 'diagnosticIds'); + assertSourcePatchIds(patch.recordIds, /^INT-[A-Z]+-[a-f0-9]{20}$/, 'recordIds'); + assertSourcePatchStrings(patch.acceptanceCriteria, 'acceptanceCriteria', false); + const paths = new Set(); + for (const edit of patch.edits) { + if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); + exactSourcePatchKeys(edit as unknown as Record, [ + 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', + ], 'Source patch edit'); + const path = edit.path?.trim().replace(/\\/g, '/') ?? ''; + if (!path || path.startsWith('/') || path.split('/').includes('..')) { + throw new Error(`Source patch edit path is not a relative repository path: ${path}`); + } + if (!['create', 'modify', 'delete'].includes(edit.action)) { + throw new Error(`Source patch edit action is unsupported: ${String(edit.action)}`); + } + if (typeof edit.instruction !== 'string' || !edit.instruction.trim()) { + throw new Error('Source patch edit instruction must be non-blank'); + } + assertSourcePatchStrings(edit.symbols, `edits[${path}].symbols`, true); + if (edit.unifiedDiff !== null) { + if (typeof edit.unifiedDiff !== 'string') throw new Error('Source patch unifiedDiff must be string or null'); + normalizeUnifiedDiff(edit.unifiedDiff, path); + } + const key = `${path}::${edit.action}`; + if (paths.has(key)) throw new Error(`Duplicate source patch edit for ${path}`); + paths.add(key); + } + const expectedHash = createCodeChangeSourcePatchHash(patch); + if (patch.patchHash !== expectedHash) { + throw new Error(`Source patch patchHash does not match semantic content: expected ${expectedHash}`); + } + if (patch.id !== createCodeChangeSourcePatchId(patch)) { + throw new Error('Source patch id does not match semantic content'); + } + assertGroundedGenerationMetadata(patch.generation, 'Source patch generation'); + if (patch.generation.generatedAt !== patch.createdAt) { + throw new Error('Source patch generation.generatedAt must match createdAt'); + } + if (patch.generation.generator !== 't2c/code-change-source-patch') { + throw new Error('Source patch generation.generator must be t2c/code-change-source-patch'); + } + if (plan) { + if (patch.planId !== plan.id || patch.planHash !== plan.planHash) { + throw new Error('Source patch is not bound to the supplied plan'); + } + if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { + throw new Error('Source patch graphFingerprint does not match the plan'); + } + const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); + const expectedChanges = new Map(plan.changes.map((item) => [ + item.path.replace(/\\/g, '/'), item.action, + ])); + for (const edit of patch.edits) { + const editPath = edit.path.replace(/\\/g, '/'); + if (!allowed.has(editPath)) { + throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); + } + if (expectedChanges.get(editPath) !== edit.action) { + throw new Error(`Source patch action for ${edit.path} does not match the plan`); + } + } + exactSourcePatchSet(patch.edits.map((item) => item.path.replace(/\\/g, '/')), [...expectedChanges.keys()], 'edit paths'); + exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); + exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); + exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); + } +} + +export function assertCodeChangeSourcePatchSet( + value: unknown, + plans?: CodeChangePlan[], +): asserts value is CodeChangeSourcePatchSet { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change source patch set must be an object'); + } + const set = value as CodeChangeSourcePatchSet; + exactSourcePatchKeys(set as unknown as Record, [ + 'schemaVersion', 'generatedAt', 'graphFingerprint', 'patches', 'generation', + ], 'Source patch set'); + if (set.schemaVersion !== 't2c.code-change-source-patch-set/v1') { + throw new Error('Unsupported code change source patch set schemaVersion'); + } + if (typeof set.generatedAt !== 'string' || Number.isNaN(Date.parse(set.generatedAt))) { + throw new Error('Source patch set generatedAt must be an ISO date-time'); + } + if (typeof set.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(set.graphFingerprint)) { + throw new Error('Source patch set graphFingerprint must be SHA-256'); + } + if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); + const plansById = new Map((plans ?? []).map((plan) => [plan.id, plan])); + const patchIds = new Set(); + for (const patch of set.patches) { + assertCodeChangeSourcePatch(patch, plans ? plansById.get(patch.planId) : undefined); + if (patch.graphFingerprint !== set.graphFingerprint) { + throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); + } + if (patchIds.has(patch.id)) throw new Error(`Duplicate source patch id: ${patch.id}`); + patchIds.add(patch.id); + } + if (plans) exactSourcePatchSet(set.patches.map((patch) => patch.planId), plans.map((plan) => plan.id), 'planIds'); + assertGroundedGenerationMetadata(set.generation, 'Source patch set generation'); + if (set.generation.generatedAt !== set.generatedAt) { + throw new Error('Source patch set generation.generatedAt must match generatedAt'); + } + if (set.generation.generator !== 't2c/code-change-source-patch-set') { + throw new Error('Source patch set generation.generator must be t2c/code-change-source-patch-set'); + } +} + +function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { + const actual = Object.keys(value).sort(); + const wanted = [...expected].sort(); + if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { + throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); + } +} + +function assertSourcePatchIds(value: unknown, pattern: RegExp, name: string): asserts value is string[] { + if (!Array.isArray(value) || value.length === 0 + || value.some((item) => typeof item !== 'string' || !pattern.test(item))) { + throw new Error(`Source patch ${name} must be a non-empty array of valid IDs`); + } + if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); +} + +function assertSourcePatchStrings(value: unknown, name: string, emptyAllowed: boolean): asserts value is string[] { + if (!Array.isArray(value) || (!emptyAllowed && value.length === 0) + || value.some((item) => typeof item !== 'string' || !item.trim())) { + throw new Error(`Source patch ${name} must contain ${emptyAllowed ? 'only ' : ''}non-blank strings`); + } + if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); +} + +function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { + const left = [...new Set(actual)].sort(); + const right = [...new Set(expected)].sort(); + if (left.length !== right.length || left.some((item, index) => item !== right[index])) { + throw new Error(`Source patch ${name} do not match the plan`); + } +} + +function instructionFor(change: CodeChangeFile, plan: CodeChangePlan): string { + const symbols = change.symbols.length + ? ` Focus on symbols: ${change.symbols.join(', ')}.` + : ''; + const criteria = plan.acceptanceCriteria.length + ? ` Acceptance: ${plan.acceptanceCriteria.join(' ')}` + : ''; + return `${change.action} \`${change.path}\`. ${change.rationale.trim()}.${symbols}${criteria}`.replace(/\s+/g, ' ').trim(); +} + +/** + * Validate a single-file unified diff body. + * Accepts optional `--- a/path` / `+++ b/path` headers and rejects foreign paths. + */ +function normalizeUnifiedDiff(diff: string, expectedPath: string): string { + const normalized = diff.replace(/\r\n/g, '\n'); + if (!normalized.trim()) throw new Error(`Unified diff for ${expectedPath} is empty`); + if (normalized.includes('\0')) throw new Error(`Unified diff for ${expectedPath} contains NUL bytes`); + // Lightweight secret heuristic — refuse obvious credential dumps in proposed diffs. + if (/(?:api[_-]?key|secret|password|private[_-]?key)\s*[:=]\s*['"]?[^'"\s]{8,}/i.test(normalized)) { + throw new Error(`Unified diff for ${expectedPath} appears to contain a secret assignment`); + } + const headers = [...normalized.matchAll(/^(?:---|\+\+\+)\s+(?:[ab]\/)?(.+)$/gm)].map((match) => match[1]!.trim()); + for (const header of headers) { + if (header === '/dev/null') continue; + const path = header.replace(/\\/g, '/'); + if (path.startsWith('/') || path.split('/').includes('..')) { + throw new Error(`Unified diff for ${expectedPath} uses a non-repository path header: ${path}`); + } + if (path !== expectedPath && path !== `a/${expectedPath}` && path !== `b/${expectedPath}`) { + // Headers may include timestamps after a tab; strip them. + const bare = path.split('\t')[0] ?? path; + const stripped = bare.replace(/^[ab]\//, ''); + if (stripped !== expectedPath) { + throw new Error(`Unified diff for ${expectedPath} references foreign path: ${path}`); + } + } + } + return normalized; +} + +export interface ApplyCodeChangeSourcePatchOptions { + root: string; + patch: CodeChangeSourcePatch; + approval: CodeChangeSourcePatchApproval; + receiptPath: string; + now?: Date; +} + +export interface ApplyCodeChangeSourcePatchResult { + applied: boolean; + idempotent: boolean; + receipt: CodeChangeSourceApplyReceipt; +} + +/** + * Apply a fully-diffed source patch after explicit hash approval. + * + * Instruction-only edits (null unifiedDiff) are rejected. Paths must stay + * relative and inside `root`. Re-applying with an existing matching receipt is + * idempotent. + */ +export async function applyCodeChangeSourcePatch( + options: ApplyCodeChangeSourcePatchOptions, +): Promise { + assertCodeChangeSourcePatch(options.patch); + if (!options.approval?.actor?.trim()) throw new Error('Explicit source patch approval actor is required'); + if (options.approval.patchHash !== options.patch.patchHash) { + throw new Error('Source patch approval hash does not match the patch'); + } + for (const edit of options.patch.edits) { + if (edit.unifiedDiff === null) { + throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); + } + } + + const root = path.resolve(options.root); + const receiptPath = await assertPathWithinRoot(root, path.resolve(options.receiptPath)); + const lockPath = `${receiptPath}.t2c-apply.lock`; + await ensureDir(path.dirname(receiptPath)); + let lock: Awaited> | null = null; + try { + lock = await fs.open(lockPath, 'wx'); + } catch (error) { + if ((error as NodeJS.ErrnoException).code === 'EEXIST') { + throw new Error('Another source patch apply operation is in progress'); + } + throw error; + } + + try { + if (await pathExists(receiptPath)) { + const existing = await readJson(receiptPath, 1024 * 1024); + await assertExistingSourceReceipt(existing, options.patch, root); + return { applied: false, idempotent: true, receipt: existing }; + } + + const prepared: PreparedSourceEdit[] = []; + for (const edit of options.patch.edits) { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + if (absolute === receiptPath) { + throw new Error(`Source patch target collides with its receipt path: ${relative}`); + } + const exists = await pathExists(absolute); + if (exists && (await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Refusing to apply through a symlink: ${relative}`); + } + if (edit.action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); + if (edit.action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); + if (edit.action === 'modify' && !exists) { + const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(edit.unifiedDiff!) + || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(edit.unifiedDiff!); + if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); + } + const before = exists ? await readText(absolute, 16 * 1024 * 1024) : ''; + const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, relative); + if (edit.action === 'delete' && after !== '') { + throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); + } + prepared.push({ relative, absolute, action: edit.action, before, after, existed: exists }); + } + + const changed: PreparedSourceEdit[] = []; + try { + for (const edit of prepared) { + if (edit.action === 'delete') await fs.unlink(edit.absolute); + else await atomicWriteRaw(edit.absolute, edit.after); + changed.push(edit); + } + const now = (options.now ?? new Date()).toISOString(); + const fileHashesAfter = Object.fromEntries(prepared + .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) + .sort(([left], [right]) => left.localeCompare(right))); + const receipt: CodeChangeSourceApplyReceipt = { + schemaVersion: 't2c.code-change-source-apply-receipt/v1', + patchId: options.patch.id, + patchHash: options.patch.patchHash, + planId: options.patch.planId, + approvedBy: options.approval.actor.trim(), + approvedAt: now, + appliedAt: now, + appliedPaths: prepared.map((edit) => edit.relative).sort(), + fileHashesAfter, + generation: deterministicGeneration(now, 't2c/code-change-source-apply'), + }; + assertSourceApplyReceipt(receipt, options.patch); + // The receipt is part of the transaction: without it a retry could apply + // the same approved patch again. Roll files back if persisting it fails. + await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); + return { applied: true, idempotent: false, receipt }; + } catch (error) { + const rollbackErrors: string[] = []; + for (const edit of [...changed].reverse()) { + try { + if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); + else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { + if (failure.code !== 'ENOENT') throw failure; + }); + } catch (rollbackError) { + rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); + } + } + if (rollbackErrors.length) { + throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); + } + throw error; + } + } finally { + await lock.close(); + await fs.unlink(lockPath).catch(() => undefined); + } +} + +interface PreparedSourceEdit { + relative: string; + absolute: string; + action: CodeChangeFileAction; + before: string; + after: string; + existed: boolean; +} + +async function assertExistingSourceReceipt( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, + root: string, +): Promise { + try { + assertSourceApplyReceipt(receipt, patch); + } catch { + throw new Error('A different or invalid source patch receipt already exists at the receipt path'); + } + for (const edit of patch.edits) { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + const exists = await pathExists(absolute); + if (edit.action === 'delete') { + if (exists) throw new Error(`Applied source patch state changed after receipt: ${relative}`); + continue; + } + if (!exists || (await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Applied source patch state changed after receipt: ${relative}`); + } + const current = await readText(absolute, 16 * 1024 * 1024); + if (receipt.fileHashesAfter[relative] !== sha256(current)) { + throw new Error(`Applied source patch state changed after receipt: ${relative}`); + } + } +} + +function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: CodeChangeSourcePatch): void { + exactSourcePatchKeys(receipt as unknown as Record, [ + 'schemaVersion', 'patchId', 'patchHash', 'planId', 'approvedBy', 'approvedAt', + 'appliedAt', 'appliedPaths', 'fileHashesAfter', 'generation', + ], 'Code change source apply receipt'); + if (receipt.schemaVersion !== 't2c.code-change-source-apply-receipt/v1' + || receipt.patchId !== patch.id || receipt.patchHash !== patch.patchHash || receipt.planId !== patch.planId) { + throw new Error('Code change source apply receipt does not match its patch'); + } + if (!receipt.approvedBy.trim()) throw new Error('Code change source apply receipt approvedBy is required'); + if (!Number.isFinite(Date.parse(receipt.approvedAt)) || !Number.isFinite(Date.parse(receipt.appliedAt))) { + throw new Error('Code change source apply receipt timestamps must be ISO date-times'); + } + const expectedPaths = patch.edits.map((edit) => edit.path).sort(); + exactSourcePatchSet(receipt.appliedPaths, expectedPaths, 'receipt appliedPaths'); + const hashPaths = Object.keys(receipt.fileHashesAfter).sort(); + exactSourcePatchSet(hashPaths, expectedPaths, 'receipt fileHashesAfter paths'); + if (Object.values(receipt.fileHashesAfter).some((value) => !/^[a-f0-9]{64}$/.test(value))) { + throw new Error('Code change source apply receipt file hashes must be SHA-256'); + } + assertGroundedGenerationMetadata(receipt.generation, 'Code change source apply receipt generation'); + if (receipt.generation.generatedAt !== receipt.appliedAt + || receipt.generation.generator !== 't2c/code-change-source-apply') { + throw new Error('Code change source apply receipt generation does not match the apply operation'); + } +} + +async function atomicWriteRaw(target: string, content: string): Promise { + await ensureDir(path.dirname(target)); + const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`; + try { + await fs.writeFile(temporary, content, 'utf8'); + await fs.rename(temporary, target); + } finally { + await fs.unlink(temporary).catch(() => undefined); + } +} + +/** + * Apply a single-file unified diff to a text buffer. + * Supports standard hunks with space/+/− prefixes. Throws on context mismatch. + */ +export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: string): string { + const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); + const baseLines = splitKeep(base); + const diffLines = normalizedDiff.split('\n'); + // Drop trailing empty element only if the original split introduced it + // without a final newline — normalize by working on lines as split. + const hunks: Array<{ oldStart: number; oldCount: number; newCount: number; lines: string[] }> = []; + let current: { oldStart: number; oldCount: number; newCount: number; lines: string[] } | null = null; + for (const line of diffLines) { + if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { + continue; + } + const header = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); + if (header) { + if (current) hunks.push(current); + current = { + oldStart: Number(header[1]), + oldCount: header[2] === undefined ? 1 : Number(header[2]), + newCount: header[4] === undefined ? 1 : Number(header[4]), + lines: [], + }; + continue; + } + if (!current) { + if (line === '') continue; + throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); + } + // Blank lines without a unified-diff prefix separate hunks in some emitters. + if (line === '') continue; + current.lines.push(line); + } + if (current) hunks.push(current); + if (!hunks.length) throw new Error(`Unified diff for ${expectedPath} contains no hunks`); + + let cursor = 0; + const output: string[] = []; + for (const hunk of hunks) { + const oldIndex = Math.max(0, hunk.oldStart - 1); + if (oldIndex < cursor) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); + const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; + const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; + if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { + throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); + } + while (cursor < oldIndex) { + if (cursor >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); + output.push(baseLines[cursor]!); + cursor += 1; + } + for (const line of hunk.lines) { + if (line.startsWith('\\')) continue; // "\ No newline at end of file" + const mark = line[0]; + const body = line.slice(1); + if (mark === ' ') { + if (baseLines[cursor] !== body) { + throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor + 1}`); + } + output.push(baseLines[cursor]!); + cursor += 1; + } else if (mark === '-') { + if (baseLines[cursor] !== body) { + throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor + 1}`); + } + cursor += 1; + } else if (mark === '+') { + output.push(body); + } else if (line === '') { + // empty line inside hunk without prefix is invalid in strict unified diffs + throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); + } else { + throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); + } + } + } + while (cursor < baseLines.length) { + output.push(baseLines[cursor]!); + cursor += 1; + } + // Reconstruct text. Files without a trailing newline end without an empty last segment. + if (base.endsWith('\n') || output.length === 0) return `${output.join('\n')}${output.length ? '\n' : ''}`; + return output.join('\n'); +} + +function splitKeep(text: string): string[] { + if (text === '') return []; + const lines = text.split('\n'); + if (text.endsWith('\n')) lines.pop(); + return lines; +} diff --git a/src/synthesis/code-change-plan/index.ts b/src/synthesis/code-change-plan/index.ts new file mode 100644 index 0000000..2366584 --- /dev/null +++ b/src/synthesis/code-change-plan/index.ts @@ -0,0 +1 @@ +export * from './implementation.js'; From e1f9f534331a65638bdd30cc40a7700658d5cdb6 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 10:09:45 +0200 Subject: [PATCH 06/43] refactor: split diff ui html and related hotspots --- project/README.md | 6 +- project/analysis.toon.yaml | 89 +- project/calls.mmd | 1135 ++- project/calls.png | Bin 80271 -> 100449 bytes project/calls.toon.yaml | 165 +- project/calls.yaml | 6531 ++++++++--------- project/compact_flow.mmd | 2 +- project/compact_flow.png | Bin 37467 -> 37242 bytes project/context.md | 190 +- project/evolution.toon.yaml | 18 +- project/flow.mmd | 7 +- project/flow.png | Bin 13038 -> 14246 bytes project/index.html | 2 +- project/map.toon.yaml | 1370 ++-- project/mermaid.export | 525 +- project/planfile-tickets.yaml | 1111 +-- project/project.toon.yaml | 38 +- project/prompt.txt | 4 +- .../llm/implementation-helpers.ts | 357 + src/communication/llm/implementation.ts | 340 +- src/core/io.ts | 84 +- src/core/record.ts | 101 +- src/core/schema/intent.ts | 106 +- src/core/schema/utils.ts | 58 +- src/core/text.ts | 105 +- src/extractors/ast/typescript.ts | 328 +- src/extractors/communication-file-helpers.ts | 342 + src/extractors/communication-helpers.ts | 320 + src/extractors/communication.ts | 462 +- src/extractors/markdown-llm-helpers.ts | 383 + src/extractors/markdown-llm.ts | 457 +- src/extractors/nl-llm-helpers.ts | 256 + src/extractors/nl-llm.ts | 322 +- src/graph/diagnostics.ts | 320 +- src/graph/linker.ts | 120 +- src/graph/symbol-resolution.ts | 40 +- src/semantic/reranker-llm.ts | 127 +- src/semantic/reranker/candidate.ts | 138 +- src/services/actions.ts | 57 +- .../implementation-helpers.ts | 1310 ++++ .../code-change-plan/implementation.ts | 1311 +--- src/tf/classifier.ts | 75 +- src/web/diff-ui.ts | 187 +- 43 files changed, 9865 insertions(+), 9034 deletions(-) create mode 100644 src/communication/llm/implementation-helpers.ts create mode 100644 src/extractors/communication-file-helpers.ts create mode 100644 src/extractors/communication-helpers.ts create mode 100644 src/extractors/markdown-llm-helpers.ts create mode 100644 src/extractors/nl-llm-helpers.ts create mode 100644 src/synthesis/code-change-plan/implementation-helpers.ts diff --git a/project/README.md b/project/README.md index 808b35d..f04a395 100644 --- a/project/README.md +++ b/project/README.md @@ -333,8 +333,8 @@ code2llm ./ -f yaml --separate-orphans **Generated by**: `code2llm ./ -f all --readme` **Analysis Date**: 2026-08-04 -**Total Functions**: 3586 -**Total Classes**: 367 -**Modules**: 246 +**Total Functions**: 3683 +**Total Classes**: 373 +**Modules**: 251 For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm diff --git a/project/analysis.toon.yaml b/project/analysis.toon.yaml index 56b4ba5..4f9eb57 100644 --- a/project/analysis.toon.yaml +++ b/project/analysis.toon.yaml @@ -1,36 +1,34 @@ -# code2llm | 246f 39628L | typescript:138,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 +# code2llm | 251f 39151L | typescript:143,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 # generated in 0.26s -# CC̅=3.8 | critical:110/3592 | dups:0 | cycles:0 +# CC̅=3.6 | critical:90/3683 | dups:0 | cycles:0 HEALTH[20]: - 🔴 GOD src/extractors/communication.ts = 515L, 5 classes, 76m, max CC=50 - 🔴 GOD src/synthesis/code-change-plan/implementation.ts = 1310L, 10 classes, 127m, max CC=47 - 🔴 GOD src/communication/llm/implementation.ts = 514L, 8 classes, 53m, max CC=12 + 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10 🟡 CC handleRequest CC=16 (limit:15) - 🟡 CC extractCommunicationFile CC=50 (limit:15) - 🟡 CC inferIdentity CC=15 (limit:15) - 🟡 CC extractMarkdownIntentAudited CC=19 (limit:15) - 🟡 CC extractTypeScriptFile CC=43 (limit:15) - 🟡 CC visit CC=25 (limit:15) - 🟡 CC buildSymbolResolutionIndex CC=15 (limit:15) - 🟡 CC scorePair CC=18 (limit:15) - 🟡 CC diagnoseGraph CC=40 (limit:15) - 🟡 CC neighbors CC=35 (limit:15) - 🟡 CC recordsById CC=35 (limit:15) - 🟡 CC groundedImplementation CC=35 (limit:15) - 🟡 CC implementedPaths CC=35 (limit:15) - 🟡 CC documentedPaths CC=35 (limit:15) - 🟡 CC symbolResolutionIndex CC=35 (limit:15) + 🟡 CC buildLocalWarnings CC=18 (limit:15) 🟡 CC executeAction CC=83 (limit:15) 🟡 CC root CC=83 (limit:15) + 🟡 CC normalized CC=30 (limit:15) + 🟡 CC inferObject CC=34 (limit:15) + 🟡 CC walkFiles CC=15 (limit:15) + 🟡 CC diffUiHtml CC=52 (limit:15) + 🟡 CC compareGraphs CC=15 (limit:15) + 🟡 CC rerankSemanticCandidates CC=25 (limit:15) + 🟡 CC assertSemanticRerankResult CC=21 (limit:15) + 🟡 CC records CC=16 (limit:15) + 🟡 CC seenDecisions CC=16 (limit:15) + 🟡 CC acceptedDeclarations CC=16 (limit:15) + 🟡 CC assertSemanticCandidateSet CC=27 (limit:15) + 🟡 CC NON_SOURCE_DIR_SEGMENTS CC=38 (limit:15) + 🟡 CC BINARY_EXTENSIONS CC=38 (limit:15) + 🟡 CC GENERATED_ANALYSIS_BASENAMES CC=38 (limit:15) + 🟡 CC T2C_ARTIFACT_BASENAMES CC=38 (limit:15) -REFACTOR[4]: - 1. split src/extractors/communication.ts (god module) - 2. split src/synthesis/code-change-plan/implementation.ts (god module) - 3. split src/communication/llm/implementation.ts (god module) - 4. split 17 high-CC methods (CC>15) +REFACTOR[2]: + 1. split src/graph/linker.ts (god module) + 2. split 19 high-CC methods (CC>15) -PIPELINES[2043]: +PIPELINES[2061]: [1] Src [main]: main → arguments PURITY: 100% pure [2] Src [new]: new @@ -143,72 +141,75 @@ LAYERS: │ !! ast_extract 221L 1C 18m CC=16 ←0 │ requirements.txt 1L 0C 0m CC=0.0 ←0 │ - src/ CC̄=4.0 ←in:0 →out:0 - │ !! implementation.ts 1310L 10C 127m CC=47 ←3 + src/ CC̄=3.8 ←in:0 →out:0 │ !! cli.ts 935L 1C 124m CC=13 ←0 - │ !! actions.ts 700L 0C 74m CC=83 ←0 + │ !! actions.ts 737L 1C 79m CC=83 ←0 │ !! reality.ts 619L 3C 74m CC=26 ←0 │ !! run.ts 617L 1C 65m CC=56 ←0 │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0 │ !! analyzer.ts 542L 3C 72m CC=48 ←0 - │ !! communication.ts 515L 5C 76m CC=50 ←0 - │ !! implementation.ts 514L 8C 53m CC=12 ←0 - │ !! text.ts 491L 0C 51m CC=34 ←0 - │ !! linker.ts 489L 4C 72m CC=18 ←3 - │ !! markdown-llm.ts 458L 6C 38m CC=19 ←0 + │ !! linker.ts 537L 4C 81m CC=10 ←3 + │ !! text.ts 517L 0C 57m CC=34 ←0 + │ diagnostics.ts 459L 1C 58m CC=11 ←0 │ git.ts 397L 6C 57m CC=11 ←0 + │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0 │ !! gold-types.ts 378L 15C 11m CC=32 ←0 │ todo-patch.ts 372L 5C 52m CC=12 ←0 │ docs-deterministic.ts 369L 3C 43m CC=11 ←0 │ !! gold-cases.ts 366L 4C 42m CC=18 ←0 - │ !! diagnostics.ts 361L 0C 40m CC=40 ←0 + │ implementation-helpers.ts 357L 5C 33m CC=10 ←0 │ workspace.ts 342L 3C 54m CC=12 ←0 │ !! openrouter.ts 338L 7C 39m CC=31 ←0 - │ nl-llm.ts 337L 5C 46m CC=12 ←0 │ summarizer.ts 333L 5C 27m CC=10 ←0 │ a2a.ts 332L 0C 47m CC=9 ←0 │ gold.ts 329L 3C 31m CC=14 ←0 │ mcp-tools.ts 323L 1C 10m CC=10 ←0 │ code-change.ts 322L 0C 35m CC=11 ←0 + │ communication-helpers.ts 320L 3C 45m CC=14 ←0 │ contract-check.ts 317L 6C 39m CC=14 ←2 │ runtime-cycle.ts 306L 1C 35m CC=9 ←0 + │ intent.ts 306L 4C 36m CC=12 ←0 + │ !! communication-file-helpers.ts 296L 2C 39m CC=18 ←0 │ intake-service.ts 291L 2C 48m CC=13 ←0 │ !! validation.ts 281L 0C 47m CC=84 ←0 - │ !! intent.ts 276L 4C 29m CC=23 ←0 │ !! intake-contract.ts 273L 7C 30m CC=18 ←0 │ docs-llm.ts 269L 1C 28m CC=12 ←0 + │ typescript.ts 266L 1C 26m CC=8 ←0 │ tasks-llm.ts 266L 4C 22m CC=11 ←0 │ !! result.ts 264L 0C 16m CC=21 ←0 │ mcp.ts 261L 2C 38m CC=9 ←0 │ intent.ts 258L 15C 0m CC=0.0 ←0 + │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0 │ text-render.ts 251L 2C 33m CC=13 ←0 │ !! watcher.ts 243L 4C 37m CC=19 ←0 │ !! text.ts 239L 1C 48m CC=19 ←2 + │ utils.ts 239L 0C 42m CC=8 ←0 │ diff.ts 235L 1C 38m CC=11 ←0 │ env.ts 231L 1C 20m CC=13 ←0 │ !! a2a-history.ts 226L 3C 37m CC=18 ←0 │ code-change.ts 221L 16C 0m CC=0.0 ←0 - │ !! utils.ts 219L 0C 38m CC=23 ←0 │ structured-schema.ts 218L 5C 25m CC=10 ←0 │ model-comparison.ts 218L 4C 21m CC=12 ←0 │ conclusions.ts 210L 0C 21m CC=9 ←0 │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0 │ configuration.ts 208L 1C 38m CC=10 ←0 + │ implementation.ts 208L 4C 21m CC=12 ←0 │ !! code-change-path.ts 204L 0C 14m CC=38 ←0 │ ignore.ts 200L 3C 23m CC=10 ←0 │ !! candidate.ts 200L 0C 13m CC=27 ←0 │ !! a2a-message.ts 197L 0C 35m CC=63 ←1 │ docs-record.ts 193L 0C 34m CC=14 ←0 + │ !! record.ts 183L 2C 13m CC=17 ←0 │ a2a-card.ts 181L 0C 7m CC=3 ←0 │ !! io.ts 177L 1C 32m CC=15 ←0 + │ markdown-llm.ts 175L 2C 11m CC=9 ←0 │ pipeline.ts 173L 7C 0m CC=0.0 ←0 - │ !! record.ts 172L 2C 9m CC=18 ←0 │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0 │ typescript.ts 172L 6C 16m CC=2 ←0 │ ast.ts 167L 2C 15m CC=12 ←0 │ id.ts 167L 0C 16m CC=5 ←0 - │ !! typescript.ts 166L 0C 19m CC=43 ←0 │ a2a-types.ts 164L 9C 14m CC=10 ←0 + │ nl-llm.ts 163L 2C 19m CC=10 ←0 │ !! git.ts 161L 3C 21m CC=22 ←0 │ intake-store.ts 161L 3C 19m CC=11 ←0 │ markdown-paths.ts 158L 2C 22m CC=12 ←0 @@ -216,11 +217,12 @@ LAYERS: │ types.ts 155L 8C 0m CC=0.0 ←0 │ docs-chunks.ts 147L 0C 29m CC=8 ←0 │ !! identity.ts 146L 3C 22m CC=30 ←0 + │ symbol-resolution.ts 146L 3C 22m CC=10 ←0 │ content-cache.ts 139L 4C 12m CC=5 ←0 + │ classifier.ts 135L 4C 32m CC=6 ←0 │ gold-extraction.ts 127L 0C 13m CC=5 ←0 │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0 │ subactor.ts 122L 1C 9m CC=13 ←0 - │ !! symbol-resolution.ts 120L 3C 16m CC=15 ←0 │ validation.ts 113L 2C 28m CC=11 ←0 │ validation.ts 111L 0C 11m CC=7 ←0 │ nl.ts 107L 1C 12m CC=10 ←0 @@ -228,7 +230,6 @@ LAYERS: │ svg.ts 104L 2C 7m CC=2 ←0 │ changelog.ts 99L 0C 16m CC=11 ←0 │ records.ts 97L 0C 10m CC=6 ←0 - │ !! classifier.ts 96L 4C 27m CC=17 ←0 │ todo.ts 93L 0C 18m CC=5 ←0 │ changelog-signal.ts 89L 0C 12m CC=8 ←0 │ mcp-resources.ts 88L 0C 13m CC=6 ←0 @@ -240,6 +241,7 @@ LAYERS: │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0 │ artifact.ts 66L 2C 10m CC=6 ←0 │ payload.ts 65L 0C 8m CC=12 ←0 + │ communication.ts 63L 1C 7m CC=7 ←0 │ capability-evidence.ts 62L 0C 14m CC=10 ←0 │ render.ts 61L 0C 13m CC=10 ←0 │ target.ts 57L 0C 12m CC=9 ←0 @@ -280,6 +282,7 @@ LAYERS: │ index.ts 4L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 + │ !! implementation.ts 1L 10C 127m CC=47 ←3 │ index.ts 1L 0C 0m CC=0.0 ←0 │ llm.ts 1L 0C 0m CC=0.0 ←0 │ @@ -418,9 +421,9 @@ COUPLING: java ←2 ── examples.frontend ←1 ── CYCLES: none - HUB: src.live/ (fan-in=7) - HUB: src.synthesis/ (fan-in=5) HUB: src.diff/ (fan-in=6) + HUB: src.synthesis/ (fan-in=5) + HUB: src.live/ (fan-in=7) SMELL: scripts.research/ fan-out=11 → split needed SMELL: sdk.python/ fan-out=8 → split needed diff --git a/project/calls.mmd b/project/calls.mmd index f790723..a001c05 100644 --- a/project/calls.mmd +++ b/project/calls.mmd @@ -1,35 +1,35 @@ flowchart LR %% generated in 0.04s subgraph examples__backend - examples__backend__src__server__sendJson["sendJson"] - examples__backend__src__server__startBackend["startBackend"] - examples__backend__src__server__handleRequest["handleRequest"] + examples__backend__src__server__createBackend["createBackend"] + examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] examples__backend__src__validation__action["action"] + examples__backend__src__validation__object["object"] + examples__backend__src__server__readBody["readBody"] + examples__backend__src__server__sendJson["sendJson"] + examples__backend__src__server__offset["offset"] + examples__backend__src__validation__invalid["invalid"] + examples__backend__src__server__validation["validation"] + examples__backend__src__validation__validateEventPayload["validateEventPayload"] examples__backend__src__server__size["size"] + examples__backend__src__server__startBackend["startBackend"] + examples__backend__src__server__server["server"] examples__backend__src__server__event["event"] - examples__backend__src__validation__agent["agent"] examples__backend__src__server__store["store"] - examples__backend__src__validation__validateEventPayload["validateEventPayload"] - examples__backend__src__server__limit["limit"] - examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] - examples__backend__src__validation__invalid["invalid"] - examples__backend__src__validation__object["object"] + examples__backend__src__server__handleRequest["handleRequest"] examples__backend__src__validation__record["record"] - examples__backend__src__server__validation["validation"] - examples__backend__src__server__createBackend["createBackend"] - examples__backend__src__server__server["server"] - examples__backend__src__server__readBody["readBody"] - examples__backend__src__server__offset["offset"] + examples__backend__src__server__limit["limit"] + examples__backend__src__validation__agent["agent"] end subgraph examples__frontend - examples__frontend__src__app__mountPanel["mountPanel"] - examples__frontend__src__render__toRows["toRows"] examples__frontend__src__app__state["state"] + examples__frontend__src__render__toRows["toRows"] + examples__frontend__src__render__headerRow["headerRow"] + examples__frontend__src__app__reload["reload"] examples__frontend__src__app__createState["createState"] examples__frontend__src__render__classifyEvent["classifyEvent"] - examples__frontend__src__app__reload["reload"] - examples__frontend__src__render__headerRow["headerRow"] examples__frontend__src__render__renderTable["renderTable"] + examples__frontend__src__app__mountPanel["mountPanel"] examples__frontend__src__app__refresh["refresh"] end subgraph examples__src @@ -37,408 +37,383 @@ flowchart LR examples__src__runtime__executeContract["executeContract"] end subgraph java__JavaAstExtract - java__JavaAstExtract__JavaAstExtract__map["map"] - java__JavaAstExtract__JavaAstExtract__slash["slash"] - java__JavaAstExtract__JavaAstExtract__emit["emit"] - java__JavaAstExtract__JavaAstExtract__collect["collect"] java__JavaAstExtract__JavaAstExtract__try["try"] java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] - java__JavaAstExtract__JavaAstExtract__main["main"] + java__JavaAstExtract__JavaAstExtract__collect["collect"] + java__JavaAstExtract__JavaAstExtract__emit["emit"] java__JavaAstExtract__JavaAstExtract__add["add"] + java__JavaAstExtract__JavaAstExtract__map["map"] java__JavaAstExtract__JavaAstExtract__json["json"] + java__JavaAstExtract__JavaAstExtract__slash["slash"] + java__JavaAstExtract__JavaAstExtract__main["main"] java__JavaAstExtract__JavaAstExtract__escape["escape"] end subgraph rust_ast__src - rust_ast__src__main__main["main"] - rust_ast__src__main__visit_item_mod["visit_item_mod"] - rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] - rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] rust_ast__src__main__visit_item_struct["visit_item_struct"] - rust_ast__src__main__modifiers["modifiers"] - rust_ast__src__main__visit_item_type["visit_item_type"] rust_ast__src__main__visit_item_fn["visit_item_fn"] + rust_ast__src__main__visit_item_use["visit_item_use"] + rust_ast__src__main__visit_item_trait["visit_item_trait"] + rust_ast__src__main__collect_files["collect_files"] rust_ast__src__main__arguments["arguments"] - rust_ast__src__main__add["add"] + rust_ast__src__main__main["main"] + rust_ast__src__main__visit_expr_call["visit_expr_call"] rust_ast__src__main__qualified["qualified"] - rust_ast__src__main__visit_item_trait["visit_item_trait"] - rust_ast__src__main__visit_item_use["visit_item_use"] - rust_ast__src__main__slash["slash"] + rust_ast__src__main__modifiers["modifiers"] + rust_ast__src__main__excerpt["excerpt"] + rust_ast__src__main__visit_item_mod["visit_item_mod"] + rust_ast__src__main__visit_item_type["visit_item_type"] rust_ast__src__main__visit_item_const["visit_item_const"] + rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] + rust_ast__src__main__visit_item_enum["visit_item_enum"] + rust_ast__src__main__slash["slash"] rust_ast__src__main__visit_item_static["visit_item_static"] + rust_ast__src__main__add["add"] rust_ast__src__main__type_item["type_item"] - rust_ast__src__main__excerpt["excerpt"] - rust_ast__src__main__collect_files["collect_files"] - rust_ast__src__main__visit_item_enum["visit_item_enum"] - rust_ast__src__main__visit_expr_call["visit_expr_call"] + rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] + end + subgraph src__cli + src__cli__handleExtractDocs["handleExtractDocs"] + src__cli__absolute["absolute"] + src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] + src__cli__stamp["stamp"] + src__cli__diagnostics["diagnostics"] + src__cli__svg["svg"] + src__cli__taskFile["taskFile"] + src__cli__diff["diff"] + src__cli__handleReality["handleReality"] + src__cli__invokedPath["invokedPath"] + src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] + src__cli__optionNumber["optionNumber"] + src__cli__optionBoolean["optionBoolean"] + src__cli__controller["controller"] + src__cli__result["result"] + src__cli__handleCloseCodeChange["handleCloseCodeChange"] + src__cli__buildDiffPayload["buildDiffPayload"] + src__cli__execFileAsync["execFileAsync"] + src__cli__command["command"] + src__cli__handleCompareWorkspace["handleCompareWorkspace"] + src__cli__handleApplySourcePatch["handleApplySourcePatch"] + src__cli__parseDiffMode["parseDiffMode"] + src__cli__handleExtractNl["handleExtractNl"] + src__cli__diagnosticsPath["diagnosticsPath"] + src__cli__optionNlMode["optionNlMode"] + src__cli__pipeline["pipeline"] + src__cli__optionTaskMode["optionTaskMode"] + src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] + src__cli__handleRenderCodeChange["handleRenderCodeChange"] + src__cli__commandHandlers["commandHandlers"] + src__cli__resolveMainCommand["resolveMainCommand"] + src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] + src__cli__handleRenderTodo["handleRenderTodo"] + src__cli__buildPipelineOptions["buildPipelineOptions"] + src__cli__reportPipelineDegradation["reportPipelineDegradation"] + src__cli__optionString["optionString"] + src__cli__handleExtract["handleExtract"] + src__cli__context["context"] + src__cli__handleSummarize["handleSummarize"] + src__cli__buildGitDiff["buildGitDiff"] + src__cli__handleLink["handleLink"] + src__cli__optionLlmMode["optionLlmMode"] + src__cli__handleWatch["handleWatch"] + src__cli__handleProposeSourcePatch["handleProposeSourcePatch"] + src__cli__handleIntake["handleIntake"] + src__cli__handleExtractMarkdown["handleExtractMarkdown"] + src__cli__handleProposeCodeChange["handleProposeCodeChange"] + src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] + src__cli__resolvePipelineRoot["resolvePipelineRoot"] + src__cli__initProject["initProject"] + src__cli__handleApplyTodo["handleApplyTodo"] + src__cli__file["file"] + src__cli__formatWatchEvent["formatWatchEvent"] + src__cli__handleExtractAst["handleExtractAst"] + src__cli__handleExtractRuntime["handleExtractRuntime"] + src__cli__handlePipeline["handlePipeline"] + src__cli__handleExtractConfig["handleExtractConfig"] + src__cli__main["main"] + src__cli__isPlanSet["isPlanSet"] + src__cli__emitExtraction["emitExtraction"] + src__cli__emitJson["emitJson"] + src__cli__root["root"] + src__cli__printHelp["printHelp"] + src__cli__handler["handler"] + src__cli__parsed["parsed"] + src__cli__stop["stop"] + src__cli__doctor["doctor"] + src__cli__buildFileDiff["buildFileDiff"] + src__cli__handleExtractCommunication["handleExtractCommunication"] + src__cli__optionList["optionList"] + src__cli__handleProposeTodo["handleProposeTodo"] + src__cli__parseArgs["parseArgs"] + src__cli__handleDiagnose["handleDiagnose"] + src__cli__handleExtractGit["handleExtractGit"] + src__cli__handleDiff["handleDiff"] + src__cli__handleGraphDiff["handleGraphDiff"] + src__cli__optionSummaryMode["optionSummaryMode"] + src__cli__view["view"] + src__cli__handleCommunication["handleCommunication"] + src__cli__optionNullableString["optionNullableString"] end subgraph src__extractors - src__extractors__markdown_paths__headingScopes["headingScopes"] + src__extractors__todo__classified["classified"] + src__extractors__runtime_cycle__violationRecord["violationRecord"] + src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] - src__extractors__todo__relative["relative"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] - src__extractors__communication__nestedRoleIndex["nestedRoleIndex"] - src__extractors__markdown_llm__MarkdownAttemptError__stageAudit["stageAudit"] - src__extractors__docs_chunks__markdownSections["markdownSections"] - src__extractors__runtime_cycle__proposalRecord["proposalRecord"] - src__extractors__nl_llm__NlLlmRequiredError__body["body"] - src__extractors__communication__declaredParticipantId["declaredParticipantId"] - src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] - src__extractors__docs_deterministic__primePathMapper["primePathMapper"] - src__extractors__ast__typescript__declarationIsCallable["declarationIsCallable"] - src__extractors__nl_llm__NlAttemptError__isPlaceholder["isPlaceholder"] + src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] + src__extractors__runtime_cycle__factsMetadata["factsMetadata"] + src__extractors__git__result["result"] + src__extractors__nl__absolute["absolute"] + src__extractors__runtime_cycle__tags["tags"] src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] - src__extractors__nl_llm__NlLlmRequiredError__prompt["prompt"] - src__extractors__runtime_cycle__label["label"] - src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] - src__extractors__communication__item["item"] - src__extractors__communication__envelope["envelope"] - src__extractors__docs_record__anchorToSource["anchorToSource"] - src__extractors__nl_llm__NlAttemptError__toIntentRecord["toIntentRecord"] - src__extractors__configuration__files["files"] - src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] - src__extractors__communication__participant["participant"] - src__extractors__docs_record__action["action"] - src__extractors__changelog__changelogAction["changelogAction"] - src__extractors__nl_llm__NlLlmRequiredError__sourcePath["sourcePath"] - src__extractors__nl_llm__NlAttemptError__action["action"] + src__extractors__configuration__configurationFormat["configurationFormat"] + src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] + src__extractors__docs_record__isPlaceholder["isPlaceholder"] + src__extractors__docs_record__modality["modality"] + src__extractors__docs_record__fallback["fallback"] + src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] + src__extractors__docs_chunks__flush["flush"] + src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] + src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__git__readChangedFiles["readChangedFiles"] + src__extractors__todo__body["body"] + src__extractors__markdown_paths__headingScopes["headingScopes"] + src__extractors__todo__extractExplicitId["extractExplicitId"] + src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"] + src__extractors__docs_chunks__splitLongSection["splitLongSection"] + src__extractors__docs_deterministic__heading["heading"] + src__extractors__nl_llm_helpers__NlAttemptError__action["action"] + src__extractors__todo__inferOwner["inferOwner"] src__extractors__configuration__parsed["parsed"] - src__extractors__nl__action["action"] - src__extractors__communication__declaredRole["declaredRole"] + src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"] src__extractors__ast__typescript__scriptKind["scriptKind"] - src__extractors__docs_record__target["target"] - src__extractors__communication__match["match"] - src__extractors__docs_record__hasTarget["hasTarget"] - src__extractors__communication__parseEnvelope["parseEnvelope"] - src__extractors__configuration__configurationRecords["configurationRecords"] - src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] - src__extractors__markdown_paths__index["index"] - src__extractors__nl_llm__NlAttemptError__lines["lines"] - src__extractors__docs_chunks__workerCount["workerCount"] - src__extractors__docs_schema__strings["strings"] - src__extractors__nl_llm__NlAttemptError__clampLine["clampLine"] - src__extractors__nl_llm__NlAttemptError__normalizedText["normalizedText"] - src__extractors__communication__fileParts["fileParts"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] - src__extractors__nl_llm__NlLlmRequiredError__result["result"] - src__extractors__nl__absolute["absolute"] - src__extractors__nl_llm__NlAttemptError__markDeterministic["markDeterministic"] - src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] - src__extractors__ast__records__capabilities["capabilities"] + src__extractors__docs_deterministic__resolver["resolver"] + src__extractors__nl_llm__NlLlmRequiredError__client["client"] src__extractors__docs_deterministic__match["match"] - src__extractors__git__count["count"] - src__extractors__configuration__tomlEntries["tomlEntries"] - src__extractors__docs_schema__documentRecord["documentRecord"] + src__extractors__runtime_cycle__label["label"] + src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] + src__extractors__ast__records__adapterRecords["adapterRecords"] + src__extractors__communication_helpers__flush["flush"] src__extractors__git__mapWithConcurrency["mapWithConcurrency"] - src__extractors__docs_deterministic__convertDocument["convertDocument"] - src__extractors__docs_record__isPlaceholder["isPlaceholder"] - src__extractors__ast__typescript__add["add"] - src__extractors__configuration__bounded["bounded"] - src__extractors__configuration__uniqueEntries["uniqueEntries"] - src__extractors__communication__communicationFiles["communicationFiles"] - src__extractors__ast__records__moduleTopicText["moduleTopicText"] - src__extractors__communication__nestedRole["nestedRole"] - src__extractors__nl_llm__NlAttemptError__nlStrings["nlStrings"] - src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] - src__extractors__communication__extractCommunicationIntent["extractCommunicationIntent"] - src__extractors__nl__classified["classified"] - src__extractors__nl_llm__NlLlmRequiredError__startedAt["startedAt"] - src__extractors__todo__match["match"] - src__extractors__markdown_llm__MarkdownAttemptError__failed["failed"] - src__extractors__git__readCommits["readCommits"] - src__extractors__communication__flush["flush"] - src__extractors__docs_chunks__needles["needles"] - src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] - src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage["emptyCoverage"] - src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] - src__extractors__configuration__isConfigurationPath["isConfigurationPath"] - src__extractors__docs_chunks__chunkPriority["chunkPriority"] - src__extractors__ast__records__start["start"] - src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] - src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] - src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] - src__extractors__nl__extractNlIntent["extractNlIntent"] - src__extractors__communication__sameStrings["sameStrings"] - src__extractors__configuration__pair["pair"] - src__extractors__nl_llm__NlLlmRequiredError__absolute["absolute"] - src__extractors__ast__typescript__symbol["symbol"] - src__extractors__todo__checked["checked"] - src__extractors__configuration__fileAggregate["fileAggregate"] - src__extractors__docs_record__fallback["fallback"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] - src__extractors__docs_record__statementText["statementText"] - src__extractors__ast__typescript__languageName["languageName"] - src__extractors__markdown_paths__basenames["basenames"] - src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] - src__extractors__ast__records__moduleRecords["moduleRecords"] - src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] - src__extractors__communication__normalizeType["normalizeType"] - src__extractors__ast__typescript__isTopLevel["isTopLevel"] - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] - src__extractors__changelog__extractChangelog["extractChangelog"] - src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] - src__extractors__ast__typescript__visit["visit"] - src__extractors__git__extractGitIntent["extractGitIntent"] + src__extractors__ast__records__capabilities["capabilities"] + src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] + src__extractors__docs_chunks__index["index"] src__extractors__runtime_cycle__text["text"] - src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] - src__extractors__runtime_cycle__tags["tags"] - src__extractors__docs_record__allowedModality["allowedModality"] - src__extractors__git__runGit["runGit"] - src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] - src__extractors__configuration__jsonEntries["jsonEntries"] - src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] - src__extractors__runtime_cycle__proposalAction["proposalAction"] + src__extractors__docs_record__resolveModality["resolveModality"] + src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] + src__extractors__ast__records__end["end"] + src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] + src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__markdown_paths__headingDirectories["headingDirectories"] + src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] + src__extractors__ast__typescript__context["context"] + src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] + src__extractors__docs_record__anchorToSource["anchorToSource"] + src__extractors__communication_helpers__communicationSegments["communicationSegments"] + src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] src__extractors__runtime_cycle__parseCycle["parseCycle"] - src__extractors__communication__normalize["normalize"] - src__extractors__git__finishDiscovery["finishDiscovery"] - src__extractors__changelog__lines["lines"] - src__extractors__nl_llm__NlLlmRequiredError__client["client"] - src__extractors__communication__identity["identity"] - src__extractors__nl_llm__NlAttemptError__allowedModality["allowedModality"] - src__extractors__git__gitMarkerState["gitMarkerState"] + src__extractors__docs_chunks__needles["needles"] + src__extractors__git__count["count"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] + src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] + src__extractors__docs_deterministic__action["action"] + src__extractors__markdown_paths__index["index"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] + src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] + src__extractors__todo__resolvedPaths["resolvedPaths"] + src__extractors__nl__action["action"] + src__extractors__docs_record__target["target"] + src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] + src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] + src__extractors__configuration__match["match"] + src__extractors__docs_schema__documentRecord["documentRecord"] + src__extractors__markdown_paths__state["state"] + src__extractors__docs_record__resolveAction["resolveAction"] + src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] + src__extractors__communication_helpers__unquote["unquote"] + src__extractors__communication_helpers__match["match"] + src__extractors__configuration__tomlEntries["tomlEntries"] src__extractors__git__state["state"] - src__extractors__todo__extractTodo["extractTodo"] - src__extractors__docs_schema__documentResponseContract["documentResponseContract"] src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] - src__extractors__runtime_cycle__probeRecord["probeRecord"] - src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] - src__extractors__docs_record__resolveTarget["resolveTarget"] - src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] - src__extractors__configuration__findKeyLine["findKeyLine"] - src__extractors__configuration__lines["lines"] - src__extractors__todo__heading["heading"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt["startedAt"] - src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] - src__extractors__nl_llm__NlLlmRequiredError__maxLine["maxLine"] - src__extractors__nl_llm__NlAttemptError__statementText["statementText"] - src__extractors__docs_record__clampLine["clampLine"] - src__extractors__todo__body["body"] - src__extractors__communication__raw["raw"] - src__extractors__runtime_cycle__factsMetadata["factsMetadata"] - src__extractors__docs_chunks__worker["worker"] - src__extractors__docs_deterministic__resolver["resolver"] - src__extractors__docs_record__resolveModality["resolveModality"] - src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] - src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] - src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] - src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] - src__extractors__todo__extractExplicitId["extractExplicitId"] - src__extractors__communication__nestedParticipant["nestedParticipant"] - src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] - src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] - src__extractors__docs_deterministic__heading["heading"] - src__extractors__runtime_cycle__results["results"] - src__extractors__todo__block["block"] - src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] - src__extractors__docs_chunks__sectionLines["sectionLines"] - src__extractors__changelog__relative["relative"] - src__extractors__nl__object["object"] - src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] - src__extractors__nl__missing["missing"] - src__extractors__ast__isExtractionResult["isExtractionResult"] - src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] - src__extractors__nl__inferActor["inferActor"] - src__extractors__docs_deterministic__root["root"] + src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] + src__extractors__git__gitMarkerState["gitMarkerState"] + src__extractors__configuration__entry["entry"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] + src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] + src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] - src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] - src__extractors__ast__typescript__lineRange["lineRange"] + src__extractors__changelog__extractChangelog["extractChangelog"] + src__extractors__configuration__relative["relative"] + src__extractors__git__isGitWorkTree["isGitWorkTree"] + src__extractors__git__runGit["runGit"] + src__extractors__docs_chunks__worker["worker"] + src__extractors__changelog__changelogAction["changelogAction"] + src__extractors__communication_helpers__basename["basename"] + src__extractors__todo__action["action"] + src__extractors__git__readStats["readStats"] + src__extractors__docs_record__resolveObject["resolveObject"] + src__extractors__communication_helpers__item["item"] + src__extractors__docs_deterministic__targetsOf["targetsOf"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] + src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"] + src__extractors__docs_schema__strings["strings"] + src__extractors__configuration__pair["pair"] + src__extractors__git__execFileAsync["execFileAsync"] + src__extractors__docs_record__statementText["statementText"] + src__extractors__configuration__configurationRecords["configurationRecords"] + src__extractors__docs_chunks__chunkPriority["chunkPriority"] + src__extractors__git__discoverGitRepositories["discoverGitRepositories"] src__extractors__git__root["root"] + src__extractors__nl__body["body"] + src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] + src__extractors__ast__typescript__recordModuleFact["recordModuleFact"] + src__extractors__docs_chunks__sectionText["sectionText"] + src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] + src__extractors__configuration__findKeyLine["findKeyLine"] + src__extractors__docs_deterministic__convertDocument["convertDocument"] + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__configuration__lines["lines"] + src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] + src__extractors__docs_deterministic__readParagraph["readParagraph"] src__extractors__todo__raw["raw"] - src__extractors__todo__inferOwner["inferOwner"] - src__extractors__git__createDiscoveryState["createDiscoveryState"] - src__extractors__docs_deterministic__marker["marker"] - src__extractors__communication__unquote["unquote"] - src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] - src__extractors__ast__typescript__modifiers["modifiers"] - src__extractors__configuration__entries["entries"] - src__extractors__nl_llm__NlAttemptError__failedAudit["failedAudit"] - src__extractors__ast__external__execFileAsync["execFileAsync"] - src__extractors__ast__external__result["result"] - src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__ast__typescript__callee["callee"] - src__extractors__git__execFileAsync["execFileAsync"] - src__extractors__nl_llm__NlAttemptError__resolveObject["resolveObject"] - src__extractors__runtime_cycle__driftRecord["driftRecord"] - src__extractors__communication__inferred["inferred"] - src__extractors__nl_llm__NlAttemptError__fallback["fallback"] - src__extractors__communication__isCommunicationType["isCommunicationType"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] - src__extractors__configuration__match["match"] - src__extractors__docs_chunks__splitLongSection["splitLongSection"] - src__extractors__nl__detectMissingFields["detectMissingFields"] - src__extractors__docs_deterministic__targetsOf["targetsOf"] - src__extractors__communication__explicitEnvelope["explicitEnvelope"] - src__extractors__nl_llm__NlAttemptError__audit["audit"] - src__extractors__todo__task["task"] - src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] - src__extractors__communication__listValue["listValue"] - src__extractors__nl_llm__NlAttemptError__allowedAction["allowedAction"] + src__extractors__ast__records__moduleRecords["moduleRecords"] + src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] - src__extractors__communication__first["first"] - src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] - src__extractors__communication__isCommunicationNoise["isCommunicationNoise"] - src__extractors__docs_chunks__flush["flush"] - src__extractors__docs_record__modality["modality"] - src__extractors__configuration__line["line"] - src__extractors__communication__heading["heading"] - src__extractors__ast__typescript__excerpt["excerpt"] src__extractors__configuration__heading["heading"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic["deterministic"] - src__extractors__ast__records__end["end"] + src__extractors__git__finishDiscovery["finishDiscovery"] + src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] + src__extractors__git__readCommits["readCommits"] + src__extractors__communication_helpers__heading["heading"] + src__extractors__todo__heading["heading"] + src__extractors__communication_file_helpers__envelope["envelope"] + src__extractors__docs_schema__target["target"] + src__extractors__ast__external__execFileAsync["execFileAsync"] + src__extractors__runtime_cycle__proposalAction["proposalAction"] + src__extractors__configuration__fileAggregate["fileAggregate"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] + src__extractors__nl__object["object"] + src__extractors__docs_schema__documentResponseContract["documentResponseContract"] + src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] + src__extractors__todo__checked["checked"] + src__extractors__todo__block["block"] + src__extractors__docs_record__clampLine["clampLine"] + src__extractors__configuration__dockerEntries["dockerEntries"] src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] - src__extractors__runtime_cycle__boundedArray["boundedArray"] - src__extractors__markdown_llm__MarkdownAttemptError__readPrompt["readPrompt"] - src__extractors__runtime_cycle__jsonScalar["jsonScalar"] - src__extractors__git__readStats["readStats"] - src__extractors__todo__action["action"] - src__extractors__markdown_paths__headingDirectories["headingDirectories"] + src__extractors__git__createDiscoveryState["createDiscoveryState"] + src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] + src__extractors__docs_record__linesFromChunk["linesFromChunk"] + src__extractors__docs_deterministic__root["root"] + src__extractors__todo__text["text"] + src__extractors__docs_record__action["action"] + src__extractors__docs_deterministic__statementRecord["statementRecord"] + src__extractors__nl__detectMissingFields["detectMissingFields"] + src__extractors__communication_helpers__fileParts["fileParts"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] + src__extractors__ast__isIntentRecords["isIntentRecords"] + src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] + src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] + src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"] + src__extractors__changelog__relative["relative"] + src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"] + src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"] + src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] + src__extractors__ast__records__start["start"] + src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] + src__extractors__nl__missing["missing"] + src__extractors__runtime_cycle__watched["watched"] + src__extractors__todo__lines["lines"] + src__extractors__communication_helpers__normalizeType["normalizeType"] src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] - src__extractors__communication__declaredParticipant["declaredParticipant"] - src__extractors__git__result["result"] - src__extractors__ast__typescript__symbolModifiers["symbolModifiers"] - src__extractors__docs_record__allowedAction["allowedAction"] - src__extractors__communication__identityRegistry["identityRegistry"] - src__extractors__nl__body["body"] + src__extractors__nl__sourcePath["sourcePath"] + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] + src__extractors__docs_chunks__markdownSections["markdownSections"] + src__extractors__communication_helpers__listValue["listValue"] + src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] + src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] + src__extractors__configuration__line["line"] + src__extractors__ast__external__result["result"] + src__extractors__nl__classified["classified"] + src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] + src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] + src__extractors__communication_helpers__nestedRole["nestedRole"] + src__extractors__configuration__jsonEntries["jsonEntries"] + src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] + src__extractors__git__extractGitIntent["extractGitIntent"] src__extractors__nl__confidence["confidence"] - src__extractors__nl_llm__NlAttemptError__sourceExcerpt["sourceExcerpt"] - src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] - src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__nl_llm__NlAttemptError__nonEmptyText["nonEmptyText"] + src__extractors__communication_helpers__normalize["normalize"] + src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] + src__extractors__configuration__bounded["bounded"] + src__extractors__ast__typescript__handleNode["handleNode"] + src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] + src__extractors__docs_record__keywordOverlap["keywordOverlap"] + src__extractors__docs_chunks__item["item"] + src__extractors__communication_helpers__sameStrings["sameStrings"] + src__extractors__communication_helpers__raw["raw"] + src__extractors__communication_helpers__inferIdentity["inferIdentity"] + src__extractors__configuration__isConfigurationPath["isConfigurationPath"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] + src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] + src__extractors__runtime_cycle__results["results"] src__extractors__changelog__body["body"] - src__extractors__docs_record__resolveAction["resolveAction"] - src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] - src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] - src__extractors__ast__isIntentRecords["isIntentRecords"] - src__extractors__nl_llm__NlAttemptError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__markdown_llm__MarkdownAttemptError__strings["strings"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] + src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] + src__extractors__nl__extractNlIntent["extractNlIntent"] + src__extractors__markdown_paths__basenames["basenames"] src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] - src__extractors__todo__resolvedPaths["resolvedPaths"] - src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] - src__extractors__git__readChangedFiles["readChangedFiles"] - src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] - src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] - src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] - src__extractors__markdown_llm__MarkdownAttemptError__enrichment["enrichment"] - src__extractors__nl__sourcePath["sourcePath"] - src__extractors__docs_deterministic__statementRecord["statementRecord"] - src__extractors__runtime_cycle__violationRecord["violationRecord"] - src__extractors__docs_chunks__sectionText["sectionText"] - src__extractors__docs_record__linesFromChunk["linesFromChunk"] - src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic["markDeterministic"] - src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] + src__extractors__todo__match["match"] + src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] + src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] + src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] + src__extractors__docs_deterministic__marker["marker"] src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] + src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] + src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] + src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] + src__extractors__runtime_cycle__jsonScalar["jsonScalar"] + src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] + src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] + src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] + src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] + src__extractors__changelog__lines["lines"] + src__extractors__configuration__uniqueEntries["uniqueEntries"] + src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] + src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"] + src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] + src__extractors__todo__relative["relative"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] + src__extractors__docs_record__hasTarget["hasTarget"] + src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"] + src__extractors__configuration__files["files"] + src__extractors__runtime_cycle__driftRecord["driftRecord"] + src__extractors__runtime_cycle__proposalRecord["proposalRecord"] + src__extractors__todo__task["task"] + src__extractors__ast__records__moduleTopicText["moduleTopicText"] + src__extractors__runtime_cycle__probeRecord["probeRecord"] + src__extractors__configuration__entries["entries"] + src__extractors__docs_chunks__sectionLines["sectionLines"] + src__extractors__docs_chunks__workerCount["workerCount"] + src__extractors__todo__extractTodo["extractTodo"] + src__extractors__docs_deterministic__primePathMapper["primePathMapper"] + src__extractors__nl__inferActor["inferActor"] + src__extractors__docs_record__allowedAction["allowedAction"] + src__extractors__runtime_cycle__boundedArray["boundedArray"] src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] - src__extractors__nl_llm__NlAttemptError__deterministic["deterministic"] - src__extractors__docs_schema__target["target"] - src__extractors__docs_chunks__index["index"] - src__extractors__ast__records__adapterRecords["adapterRecords"] - src__extractors__git__isGitWorkTree["isGitWorkTree"] - src__extractors__todo__text["text"] - src__extractors__configuration__relative["relative"] - src__extractors__docs_chunks__item["item"] - src__extractors__git__discoverGitRepositories["discoverGitRepositories"] - src__extractors__nl_llm__NlAttemptError__resolveAction["resolveAction"] - src__extractors__docs_record__keywordOverlap["keywordOverlap"] - src__extractors__configuration__entry["entry"] - src__extractors__docs_deterministic__action["action"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes["outcomes"] - src__extractors__communication__isTicketEvidenceFile["isTicketEvidenceFile"] - src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection["extractNlWithCorrection"] - src__extractors__communication__inferIdentity["inferIdentity"] - src__extractors__ast__typescript__capabilities["capabilities"] - src__extractors__docs_deterministic__readParagraph["readParagraph"] - src__extractors__markdown_paths__state["state"] - src__extractors__communication__basename["basename"] - src__extractors__communication__communicationSegments["communicationSegments"] - src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] + src__extractors__communication_file_helpers__inferred["inferred"] + src__extractors__ast__isExtractionResult["isExtractionResult"] + src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] + src__extractors__docs_record__allowedModality["allowedModality"] + src__extractors__docs_record__resolveTarget["resolveTarget"] src__extractors__git__extractChangedSymbols["extractChangedSymbols"] - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__configuration__configurationFormat["configurationFormat"] - src__extractors__communication__extractCommunicationFile["extractCommunicationFile"] - src__extractors__runtime_cycle__watched["watched"] - src__extractors__configuration__dockerEntries["dockerEntries"] - src__extractors__docs_record__resolveObject["resolveObject"] - src__extractors__todo__classified["classified"] - src__extractors__todo__lines["lines"] - src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] - end - subgraph src__graph - src__graph__linker__jaccard["jaccard"] - src__graph__linker__moduleAstIds["moduleAstIds"] - src__graph__symbol_resolution__values["values"] - src__graph__linker__indexAliases["indexAliases"] - src__graph__diff__width["width"] - src__graph__linker__candidatePairs["candidatePairs"] - src__graph__diff__changedFieldPaths["changedFieldPaths"] - src__graph__linker__buckets["buckets"] - src__graph__diff__assertGraph["assertGraph"] - src__graph__linker__isSuppressedConfigurationPair["isSuppressedConfigurationPair"] - src__graph__linker__isSuppressedAstPair["isSuppressedAstPair"] - src__graph__linker__keywordIndex["keywordIndex"] - src__graph__symbol_resolution__pathSelects["pathSelects"] - src__graph__symbol_resolution__byAlias["byAlias"] - src__graph__linker__byId["byId"] - src__graph__linker__scorePair["scorePair"] - src__graph__diff__paired["paired"] - src__graph__diff__left["left"] - src__graph__linker__intersectsAliases["intersectsAliases"] - src__graph__linker__deduplicateRecords["deduplicateRecords"] - src__graph__linker__rightId["rightId"] - src__graph__diff__relationKey["relationKey"] - src__graph__diff__values["values"] - src__graph__linker__linkIntentRecords["linkIntentRecords"] - src__graph__diff__truncate["truncate"] - src__graph__linker__astIds["astIds"] - src__graph__linker__indexKeywords["indexKeywords"] - src__graph__linker__indexTopicBuckets["indexTopicBuckets"] - src__graph__diff__y["y"] - src__graph__diff__recordIdentity["recordIdentity"] - src__graph__diff__right["right"] - src__graph__linker__determineRelation["determineRelation"] - src__graph__diff__metricCard["metricCard"] - src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"] - src__graph__linker__configurationIds["configurationIds"] - src__graph__linker__pathsIntersect["pathsIntersect"] - src__graph__linker__owners["owners"] - src__graph__symbol_resolution__selected["selected"] - src__graph__linker__values["values"] - src__graph__linker__score["score"] - src__graph__diff__normalizeRecord["normalizeRecord"] - src__graph__diff__groupRecords["groupRecords"] - src__graph__symbol_resolution__resolveSymbol["resolveSymbol"] - src__graph__linker__records["records"] - src__graph__diff__diffIntentGraphs["diffIntentGraphs"] - src__graph__linker__resolvableBasenames["resolvableBasenames"] - src__graph__diff__afterRecord["afterRecord"] - src__graph__linker__aliases["aliases"] - src__graph__diff__visibleRows["visibleRows"] - src__graph__linker__collectCandidatePairs["collectCandidatePairs"] - src__graph__diff__renderGraphDiffSvg["renderGraphDiffSvg"] - src__graph__diff__compareRelations["compareRelations"] - src__graph__linker__leftId["leftId"] - src__graph__symbol_resolution__byNlRecord["byNlRecord"] - src__graph__diff__groups["groups"] - src__graph__diff__beforeGroups["beforeGroups"] - src__graph__linker__indexResolvableBasenames["indexResolvableBasenames"] - src__graph__linker__isModuleTopicSource["isModuleTopicSource"] - src__graph__symbol_resolution__buildSymbolResolutionIndex["buildSymbolResolutionIndex"] - src__graph__linker__declarationAstIds["declarationAstIds"] - src__graph__symbol_resolution__isAstDeclaration["isAstDeclaration"] - src__graph__diff__afterGroups["afterGroups"] - src__graph__linker__expand["expand"] - src__graph__linker__isFileAggregateEvidencePair["isFileAggregateEvidencePair"] - src__graph__linker__leftKeywords["leftKeywords"] - src__graph__linker__set["set"] - src__graph__diff__escapeXml["escapeXml"] - src__graph__diff__isObject["isObject"] - src__graph__diff__beforeRecord["beforeRecord"] - src__graph__symbol_resolution__hasResolvedNlAstSymbolPair["hasResolvedNlAstSymbolPair"] - src__graph__linker__indexKeywordBuckets["indexKeywordBuckets"] - src__graph__symbol_resolution__uniquePaths["uniquePaths"] - src__graph__linker__indexTargetBuckets["indexTargetBuckets"] - src__graph__diff__height["height"] - src__graph__linker__addToBucket["addToBucket"] - src__graph__linker__pairsFromBuckets["pairsFromBuckets"] - src__graph__linker__intersects["intersects"] + src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -504,6 +479,142 @@ flowchart LR java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape + src__cli__main --> src__cli__printHelp + src__cli__main --> src__cli__parseArgs + src__cli__main --> src__cli__resolveMainCommand + src__cli__main --> src__cli__commandHandlers + src__cli__parsed --> src__cli__printHelp + src__cli__command --> src__cli__printHelp + src__cli__commandHandlers --> src__cli__initProject + src__cli__commandHandlers --> src__cli__doctor + src__cli__handleLink --> src__cli__emitJson + src__cli__handleLink --> src__cli__optionString + src__cli__handleDiagnose --> src__cli__emitJson + src__cli__handleDiagnose --> src__cli__optionString + src__cli__handleSummarize --> src__cli__optionString + src__cli__handleSummarize --> src__cli__optionSummaryMode + src__cli__diagnosticsPath --> src__cli__optionNumber + src__cli__diagnosticsPath --> src__cli__optionBoolean + src__cli__diagnostics --> src__cli__optionNumber + src__cli__diagnostics --> src__cli__optionBoolean + src__cli__result --> src__cli__execFileAsync + src__cli__handleProposeTodo --> src__cli__optionString + src__cli__handleProposeTodo --> src__cli__optionTaskMode + src__cli__handleRenderTodo --> src__cli__optionString + src__cli__handleApplyTodo --> src__cli__optionString + src__cli__handleProposeCodeChange --> src__cli__optionString + src__cli__handleRenderCodeChange --> src__cli__optionString + src__cli__handleProposeSourcePatch --> src__cli__optionString + src__cli__isPlanSet --> src__cli__optionString + src__cli__handleApplySourcePatch --> src__cli__optionString + src__cli__handleEvaluateCodeChange --> src__cli__optionString + src__cli__handleCloseCodeChange --> src__cli__optionString + src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot + src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions + src__cli__root --> src__cli__optionString + src__cli__root --> src__cli__optionNullableString + src__cli__root --> src__cli__optionLlmMode + src__cli__handlePipeline --> src__cli__resolvePipelineRoot + src__cli__handlePipeline --> src__cli__buildPipelineOptions + src__cli__handlePipeline --> src__cli__optionNullableString + src__cli__handlePipeline --> src__cli__reportPipelineDegradation + src__cli__handleWatch --> src__cli__resolvePipelineRoot + src__cli__handleWatch --> src__cli__resolveWatchTaskFile + src__cli__handleWatch --> src__cli__buildPipelineOptions + src__cli__handleWatch --> src__cli__optionNumber + src__cli__handleWatch --> src__cli__optionBoolean + src__cli__taskFile --> src__cli__optionNumber + src__cli__taskFile --> src__cli__optionBoolean + src__cli__taskFile --> src__cli__formatWatchEvent + src__cli__pipeline --> src__cli__optionNumber + src__cli__pipeline --> src__cli__optionBoolean + src__cli__pipeline --> src__cli__formatWatchEvent + src__cli__controller --> src__cli__optionNumber + src__cli__controller --> src__cli__optionBoolean + src__cli__controller --> src__cli__formatWatchEvent + src__cli__stop --> src__cli__optionNumber + src__cli__stop --> src__cli__optionBoolean + src__cli__stop --> src__cli__formatWatchEvent + src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions + src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString + src__cli__buildCommonPipelineOptions --> src__cli__optionList + src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean + src__cli__buildCommonPipelineOptions --> src__cli__optionString + src__cli__buildCommonPipelineOptions --> src__cli__optionNumber + src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode + src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode + src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode + src__cli__resolveWatchTaskFile --> src__cli__optionNullableString + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber + src__cli__formatWatchEvent --> src__cli__file + src__cli__stamp --> src__cli__file + src__cli__handleDiff --> src__cli__parseDiffMode + src__cli__handleDiff --> src__cli__handleGraphDiff + src__cli__handleDiff --> src__cli__buildDiffPayload + src__cli__handleDiff --> src__cli__optionString + src__cli__handleDiff --> src__cli__optionNumber + src__cli__svg --> src__cli__optionNumber + src__cli__svg --> src__cli__optionBoolean + src__cli__parseDiffMode --> src__cli__optionString + src__cli__handleGraphDiff --> src__cli__optionString + src__cli__handleGraphDiff --> src__cli__optionNumber + src__cli__diff --> src__cli__optionNumber + src__cli__buildDiffPayload --> src__cli__buildFileDiff + src__cli__buildDiffPayload --> src__cli__buildGitDiff + src__cli__buildFileDiff --> src__cli__optionNumber + src__cli__context --> src__cli__optionString + src__cli__context --> src__cli__optionBoolean + src__cli__context --> src__cli__optionNumber + src__cli__buildGitDiff --> src__cli__optionNumber + src__cli__buildGitDiff --> src__cli__optionString + src__cli__buildGitDiff --> src__cli__optionBoolean + src__cli__handleReality --> src__cli__optionString + src__cli__handleReality --> src__cli__optionNumber + src__cli__handleReality --> src__cli__optionBoolean + src__cli__view --> src__cli__optionNumber + src__cli__view --> src__cli__optionBoolean + src__cli__handleExtract --> src__cli__optionString + src__cli__handleExtract --> src__cli__handler + src__cli__handleExtractNl --> src__cli__optionString + src__cli__handleExtractNl --> src__cli__optionNlMode + src__cli__handleExtractNl --> src__cli__emitExtraction + src__cli__handleExtractGit --> src__cli__optionNumber + src__cli__handleExtractGit --> src__cli__emitExtraction + src__cli__handleExtractAst --> src__cli__emitExtraction + src__cli__handleExtractConfig --> src__cli__emitExtraction + src__cli__handleExtractRuntime --> src__cli__emitExtraction + src__cli__handleExtractMarkdown --> src__cli__optionNullableString + src__cli__handleExtractMarkdown --> src__cli__optionLlmMode + src__cli__handleExtractMarkdown --> src__cli__emitExtraction + src__cli__handleExtractDocs --> src__cli__optionList + src__cli__handleExtractDocs --> src__cli__emitExtraction + src__cli__handleExtractCommunication --> src__cli__optionString + src__cli__handleExtractCommunication --> src__cli__optionNullableString + src__cli__handleExtractCommunication --> src__cli__optionLlmMode + src__cli__handleExtractCommunication --> src__cli__emitExtraction + src__cli__handleCommunication --> src__cli__optionString + src__cli__handleCommunication --> src__cli__optionNullableString + src__cli__handleCommunication --> src__cli__optionLlmMode + src__cli__handleCommunication --> src__cli__optionNumber + src__cli__handleCommunication --> src__cli__optionBoolean + src__cli__handleIntake --> src__cli__optionString + src__cli__handleIntake --> src__cli__optionBoolean + src__cli__absolute --> src__cli__optionString + src__cli__doctor --> src__cli__execFileAsync + src__cli__optionNumber --> src__cli__optionString + src__cli__optionList --> src__cli__optionString + src__cli__optionNlMode --> src__cli__optionLlmMode + src__cli__optionLlmMode --> src__cli__optionString + src__cli__optionTaskMode --> src__cli__optionString + src__cli__optionSummaryMode --> src__cli__optionLlmMode + src__cli__optionSummaryMode --> src__cli__optionBoolean + src__cli__optionPipelineTaskMode --> src__cli__optionString + src__cli__invokedPath --> src__cli__main src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields @@ -585,38 +696,8 @@ flowchart LR src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__markDeterministic - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__markDeterministic - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__markDeterministic - src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__markDeterministic - src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow - src__extractors__nl_llm__NlLlmRequiredError__absolute --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlLlmRequiredError__body --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlLlmRequiredError__sourcePath --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlLlmRequiredError__maxLine --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlLlmRequiredError__prompt --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlAttemptError__failedAudit --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlAttemptError__deterministic --> src__extractors__nl_llm__NlAttemptError__fallback - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveAction - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__nonEmptyText - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveObject - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__allowedModality - src__extractors__nl_llm__NlAttemptError__lines --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt - src__extractors__nl_llm__NlAttemptError__action --> src__extractors__nl_llm__NlAttemptError__resolveObject - src__extractors__nl_llm__NlAttemptError__normalizedText --> src__extractors__nl_llm__NlAttemptError__resolveObject - src__extractors__nl_llm__NlAttemptError__statementText --> src__extractors__nl_llm__NlAttemptError__allowedModality - src__extractors__nl_llm__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm__NlAttemptError__clampLine - src__extractors__nl_llm__NlAttemptError__resolveAction --> src__extractors__nl_llm__NlAttemptError__allowedAction - src__extractors__nl_llm__NlAttemptError__isPlaceholder --> src__extractors__nl_llm__NlAttemptError__nonEmptyText - src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__isPlaceholder - src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__nonEmptyText - src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm__NlAttemptError__nlStrings + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow + src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget @@ -701,6 +782,37 @@ flowchart LR src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings + src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote + src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename + src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename + src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename + src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename + src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise + src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush + src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise + src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise + src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote + src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize src__extractors__todo__extractTodo --> src__extractors__todo__match src__extractors__todo__body --> src__extractors__todo__match src__extractors__todo__relative --> src__extractors__todo__match @@ -716,41 +828,6 @@ flowchart LR src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner src__extractors__todo__inferOwner --> src__extractors__todo__match src__extractors__todo__extractExplicitId --> src__extractors__todo__match - src__extractors__communication__extractCommunicationIntent --> src__extractors__communication__extractCommunicationFile - src__extractors__communication__identityRegistry --> src__extractors__communication__extractCommunicationFile - src__extractors__communication__communicationFiles --> src__extractors__communication__extractCommunicationFile - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__parseEnvelope - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__inferIdentity - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__first - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__isTicketEvidenceFile - src__extractors__communication__envelope --> src__extractors__communication__basename - src__extractors__communication__inferred --> src__extractors__communication__basename - src__extractors__communication__explicitEnvelope --> src__extractors__communication__basename - src__extractors__communication__declaredParticipant --> src__extractors__communication__basename - src__extractors__communication__declaredRole --> src__extractors__communication__basename - src__extractors__communication__declaredParticipantId --> src__extractors__communication__basename - src__extractors__communication__identity --> src__extractors__communication__basename - src__extractors__communication__participant --> src__extractors__communication__basename - src__extractors__communication__sameStrings --> src__extractors__communication__normalize - src__extractors__communication__parseEnvelope --> src__extractors__communication__match - src__extractors__communication__parseEnvelope --> src__extractors__communication__unquote - src__extractors__communication__inferIdentity --> src__extractors__communication__basename - src__extractors__communication__inferIdentity --> src__extractors__communication__match - src__extractors__communication__inferIdentity --> src__extractors__communication__isCommunicationType - src__extractors__communication__fileParts --> src__extractors__communication__isCommunicationType - src__extractors__communication__nestedRoleIndex --> src__extractors__communication__isCommunicationType - src__extractors__communication__nestedRole --> src__extractors__communication__isCommunicationType - src__extractors__communication__nestedParticipant --> src__extractors__communication__isCommunicationType - src__extractors__communication__isTicketEvidenceFile --> src__extractors__communication__basename - src__extractors__communication__communicationSegments --> src__extractors__communication__isCommunicationNoise - src__extractors__communication__communicationSegments --> src__extractors__communication__match - src__extractors__communication__communicationSegments --> src__extractors__communication__flush - src__extractors__communication__flush --> src__extractors__communication__isCommunicationNoise - src__extractors__communication__item --> src__extractors__communication__isCommunicationNoise - src__extractors__communication__raw --> src__extractors__communication__match - src__extractors__communication__heading --> src__extractors__communication__match - src__extractors__communication__normalizeType --> src__extractors__communication__isCommunicationType - src__extractors__communication__listValue --> src__extractors__communication__unquote src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories @@ -800,24 +877,26 @@ flowchart LR src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__readPrompt - src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow - src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering - src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection - src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract - src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch - src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage - src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering - src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic - src__extractors__markdown_llm__MarkdownAttemptError__failed --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm__MarkdownAttemptError__strings - src__extractors__markdown_llm__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm__MarkdownAttemptError__strings + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow + src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow + src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile + src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile + src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality + src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt + src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject + src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject + src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality + src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine + src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction + src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText + src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords @@ -825,118 +904,14 @@ flowchart LR src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind - src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__add --> src__extractors__ast__typescript__lineRange - src__extractors__ast__typescript__add --> src__extractors__ast__typescript__excerpt - src__extractors__ast__typescript__add --> src__extractors__ast__typescript__languageName - src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__modifiers - src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__symbolModifiers --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__isTopLevel - src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__callee --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__capabilities --> src__extractors__ast__typescript__add - src__graph__diff__diffIntentGraphs --> src__graph__diff__assertGraph - src__graph__diff__diffIntentGraphs --> src__graph__diff__groupRecords - src__graph__diff__beforeGroups --> src__graph__diff__changedFieldPaths - src__graph__diff__beforeGroups --> src__graph__diff__normalizeRecord - src__graph__diff__afterGroups --> src__graph__diff__changedFieldPaths - src__graph__diff__afterGroups --> src__graph__diff__normalizeRecord - src__graph__diff__left --> src__graph__diff__changedFieldPaths - src__graph__diff__left --> src__graph__diff__normalizeRecord - src__graph__diff__right --> src__graph__diff__changedFieldPaths - src__graph__diff__right --> src__graph__diff__normalizeRecord - src__graph__diff__paired --> src__graph__diff__changedFieldPaths - src__graph__diff__paired --> src__graph__diff__normalizeRecord - src__graph__diff__beforeRecord --> src__graph__diff__changedFieldPaths - src__graph__diff__beforeRecord --> src__graph__diff__normalizeRecord - src__graph__diff__afterRecord --> src__graph__diff__changedFieldPaths - src__graph__diff__afterRecord --> src__graph__diff__normalizeRecord - src__graph__diff__renderGraphDiffSvg --> src__graph__diff__escapeXml - src__graph__diff__renderGraphDiffSvg --> src__graph__diff__truncate - src__graph__diff__visibleRows --> src__graph__diff__escapeXml - src__graph__diff__visibleRows --> src__graph__diff__truncate - src__graph__diff__width --> src__graph__diff__escapeXml - src__graph__diff__width --> src__graph__diff__truncate - src__graph__diff__height --> src__graph__diff__escapeXml - src__graph__diff__height --> src__graph__diff__truncate - src__graph__diff__y --> src__graph__diff__escapeXml - src__graph__diff__y --> src__graph__diff__truncate - src__graph__diff__groupRecords --> src__graph__diff__recordIdentity - src__graph__diff__groupRecords --> src__graph__diff__values - src__graph__diff__groups --> src__graph__diff__recordIdentity - src__graph__diff__changedFieldPaths --> src__graph__diff__isObject - src__graph__diff__compareRelations --> src__graph__diff__relationKey - src__graph__diff__metricCard --> src__graph__diff__escapeXml - src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__values - src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol - src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects - src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths - src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths - src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords - src__graph__linker__linkIntentRecords --> src__graph__linker__indexKeywords - src__graph__linker__records --> src__graph__linker__scorePair - src__graph__linker__records --> src__graph__linker__determineRelation - src__graph__linker__byId --> src__graph__linker__set - src__graph__linker__keywordIndex --> src__graph__linker__scorePair - src__graph__linker__keywordIndex --> src__graph__linker__determineRelation - src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair - src__graph__linker__symbolResolutionIndex --> src__graph__linker__determineRelation - src__graph__linker__candidatePairs --> src__graph__linker__scorePair - src__graph__linker__candidatePairs --> src__graph__linker__determineRelation - src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair - src__graph__linker__resolvableBasenames --> src__graph__linker__determineRelation - src__graph__linker__deduplicateRecords --> src__graph__linker__set - src__graph__linker__deduplicateRecords --> src__graph__linker__values - src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTargetBuckets - src__graph__linker__collectCandidatePairs --> src__graph__linker__indexKeywordBuckets - src__graph__linker__collectCandidatePairs --> src__graph__linker__isModuleTopicSource - src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTopicBuckets - src__graph__linker__collectCandidatePairs --> src__graph__linker__pairsFromBuckets - src__graph__linker__buckets --> src__graph__linker__indexTargetBuckets - src__graph__linker__buckets --> src__graph__linker__indexKeywordBuckets - src__graph__linker__buckets --> src__graph__linker__isModuleTopicSource - src__graph__linker__buckets --> src__graph__linker__indexTopicBuckets - src__graph__linker__astIds --> src__graph__linker__indexTargetBuckets - src__graph__linker__astIds --> src__graph__linker__indexKeywordBuckets - src__graph__linker__astIds --> src__graph__linker__isModuleTopicSource - src__graph__linker__astIds --> src__graph__linker__indexTopicBuckets - src__graph__linker__moduleAstIds --> src__graph__linker__indexTargetBuckets - src__graph__linker__moduleAstIds --> src__graph__linker__indexKeywordBuckets - src__graph__linker__moduleAstIds --> src__graph__linker__isModuleTopicSource - src__graph__linker__moduleAstIds --> src__graph__linker__indexTopicBuckets - src__graph__linker__declarationAstIds --> src__graph__linker__indexTargetBuckets - src__graph__linker__declarationAstIds --> src__graph__linker__indexKeywordBuckets - src__graph__linker__declarationAstIds --> src__graph__linker__isModuleTopicSource - src__graph__linker__declarationAstIds --> src__graph__linker__indexTopicBuckets - src__graph__linker__configurationIds --> src__graph__linker__indexTargetBuckets - src__graph__linker__configurationIds --> src__graph__linker__indexKeywordBuckets - src__graph__linker__configurationIds --> src__graph__linker__isModuleTopicSource - src__graph__linker__configurationIds --> src__graph__linker__indexTopicBuckets - src__graph__linker__indexTargetBuckets --> src__graph__linker__addToBucket - src__graph__linker__indexTargetBuckets --> src__graph__linker__indexAliases - src__graph__linker__indexAliases --> src__graph__linker__aliases - src__graph__linker__indexAliases --> src__graph__linker__addToBucket - src__graph__linker__indexKeywordBuckets --> src__graph__linker__addToBucket - src__graph__linker__indexTopicBuckets --> src__graph__linker__addToBucket - src__graph__linker__addToBucket --> src__graph__linker__set - src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedAstPair - src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedConfigurationPair - src__graph__linker__pairsFromBuckets --> src__graph__linker__set - src__graph__linker__leftId --> src__graph__linker__set - src__graph__linker__rightId --> src__graph__linker__set - src__graph__linker__indexResolvableBasenames --> src__graph__linker__set - src__graph__linker__owners --> src__graph__linker__set - src__graph__linker__pathsIntersect --> src__graph__linker__expand - src__graph__linker__scorePair --> src__graph__linker__intersects - src__graph__linker__scorePair --> src__graph__linker__intersectsAliases - src__graph__linker__scorePair --> src__graph__linker__pathsIntersect - src__graph__linker__scorePair --> src__graph__linker__isFileAggregateEvidencePair - src__graph__linker__scorePair --> src__graph__linker__jaccard - src__graph__linker__score --> src__graph__linker__intersects - src__graph__linker__leftKeywords --> src__graph__linker__intersects + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact + src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext + src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind + src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration diff --git a/project/calls.png b/project/calls.png index d62a463a59920cabda8ec471f605f80fceefbfeb..211a7055ff53e09eea88299439549c1ef8f85eb5 100644 GIT binary patch literal 100449 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 z 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%0AGEu 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 funcs"] sdk__python["sdk.python
68 funcs"] src__diff["src.diff
183 funcs"] - src__graph["src.graph
192 funcs"] + src__graph["src.graph
225 funcs"] src__live["src.live
60 funcs"] src__synthesis["src.synthesis
292 funcs"] scripts__research ==>|7| src__live diff --git a/project/compact_flow.png b/project/compact_flow.png index d40b8a654a52ee136981e39604180c09e023a8d6..9b23ee509d033da3ed736ccd38bfff5e107b825c 100644 GIT binary patch delta 4497 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 De4+_s diff --git a/project/context.md b/project/context.md index abe7fb6..d13adb8 100644 --- a/project/context.md +++ b/project/context.md @@ -5,12 +5,12 @@ - **Project**: /home/tom/github/semcod/todo2code - **Primary Language**: typescript -- **Languages**: typescript: 138, json: 40, python: 16, javascript: 15, shell: 8 +- **Languages**: typescript: 143, json: 40, python: 16, javascript: 15, shell: 8 - **Analysis Mode**: static -- **Total Functions**: 3592 -- **Total Classes**: 367 -- **Modules**: 246 -- **Entry Points**: 2560 +- **Total Functions**: 3683 +- **Total Classes**: 373 +- **Modules**: 251 +- **Entry Points**: 2620 ## Architecture by Module @@ -25,7 +25,8 @@ - **File**: `implementation.ts` ### src.services.actions -- **Functions**: 113 +- **Functions**: 118 +- **Classes**: 1 - **File**: `actions.ts` ### src.interfaces.a2a-task-store @@ -33,16 +34,16 @@ - **Classes**: 3 - **File**: `a2a-task-store.ts` +### src.graph.linker +- **Functions**: 85 +- **Classes**: 4 +- **File**: `linker.ts` + ### src.communication.intake-service - **Functions**: 82 - **Classes**: 2 - **File**: `intake-service.ts` -### src.extractors.communication -- **Functions**: 80 -- **Classes**: 5 -- **File**: `communication.ts` - ### src.communication.analyzer - **Functions**: 79 - **Classes**: 3 @@ -53,11 +54,6 @@ - **Classes**: 3 - **File**: `reality.ts` -### src.graph.linker -- **Functions**: 75 -- **Classes**: 4 -- **File**: `linker.ts` - ### src.pipeline.run - **Functions**: 65 - **Classes**: 1 @@ -68,25 +64,25 @@ - **Classes**: 6 - **File**: `git.ts` +### src.core.text +- **Functions**: 62 +- **File**: `text.ts` + +### src.graph.diagnostics +- **Functions**: 61 +- **Classes**: 1 +- **File**: `diagnostics.ts` + ### src.evaluation.gold-cases - **Functions**: 57 - **Classes**: 4 - **File**: `gold-cases.ts` -### src.core.text -- **Functions**: 56 -- **File**: `text.ts` - ### src.comparison.workspace - **Functions**: 56 - **Classes**: 3 - **File**: `workspace.ts` -### src.communication.llm.implementation -- **Functions**: 55 -- **Classes**: 8 -- **File**: `implementation.ts` - ### src.synthesis.todo-patch - **Functions**: 53 - **Classes**: 5 @@ -97,6 +93,11 @@ - **Classes**: 1 - **File**: `text.ts` +### src.extractors.communication-helpers +- **Functions**: 49 +- **Classes**: 3 +- **File**: `communication-helpers.ts` + ### src.llm.openrouter - **Functions**: 49 - **Classes**: 7 @@ -127,9 +128,6 @@ Main execution flows into the system: ### src.pipeline.run.runPipeline - **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited -### src.extractors.ast.typescript.extractTypeScriptFile -- **Calls**: src.extractors.ast.typescript.relativePosix, src.extractors.ast.typescript.createSourceFile, src.extractors.ast.typescript.scriptKind, src.extractors.ast.typescript.getLineAndCharacterOfPosition, src.extractors.ast.typescript.getStart, src.extractors.ast.typescript.getEnd, src.extractors.ast.typescript.getText, src.extractors.ast.typescript.slice - ### scripts.research.rank-intent-graph-embeddings.main - **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode @@ -151,9 +149,6 @@ Main execution flows into the system: ### src.interfaces.a2a-message.parseCommand - **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim -### src.graph.diagnostics.diagnoseGraph -- **Calls**: src.graph.diagnostics.Date, src.graph.diagnostics.toISOString, src.graph.diagnostics.assertIntentGraph, src.graph.diagnostics.buildNeighbors, src.graph.diagnostics.Map, src.graph.diagnostics.map, src.graph.diagnostics.indexGroundedImplementationEvidence, src.graph.diagnostics.indexImplementedPaths - ### src.core.text.inferObject - **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa @@ -185,10 +180,10 @@ Main execution flows into the system: - **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print ### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited -- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.CommunicationAttemptError.audit, src.communication.llm.implementation.CommunicationAttemptError.markDeterministic, src.communication.llm.implementation.CommunicationAttemptError.deterministicSyntheses, src.communication.llm.implementation.CommunicationAttemptError.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured +- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured ### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited -- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.audit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow +- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow ### src.graph.linker.linkIntentRecords - **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map @@ -199,12 +194,18 @@ Main execution flows into the system: ### rust-ast.src.main.main - **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata -### src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited -- **Calls**: src.extractors.markdown-llm.now, src.extractors.markdown-llm.extractMarkdownIntent, src.extractors.markdown-llm.MarkdownAttemptError.stageAudit, src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic, src.extractors.markdown-llm.OpenRouterClient, src.extractors.markdown-llm.isConfigured, src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow, src.extractors.markdown-llm.MarkdownAttemptError.readPrompt - ### sdk.typescript.examples.basic.baseUrl - **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error +### sdk.typescript.examples.basic.token +- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error + +### sdk.typescript.examples.basic.root +- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error + +### sdk.typescript.examples.basic.main +- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error + ## Process Flows Key execution flows identified: @@ -234,39 +235,39 @@ main [sdk.python.examples.basic] runPipeline [src.pipeline.run] ``` -### Flow 5: extractTypeScriptFile -``` -extractTypeScriptFile [src.extractors.ast.typescript] -``` - -### Flow 6: diffUiHtml +### Flow 5: diffUiHtml ``` diffUiHtml [src.web.diff-ui] ``` -### Flow 7: compareWorkspaceIntent +### Flow 6: compareWorkspaceIntent ``` compareWorkspaceIntent [src.comparison.workspace] └─> git └─> execFileAsync ``` -### Flow 8: applyCodeChangeSourcePatch +### Flow 7: applyCodeChangeSourcePatch ``` applyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation] └─> assertCodeChangeSourcePatch ``` -### Flow 9: analyzeCommunication +### Flow 8: analyzeCommunication ``` analyzeCommunication [src.communication.analyzer] ``` -### Flow 10: proposeCodeChangePlans +### Flow 9: proposeCodeChangePlans ``` proposeCodeChangePlans [src.synthesis.code-change-plan.implementation] ``` +### Flow 10: parseCommand +``` +parseCommand [src.interfaces.a2a-message] +``` + ## Key Classes ### src.communication.intake-service.GovernedIntakeService @@ -285,10 +286,6 @@ proposeCodeChangePlans [src.synthesis.code-change-plan.implementation] - **Methods**: 44 - **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base -### src.communication.llm.implementation.CommunicationAttemptError -- **Methods**: 40 -- **Key Methods**: src.communication.llm.implementation.CommunicationAttemptError.super, src.communication.llm.implementation.CommunicationAttemptError.enrichWithCorrection, src.communication.llm.implementation.CommunicationAttemptError.completion, src.communication.llm.implementation.CommunicationAttemptError.fallbackOrThrow, src.communication.llm.implementation.CommunicationAttemptError.failed, src.communication.llm.implementation.CommunicationAttemptError.marked, src.communication.llm.implementation.CommunicationAttemptError.participantGroups, src.communication.llm.implementation.CommunicationAttemptError.grouped, src.communication.llm.implementation.CommunicationAttemptError.participant, src.communication.llm.implementation.CommunicationAttemptError.role - ### src.llm.structured-schema.StructuredResponseError - **Methods**: 37 - **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number @@ -301,9 +298,9 @@ Example: - **Methods**: 34 - **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace -### src.extractors.nl-llm.NlAttemptError -- **Methods**: 31 -- **Key Methods**: src.extractors.nl-llm.NlAttemptError.super, src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm.NlAttemptError.completion, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow, src.extractors.nl-llm.NlAttemptError.failedAudit, src.extractors.nl-llm.NlAttemptError.deterministic, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.toIntentRecord, src.extractors.nl-llm.NlAttemptError.lines, src.extractors.nl-llm.NlAttemptError.action +### src.extractors.markdown-llm-helpers.MarkdownAttemptError +- **Methods**: 30 +- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering ### src.extractors.docs-llm.DocumentationLlmRequiredError - **Methods**: 29 @@ -313,6 +310,10 @@ Example: - **Methods**: 29 - **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response +### src.extractors.nl-llm-helpers.NlAttemptError +- **Methods**: 28 +- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit + ### sdk.php.src.Client.Todo2Code.Client - **Methods**: 27 - **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs @@ -321,10 +322,6 @@ Example: - **Methods**: 25 - **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add -### src.extractors.markdown-llm.MarkdownAttemptError -- **Methods**: 24 -- **Key Methods**: src.extractors.markdown-llm.MarkdownAttemptError.super, src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering, src.extractors.markdown-llm.MarkdownAttemptError.metadataByRecord, src.extractors.markdown-llm.MarkdownAttemptError.uncovered, src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch, src.extractors.markdown-llm.MarkdownAttemptError.half, src.extractors.markdown-llm.MarkdownAttemptError.emptyCoverage, src.extractors.markdown-llm.MarkdownAttemptError.enrichMarkdownBatchWithCorrection, src.extractors.markdown-llm.MarkdownAttemptError.completion, src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow - ### src.synthesis.tasks-llm.TaskSynthesisAttemptError - **Methods**: 21 - **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection @@ -333,6 +330,10 @@ Example: - **Methods**: 21 - **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions +### src.extractors.nl-llm.NlLlmRequiredError +- **Methods**: 19 +- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine + ### src.communication.intake-store.IntakeEventStore - **Methods**: 19 - **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry @@ -341,17 +342,18 @@ Example: - **Methods**: 16 - **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange -### src.extractors.nl-llm.NlLlmRequiredError -- **Methods**: 15 -- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine - ### src.communication.llm.implementation.CommunicationLlmRequiredError - **Methods**: 15 - **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal -### src.extractors.markdown-llm.MarkdownLlmRequiredError +### src.core.content-cache.ContentCache +- **Methods**: 13 +- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory + +### python.ast_extract.FactVisitor - **Methods**: 13 -- **Key Methods**: src.extractors.markdown-llm.MarkdownLlmRequiredError.super, src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited, src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt, src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic, src.extractors.markdown-llm.MarkdownLlmRequiredError.client, src.extractors.markdown-llm.MarkdownLlmRequiredError.prompt, src.extractors.markdown-llm.MarkdownLlmRequiredError.enrichments, src.extractors.markdown-llm.MarkdownLlmRequiredError.responseByRecord, src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes, src.extractors.markdown-llm.MarkdownLlmRequiredError.corrected +- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign +- **Inherits**: ast.NodeVisitor ## Data Transformation Functions @@ -365,6 +367,18 @@ Key functions that process and transform data: ### java.JavaAstExtract.JavaAstExtract.parseFile +### src.cli.parsed +- **Output to**: src.cli.has, src.cli.printHelp + +### src.cli.formatWatchEvent +- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change + +### src.cli.parseDiffMode +- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error + +### src.cli.parseArgs +- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set + ### src.extractors.runtime-cycle.parseCycle - **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray @@ -392,20 +406,23 @@ Key functions that process and transform data: ### src.extractors.docs-deterministic.parseParagraphStatement - **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement -### src.extractors.communication.parseEnvelope -- **Output to**: src.extractors.communication.split, src.extractors.communication.trim, src.extractors.communication.slice, src.extractors.communication.findIndex, src.extractors.communication.match +### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments +- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has -### src.extractors.communication.parsed +### src.extractors.communication-helpers.parseEnvelope +- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match + +### src.extractors.communication-helpers.parsed ### src.extractors.git.processDiscoveryDirectory - **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository -### src.extractors.markdown-llm.MarkdownAttemptError.validateEnrichments -- **Output to**: src.extractors.markdown-llm.isArray, src.extractors.markdown-llm.Error, src.extractors.markdown-llm.Set, src.extractors.markdown-llm.map, src.extractors.markdown-llm.has - ### src.extractors.ast.external.parsed - **Output to**: src.extractors.ast.external.adapterRecords +### src.services.actions.parseCommunicationGraphFilter +- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue + ### src.core.ignore.parseIgnoreFile - **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter @@ -415,21 +432,6 @@ Key functions that process and transform data: ### src.core.schema.conclusions.validateGroundedContext - **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test -### src.core.schema.conclusions.validateTodoProposalContext -- **Output to**: src.core.schema.conclusions.validateGroundedContext, src.core.schema.conclusions.assertConclusions, src.core.schema.conclusions.Set, src.core.schema.conclusions.map - -### src.web.diff-ui.formatBytes -- **Output to**: src.web.diff-ui.selectedRun, src.web.diff-ui.byId - -### src.semantic.reranker.validation.validateRetrieval -- **Output to**: src.semantic.reranker.validation.requiredText, src.semantic.reranker.validation.test, src.semantic.reranker.validation.Error - -### src.semantic.reranker.validation.validateGeneration -- **Output to**: src.semantic.reranker.validation.Error, src.semantic.reranker.validation.requiredText, src.semantic.reranker.validation.test - -### src.semantic.reranker.validation.validateVerdictReason -- **Output to**: src.semantic.reranker.validation.Set, src.semantic.reranker.validation.has, src.semantic.reranker.validation.Error - ## Behavioral Patterns ### recursion_dotted_name @@ -450,7 +452,6 @@ Functions exposed as public API (no underscore prefix): - `src.services.actions.root` - 64 calls - `sdk.python.examples.basic.main` - 62 calls - `src.pipeline.run.runPipeline` - 56 calls -- `src.extractors.ast.typescript.extractTypeScriptFile` - 44 calls - `scripts.research.rank-intent-graph-embeddings.main` - 43 calls - `src.web.diff-ui.diffUiHtml` - 42 calls - `src.comparison.workspace.compareWorkspaceIntent` - 40 calls @@ -460,19 +461,16 @@ Functions exposed as public API (no underscore prefix): - `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls - `src.interfaces.a2a-message.parseCommand` - 33 calls - `sdk.rust.examples.basic.run` - 33 calls -- `src.graph.diagnostics.diagnoseGraph` - 32 calls - `src.core.text.inferObject` - 31 calls - `scripts.research.evaluate-embedding-pairs.main` - 30 calls - `src.core.text.normalized` - 29 calls - `src.interfaces.intake_cli.main` - 29 calls - `src.operations.validation.assertOperationPlan` - 28 calls -- `src.extractors.ast.typescript.visit` - 26 calls - `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls - `src.comparison.workspace.temporaryParent` - 25 calls - `src.comparison.workspace.baseWorktree` - 25 calls - `sdk.go.examples.basic.main.run` - 25 calls - `src.extractors.todo.extractTodo` - 24 calls -- `src.extractors.communication.extractCommunicationFile` - 24 calls - `scripts.verify-env-contract.makefile` - 24 calls - `python.ast_extract.main` - 24 calls - `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls @@ -481,11 +479,15 @@ Functions exposed as public API (no underscore prefix): - `scripts.live-model-comparison.main` - 22 calls - `rust-ast.src.main.main` - 21 calls - `src.extractors.git.extractRepositoryGitIntent` - 21 calls -- `src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited` - 21 calls - `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls - `python.ast_extract.iter_python_files` - 21 calls - `sdk.typescript.examples.basic.baseUrl` - 21 calls - `sdk.typescript.examples.basic.token` - 21 calls +- `sdk.typescript.examples.basic.root` - 21 calls +- `sdk.typescript.examples.basic.main` - 21 calls +- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls +- `rust-ast.src.main.collect_files` - 20 calls +- `src.extractors.nl.extractNlIntent` - 20 calls ## System Interactions @@ -511,11 +513,6 @@ graph TD runPipeline --> Error runPipeline --> newRunId runPipeline --> join - extractTypeScriptFil --> relativePosix - extractTypeScriptFil --> createSourceFile - extractTypeScriptFil --> scriptKind - extractTypeScriptFil --> getLineAndCharacterO - extractTypeScriptFil --> getStart main --> parse_args main --> read_bytes main --> loads @@ -523,6 +520,11 @@ graph TD diffUiHtml --> gradient diffUiHtml --> min diffUiHtml --> clamp + diffUiHtml --> not + diffUiHtml --> media + compareWorkspaceInte --> resolve + compareWorkspaceInte --> git + compareWorkspaceInte --> trim ``` ## Reverse Engineering Guidelines diff --git a/project/evolution.toon.yaml b/project/evolution.toon.yaml index b9929bd..a424d60 100644 --- a/project/evolution.toon.yaml +++ b/project/evolution.toon.yaml @@ -1,4 +1,4 @@ -# code2llm/evolution | 3283 func | 132f | 2026-08-04 +# code2llm/evolution | 3374 func | 137f | 2026-08-04 # generated in 0.01s NEXT[10] (ranked by impact): @@ -34,14 +34,14 @@ NEXT[10] (ranked by impact): WHY: CC=63 exceeds 15 EFFORT: ~1h IMPACT: 2079 - [9] !! SPLIT-FUNC extractTypeScriptFile CC=43 fan=44 - WHY: CC=43 exceeds 15 - EFFORT: ~1h IMPACT: 1892 - - [10] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 + [9] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 WHY: CC=48 exceeds 15 EFFORT: ~1h IMPACT: 1680 + [10] !! SPLIT-FUNC applyCodeChangeSourcePatch CC=41 fan=35 + WHY: CC=41 exceeds 15 + EFFORT: ~1h IMPACT: 1435 + RISKS[3]: ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths @@ -49,10 +49,10 @@ RISKS[3]: ⚠ Splitting src/cli.ts may break 124 import paths METRICS-TARGET: - CC̄: 3.9 → ≤2.7 + CC̄: 3.7 → ≤2.6 max-CC: 84 → ≤20 god-modules: 13 → 0 - high-CC(≥15): 99 → ≤49 + high-CC(≥15): 79 → ≤39 hub-types: 0 → ≤0 PATTERNS (language parser shared logic): @@ -80,4 +80,4 @@ PATTERNS (language parser shared logic): - Standardized FunctionInfo/ClassInfo models HISTORY: - prev CC̄=3.9 → now CC̄=3.9 + prev CC̄=3.7 → now CC̄=3.7 diff --git a/project/flow.mmd b/project/flow.mmd index 4443849..1f1894b 100644 --- a/project/flow.mmd +++ b/project/flow.mmd @@ -20,7 +20,7 @@ flowchart TD src__cli__handleDiagnose["handleDiagnose"] src__cli__graphFile["graphFile"] src__cli__handleSummarize["handleSummarize"] - ...["+103 more"] + ...["+109 more"] end subgraph Core @@ -39,7 +39,10 @@ flowchart TD rust_ast__src__main__visit_item_static["visit_item_static"] rust_ast__src__main__visit_item_fn["visit_item_fn"] rust_ast__src__main__visit_item_impl["visit_item_impl"] - ...["+2324 more"] + ...["+2378 more"] + end + + subgraph Exporters end class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry diff --git a/project/flow.png b/project/flow.png index 25da449a889076e2b7e8c1c17fd5f18796ab947c..cfe954a0877de7cade2053824c4b3e45d6f729b5 100644 GIT binary patch literal 14246 zcma)jWn3N0vTuxF3Be(_ySo$IJwR}0;S0Bg1b25^xLa_C;O_43ZVMLrvd`W7+;`r) zA8vij`BLlosDJ|o~Dym|BHvy`N$@|!pCihu4I;okize@gFIzIlWE zMoLuZyKDN%>gVq&>g`k)8Bq?tWJ>R(k%Nhp1j@c47LiZS)w1T`SGi#Gu<$JLEbSkx zSe)aWx|ceatGCSIKF;AZU58$aSE@8EIXfQAWH)rx_Abj?@hZ_OLW_PPIu{@OOaxKAdWT7dG$rvD%!w#)yYXWZ#a_#eIg zRET8{o|AN6*Ts!8B-vo!{?nYUgdVc3B)#k2GperFhKK)5_1CcfBBT-1=NvJ?s9;I4 zbqV1P?`bJ1nh>&&|1G(A`koUwM?AJSDkCoiCH}YEr$G0cXBfRh`2W)L@A4a*AB^Ci zn!fB_Y2n=|EuDwc@QZitGVw%sjcx_o*XrzCaY^^o9r5u`K1r`pcI@I_8~G z;r{eFE#W2R@WXg`DHo zzOuDy?`;;EFfb16Z4Z%O}n$#BZ*2-&50a6wz{tVu|+DFGsjgqAn5clQs`l&!9ncM3&)b@1$*UL=3FAa`*+2WDpEOm@rtHX@45!s&m*9&Y-B91g1O5>OE12Ywpk^C!N% zKzCcpwOryKVZX371)b54Wl^CEFQ7UwIGSNB9vd+5KD1+Hjz6PH;{>R^LzMLUxcupy zk+o1|WasQ_bFq=>nVaOyzKDQ!+5l2i6l&^ zH*S8f`;^+=CeZ$%GsDdqrGZo|d4gA%$VMnsY5FJ8J3Au|EkUSy)sG%(zjlz_#rQe` zQ}!FVA)_mw*Jr$W`G$g>3Q0U1Vj-TQOnUOyezbJ=P9mvF24)#knTb!P%vu7gblm1!wBt{OOz4kbQlSRWO1!5*)v;@9Lmyts`N&6)VjDA@C&oF;V7 zey`_lR_1ttTn9FVxMM*wCg~OHsnWvP?E4bhU*N{@c8Ae=sb(&q?}x8Xg403;FLTgL z9a%aE1=j2NqQ0$se}WgI9BJfs(E9?tuX&Gh&1C|7W^dlrs&bV#GX@^>_iv57z)+h7 zrfoL)juUEwB}i=E#iF_L8TMM>ZWUbNvjK%RS}3CcT2-l*M{rZ^5pqP>Kk6;|cAuh) z#^1n@@dJh6GT&ZsvKpE99UYUaml4E^kuu!OAMR;Z8S}uJTwSvJ1*a`}Uwnk^eHzr$ z!~W@61oc%wHatsmiX4)kLQ$H_r;*=ZGDpaO#wmh--j~(V zS5GvYM0_`k@Wu3m1Wbb+FKSz|3!#{S=(skr-Hf%}KMLT3?~XpswSF_qp+4oSdp)RG zocQj%(CH=7%3`Io_nszw`YTB`n=})z@mLuQ*sofJ69q7}i0VU!hVTDW*hZQT^U@9{l@`B;L5yUnJ#+M}v*v8Dg3}O|V_TRyZgsJvn_9O*Y zW5P8twReK|TlD{HPov-YI6(S? z>oozxw-*)Cfk@eih;sem*wAg^8JvLV!mt%G*`u%AxrQgS@(l5h>QQND8bUW-SAG#i zM9ot`AK$E$*?_SHRI^ki?U>DYCW~Ink*bqL5p-jpr-(f%`60wz>A9c0T<)E)@ET3l zHobzq$1j8Sn8!0oS(6{B;en$@T^O5G8*0XeGJY5Jx!7}a6@me|3B%CuT_>>qXW{I0 zAx$sg*yWVX;LzRZu)ehZ`_9lzB{`GNBj4<*eA%x9U%4%0n!q^u^MV6E(mrq-g@+!@ zeK%kB6x_8k2fUndm_^}FV@r7E+r=05nVR#sHI_Vgc3|>5jmW72Qo}`FPtIoWcy$4I zrwO@&7)&Z!g55)r;Z6Xyau-e7&|$67+_ou>C6#TFa5dl>tWFHauE8cVkH#varz`&rGb`5&%#Oq?S0(HMkqPKd+K1RZ) z1AbMK*=xQMNwvX6fZ4V<`1*4qgPOZ61Nz7vtEA;2%R5VLNadii*!~QQWUg89P-y52 zXBfL3HrNOlV(E3M})#DGdXu2ti& zMlAYib}4SYWhWt-`@DBbDXVc++SzD9#y`U(JglD|9;Vd1{4mUvXVC^z+wnJF&4`9g@nAnLgNIfyGT6NCCByD0vXRlrZ1R&nq_ z+dA&0?hl_{Eo$0GO&hLX#<Myzcn?4j*LfjPdgX+NJZ!;K4X~9Y@>zP057g5_u^P zpf3-0sYE!$o`r2r41%=2^V7iB#yAQIkizl1lK{y)&V_aJtRAU_>uY3Y$>%$I{|{6G zC?KVyqF->%WY=Y$GsQeD#KITabb^{g$4$Z>I277wA;#%RPwQ02lByV5H)l$eXEstrjA>KMJ zcErGC3PViER$_z8?(is&ijanCK!;uXc}0cOFA?a&UkX7~c|cM|$*Osk6{le33*q!5 zA->X1FY8FA@moUyMsj$Nm{7xNtzM5mBiV&y?A-C`>h%;|@fsr>se6vt)$ zP{AGjxCeh(k@2NamZGhKcBh} zqw0`=wf*G!xJ-`*_`vSmr{e~<(yhg_i+xL~?iy&w@%QK)OM_PZ&th%71M4Z0^NLoe zEm)hfLhb2$XCahJMFKAJBGe&Wg{}|~-<{$W`QU4kD+D!;z;Anw@1)FdNSID%Qi#2v&u2%V$cg#>nWhfC6Oq{FH(0WHE}^H zmguFRn{CN|({7JCqjLV3bXCMVY>il^8xv{D6?@tP4vX{|<4Wh;_~SO9iGvsq<#4Qc z*gDAeZQ>~&wLIkVnf1?^up1{Gv*Dmtq9mVJExRUv=~r-H<>0A#(ftpTLNfDJ1y&21 zx)6tM&63gXHjp22-fbT2irBO(92{~QS}dzfvM}c(Rr@dr-J6tZ`Y)pm1-N{ zh~~P47X=Ix7fbnBT;y1?(xmJwqy3)C#!mlX6aP+R)n6cW)4aQFp1O1V*<@RdKTbb1 zu|rk2*F;I`Xg}c=c5R-#Z(Fj;B3Br6@jin}_c?60eC#0xI6j^p=9{~<;WHptXXexT zPb>fwoBC>7!Wj7kc(ymOzm5@{$%b+tgT;0+tjBxO#w^)yl`ge7>B3N;N&FHiCtemR z1SNv};Od%vwkR%IXQ%i%RUk~&QUgRCrHUJ-(pqhcgt2F3wX zx%$PV;GXbPg=C|mT^uz~<8YxDfb^?Q1pHtws}(>iJq;dXe%V#5u@W%&CAp)7`J7QJ zSBa4))rJdxlr)O99t^SIx_4(LAPgW;)e4(IMMuZX*pqbnzVT3PA$0BiG>VLCen>`E z)tH|#uvo*(h(cITtj1T?0n{zvhkTVzAhis4k3$IH$$;dwlxGewr9)-avN%*Nw&#K0 zX2EA2G^>hdk;@)16;xcmTBvlkw1wQ(tNAJWp$t8zGOFPDN}X~toTc!AAM5$C3p6qd zYj+1xnCm4e4dz<)*{zKNFU+g!9gbqd4|RjqCMRjbtZKmFVe!t+6N?n$p^j{qyji>z z?V2{7gh@Oi;X@ewI$UREi`#iqp<8 zg0UaWS5u#j`r$Q?8H)37YouMCO0nwjdFId);_LZV?*}PQL=7LuvTi5luJ|Pu#veM- zt|Ec0A(uDazl_W#8K+ZUrl%QaPD&R8a^fnWeXtPr;g21STVpBI<+G^{RDz_%B_$7$ zt-&ebr~Jwh=x)m{l@W##%dKR?Ac>V;y~?S!LM5x`sMRr_gp>$8P)C=)#30Mnbq|I_ zV3Yv+`Lof%lY`0(_jvqv;nwyVS-nO;ZGWVNoM{HJ9XSF?SjCZFH#?Pbn^(e(4=C0j zH3N6iacLUN9SB5r8t>WLPUt-Yw}3rknao0Ev>fhiRA7oranfoN6Tc(3=Vmxg6%#T^yuif`oT!RZB> zNv2P~a$X{(07~>7YFKO)I11Pa^@Fza z#HK!;=5N9l(hTdZ8BXiZA-n`spHDpbmV;O*rw-pa6n-?%O{pXI<-Zj6`~d*=+{yWL_PR_d*<7Pku%BT-dII}am_sP&;rWaPFr}!T)5tciL zx~YU?-V7m(XheMBSb{-8zW!0IEi)%{-|qQLdt-t~2^e+@!veo&HIxLc!tZ#bKP`-S zvrL@}NTvaov5BpZ>N^~IefBO*-p};U3xBRz-Y?GHyw+5Nbs)SnE0{<#3^AUvWNwm8h&GAe}XJ^jHud+(RVcIR(yh z2fO(K(D-h%kVQYx_q3L^LC{9yXN5c$Hq1I*mHgTzf8i|h189bDDTUgG`yZ*fL)zu( znR&}%o-h!+l;icq%HAA*nTvhnK=4Y^>Fq(_O`XHwtSn1FilWe0h`Wrx4_Xw2Z=v*q ziiOXP2$+1$!Z}ygtL5S$@p!&LVJ0cFDqkZyM5Ko(l()ub&vKqDhGTakD0qP=XST-*R!al6-HXkL4gVL1@ZUSx6E3444`RUTP&K(fz z8+e1CIKC`7A|9Sk8FFWSm3HST0=A?}(OF5#AK#)EjxY05&-C$`NSsz==i!<#qSE!a zN&c3Jxh8dWl;CwM$r$_yK~u*Q{UF!{gzIeso_!5GA+7#QxL*k&gB}UE@WYzd0ZS}@ zj)Oc7Xxm7;CJ30G@R`u*INkYs=UG=%D5%bB{cZGL9GMugnGJ|C6k^VFy*oE?AEx)O zY-5`T9JN@FCKnYB6mRf4E`4ug(Eof9@|MqFfn$U@xX6rt_|0vhy5$I~tLW)XXXNQt z(P{O`veLWA{(zL!HAxMvkinS;{vA!jvY0&d2s<*O| zt{2#o@>n&4!E9b?)3u^3yScppJmB>-+0TNGDw;~~&t_!pB`?i$U1)3L9>@Z+_5s#K ztx}l|sIchtO6)h6jew8FI9CaJc4-kgfCD{Z++vKCsw?KK&>`RmEow}Ou+u|qZ8~(JEO{o}(X?*%)oex8nJm(YKf$yd2e6nTe_Z-QJwcqJWDYo@ zvNZ}wNnpD3lTlfaJO*B?eRsZy^$L*lbD znXITYZ`5w{Jf@K!P~rQyOG1 z$+n+)H$lQVZA?a*=8shJ`y(wiV;a1W(>^>+1#CuEG=CgcqIFzSE9HIix;gm5q9|9B z-8LJY%q%#9OP|Ep!Yg*6_V}aG_=gDE)rxP9)7Pz10DA-JDh$e?J%`P5p7<=gP+RO0 zF5hjJ)wn>d77A+rK5(_3C)74yx^)e!Xm&|DqV*u6jTd3Mr*jyusJ(>P{Mr)aa;_X! zsWwZAdAgt;zv$FnZ{+%M;x1wYJ~q6Igo0026_6$;tNBCq#$ISj)p}bUFpg^J(oxky zrG?ppFEI^+Wvyi$ca#8&W zoooC#SduJ<$lhyC`ot1wXmxnv6p>wx>-8)Q1n7oQy6@vgNi(XtI_QH+kz|tU)H3GR zl&E6Hh@^*?V=JY}>M(9G_sznhEAQ1)mlfShx}3g7j4J9Fs6LyX&pizsm8AKRN@Sv3 zE39zt9@IU?F1YA{%M^?>A-jBH=m-=cU9-b%qdk6iJ*%w+I33*LQLEQ#XDQfMa+Il$ z$-7V6OyMQsrJ%v zW>W&LR_K>Qefhzmt(k_gyAS7s*qfZj%~QO;1^i`p%@t50kV+PO<~as*y87nO+=TrSnqhfe!;bge1*LP*GE^{A=dE;{yn&vJr|xp< z;$CO(G^BCnRM+RI6D8cxHhvjR74*GA#p(X zzSNUkOy|@ayOft>I`wyXh%nuAJSlM-o(Gp^FDFg!!Zl3rdcgUI^}07(sB|XLJl5v(| z)@C*adf|72!vN8Kj`Y;7e3&Tw5SsUk31lABh;80so=2v~Zqg1;!uBJJ| zyYsVOh;5CWI6Ak;ttuO&+zV=PlyF#@{4q>V7<`bfpII5%5HEzi`Qnt`_iuaGiJa2S z_JNX{83Kg0FoOO#JcsNuA0908z{1ocwvO{JEj*op)yd2Qm~FGh)cFS_qr}`lCcnq zwck$Ve7RS9P2*oC>*aea6m)IO5->2)iEcU5rN^@EGGx3s1HjJi7s9-*7vWYIaY z;z*YVX=GCvVQ0mlTOm1N#H&uLh+rS>h_Dqo$-X!KU5DWiw^P%2I^}@6!-i5xUMYD( zY+Vbg-L%`@Teme!kO^Ro_Xf7s=t<&Si5rG-pLTIE?^5~mVYxF|KZbJsYC@td(*LjV=uZCktA;X)Y13 z78rEY-qZ3JpmK*h06A8A6j#g14_35!JD8eJ;zKJ@Ozg%fb%y=84yBOdo{CJQ#bKqU%s>0EU4EgV_Y3VjpN|>8%3NZ# z)3k?-`Ft&&ac`a}C=96o0*6_MZQk_G~0)k5viV-ov}w`hp!_3^{&W17=W53*-Bn zC|7@`*+fs_o%5w|40WQ8&nIf6%;f9goOIME9JHIub`&FY5aLR>sBty544x~mc;PzY z1K6b#II~&Hu}@K)5W6l5a&a=*80|I_%9@HkFZku`N~0X#wjdGObAgC6&w=@nv)Kf5 zw{Bcd(QI4uqoq^cBq^=o^)lhUqiWXeNHpNnvgYtBbt3bzfwIE+w~p0v@lIb}K}$(P zGO(n6T=HQG_le#bjUifqOM8`r^C%V=PqG$Fr?gWpTqwP)W}`Ff^sQ2I{^#gr;jBU!Rh0^s|Y3uBy zePCYo$>`=RL_#c7%)ir02t2!TkzbLbn{X1L@9F)KVKjQaRegy>r6?>XghDDFyWvor zP%5Rs0bf#K)O9Fuv79k#UgFbo++$!Su-R}X{+CGV=z^w^61p^#Y4(|o^^3jOJ*lc(I zg|eN}3bX2u);r;;)gTw+da`j?kg!HPc>NJgDi-xsDZy;MRS%;E!k*t~V1YEwdfh;} z)7%~P96DURcawuZ2E>fXLq8c1bj{15who(el(*DrmLfi?;F&I2sV2?cl{|D4kK4DD<*ae@FDggo!B(#RzkSf+JxPJX%}t#Ca}_d9LASr2CW35o;H{-4^k_lQ>mDt z+^qL*h|k76f_-Dd^8L!l3M*lIJln%dQ4jPp`)$5S-xpX-AHryz*VRovVg?9sUhA~n z+_EEx!7KBgU@=>*$JM?N-0C%$t*H1+3a_*H8bzOVCZjcaXb-ilg!RPu>IqUuUlzMm zK-G}ox*AUDJ1_#?;)Vj`Um!Jicfqh`duZyxgMGYaA~Za!kpz07ztFQt-0<^V^+!Y~Ew%pi?rrx3_ERA-XxpdIJp)RlUWuw=Rn9 z&grUmc&KN*uMD9}(eGBS9~dEF2mRc?h%fDZIh=kM< zr8*wS^EjIoL9L?x9^ErL!^^2weXZROtmS)(x6>O3Nu}o79AxFiwcZRhOay6e z@$l57N~AC~Ho8BDl|vlbTIt8KUk#7nqgL}OZ6M7vHr#({u@ARDjVkTcDmmrv)TBZl zbhuJ3cNGtZOGy@#^4pt08O4`9X&RPJFJgMhzWJ4J=8$c_AgZ_JWwFXS2#|4}|MNF) z?o2rXY7m=jyp<~=F%Xe9S3rC7SmLm@5T5I&>l2TW{jlE{{1Txb^i zTDy%9qFgTBi*d4&#NS}k;nuukMDHWDDuL)4FFg0s86z?`x;)$6-q7b4fRJB0@8k}2kTG{;|)#^|nVf46KzDac7A>k|Yz0!Ro= zoY{xTs_!$*no!6@U*l+5ia=v><=~=5dYCytGR6o}&yT%kr;vB5Clj90&6%3dj0!*2 z2^1DX=BCN>$3ihAhB9uQ?-t3vdp-pd4_S1v2J^X?2qbm3a`8!JsBBggar)lz+qZA= zVm*DVh)-%2Y~KQ9E?qhH9d?gV=``s^m`4AG?CM1x4-F_SXwrtQ^MU$fAFgmOl_-W& z+%q)uqjRFkMu*K@O!5+-ht>&ubs)XDB>edo$K1+CtYQb*vqsO&!_DRGn2-a%>CwgZ z`F(mDtI>t_1}gkIFyFn>ZYFIhkf&QArgr9PZGDHgUQ)5p<@y(l!mimDCLn{#&iQ&9 zjvR_C9a^2|#d*Gc+FLP=sfq7bAIE7!_P>Dc3}TK4my;qf)T@hGC>&I;P|maBaBuf~ z^i(BK#i7pVY{f?l4M-;fgw#@+9WwcRs#km5drS>x>gkt5?>T!(Nm|x;)mFlr!=rAX zV@v`0B?-H*daJl0JiB5-PtxPzs@JQab{o&svx(zMRzLv4-5A!xnruhHus{^IZ4F4v9FXyv$A9g(a#RGK z!#&W@hmMR5bDheE!z^0&YpVoHfQgWrO3f5f8%xWcv_-^yK)(})b7vABwYe`2dvzL> zGYSUOX{V>-Kko|?lhEx;N7aVO>Db4KF`v}<52>cj=AWN>_3HPr)}K@VkZP^FyJaC$ z>qx{>v)erLb5_OM&9JA#yOH1bSJI#jdEcTdNXf1_<@b;P7TEl<7DvX%*=Ju+4T`FC zPvK51F1WdkFhMmJpNvHDV_{G#)7C-Sg6ZhXo2Ca03R$S_dG6z)D`HoBQm-7 z(#^B7!bUaHo)Rgq_xE=;fe|O*%f#aonUp3M@kQ{wUQ};{zq^|e6x5$W^?55II+&?0 zHOAQMlLG?SakZ1;icqQ?(L*Iy-FQFkvl#+BfEjefc@DlOxckzPfiie75`8%I;1QF5 zd+#$}7fN=!H+pEO6G2sd4%+CPLL!q^&}R}$ZQwzptVL1(uc)IX=M*OKEt zTR@-Esrl{N66S94{bcl|iE~SVqh8%^Wb45OpTQ$Gkj?(8-f8)$`2MWljuPQ>m8$h~ z27n}0S*N-~Sz=@8b17!_QS4SMhc-Y`7H^#Lfqby{{fmRsW4S_T%KJRL%gd{gSp`6C z%NGw0YYohvTLp8|7jcL;{bv*MpxT0>Idyh7#+RP^OW4ssc@pa=Z9^NH=}-r~FasQ3 z5qetw8#NPN<j4cEpamkGivx zcFWxhOqLe-N(*c zIwSJWq5ceRFs;(hz8<2pk9Ho})Ttyq=0At+UeH3`LR(zVde9lZNK?W?I!Y-@19_nb zHflUl27SYfdgs&DLIsmy|MF8!yKF}$E(a!3czi4 zb&G`e%-QSyU21?`GtAL}`uklTm_UUc3XRvxoXm&3h$CzOH)Y$VC)4wBH`ak|y2@v~ z$NddGVBhAw=)?R-k&lL&&SIE0qwqr};b*qRIEvaqHq3SRyR&7>Glqz5M+FxbUTc=I zDEVYXwbs?|s@YDSqXlG2brw2Hu7!_x%M&B%=~Jb8w2F?Z@#%@cRo1>s5v|j5lhQ`r zG5eRei=ACG9wD>iic&81)x#&8ZmRr0zMOkZEKCZ>^(T7~pH|JG4eM+RkR!&8))E^t zVNO%`S-k$!)BxM9rs@_KT2CG)-t6sB1x9Jp8VN)W<4;oLLb@A5XeE%DlI|=bxt|(z zT$$sgW%d2UA8F^^T2c^`E)4@a`q>y^{szT+pG#g;spN^Yl4(4H4gO_NbpnU8qA z-4{$rX!U6AuYcQ}zRHy&wOU1cEmRo4&Q~M(<_#?8Ul@T3b(e}Cqqp@xfhD#k&UjmU zN1Uro<48m{3>g>{CQS-gxW|!6M>Dw}$3=BoW^V6O%_Z?y>gF8j#?u1R&!e8Dd3?E7 z)#{wr3Do%lMLl(&`=TG|=1VvKh?AMfo!A2VQsJx6g?TDcF@~0_&3Xb}aQK<9vAC;* zxT7^0ASGTSx24^d9UHWX6c>~risD_vsH1-E%GL^~c64;rPpstiSe!`gJe!8&DevEh z?+jCgu>|5M7+uymMUXkt`D>wf9JiKY=G}$QMzRsw@6^mw5M4W8vk5u7#5V?tsJ+&! z?NHx0l&>319TN=hIxhe0me+gmfNZ5-*1oGz`>vf?1u#CA4L%!c6FY1mU-6PZ>~jgm z>={krG{Q`y$S+rGu)>%>t}X-&@e5m)Use@9FipCq&FU9ng(#Dd^m$6MrY$ zDU5Jl2lZW)#ql6g$5nSk&jXy(8?ja@!HC$t4<%?#G=;g-m-73f4S+c=H$>)#ZIlMy zdqu}nClEajqex+{Gf#WEiG85x_Wh;Oiq(v3@0x9g5d>ZhC)tN$KD*J1>y#joc;f=Vx7}%}M4)!22)m$$Y4YIIR$yTr4g6N1#t8PrKed{Ji%;Kt4h=M!GKb*u@8CZlRngR7#~A{k?zu zA^g(DipJ;vHx)M-HT~>@wCv9R=57mdlp-L2KK+88J*yL|FGpuF4EG=wdea@5pTx(uqhOmK-@%-i}3l% zu;SZ8QC7pD(Hj#s{F~7|DZr8xb}iRlA0O9|E8D4!X4{LEsJ|%5*K?h~JU@;V#1SI& zX5&r1s^H^=d`@oU#whL@*QsAYZGnLAb??C}#@%N?sg0(WH@lei;qR^0FiLEcM;xID}VbSWfa)F2%MA5BNf{kvUkLgpZ4-z z|D92e-R(&K54z>I`4 z{%?&${{Iv7>l5bxV50DO$KHs>%H-u&;oHBURsSNm4^2kOT?dxJz(vtZ5uVa2g5j5L_E* ztZ^pyy?37ZzGr^S%#W!bb?U6MPn})0>eznP4%1Xuz{e%WeemD`zLKJ>_JapFnt$4F zv9bQt-~nC62M=C6P?D9>^~%^^^flD6YvVo=tbfcXrS{^XB8ilHg@j@Z5=5!N_dhmbd)5#N_&U#COBlILvq^f*^*Z?i7_pEkmcn=$h6P2F<}jd${&~hS9$Xm zjq|_u{lsd1!>w=6%bRB*2UTwyRbOiS+ZC3S?{%-4(UDckURan0(SOj-ujPxHKk|7jcYme% z)=PYJDgF0!{V7LpR?rthlu!O{e|{YbXtA0VZO3n4dHUeNZ@nwzMt3tVu9;DNYp&A2 z-T(gU!>-o-=7xJENx3fs(_aQWyuEflivc!QJKwh_*T4QV#?R0dEcrhjf*jcHtGLdx zqe-}NH}33Ccl+Zo8hhOq7HDsZI~Zgnpt$7n-3~HQRR>5wo1;~RM;(Flhrhqeia{i`U3~mT;&_(Z!izu#2E>yi;ezYIrp3|2VRv;<{+M(W-hn0-#q_#{`s?@h>s4e}(~*N&>H zNB{En0^1m%!N5pL2(3f3B_<^N>!ocK4QC{(WXHi1HB=Qj;Paxj8a;IJ#0iA{rW(az7oPH8sXOMBlqNSSus8dyg?) z{Ct;e?P)3cAK#ra5nT!P4#2d=LKSz`uTdq+D|*>%nLQl zkG?P2K?8P+R;`UD; zIt{4KO}{1Ws;0=Tul43$TOVRFf}z&V?FHH^Nr48#r~Q%m@?u)H?bmpQa3`@)=UJHJAqlg!Zk`CG+W~ zp|YuJDcUZXk?95bGUFwmW?KKYc zV3gExw}PLM^&2WN^2%Bq=&whgUQqozccyZ7%eMFD35T%GXv~MQKh1wY=wZCDsoLYDtiKzpDJM$DZEB8Mr}c$NLU1QG%hY0bNLHVYg|c*I|O)9<5iO3H6rMPjFNy^ zii>A=*LHLr<9h^j#%f2}if%v*NC_$1y5muZmZzp31T` ziux_pbbn3w4rt4&GCaKzzj@D-Z4kqFbypG4sm(w~2c}_Q2saBmKjc@aTjY9vOAn%N(JMLDpkuo<5cFO@k8X)W>yZK!yD zFB5kAZJmt?$eW`_EWVy6)S)pT28OUkI8-uLRAMYo&331VbrAmM(5oMJCrvn@R@2@T z80+3tor|T#O;4Mn)jjC&RY(%%xvqyA$9{!*(^@@Tcb{#^RC{ry_uTzh!yx;Jv))T* z=u7K{$nl4FdDWGp%LsRXdS*MBkN2bZDgPT~H-K^J1tf1b}WX1QdP%QI$ z-jZ0qMBR2Fz8W#tYM%Z9E-q+V_v9(@CAB;W6udAxzL|Zl5JNhpFER0{+Gp9>o#xV` z8Z~Dwu~>iI`W(jfOwFcQWq6r272I#`>T)_*=dLO9?;H$fI|D2`nPWP*^{8g6cqAj#H;VUS9 zcXKioBUVY#IyAVq}a5sT)tLGveGP|np+dh6oe8wENqx)6hap)t;vV$CtVnIXKp904u;=JhEWuMnv4 z;It8QXF`wh%@GstZ-7Ant#V7pD^@el`B-nk|H1?x)7SHcq-`;I0rJ5YV(?X?vin%`LsJ?Uj8 zsJ4k#l2pr;+egdWayV6@vkm*&Pw{69+;oT0Pmp@ca$iC*yPm<(`VBu6tscEz$i?oQ zI*UE*j)Rh?bjfy13PiA&%}mK&bG`cWv|x`+@;tj4>KDuVEV)%$dkIhC4h&i*PUSXw z^qNo%t#*DPSGa5x=?(6PKT%3dwF}s3uZ$ZMQn<<5-MHN*lmIfge(isYSvJbQW54Qh z-@>@`vjGx>e#U*UB&TIaQE=S8r+&Tngl5}&Py5lyqZT==WslHFWm?Fn2@RW{L_({G z!rS)gUQw=9QkLLbe7AH}xHm#hROJ;iSe5yf5Y=~*T$iNbW4KE1_mlIxzpi5}2O(?J zAjji&wGoMII#oBk`L@|;Z1JU`v0%Vp(1UXVt^{t zii=GC9nUoZ6q|WHH_~xaz44Rx+jqO1*~_1FFXqW!=Z%QmI244oDPC7D;uw)|`q3?1 zL6HWWtB>rof&2u$p*&aHp3Z;1`lTHd9+!Ph@t4q0t(7MX7*;zucoM?Y7FT1~VA%!L z;$AJ7+v0o~A!G*6uxNfdNS2?wwQr@&9^c{4%XuAx5PaBn8mTS!0*xP7Xlt%k?7MgWQNRB#UVL>sW9wK^F43po>CPa^PL)9(;qRVN zi_;h{OS&c!0@w?%D_QX@s2F>dOO?NF!30bevfD!Jvuu&=Qc&{WNasvw)jN*)Dn~#+ z+LQ=W)K~He32gRHnlOS)jSW2DCNd1#8%=7ZuU6@qZrdP}mjKsidW>f$)H}DG+2eF% zdI@($6{P+Qt5=O|dZXYbM76kd8>6RvLY~Z=%nwvSVojmWt_O_1FV3KnBr#bxN*?*l zI9^u$brU`-MZ{E;-gkLZtwnj=`S@#sHXlP83N^y+T{Z8Lw!PhjQqKP6)ppoHafYg# z5jse>iW9ZI#1_ZEEN^7nwma{_Kl@Q;qr;e!HZEm9!7WtC)po-CZi1LtElR$8A+EAP+hc~D)rDPfojZ!IjmNmrw>M~e znEC0l&;(Z)(x|rXJ$P;|IVoIa>EahnYno^t#E{sYhW|Kz9wR*7#|B=H>TC_4NywjB z8V^9&)NOn{Uq&jt2Raw~mxe_iC z&%nXyX=>72iF63lB~QHbLL4j-DOi9L=LjZ^(M>=3z-<$0&(=zzy7kXJ9911X+OoJ# zCabzP$bds=83;)jyWxo5ewOKENb%`HvOuAGVv>-;*cn@VZQ_Q~u=uW!(T4Kq7_skj z3==D_AnD5&*^M?-cOLf_LUXXO{p=XF2(V926MW@6d*Rep_s6o#=JR;;vYit}wA+bOL**UwuT8oxi-i z!x~yyp51%`7=Hq#c739fads=SrE>1RIm66W^OI60iZ>}a&A|}~NED9C*&XM9H``c} zmd6d1i*k=92ePrd_o!!`o_6%)XMzqC;m^AZxz7Ho7oG`vumB(CtB&$;)}BCl!26I& zQQf_K!>8#^nlvJYy!q1~r6K8BeZ^&4WKDK00Cy;>&)r(TRd(TFmF+%_oV_`h=K+#! z@4O=rKxyw2VL8MPy1i$0!?X{UKvFzLRGeFl@L zs}i64QO8;z7WZnd4C>H*>xsojbL>$^$Zew^=#F)w?bopJrkBlIb z2+dcXXOs=7�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 diff --git a/project/index.html b/project/index.html index 2b38973..9b4ad60 100644 --- a/project/index.html +++ b/project/index.html @@ -481,7 +481,7 @@

Analysis Results

// Initialize mermaid mermaid.initialize({ startOnLoad: false, theme: 'dark' }); - const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "78.4KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.6KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "12.7KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3586 \n**Total Classes**: 367 \n**Modules**: 246 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "35.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 138, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3586\n- **Total Classes**: 367\n- **Modules**: 246\n- **Entry Points**: 2560\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 195\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.synthesis.code-change-plan.implementation\n- **Functions**: 148\n- **Classes**: 10\n- **File**: `implementation.ts`\n\n### src.services.actions\n- **Functions**: 113\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.extractors.communication\n- **Functions**: 80\n- **Classes**: 5\n- **File**: `communication.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.graph.linker\n- **Functions**: 75\n- **Classes**: 4\n- **File**: `linker.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.core.text\n- **Functions**: 56\n- **File**: `text.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.communication.llm.implementation\n- **Functions**: 55\n- **Classes**: 8\n- **File**: `implementation.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### src.services.actions.executeAction\n- **Calls**: src.services.actions.resolveRoot, src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent\n\n### src.services.actions.root\n- **Calls**: src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent, src.services.actions.extractMarkdownIntentAudited\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### src.extractors.ast.typescript.extractTypeScriptFile\n- **Calls**: src.extractors.ast.typescript.relativePosix, src.extractors.ast.typescript.createSourceFile, src.extractors.ast.typescript.scriptKind, src.extractors.ast.typescript.getLineAndCharacterOfPosition, src.extractors.ast.typescript.getStart, src.extractors.ast.typescript.getEnd, src.extractors.ast.typescript.getText, src.extractors.ast.typescript.slice\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.web.diff-ui.diffUiHtml\n- **Calls**: src.web.diff-ui.gradient, src.web.diff-ui.min, src.web.diff-ui.clamp, src.web.diff-ui.not, src.web.diff-ui.media, src.web.diff-ui.token, src.web.diff-ui.getElementById, src.web.diff-ui.byId\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- **Calls**: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.implementation.trim, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.resolve, src.synthesis.code-change-plan.implementation.assertPathWithinRoot, src.synthesis.code-change-plan.implementation.ensureDir, src.synthesis.code-change-plan.implementation.dirname, src.synthesis.code-change-plan.implementation.open\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- **Calls**: src.synthesis.code-change-plan.implementation.assertIntentGraph, src.synthesis.code-change-plan.implementation.assertConclusions, src.synthesis.code-change-plan.implementation.Date, src.synthesis.code-change-plan.implementation.toISOString, src.synthesis.code-change-plan.implementation.isNaN, src.synthesis.code-change-plan.implementation.parse, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.isInteger\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### src.graph.diagnostics.diagnoseGraph\n- **Calls**: src.graph.diagnostics.Date, src.graph.diagnostics.toISOString, src.graph.diagnostics.assertIntentGraph, src.graph.diagnostics.buildNeighbors, src.graph.diagnostics.Map, src.graph.diagnostics.map, src.graph.diagnostics.indexGroundedImplementationEvidence, src.graph.diagnostics.indexImplementedPaths\n\n### src.core.text.inferObject\n- **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.core.text.normalized\n- **Calls**: src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa, src.core.text.napraw, src.core.text.popraw\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.CommunicationAttemptError.audit, src.communication.llm.implementation.CommunicationAttemptError.markDeterministic, src.communication.llm.implementation.CommunicationAttemptError.deterministicSyntheses, src.communication.llm.implementation.CommunicationAttemptError.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.audit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n- **Calls**: src.extractors.markdown-llm.now, src.extractors.markdown-llm.extractMarkdownIntent, src.extractors.markdown-llm.MarkdownAttemptError.stageAudit, src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic, src.extractors.markdown-llm.OpenRouterClient, src.extractors.markdown-llm.isConfigured, src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow, src.extractors.markdown-llm.MarkdownAttemptError.readPrompt\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: executeAction\n```\nexecuteAction [src.services.actions]\n └─> resolveRoot\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 2: root\n```\nroot [src.services.actions]\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 3: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 4: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 5: extractTypeScriptFile\n```\nextractTypeScriptFile [src.extractors.ast.typescript]\n```\n\n### Flow 6: diffUiHtml\n```\ndiffUiHtml [src.web.diff-ui]\n```\n\n### Flow 7: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 8: applyCodeChangeSourcePatch\n```\napplyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation]\n └─> assertCodeChangeSourcePatch\n```\n\n### Flow 9: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 10: proposeCodeChangePlans\n```\nproposeCodeChangePlans [src.synthesis.code-change-plan.implementation]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.communication.llm.implementation.CommunicationAttemptError\n- **Methods**: 40\n- **Key Methods**: src.communication.llm.implementation.CommunicationAttemptError.super, src.communication.llm.implementation.CommunicationAttemptError.enrichWithCorrection, src.communication.llm.implementation.CommunicationAttemptError.completion, src.communication.llm.implementation.CommunicationAttemptError.fallbackOrThrow, src.communication.llm.implementation.CommunicationAttemptError.failed, src.communication.llm.implementation.CommunicationAttemptError.marked, src.communication.llm.implementation.CommunicationAttemptError.participantGroups, src.communication.llm.implementation.CommunicationAttemptError.grouped, src.communication.llm.implementation.CommunicationAttemptError.participant, src.communication.llm.implementation.CommunicationAttemptError.role\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.nl-llm.NlAttemptError\n- **Methods**: 31\n- **Key Methods**: src.extractors.nl-llm.NlAttemptError.super, src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm.NlAttemptError.completion, src.extractors.nl-llm.NlAttemptError.fallbackOrThrow, src.extractors.nl-llm.NlAttemptError.failedAudit, src.extractors.nl-llm.NlAttemptError.deterministic, src.extractors.nl-llm.NlAttemptError.markDeterministic, src.extractors.nl-llm.NlAttemptError.toIntentRecord, src.extractors.nl-llm.NlAttemptError.lines, src.extractors.nl-llm.NlAttemptError.action\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 29\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.extractors.markdown-llm.MarkdownAttemptError\n- **Methods**: 24\n- **Key Methods**: src.extractors.markdown-llm.MarkdownAttemptError.super, src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering, src.extractors.markdown-llm.MarkdownAttemptError.metadataByRecord, src.extractors.markdown-llm.MarkdownAttemptError.uncovered, src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch, src.extractors.markdown-llm.MarkdownAttemptError.half, src.extractors.markdown-llm.MarkdownAttemptError.emptyCoverage, src.extractors.markdown-llm.MarkdownAttemptError.enrichMarkdownBatchWithCorrection, src.extractors.markdown-llm.MarkdownAttemptError.completion, src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.extractors.markdown-llm.MarkdownLlmRequiredError\n- **Methods**: 13\n- **Key Methods**: src.extractors.markdown-llm.MarkdownLlmRequiredError.super, src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited, src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt, src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic, src.extractors.markdown-llm.MarkdownLlmRequiredError.client, src.extractors.markdown-llm.MarkdownLlmRequiredError.prompt, src.extractors.markdown-llm.MarkdownLlmRequiredError.enrichments, src.extractors.markdown-llm.MarkdownLlmRequiredError.responseByRecord, src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes, src.extractors.markdown-llm.MarkdownLlmRequiredError.corrected\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.communication.parseEnvelope\n- **Output to**: src.extractors.communication.split, src.extractors.communication.trim, src.extractors.communication.slice, src.extractors.communication.findIndex, src.extractors.communication.match\n\n### src.extractors.communication.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.markdown-llm.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm.isArray, src.extractors.markdown-llm.Error, src.extractors.markdown-llm.Set, src.extractors.markdown-llm.map, src.extractors.markdown-llm.has\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n### src.core.schema.conclusions.validateTodoProposalContext\n- **Output to**: src.core.schema.conclusions.validateGroundedContext, src.core.schema.conclusions.assertConclusions, src.core.schema.conclusions.Set, src.core.schema.conclusions.map\n\n### src.web.diff-ui.formatBytes\n- **Output to**: src.web.diff-ui.selectedRun, src.web.diff-ui.byId\n\n### src.semantic.reranker.validation.validateRetrieval\n- **Output to**: src.semantic.reranker.validation.requiredText, src.semantic.reranker.validation.test, src.semantic.reranker.validation.Error\n\n### src.semantic.reranker.validation.validateGeneration\n- **Output to**: src.semantic.reranker.validation.Error, src.semantic.reranker.validation.requiredText, src.semantic.reranker.validation.test\n\n### src.semantic.reranker.validation.validateVerdictReason\n- **Output to**: src.semantic.reranker.validation.Set, src.semantic.reranker.validation.has, src.semantic.reranker.validation.Error\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `src.services.actions.executeAction` - 65 calls\n- `src.services.actions.root` - 64 calls\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `src.extractors.ast.typescript.extractTypeScriptFile` - 44 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.web.diff-ui.diffUiHtml` - 42 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `src.graph.diagnostics.diagnoseGraph` - 32 calls\n- `src.core.text.inferObject` - 31 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.core.text.normalized` - 29 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.extractors.ast.typescript.visit` - 26 calls\n- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `src.extractors.communication.extractCommunicationFile` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited` - 21 calls\n- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n executeAction --> resolveRoot\n executeAction --> scopedPath\n executeAction --> extractNlIntentAudit\n executeAction --> nlModeValue\n executeAction --> extractGitIntent\n root --> scopedPath\n root --> extractNlIntentAudit\n root --> nlModeValue\n root --> extractGitIntent\n root --> numberValue\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n extractTypeScriptFil --> relativePosix\n extractTypeScriptFil --> createSourceFile\n extractTypeScriptFil --> scriptKind\n extractTypeScriptFil --> getLineAndCharacterO\n extractTypeScriptFil --> getStart\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n diffUiHtml --> gradient\n diffUiHtml --> min\n diffUiHtml --> clamp\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "74.9KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__event["event"]\n examples__backend__src__validation__agent["agent"]\n examples__backend__src__server__store["store"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__limit["limit"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__server__server["server"]\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__server__offset["offset"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__app__state["state"]\n examples__frontend__src__app__createState["createState"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__refresh["refresh"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n end\n subgraph src__extractors\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__todo__relative["relative"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__communication__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__markdown_llm__MarkdownAttemptError__stageAudit["stageAudit"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__nl_llm__NlLlmRequiredError__body["body"]\n src__extractors__communication__declaredParticipantId["declaredParticipantId"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__ast__typescript__declarationIsCallable["declarationIsCallable"]\n src__extractors__nl_llm__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__nl_llm__NlLlmRequiredError__prompt["prompt"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__communication__item["item"]\n src__extractors__communication__envelope["envelope"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__nl_llm__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__configuration__files["files"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__communication__participant["participant"]\n src__extractors__docs_record__action["action"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__nl_llm__NlLlmRequiredError__sourcePath["sourcePath"]\n src__extractors__nl_llm__NlAttemptError__action["action"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__nl__action["action"]\n src__extractors__communication__declaredRole["declaredRole"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__docs_record__target["target"]\n src__extractors__communication__match["match"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__communication__parseEnvelope["parseEnvelope"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__nl_llm__NlAttemptError__lines["lines"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__nl_llm__NlAttemptError__clampLine["clampLine"]\n src__extractors__nl_llm__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__communication__fileParts["fileParts"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__nl_llm__NlLlmRequiredError__result["result"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__nl_llm__NlAttemptError__markDeterministic["markDeterministic"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__git__count["count"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__ast__typescript__add["add"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__communication__communicationFiles["communicationFiles"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__communication__nestedRole["nestedRole"]\n src__extractors__nl_llm__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__communication__extractCommunicationIntent["extractCommunicationIntent"]\n src__extractors__nl__classified["classified"]\n src__extractors__nl_llm__NlLlmRequiredError__startedAt["startedAt"]\n src__extractors__todo__match["match"]\n src__extractors__markdown_llm__MarkdownAttemptError__failed["failed"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__communication__flush["flush"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__ast__records__start["start"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__communication__sameStrings["sameStrings"]\n src__extractors__configuration__pair["pair"]\n src__extractors__nl_llm__NlLlmRequiredError__absolute["absolute"]\n src__extractors__ast__typescript__symbol["symbol"]\n src__extractors__todo__checked["checked"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__ast__typescript__languageName["languageName"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__communication__normalizeType["normalizeType"]\n src__extractors__ast__typescript__isTopLevel["isTopLevel"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__ast__typescript__visit["visit"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__git__runGit["runGit"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__communication__normalize["normalize"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__changelog__lines["lines"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__communication__identity["identity"]\n src__extractors__nl_llm__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__git__state["state"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__configuration__lines["lines"]\n src__extractors__todo__heading["heading"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt["startedAt"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__nl_llm__NlLlmRequiredError__maxLine["maxLine"]\n src__extractors__nl_llm__NlAttemptError__statementText["statementText"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__todo__body["body"]\n src__extractors__communication__raw["raw"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__communication__nestedParticipant["nestedParticipant"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__todo__block["block"]\n src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__changelog__relative["relative"]\n src__extractors__nl__object["object"]\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__nl__missing["missing"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__ast__typescript__lineRange["lineRange"]\n src__extractors__git__root["root"]\n src__extractors__todo__raw["raw"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__communication__unquote["unquote"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__ast__typescript__modifiers["modifiers"]\n src__extractors__configuration__entries["entries"]\n src__extractors__nl_llm__NlAttemptError__failedAudit["failedAudit"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__ast__external__result["result"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__ast__typescript__callee["callee"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__nl_llm__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__communication__inferred["inferred"]\n src__extractors__nl_llm__NlAttemptError__fallback["fallback"]\n src__extractors__communication__isCommunicationType["isCommunicationType"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__configuration__match["match"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__communication__explicitEnvelope["explicitEnvelope"]\n src__extractors__nl_llm__NlAttemptError__audit["audit"]\n src__extractors__todo__task["task"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__communication__listValue["listValue"]\n src__extractors__nl_llm__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__communication__first["first"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__communication__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__configuration__line["line"]\n src__extractors__communication__heading["heading"]\n src__extractors__ast__typescript__excerpt["excerpt"]\n src__extractors__configuration__heading["heading"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic["deterministic"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__markdown_llm__MarkdownAttemptError__readPrompt["readPrompt"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__git__readStats["readStats"]\n src__extractors__todo__action["action"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__communication__declaredParticipant["declaredParticipant"]\n src__extractors__git__result["result"]\n src__extractors__ast__typescript__symbolModifiers["symbolModifiers"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__communication__identityRegistry["identityRegistry"]\n src__extractors__nl__body["body"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__nl_llm__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__nl_llm__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__changelog__body["body"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__nl_llm__NlAttemptError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__markdown_llm__MarkdownAttemptError__strings["strings"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__markdown_llm__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic["markDeterministic"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__nl_llm__NlAttemptError__deterministic["deterministic"]\n src__extractors__docs_schema__target["target"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__todo__text["text"]\n src__extractors__configuration__relative["relative"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__nl_llm__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__configuration__entry["entry"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes["outcomes"]\n src__extractors__communication__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection["extractNlWithCorrection"]\n src__extractors__communication__inferIdentity["inferIdentity"]\n src__extractors__ast__typescript__capabilities["capabilities"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__communication__basename["basename"]\n src__extractors__communication__communicationSegments["communicationSegments"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__communication__extractCommunicationFile["extractCommunicationFile"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__todo__classified["classified"]\n src__extractors__todo__lines["lines"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n end\n subgraph src__graph\n src__graph__linker__jaccard["jaccard"]\n src__graph__linker__moduleAstIds["moduleAstIds"]\n src__graph__symbol_resolution__values["values"]\n src__graph__linker__indexAliases["indexAliases"]\n src__graph__diff__width["width"]\n src__graph__linker__candidatePairs["candidatePairs"]\n src__graph__diff__changedFieldPaths["changedFieldPaths"]\n src__graph__linker__buckets["buckets"]\n src__graph__diff__assertGraph["assertGraph"]\n src__graph__linker__isSuppressedConfigurationPair["isSuppressedConfigurationPair"]\n src__graph__linker__isSuppressedAstPair["isSuppressedAstPair"]\n src__graph__linker__keywordIndex["keywordIndex"]\n src__graph__symbol_resolution__pathSelects["pathSelects"]\n src__graph__symbol_resolution__byAlias["byAlias"]\n src__graph__linker__byId["byId"]\n src__graph__linker__scorePair["scorePair"]\n src__graph__diff__paired["paired"]\n src__graph__diff__left["left"]\n src__graph__linker__intersectsAliases["intersectsAliases"]\n src__graph__linker__deduplicateRecords["deduplicateRecords"]\n src__graph__linker__rightId["rightId"]\n src__graph__diff__relationKey["relationKey"]\n src__graph__diff__values["values"]\n src__graph__linker__linkIntentRecords["linkIntentRecords"]\n src__graph__diff__truncate["truncate"]\n src__graph__linker__astIds["astIds"]\n src__graph__linker__indexKeywords["indexKeywords"]\n src__graph__linker__indexTopicBuckets["indexTopicBuckets"]\n src__graph__diff__y["y"]\n src__graph__diff__recordIdentity["recordIdentity"]\n src__graph__diff__right["right"]\n src__graph__linker__determineRelation["determineRelation"]\n src__graph__diff__metricCard["metricCard"]\n src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"]\n src__graph__linker__configurationIds["configurationIds"]\n src__graph__linker__pathsIntersect["pathsIntersect"]\n src__graph__linker__owners["owners"]\n src__graph__symbol_resolution__selected["selected"]\n src__graph__linker__values["values"]\n src__graph__linker__score["score"]\n src__graph__diff__normalizeRecord["normalizeRecord"]\n src__graph__diff__groupRecords["groupRecords"]\n src__graph__symbol_resolution__resolveSymbol["resolveSymbol"]\n src__graph__linker__records["records"]\n src__graph__diff__diffIntentGraphs["diffIntentGraphs"]\n src__graph__linker__resolvableBasenames["resolvableBasenames"]\n src__graph__diff__afterRecord["afterRecord"]\n src__graph__linker__aliases["aliases"]\n src__graph__diff__visibleRows["visibleRows"]\n src__graph__linker__collectCandidatePairs["collectCandidatePairs"]\n src__graph__diff__renderGraphDiffSvg["renderGraphDiffSvg"]\n src__graph__diff__compareRelations["compareRelations"]\n src__graph__linker__leftId["leftId"]\n src__graph__symbol_resolution__byNlRecord["byNlRecord"]\n src__graph__diff__groups["groups"]\n src__graph__diff__beforeGroups["beforeGroups"]\n src__graph__linker__indexResolvableBasenames["indexResolvableBasenames"]\n src__graph__linker__isModuleTopicSource["isModuleTopicSource"]\n src__graph__symbol_resolution__buildSymbolResolutionIndex["buildSymbolResolutionIndex"]\n src__graph__linker__declarationAstIds["declarationAstIds"]\n src__graph__symbol_resolution__isAstDeclaration["isAstDeclaration"]\n src__graph__diff__afterGroups["afterGroups"]\n src__graph__linker__expand["expand"]\n src__graph__linker__isFileAggregateEvidencePair["isFileAggregateEvidencePair"]\n src__graph__linker__leftKeywords["leftKeywords"]\n src__graph__linker__set["set"]\n src__graph__diff__escapeXml["escapeXml"]\n src__graph__diff__isObject["isObject"]\n src__graph__diff__beforeRecord["beforeRecord"]\n src__graph__symbol_resolution__hasResolvedNlAstSymbolPair["hasResolvedNlAstSymbolPair"]\n src__graph__linker__indexKeywordBuckets["indexKeywordBuckets"]\n src__graph__symbol_resolution__uniquePaths["uniquePaths"]\n src__graph__linker__indexTargetBuckets["indexTargetBuckets"]\n src__graph__diff__height["height"]\n src__graph__linker__addToBucket["addToBucket"]\n src__graph__linker__pairsFromBuckets["pairsFromBuckets"]\n src__graph__linker__intersects["intersects"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__markDeterministic\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__markDeterministic\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__markDeterministic\n src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__markDeterministic\n src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__absolute --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlLlmRequiredError__body --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlLlmRequiredError__sourcePath --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlLlmRequiredError__maxLine --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlLlmRequiredError__prompt --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection\n src__extractors__nl_llm__NlAttemptError__failedAudit --> src__extractors__nl_llm__NlAttemptError__audit\n src__extractors__nl_llm__NlAttemptError__deterministic --> src__extractors__nl_llm__NlAttemptError__fallback\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveAction\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__nonEmptyText\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveObject\n src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__allowedModality\n src__extractors__nl_llm__NlAttemptError__lines --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm__NlAttemptError__action --> src__extractors__nl_llm__NlAttemptError__resolveObject\n src__extractors__nl_llm__NlAttemptError__normalizedText --> src__extractors__nl_llm__NlAttemptError__resolveObject\n src__extractors__nl_llm__NlAttemptError__statementText --> src__extractors__nl_llm__NlAttemptError__allowedModality\n src__extractors__nl_llm__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm__NlAttemptError__clampLine\n src__extractors__nl_llm__NlAttemptError__resolveAction --> src__extractors__nl_llm__NlAttemptError__allowedAction\n src__extractors__nl_llm__NlAttemptError__isPlaceholder --> src__extractors__nl_llm__NlAttemptError__nonEmptyText\n src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__isPlaceholder\n src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__nonEmptyText\n src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm__NlAttemptError__nlStrings\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__communication__extractCommunicationIntent --> src__extractors__communication__extractCommunicationFile\n src__extractors__communication__identityRegistry --> src__extractors__communication__extractCommunicationFile\n src__extractors__communication__communicationFiles --> src__extractors__communication__extractCommunicationFile\n src__extractors__communication__extractCommunicationFile --> src__extractors__communication__parseEnvelope\n src__extractors__communication__extractCommunicationFile --> src__extractors__communication__inferIdentity\n src__extractors__communication__extractCommunicationFile --> src__extractors__communication__first\n src__extractors__communication__extractCommunicationFile --> src__extractors__communication__isTicketEvidenceFile\n src__extractors__communication__envelope --> src__extractors__communication__basename\n src__extractors__communication__inferred --> src__extractors__communication__basename\n src__extractors__communication__explicitEnvelope --> src__extractors__communication__basename\n src__extractors__communication__declaredParticipant --> src__extractors__communication__basename\n src__extractors__communication__declaredRole --> src__extractors__communication__basename\n src__extractors__communication__declaredParticipantId --> src__extractors__communication__basename\n src__extractors__communication__identity --> src__extractors__communication__basename\n src__extractors__communication__participant --> src__extractors__communication__basename\n src__extractors__communication__sameStrings --> src__extractors__communication__normalize\n src__extractors__communication__parseEnvelope --> src__extractors__communication__match\n src__extractors__communication__parseEnvelope --> src__extractors__communication__unquote\n src__extractors__communication__inferIdentity --> src__extractors__communication__basename\n src__extractors__communication__inferIdentity --> src__extractors__communication__match\n src__extractors__communication__inferIdentity --> src__extractors__communication__isCommunicationType\n src__extractors__communication__fileParts --> src__extractors__communication__isCommunicationType\n src__extractors__communication__nestedRoleIndex --> src__extractors__communication__isCommunicationType\n src__extractors__communication__nestedRole --> src__extractors__communication__isCommunicationType\n src__extractors__communication__nestedParticipant --> src__extractors__communication__isCommunicationType\n src__extractors__communication__isTicketEvidenceFile --> src__extractors__communication__basename\n src__extractors__communication__communicationSegments --> src__extractors__communication__isCommunicationNoise\n src__extractors__communication__communicationSegments --> src__extractors__communication__match\n src__extractors__communication__communicationSegments --> src__extractors__communication__flush\n src__extractors__communication__flush --> src__extractors__communication__isCommunicationNoise\n src__extractors__communication__item --> src__extractors__communication__isCommunicationNoise\n src__extractors__communication__raw --> src__extractors__communication__match\n src__extractors__communication__heading --> src__extractors__communication__match\n src__extractors__communication__normalizeType --> src__extractors__communication__isCommunicationType\n src__extractors__communication__listValue --> src__extractors__communication__unquote\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__readPrompt\n src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic\n src__extractors__markdown_llm__MarkdownAttemptError__failed --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit\n src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm__MarkdownAttemptError__strings\n src__extractors__markdown_llm__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm__MarkdownAttemptError__strings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__add --> src__extractors__ast__typescript__lineRange\n src__extractors__ast__typescript__add --> src__extractors__ast__typescript__excerpt\n src__extractors__ast__typescript__add --> src__extractors__ast__typescript__languageName\n src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__modifiers\n src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__symbolModifiers --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__isTopLevel\n src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__callee --> src__extractors__ast__typescript__add\n src__extractors__ast__typescript__capabilities --> src__extractors__ast__typescript__add\n src__graph__diff__diffIntentGraphs --> src__graph__diff__assertGraph\n src__graph__diff__diffIntentGraphs --> src__graph__diff__groupRecords\n src__graph__diff__beforeGroups --> src__graph__diff__changedFieldPaths\n src__graph__diff__beforeGroups --> src__graph__diff__normalizeRecord\n src__graph__diff__afterGroups --> src__graph__diff__changedFieldPaths\n src__graph__diff__afterGroups --> src__graph__diff__normalizeRecord\n src__graph__diff__left --> src__graph__diff__changedFieldPaths\n src__graph__diff__left --> src__graph__diff__normalizeRecord\n src__graph__diff__right --> src__graph__diff__changedFieldPaths\n src__graph__diff__right --> src__graph__diff__normalizeRecord\n src__graph__diff__paired --> src__graph__diff__changedFieldPaths\n src__graph__diff__paired --> src__graph__diff__normalizeRecord\n src__graph__diff__beforeRecord --> src__graph__diff__changedFieldPaths\n src__graph__diff__beforeRecord --> src__graph__diff__normalizeRecord\n src__graph__diff__afterRecord --> src__graph__diff__changedFieldPaths\n src__graph__diff__afterRecord --> src__graph__diff__normalizeRecord\n src__graph__diff__renderGraphDiffSvg --> src__graph__diff__escapeXml\n src__graph__diff__renderGraphDiffSvg --> src__graph__diff__truncate\n src__graph__diff__visibleRows --> src__graph__diff__escapeXml\n src__graph__diff__visibleRows --> src__graph__diff__truncate\n src__graph__diff__width --> src__graph__diff__escapeXml\n src__graph__diff__width --> src__graph__diff__truncate\n src__graph__diff__height --> src__graph__diff__escapeXml\n src__graph__diff__height --> src__graph__diff__truncate\n src__graph__diff__y --> src__graph__diff__escapeXml\n src__graph__diff__y --> src__graph__diff__truncate\n src__graph__diff__groupRecords --> src__graph__diff__recordIdentity\n src__graph__diff__groupRecords --> src__graph__diff__values\n src__graph__diff__groups --> src__graph__diff__recordIdentity\n src__graph__diff__changedFieldPaths --> src__graph__diff__isObject\n src__graph__diff__compareRelations --> src__graph__diff__relationKey\n src__graph__diff__metricCard --> src__graph__diff__escapeXml\n src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__isAstDeclaration\n src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__values\n src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration\n src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol\n src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration\n src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects\n src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths\n src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths\n src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords\n src__graph__linker__linkIntentRecords --> src__graph__linker__indexKeywords\n src__graph__linker__records --> src__graph__linker__scorePair\n src__graph__linker__records --> src__graph__linker__determineRelation\n src__graph__linker__byId --> src__graph__linker__set\n src__graph__linker__keywordIndex --> src__graph__linker__scorePair\n src__graph__linker__keywordIndex --> src__graph__linker__determineRelation\n src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair\n src__graph__linker__symbolResolutionIndex --> src__graph__linker__determineRelation\n src__graph__linker__candidatePairs --> src__graph__linker__scorePair\n src__graph__linker__candidatePairs --> src__graph__linker__determineRelation\n src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair\n src__graph__linker__resolvableBasenames --> src__graph__linker__determineRelation\n src__graph__linker__deduplicateRecords --> src__graph__linker__set\n src__graph__linker__deduplicateRecords --> src__graph__linker__values\n src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTargetBuckets\n src__graph__linker__collectCandidatePairs --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__collectCandidatePairs --> src__graph__linker__isModuleTopicSource\n src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTopicBuckets\n src__graph__linker__collectCandidatePairs --> src__graph__linker__pairsFromBuckets\n src__graph__linker__buckets --> src__graph__linker__indexTargetBuckets\n src__graph__linker__buckets --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__buckets --> src__graph__linker__isModuleTopicSource\n src__graph__linker__buckets --> src__graph__linker__indexTopicBuckets\n src__graph__linker__astIds --> src__graph__linker__indexTargetBuckets\n src__graph__linker__astIds --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__astIds --> src__graph__linker__isModuleTopicSource\n src__graph__linker__astIds --> src__graph__linker__indexTopicBuckets\n src__graph__linker__moduleAstIds --> src__graph__linker__indexTargetBuckets\n src__graph__linker__moduleAstIds --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__moduleAstIds --> src__graph__linker__isModuleTopicSource\n src__graph__linker__moduleAstIds --> src__graph__linker__indexTopicBuckets\n src__graph__linker__declarationAstIds --> src__graph__linker__indexTargetBuckets\n src__graph__linker__declarationAstIds --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__declarationAstIds --> src__graph__linker__isModuleTopicSource\n src__graph__linker__declarationAstIds --> src__graph__linker__indexTopicBuckets\n src__graph__linker__configurationIds --> src__graph__linker__indexTargetBuckets\n src__graph__linker__configurationIds --> src__graph__linker__indexKeywordBuckets\n src__graph__linker__configurationIds --> src__graph__linker__isModuleTopicSource\n src__graph__linker__configurationIds --> src__graph__linker__indexTopicBuckets\n src__graph__linker__indexTargetBuckets --> src__graph__linker__addToBucket\n src__graph__linker__indexTargetBuckets --> src__graph__linker__indexAliases\n src__graph__linker__indexAliases --> src__graph__linker__aliases\n src__graph__linker__indexAliases --> src__graph__linker__addToBucket\n src__graph__linker__indexKeywordBuckets --> src__graph__linker__addToBucket\n src__graph__linker__indexTopicBuckets --> src__graph__linker__addToBucket\n src__graph__linker__addToBucket --> src__graph__linker__set\n src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedAstPair\n src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedConfigurationPair\n src__graph__linker__pairsFromBuckets --> src__graph__linker__set\n src__graph__linker__leftId --> src__graph__linker__set\n src__graph__linker__rightId --> src__graph__linker__set\n src__graph__linker__indexResolvableBasenames --> src__graph__linker__set\n src__graph__linker__owners --> src__graph__linker__set\n src__graph__linker__pathsIntersect --> src__graph__linker__expand\n src__graph__linker__scorePair --> src__graph__linker__intersects\n src__graph__linker__scorePair --> src__graph__linker__intersectsAliases\n src__graph__linker__scorePair --> src__graph__linker__pathsIntersect\n src__graph__linker__scorePair --> src__graph__linker__isFileAggregateEvidencePair\n src__graph__linker__scorePair --> src__graph__linker__jaccard\n src__graph__linker__score --> src__graph__linker__intersects\n src__graph__linker__leftKeywords --> src__graph__linker__intersects\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>192 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>292 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+103 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2324 more"]\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [146KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [35KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "166.2KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "23.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 246f 39601L | typescript:138,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.26s\n# CC̅=3.8 | critical:110/3586 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/extractors/communication.ts = 515L, 5 classes, 76m, max CC=50\n 🔴 GOD src/synthesis/code-change-plan/implementation.ts = 1310L, 10 classes, 127m, max CC=47\n 🔴 GOD src/communication/llm/implementation.ts = 514L, 8 classes, 53m, max CC=12\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC extractCommunicationFile CC=50 (limit:15)\n 🟡 CC inferIdentity CC=15 (limit:15)\n 🟡 CC extractMarkdownIntentAudited CC=19 (limit:15)\n 🟡 CC extractTypeScriptFile CC=43 (limit:15)\n 🟡 CC visit CC=25 (limit:15)\n 🟡 CC buildSymbolResolutionIndex CC=15 (limit:15)\n 🟡 CC scorePair CC=18 (limit:15)\n 🟡 CC diagnoseGraph CC=40 (limit:15)\n 🟡 CC neighbors CC=35 (limit:15)\n 🟡 CC recordsById CC=35 (limit:15)\n 🟡 CC groundedImplementation CC=35 (limit:15)\n 🟡 CC implementedPaths CC=35 (limit:15)\n 🟡 CC documentedPaths CC=35 (limit:15)\n 🟡 CC symbolResolutionIndex CC=35 (limit:15)\n 🟡 CC executeAction CC=83 (limit:15)\n 🟡 CC root CC=83 (limit:15)\n\nREFACTOR[4]:\n 1. split src/extractors/communication.ts (god module)\n 2. split src/synthesis/code-change-plan/implementation.ts (god module)\n 3. split src/communication/llm/implementation.ts (god module)\n 4. split 17 high-CC methods (CC>15)\n\nPIPELINES[2043]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=4.0 ←in:0 →out:0\n │ !! implementation.ts 1310L 10C 127m CC=47 ←3\n │ !! cli.ts 908L 1C 118m CC=13 ←0\n │ !! actions.ts 700L 0C 74m CC=83 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! communication.ts 515L 5C 76m CC=50 ←0\n │ !! implementation.ts 514L 8C 53m CC=12 ←0\n │ !! text.ts 491L 0C 51m CC=34 ←0\n │ !! linker.ts 489L 4C 72m CC=18 ←3\n │ !! markdown-llm.ts 458L 6C 38m CC=19 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ !! diagnostics.ts 361L 0C 40m CC=40 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ nl-llm.ts 337L 5C 46m CC=12 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intent.ts 276L 4C 29m CC=23 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ !! result.ts 264L 0C 16m CC=21 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ intent.ts 258L 15C 0m CC=0.0 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ code-change.ts 221L 16C 0m CC=0.0 ←0\n │ !! utils.ts 219L 0C 38m CC=23 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ !! code-change-path.ts 204L 0C 14m CC=38 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! candidate.ts 200L 0C 13m CC=27 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ !! io.ts 177L 1C 32m CC=15 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ !! record.ts 172L 2C 9m CC=18 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ !! typescript.ts 166L 0C 19m CC=43 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ !! symbol-resolution.ts 120L 3C 16m CC=15 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ !! classifier.ts 96L 4C 27m CC=17 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ !! diff-ui.ts 48L 0C 9m CC=52 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.diff/ (fan-in=6)\n HUB: src.live/ (fan-in=7)\n HUB: src.synthesis/ (fan-in=5)\n SMELL: scripts.research/ fan-out=11 → split needed\n SMELL: sdk.python/ fan-out=8 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 426 | edges: 500 | modules: 29\n# CC̄=3.8\n\nHUBS[20]:\n src.extractors.ast.typescript.extractTypeScriptFile\n CC=43 in:0 out:44 total:44\n src.extractors.ast.typescript.visit\n CC=25 in:1 out:26 total:27\n src.extractors.communication.extractCommunicationFile\n CC=50 in:3 out:24 total:27\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.graph.linker.scorePair\n CC=18 in:6 out:16 total:22\n src.graph.linker.linkIntentRecords\n CC=5 in:0 out:22 total:22\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n CC=19 in:0 out:21 total:21\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.graph.diff.diffIntentGraphs\n CC=11 in:0 out:19 total:19\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [14 funcs]\n add CC=14 out:7\n callee CC=2 out:2\n capabilities CC=1 out:2\n declarationIsCallable CC=4 out:2\n excerpt CC=1 out:2\n extractTypeScriptFile CC=43 out:44\n isTopLevel CC=5 out:3\n languageName CC=2 out:3\n lineRange CC=1 out:3\n modifiers CC=4 out:4\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication [34 funcs]\n basename CC=1 out:0\n communicationFiles CC=3 out:2\n communicationSegments CC=14 out:12\n declaredParticipant CC=5 out:1\n declaredParticipantId CC=5 out:1\n declaredRole CC=5 out:1\n envelope CC=5 out:1\n explicitEnvelope CC=5 out:1\n extractCommunicationFile CC=50 out:24\n extractCommunicationIntent CC=7 out:10\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [17 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=8 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n failed CC=1 out:2\n fallbackOrThrow CC=2 out:5\n markDeterministic CC=2 out:2\n markdownResponseContract CC=1 out:7\n readPrompt CC=2 out:6\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [32 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n audit CC=1 out:1\n clampLine CC=1 out:3\n deterministic CC=1 out:1\n extractNlWithCorrection CC=1 out:0\n failedAudit CC=1 out:2\n fallback CC=2 out:0\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n src.graph.diff [26 funcs]\n afterGroups CC=7 out:6\n afterRecord CC=1 out:3\n assertGraph CC=3 out:3\n beforeGroups CC=7 out:6\n beforeRecord CC=1 out:3\n changedFieldPaths CC=6 out:6\n compareRelations CC=1 out:2\n diffIntentGraphs CC=11 out:19\n escapeXml CC=2 out:1\n groupRecords CC=4 out:6\n src.graph.linker [41 funcs]\n addToBucket CC=2 out:3\n aliases CC=3 out:3\n astIds CC=10 out:7\n buckets CC=10 out:7\n byId CC=4 out:2\n candidatePairs CC=5 out:7\n collectCandidatePairs CC=10 out:8\n configurationIds CC=10 out:7\n declarationAstIds CC=10 out:7\n deduplicateRecords CC=4 out:3\n src.graph.symbol-resolution [10 funcs]\n buildSymbolResolutionIndex CC=15 out:13\n byAlias CC=9 out:8\n byNlRecord CC=4 out:3\n hasResolvedNlAstSymbolPair CC=10 out:3\n isAstDeclaration CC=3 out:0\n pathSelects CC=3 out:5\n resolveSymbol CC=8 out:6\n selected CC=2 out:1\n uniquePaths CC=1 out:3\n values CC=2 out:0\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "255.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 426\n total_edges: 500\n modules_count: 29\nnodes:\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.communication.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication\n line: 351\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-llm.MarkdownAttemptError.stageAudit:\n name: stageAudit\n module: src.extractors.markdown-llm\n line: 411\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.graph.linker.jaccard:\n name: jaccard\n module: src.graph.linker\n line: 62\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 1\n src.graph.linker.moduleAstIds:\n name: moduleAstIds\n module: src.graph.linker\n line: 138\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm.NlLlmRequiredError.body:\n name: body\n module: src.extractors.nl-llm\n line: 79\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.symbol-resolution.values:\n name: values\n module: src.graph.symbol-resolution\n line: 33\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 1\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.extractors.communication.declaredParticipantId:\n name: declaredParticipantId\n module: src.extractors.communication\n line: 143\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.ast.typescript.declarationIsCallable:\n name: declarationIsCallable\n module: src.extractors.ast.typescript\n line: 110\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.graph.linker.indexAliases:\n name: indexAliases\n module: src.graph.linker\n line: 174\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm\n line: 244\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.graph.diff.width:\n name: width\n module: src.graph.diff\n line: 119\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.prompt:\n name: prompt\n module: src.extractors.nl-llm\n line: 84\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.linker.candidatePairs:\n name: candidatePairs\n module: src.graph.linker\n line: 79\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.graph.diff.changedFieldPaths:\n name: changedFieldPaths\n module: src.graph.diff\n line: 189\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 8\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n src.extractors.communication.item:\n name: item\n module: src.extractors.communication\n line: 407\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.graph.linker.buckets:\n name: buckets\n module: src.graph.linker\n line: 136\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n src.extractors.communication.envelope:\n name: envelope\n module: src.extractors.communication\n line: 127\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm\n line: 175\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 1\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.graph.diff.assertGraph:\n name: assertGraph\n module: src.graph.diff\n line: 155\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n src.extractors.communication.participant:\n name: participant\n module: src.extractors.communication\n line: 145\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.graph.linker.isSuppressedConfigurationPair:\n name: isSuppressedConfigurationPair\n module: src.graph.linker\n line: 225\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n src.extractors.nl-llm.NlLlmRequiredError.sourcePath:\n name: sourcePath\n module: src.extractors.nl-llm\n line: 80\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm\n line: 178\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.graph.linker.isSuppressedAstPair:\n name: isSuppressedAstPair\n module: src.graph.linker\n line: 262\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.communication.declaredRole:\n name: declaredRole\n module: src.extractors.communication\n line: 142\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 155\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.communication.match:\n name: match\n module: src.extractors.communication\n line: 330\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication\n line: 323\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 1\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.graph.linker.keywordIndex:\n name: keywordIndex\n module: src.graph.linker\n line: 77\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm\n line: 176\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.symbol-resolution.pathSelects:\n name: pathSelects\n module: src.graph.symbol-resolution\n line: 104\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.graph.symbol-resolution.byAlias:\n name: byAlias\n module: src.graph.symbol-resolution\n line: 23\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 0\n src.graph.linker.byId:\n name: byId\n module: src.graph.linker\n line: 117\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.graph.linker.scorePair:\n name: scorePair\n module: src.graph.linker\n line: 342\n cyclomatic_complexity: 18\n calls_out: 16\n calls_in: 6\n src.extractors.nl-llm.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm\n line: 292\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm\n line: 179\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.communication.fileParts:\n name: fileParts\n module: src.extractors.communication\n line: 350\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 78\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.graph.diff.paired:\n name: paired\n module: src.graph.diff\n line: 48\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.result:\n name: result\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.graph.diff.left:\n name: left\n module: src.graph.diff\n line: 46\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.markDeterministic:\n name: markDeterministic\n module: src.extractors.nl-llm\n line: 169\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.graph.linker.intersectsAliases:\n name: intersectsAliases\n module: src.graph.linker\n line: 477\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.graph.linker.deduplicateRecords:\n name: deduplicateRecords\n module: src.graph.linker\n line: 116\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.graph.linker.rightId:\n name: rightId\n module: src.graph.linker\n line: 248\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.graph.diff.relationKey:\n name: relationKey\n module: src.graph.diff\n line: 202\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.add:\n name: add\n module: src.extractors.ast.typescript\n line: 29\n cyclomatic_complexity: 14\n calls_out: 7\n calls_in: 7\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.communication.communicationFiles:\n name: communicationFiles\n module: src.extractors.communication\n line: 75\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.extractors.communication.nestedRole:\n name: nestedRole\n module: src.extractors.communication\n line: 352\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm\n line: 318\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.graph.diff.values:\n name: values\n module: src.graph.diff\n line: 167\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.communication.extractCommunicationIntent:\n name: extractCommunicationIntent\n module: src.extractors.communication\n line: 55\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 0\n src.graph.linker.linkIntentRecords:\n name: linkIntentRecords\n module: src.graph.linker\n line: 73\n cyclomatic_complexity: 5\n calls_out: 22\n calls_in: 0\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.graph.diff.truncate:\n name: truncate\n module: src.graph.diff\n line: 233\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 5\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.startedAt:\n name: startedAt\n module: src.extractors.nl-llm\n line: 59\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.graph.linker.astIds:\n name: astIds\n module: src.graph.linker\n line: 137\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.markdown-llm.MarkdownAttemptError.failed:\n name: failed\n module: src.extractors.markdown-llm\n line: 310\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.communication.flush:\n name: flush\n module: src.extractors.communication\n line: 405\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.graph.linker.indexKeywords:\n name: indexKeywords\n module: src.graph.linker\n line: 54\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.graph.linker.indexTopicBuckets:\n name: indexTopicBuckets\n module: src.graph.linker\n line: 198\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 6\n src.extractors.markdown-llm.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm\n line: 235\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.diff.y:\n name: y\n module: src.graph.diff\n line: 121\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 43\n calls_out: 44\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.graph.diff.recordIdentity:\n name: recordIdentity\n module: src.graph.diff\n line: 175\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication.sameStrings:\n name: sameStrings\n module: src.extractors.communication\n line: 318\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.absolute:\n name: absolute\n module: src.extractors.nl-llm\n line: 78\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.symbol:\n name: symbol\n module: src.extractors.ast.typescript\n line: 90\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.graph.diff.right:\n name: right\n module: src.graph.diff\n line: 47\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.graph.linker.determineRelation:\n name: determineRelation\n module: src.graph.linker\n line: 425\n cyclomatic_complexity: 7\n calls_out: 1\n calls_in: 6\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 55\n cyclomatic_complexity: 19\n calls_out: 21\n calls_in: 0\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.languageName:\n name: languageName\n module: src.extractors.ast.typescript\n line: 163\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.graph.diff.metricCard:\n name: metricCard\n module: src.graph.diff\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.graph.linker.symbolResolutionIndex:\n name: symbolResolutionIndex\n module: src.graph.linker\n line: 78\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.communication.normalizeType:\n name: normalizeType\n module: src.extractors.communication\n line: 481\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n src.extractors.ast.typescript.isTopLevel:\n name: isTopLevel\n module: src.extractors.ast.typescript\n line: 145\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 3\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 53\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.ast.typescript.visit:\n name: visit\n module: src.extractors.ast.typescript\n line: 77\n cyclomatic_complexity: 25\n calls_out: 26\n calls_in: 1\n src.graph.linker.configurationIds:\n name: configurationIds\n module: src.graph.linker\n line: 140\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.graph.linker.pathsIntersect:\n name: pathsIntersect\n module: src.graph.linker\n line: 322\n cyclomatic_complexity: 8\n calls_out: 7\n calls_in: 1\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.graph.linker.owners:\n name: owners\n module: src.graph.linker\n line: 299\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.graph.symbol-resolution.selected:\n name: selected\n module: src.graph.symbol-resolution\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.communication.normalize:\n name: normalize\n module: src.extractors.communication\n line: 319\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 69\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication.identity:\n name: identity\n module: src.extractors.communication\n line: 144\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.graph.linker.values:\n name: values\n module: src.graph.linker\n line: 209\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm\n line: 300\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.graph.linker.score:\n name: score\n module: src.graph.linker\n line: 349\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.diff.normalizeRecord:\n name: normalizeRecord\n module: src.graph.diff\n line: 185\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt:\n name: startedAt\n module: src.extractors.markdown-llm\n line: 60\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.nl-llm.NlLlmRequiredError.maxLine:\n name: maxLine\n module: src.extractors.nl-llm\n line: 83\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.diff.groupRecords:\n name: groupRecords\n module: src.graph.diff\n line: 163\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm\n line: 181\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication.raw:\n name: raw\n module: src.extractors.communication\n line: 416\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.graph.symbol-resolution.resolveSymbol:\n name: resolveSymbol\n module: src.graph.symbol-resolution\n line: 75\n cyclomatic_complexity: 8\n calls_out: 6\n calls_in: 2\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.graph.linker.records:\n name: records\n module: src.graph.linker\n line: 75\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.graph.diff.diffIntentGraphs:\n name: diffIntentGraphs\n module: src.graph.diff\n line: 16\n cyclomatic_complexity: 11\n calls_out: 19\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.markdown-llm.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm\n line: 437\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.extractors.markdown-llm.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm\n line: 249\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.graph.linker.resolvableBasenames:\n name: resolvableBasenames\n module: src.graph.linker\n line: 80\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.communication.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication\n line: 353\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.graph.diff.afterRecord:\n name: afterRecord\n module: src.graph.diff\n line: 51\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.graph.linker.aliases:\n name: aliases\n module: src.graph.linker\n line: 326\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.markdown-llm.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm\n line: 209\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.graph.diff.visibleRows:\n name: visibleRows\n module: src.graph.diff\n line: 118\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.graph.linker.collectCandidatePairs:\n name: collectCandidatePairs\n module: src.graph.linker\n line: 132\n cyclomatic_complexity: 10\n calls_out: 8\n calls_in: 1\n src.graph.diff.renderGraphDiffSvg:\n name: renderGraphDiffSvg\n module: src.graph.diff\n line: 110\n cyclomatic_complexity: 7\n calls_out: 12\n calls_in: 0\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-llm.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm\n line: 161\n cyclomatic_complexity: 8\n calls_out: 11\n calls_in: 3\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.ast.typescript.lineRange:\n name: lineRange\n module: src.extractors.ast.typescript\n line: 18\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.graph.diff.compareRelations:\n name: compareRelations\n module: src.graph.diff\n line: 210\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.communication.unquote:\n name: unquote\n module: src.extractors.communication\n line: 507\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.graph.linker.leftId:\n name: leftId\n module: src.graph.linker\n line: 247\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n src.extractors.ast.typescript.modifiers:\n name: modifiers\n module: src.extractors.ast.typescript\n line: 72\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.graph.symbol-resolution.byNlRecord:\n name: byNlRecord\n module: src.graph.symbol-resolution\n line: 45\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.failedAudit:\n name: failedAudit\n module: src.extractors.nl-llm\n line: 157\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.extractors.ast.typescript.callee:\n name: callee\n module: src.extractors.ast.typescript\n line: 121\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm\n line: 249\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.communication.inferred:\n name: inferred\n module: src.extractors.communication\n line: 128\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.fallback:\n name: fallback\n module: src.extractors.nl-llm\n line: 265\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 1\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.communication.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication\n line: 486\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n src.graph.diff.groups:\n name: groups\n module: src.graph.diff\n line: 164\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.graph.diff.beforeGroups:\n name: beforeGroups\n module: src.graph.diff\n line: 38\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 0\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.graph.linker.indexResolvableBasenames:\n name: indexResolvableBasenames\n module: src.graph.linker\n line: 298\n cyclomatic_complexity: 8\n calls_out: 13\n calls_in: 1\n src.extractors.communication.explicitEnvelope:\n name: explicitEnvelope\n module: src.extractors.communication\n line: 129\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.audit:\n name: audit\n module: src.extractors.nl-llm\n line: 272\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.graph.linker.isModuleTopicSource:\n name: isModuleTopicSource\n module: src.graph.linker\n line: 159\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 6\n src.extractors.communication.listValue:\n name: listValue\n module: src.extractors.communication\n line: 501\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm\n line: 296\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.communication.first:\n name: first\n module: src.extractors.communication\n line: 497\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.graph.symbol-resolution.buildSymbolResolutionIndex:\n name: buildSymbolResolutionIndex\n module: src.graph.symbol-resolution\n line: 22\n cyclomatic_complexity: 15\n calls_out: 13\n calls_in: 0\n src.graph.linker.declarationAstIds:\n name: declarationAstIds\n module: src.graph.linker\n line: 139\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 0\n src.extractors.communication.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication\n line: 446\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.graph.symbol-resolution.isAstDeclaration:\n name: isAstDeclaration\n module: src.graph.symbol-resolution\n line: 116\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 3\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.communication.heading:\n name: heading\n module: src.extractors.communication\n line: 417\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.excerpt:\n name: excerpt\n module: src.extractors.ast.typescript\n line: 25\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.graph.diff.afterGroups:\n name: afterGroups\n module: src.graph.diff\n line: 39\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 0\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.graph.linker.expand:\n name: expand\n module: src.graph.linker\n line: 323\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 1\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic:\n name: deterministic\n module: src.extractors.markdown-llm\n line: 61\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.graph.linker.isFileAggregateEvidencePair:\n name: isFileAggregateEvidencePair\n module: src.graph.linker\n line: 414\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.markdown-llm.MarkdownAttemptError.readPrompt:\n name: readPrompt\n module: src.extractors.markdown-llm\n line: 431\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.graph.linker.leftKeywords:\n name: leftKeywords\n module: src.graph.linker\n line: 351\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.communication.declaredParticipant:\n name: declaredParticipant\n module: src.extractors.communication\n line: 141\n cyclomatic_complexity: 5\n calls_out: 1\n calls_in: 0\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.symbolModifiers:\n name: symbolModifiers\n module: src.extractors.ast.typescript\n line: 92\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.communication.identityRegistry:\n name: identityRegistry\n module: src.extractors.communication\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.graph.linker.set:\n name: set\n module: src.graph.linker\n line: 478\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 11\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.graph.diff.escapeXml:\n name: escapeXml\n module: src.graph.diff\n line: 227\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 6\n src.graph.diff.isObject:\n name: isObject\n module: src.graph.diff\n line: 198\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm\n line: 213\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.markdown-llm.MarkdownAttemptError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 302\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.nl-llm.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm\n line: 240\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.graph.diff.beforeRecord:\n name: beforeRecord\n module: src.graph.diff\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.symbol-resolution.hasResolvedNlAstSymbolPair:\n name: hasResolvedNlAstSymbolPair\n module: src.graph.symbol-resolution\n line: 61\n cyclomatic_complexity: 10\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 149\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.markdown-llm.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm\n line: 438\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n src.graph.linker.indexKeywordBuckets:\n name: indexKeywordBuckets\n module: src.graph.linker\n line: 186\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 6\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm\n line: 319\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.graph.symbol-resolution.uniquePaths:\n name: uniquePaths\n module: src.graph.symbol-resolution\n line: 112\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.markdown-llm.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm\n line: 439\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.extractors.markdown-llm.MarkdownAttemptError.markDeterministic:\n name: markDeterministic\n module: src.extractors.markdown-llm\n line: 402\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm.NlAttemptError.deterministic:\n name: deterministic\n module: src.extractors.nl-llm\n line: 160\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm\n line: 223\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm\n line: 94\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.graph.linker.indexTargetBuckets:\n name: indexTargetBuckets\n module: src.graph.linker\n line: 166\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 6\n src.extractors.communication.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication\n line: 370\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 1\n src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection:\n name: extractNlWithCorrection\n module: src.extractors.nl-llm\n line: 115\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.communication.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication\n line: 337\n cyclomatic_complexity: 15\n calls_out: 9\n calls_in: 1\n src.extractors.ast.typescript.capabilities:\n name: capabilities\n module: src.extractors.ast.typescript\n line: 134\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.communication.basename:\n name: basename\n module: src.extractors.communication\n line: 371\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 11\n src.extractors.communication.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication\n line: 391\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 1\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.graph.diff.height:\n name: height\n module: src.graph.diff\n line: 120\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 58\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.communication.extractCommunicationFile:\n name: extractCommunicationFile\n module: src.extractors.communication\n line: 102\n cyclomatic_complexity: 50\n calls_out: 24\n calls_in: 3\n src.graph.linker.addToBucket:\n name: addToBucket\n module: src.graph.linker\n line: 208\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 4\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.linker.pairsFromBuckets:\n name: pairsFromBuckets\n module: src.graph.linker\n line: 235\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 1\n src.graph.linker.intersects:\n name: intersects\n module: src.graph.linker\n line: 472\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 4\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.docs-schema.target\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.target\n call_type: resolved\n- caller: src.extractors.docs-schema.documentResponseSchema\n callee: src.extractors.docs-schema.documentResponseContract\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n callee: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n callee: src.extractors.nl-llm.NlAttemptError.markDeterministic\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n callee: src.extractors.nl-llm.NlAttemptError.fallbackOrThrow\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions\n callee: src.extractors.nl-llm.NlAttemptError.markDeterministic\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.startedAt\n callee: src.extractors.nl-llm.NlAttemptError.markDeterministic\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.startedAt\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.result\n callee: src.extractors.nl-llm.NlAttemptError.markDeterministic\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.result\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.client\n callee: src.extractors.nl-llm.NlAttemptError.fallbackOrThrow\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.absolute\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.body\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.sourcePath\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.maxLine\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.prompt\n callee: src.extractors.nl-llm.NlAttemptError.extractNlWithCorrection\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.failedAudit\n callee: src.extractors.nl-llm.NlAttemptError.audit\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.deterministic\n callee: src.extractors.nl-llm.NlAttemptError.fallback\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.sourceExcerpt\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.resolveAction\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.nonEmptyText\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.resolveObject\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.toIntentRecord\n callee: src.extractors.nl-llm.NlAttemptError.allowedModality\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.lines\n callee: src.extractors.nl-llm.NlAttemptError.sourceExcerpt\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.action\n callee: src.extractors.nl-llm.NlAttemptError.resolveObject\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.normalizedText\n callee: src.extractors.nl-llm.NlAttemptError.resolveObject\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.statementText\n callee: src.extractors.nl-llm.NlAttemptError.allowedModality\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.sourceExcerpt\n callee: src.extractors.nl-llm.NlAttemptError.clampLine\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.resolveAction\n callee: src.extractors.nl-llm.NlAttemptError.allowedAction\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.isPlaceholder\n callee: src.extractors.nl-llm.NlAttemptError.nonEmptyText\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.resolveObject\n callee: src.extractors.nl-llm.NlAttemptError.isPlaceholder\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.resolveObject\n callee: src.extractors.nl-llm.NlAttemptError.nonEmptyText\n call_type: resolved\n- caller: src.extractors.nl-llm.NlAttemptError.NL_RECORD_CONTRACT\n callee: src.extractors.nl-llm.NlAttemptError.nlStrings\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.files\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage\n call_type: resolved\n- caller: src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk\n callee: src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage\n call_type: resolved\n- caller: src.extractors.changelog.extractChangelog\n callee: src.extractors.changelog.changelogAction\n call_type: resolved\n- caller: src.extractors.changelog.body\n callee: src.extractors.changelog.changelogAction\n call_type: resolved\n- caller: src.extractors.changelog.relative\n callee: src.extractors.changelog.changelogAction\n call_type: resolved\n- caller: src.extractors.changelog.lines\n callee: src.extractors.changelog.changelogAction\n call_type: resolved\n- caller: src.extractors.docs-deterministic.extractDocumentation\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3277 func | 132f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts\n WHY: 1310L, 10 classes, max CC=47\n EFFORT: ~4h IMPACT: 61570\n\n [2] !! SPLIT src/cli.ts\n WHY: 908L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 11804\n\n [3] !! SPLIT-FUNC executeAction CC=83 fan=65\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5395\n\n [4] !! SPLIT-FUNC root CC=83 fan=64\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5312\n\n [5] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42\n WHY: CC=52 exceeds 15\n EFFORT: ~1h IMPACT: 2184\n\n [8] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [9] !! SPLIT-FUNC extractTypeScriptFile CC=43 fan=44\n WHY: CC=43 exceeds 15\n EFFORT: ~1h IMPACT: 1892\n\n [10] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths\n ⚠ Splitting src/cli.ts may break 118 import paths\n\nMETRICS-TARGET:\n CC̄: 3.9 → ≤2.7\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 99 → ≤49\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.9 → now CC̄=3.9\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "146.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 246f 39601L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:138,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.03s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3586 func | 0 cls | 246 mod | CC̄=3.8 | critical:110 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64\n# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; extractTypeScriptFile fan=44; diffUiHtml fan=42\n# evolution: CC̄ 3.9→3.8 (improved -0.1)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[246]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,908\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,514\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,177\n src/core/record.ts,172\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,276\n src/core/schema/utils.ts,219\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,491\n src/core/types/index.ts,4\n src/core/types/code-change.ts,221\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,258\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,166\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,515\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,458\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,337\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,361\n src/graph/diff.ts,235\n src/graph/linker.ts,489\n src/graph/symbol-resolution.ts,120\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,210\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,200\n src/semantic/reranker/result.ts,264\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,700\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,204\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1310\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,96\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,48\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,participant,role,ticket,communicationOnly,records,isCommunication,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n executeAction()\n root()\n file()\n text()\n analysis()\n records()\n graph()\n graph()\n diagnostics()\n graph()\n diagnostics()\n result()\n output()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n planSet()\n review()\n patchPath()\n auditPath()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n patch()\n receiptPath()\n result()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n beforePath()\n afterPath()\n diff()\n result()\n graph()\n diagnostics()\n view()\n filterCommunicationGraph()\n participant()\n role()\n ticket()\n communicationOnly()\n records()\n isCommunication()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/web/diff-ui.ts:\n e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs\n diffUiHtml()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n src/extractors/communication.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/security.js,../core/types.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationExtractionOptions,CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,CommunicationFileOutcome,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,fileResult,extractCommunicationFile,relativeToProject,segments,pathTicket,envelope,inferred,explicitEnvelope,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,declaredA2aAgentId,explicitPaths,explicitSymbols,classifiedSegments,newRecords,buildCommunicationRecords,segmentType,semantics,classified,action,line,resolveIdentity,sameStrings,normalize,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governance,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,isCommunicationNoise,normalized,governanceSectionType,normalized,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,semanticsFor,first,listValue,stripped,unquote,validTimestamp,parsed\n CommunicationExtractionOptions:\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n CommunicationFileOutcome:\n extractCommunicationIntent()\n root()\n projectRoot()\n files()\n identityRegistry()\n communicationFiles()\n fileResult()\n extractCommunicationFile()\n relativeToProject()\n segments()\n pathTicket()\n envelope()\n inferred()\n explicitEnvelope()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n declaredA2aAgentId()\n explicitPaths()\n explicitSymbols()\n classifiedSegments()\n newRecords()\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n resolveIdentity()\n sameStrings()\n normalize()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governance()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n semanticsFor()\n first()\n listValue()\n stripped()\n unquote()\n validTimestamp()\n parsed()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/synthesis/code-change-plan/implementation.ts:\n i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n CreateCodeChangeReviewOptions:\n CreatedCodeChangeReview:\n CreateCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n PreparedSourceEdit:\n IMPLEMENTATION_DIAGNOSTIC_CODES()\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n conclusions()\n proposals()\n recordsById()\n proposalsByDiagnostic()\n conclusionsByDiagnostic()\n candidates()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n generation()\n planHash()\n createRepositoryPathProbe()\n base()\n absolute()\n implementationDiagnosticRank()\n evaluateCodeChangeAcceptance()\n afterDiagnostics()\n beforeIds()\n afterById()\n targeted()\n clearedDiagnosticIds()\n remainingDiagnosticIds()\n newBlockingDiagnosticIds()\n accepted()\n evaluatedAt()\n closeCodeChanges()\n evaluatedAt()\n afterDiagnostics()\n planIds()\n acceptances()\n acceptedCount()\n indexProposalsByDiagnostic()\n index()\n list()\n indexConclusionsByDiagnostic()\n index()\n list()\n collectTarget()\n paths()\n symbols()\n tickets()\n versions()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n titleFor()\n record()\n object()\n startsWithImperative()\n descriptionFor()\n acceptanceCriteriaFor()\n priorityFor()\n confidenceFor()\n riskFor()\n level()\n rollbackFor()\n deterministicGeneration()\n uniqueSorted()\n createCodeChangeReviewPatch()\n createdAt()\n markdown()\n renderCodeChangeReviewMarkdown()\n symbols()\n assertCodeChangeReviewPatch()\n artifact()\n generation()\n priorityRank()\n inline()\n renderIds()\n createCodeChangeSourcePatch()\n plan()\n graphFingerprint()\n createdAt()\n allowed()\n diffs()\n normalized()\n path()\n rawDiff()\n unifiedDiff()\n patchHash()\n createCodeChangeSourcePatchSet()\n generatedAt()\n assertCodeChangeSourcePatch()\n patch()\n paths()\n path()\n expectedHash()\n allowed()\n expectedChanges()\n editPath()\n assertCodeChangeSourcePatchSet()\n set()\n plansById()\n patchIds()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n instructionFor()\n symbols()\n criteria()\n normalizeUnifiedDiff()\n normalized()\n path()\n bare()\n stripped()\n applyCodeChangeSourcePatch()\n root()\n receiptPath()\n existing()\n relative()\n absolute()\n exists()\n before()\n after()\n now()\n fileHashesAfter()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n expectedPaths()\n hashPaths()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n normalizedDiff()\n baseLines()\n diffLines()\n cursor()\n oldIndex()\n oldCount()\n newCount()\n mark()\n body()\n splitKeep()\n lines()\n src/extractors/ast/typescript.ts:\n i: ../../core/io.js,../../core/record.js,../../core/types.js,./records.js,node:path,typescript\n e: extractTypeScriptFile,relative,sourceFile,moduleCapabilities,lineRange,excerpt,add,symbol,nameOf,modifiers,visit,symbol,symbolModifiers,declarationIsCallable,callee,capabilities,isTopLevel,scriptKind,extension,languageName,extension\n extractTypeScriptFile()\n relative()\n sourceFile()\n moduleCapabilities()\n lineRange()\n excerpt()\n add()\n symbol()\n nameOf()\n modifiers()\n visit()\n symbol()\n symbolModifiers()\n declarationIsCallable()\n callee()\n capabilities()\n isTopLevel()\n scriptKind()\n extension()\n languageName()\n extension()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: diagnoseGraph,neighbors,recordsById,groundedImplementation,implementedPaths,documentedPaths,symbolResolutionIndex,related,evidenced,hasLocationOnlyEvidence,missingFields,symbolIssues,detail,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n diagnoseGraph()\n neighbors()\n recordsById()\n groundedImplementation()\n implementedPaths()\n documentedPaths()\n symbolResolutionIndex()\n related()\n evidenced()\n hasLocationOnlyEvidence()\n missingFields()\n symbolIssues()\n detail()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n lowerBasename()\n dot()\n ext()\n isUsefulCodeChangePath()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,classifyActionHeuristically,conventional,prose,searchable,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n classifyActionHeuristically()\n conventional()\n prose()\n searchable()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n result()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n src/semantic/reranker/candidate.ts:\n i: ../../core/schema.js,../../core/types.js,./validation.js\n e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair\n createSemanticCandidateSet()\n grouped()\n values()\n assertSemanticCandidateSet()\n records()\n seenIds()\n seenPairs()\n byDeclaration()\n declaration()\n module()\n existing()\n expectedHash()\n comparePair()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/semantic/reranker-llm.ts:\n i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util\n e: SemanticRerankerOptions,SemanticRerankerRequiredError\n SemanticRerankerOptions:\n SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,target,lifecycle,source,lines,epistemic,metadata,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n target()\n lifecycle()\n source()\n lines()\n epistemic()\n metadata()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/core/schema/utils.ts:\n i: ../types.js\n e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation\n objectValue()\n exactKeys()\n expectedSet()\n missing()\n extra()\n nonEmptyString()\n nonBlankString()\n nullableString()\n enumValue()\n stringArray()\n nonEmptyUniqueStringArray()\n repositoryPath()\n normalized()\n exactStringSet()\n uniqueIdArray()\n nonEmptyUniqueIdArray()\n knownReferences()\n unknown()\n confidence()\n assertAcyclicProposalDependencies()\n byId()\n visiting()\n visited()\n visit()\n start()\n dateString()\n nullableDate()\n fingerprint()\n nonNegativeInteger()\n countMap()\n map()\n countRecords()\n key()\n exactCounts()\n actual()\n isJsonValue()\n assertGroundedGenerationMetadata()\n generation()\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n src/semantic/reranker/result.ts:\n i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js\n e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons\n createSemanticRerankResult()\n decisions()\n assertSemanticRerankResult()\n candidates()\n records()\n seenDecisions()\n acceptedDeclarations()\n candidate()\n citations()\n record()\n expectedHash()\n applyAcceptedSemanticRelations()\n candidates()\n added()\n candidate()\n assertSemanticVerdictReason()\n allowedVerdicts()\n allowedReasons()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/extractors/markdown-llm.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./markdown.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,AuditedMarkdownExtractionResult,MarkdownLlmRequiredError,MarkdownAttemptError,CoveredBatch,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n AuditedMarkdownExtractionResult:\n MarkdownLlmRequiredError: super(-1),extractMarkdownIntentAudited(-1),startedAt(-1),deterministic(-1),client(-1),prompt(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),failure(-1),failedResponses(-1)\n MarkdownAttemptError: super(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n CoveredBatch:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/graph/linker.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js,./symbol-resolution.js\n e: PairEvidence,RecordKeywords,DirectedRelation,SourceRelationRule,indexKeywords,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,isSuppressedConfigurationPair,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,resolvedNlAstSymbol,capabilityOverlap,objectSimilarity,sharedTopics,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation,intersects,set,intersectsAliases,set,countBy,key\n PairEvidence:\n RecordKeywords:\n DirectedRelation:\n SourceRelationRule:\n indexKeywords()\n jaccard()\n intersection()\n linkIntentRecords()\n records()\n byId()\n keywordIndex()\n symbolResolutionIndex()\n candidatePairs()\n resolvableBasenames()\n left()\n right()\n evidence()\n directed()\n deduplicateRecords()\n byId()\n existing()\n collectCandidatePairs()\n buckets()\n astIds()\n moduleAstIds()\n declarationAstIds()\n configurationIds()\n isModuleTopicSource()\n indexTargetBuckets()\n indexAliases()\n indexKeywordBuckets()\n indexTopicBuckets()\n addToBucket()\n values()\n isSuppressedConfigurationPair()\n pairsFromBuckets()\n output()\n leftId()\n rightId()\n isSuppressedAstPair()\n leftAst()\n rightAst()\n astId()\n indexResolvableBasenames()\n owners()\n normalized()\n basename()\n paths()\n pathsIntersect()\n expand()\n output()\n aliases()\n full()\n leftSet()\n scorePair()\n score()\n leftKeywords()\n rightKeywords()\n resolvedNlAstSymbol()\n capabilityOverlap()\n objectSimilarity()\n sharedTopics()\n intersectionSize()\n size()\n isFileAggregateEvidencePair()\n isModuleTopicEvidencePair()\n determineRelation()\n textScore()\n sourceRelation()\n relationForSourceKinds()\n relation()\n matchSourceRule()\n orientRelation()\n intersects()\n set()\n intersectsAliases()\n set()\n countBy()\n key()\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,withRecordGeneration,generationMetadata,used,extractorIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n withRecordGeneration()\n generationMetadata()\n used()\n extractorIdentity()\n separator()\n clamp()\n sourcePrefix()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/tf/classifier.ts:\n i: ../config/env.js,../core/text.js,../core/types.js,node:fs,node:path,node:url\n e: TfTensor,TfModel,TfModule,ModelAssets,dynamicImport,importer,loadAssets,directory,vocabularyPath,labels,loadClassifier,modelPath,modulePath,moduleValue,absolute,model,assets,vectorize,values,index,classifyAction,fallback,loaded,vector,input,predictionValue,prediction,probabilities,bestIndex,action,confidence\n TfTensor:\n TfModel:\n TfModule:\n ModelAssets:\n dynamicImport()\n importer()\n loadAssets()\n directory()\n vocabularyPath()\n labels()\n loadClassifier()\n modelPath()\n modulePath()\n moduleValue()\n absolute()\n model()\n assets()\n vectorize()\n values()\n index()\n classifyAction()\n fallback()\n loaded()\n vector()\n input()\n predictionValue()\n prediction()\n probabilities()\n bestIndex()\n action()\n confidence()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n src/graph/symbol-resolution.ts:\n i: ../core/target.js,../core/types.js\n e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,values,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration\n AstSymbolCandidate:\n NlSymbolResolution:\n SymbolResolutionIndex:\n buildSymbolResolutionIndex()\n byAlias()\n values()\n byNlRecord()\n hasResolvedNlAstSymbolPair()\n nl()\n ast()\n resolveSymbol()\n matched()\n selected()\n paths()\n pathSelects()\n normalized()\n candidatePath()\n uniquePaths()\n isAstDeclaration()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n ignored()\n extensions()\n maxFiles()\n matcher()\n base()\n visit()\n entries()\n absolute()\n relative()\n extension()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,result,handleWatch,root,taskFile,controller,stop,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n result()\n handleWatch()\n root()\n taskFile()\n controller()\n stop()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/nl-llm.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./nl.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,AuditedNlExtractionResult,NlLlmRequiredError,NlAttemptError\n RawNlRecord:\n NlResponse:\n AuditedNlExtractionResult:\n NlLlmRequiredError: super(-1),extractNlIntentAudited(-1),assertNlExtractionOptions(-1),startedAt(-1),result(-1),client(-1),absolute(-1),body(-1),sourcePath(-1),maxLine(-1),prompt(-1),response(-1),records(-1),failure(-1),responses(-1)\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failedAudit(-1),deterministic(-1),markDeterministic(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),audit(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),readPrompt(-1),promptPath(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../core/id.js,../../core/io.js,../../core/record.js,../../llm/audit.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js,../../version.js,node:fs,node:path,node:url\n e: RawCommunicationEnrichment,RawParticipantSynthesis,RawCommunicationResponse,ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError,ParticipantGroup\n RawCommunicationEnrichment:\n RawParticipantSynthesis:\n RawCommunicationResponse:\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1),participantGroups(-1),grouped(-1),participant(-1),role(-1),key(-1),values(-1),promptPayload(-1),validateEnrichments(-1),expected(-1),output(-1),materializeSyntheses(-1),byKey(-1),seen(-1),output(-1),group(-1),permitted(-1),recordIds(-1),enrichRecord(-1),deterministicSyntheses(-1),synthesis(-1),markDeterministic(-1),marked(-1),deterministicGeneration(-1),fallbackGeneration(-1),llmGeneration(-1),audit(-1),roleOf(-1),sortedUnique(-1),readPrompt(-1),promptPath(-1),communicationStrings(-1),COMMUNICATION_ENRICHMENT_CONTRACT(-1),PARTICIPANT_SYNTHESIS_CONTRACT(-1),COMMUNICATION_RESPONSE_CONTRACT(-1)\n ParticipantGroup:\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,p\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "201.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.18s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)'\n description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:440`\n with cyclomatic complexity 34 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)'\n description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:441`\n with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.ast.typescript.extractTypeScriptFile\n (CC=43)'\n description: 'code2llm reports `src.extractors.ast.typescript.extractTypeScriptFile`\n at `src/extractors/ast/typescript.ts:11` with cyclomatic complexity 43 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/ast/typescript.ts\n dedupe_key: code2llm:cc:src/extractors/ast/typescript.ts:src.extractors.ast.typescript.extractTypeScriptFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.ast.typescript.visit (CC=25)'\n description: 'code2llm reports `src.extractors.ast.typescript.visit` at `src/extractors/ast/typescript.ts:77`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/ast/typescript.ts\n dedupe_key: code2llm:cc:src/extractors/ast/typescript.ts:src.extractors.ast.typescript.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication.extractCommunicationFile\n (CC=50)'\n description: 'code2llm reports `src.extractors.communication.extractCommunicationFile`\n at `src/extractors/communication.ts:102` with cyclomatic complexity 50 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.extractCommunicationFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.diagnoseGraph (CC=40)'\n description: 'code2llm reports `src.graph.diagnostics.diagnoseGraph` at `src/graph/diagnostics.ts:16`\n with cyclomatic complexity 40 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.diagnoseGraph\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.documentedPaths (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.documentedPaths` at `src/graph/diagnostics.ts:23`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.documentedPaths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.groundedImplementation\n (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.groundedImplementation` at\n `src/graph/diagnostics.ts:21` with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.groundedImplementation\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.implementedPaths (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.implementedPaths` at `src/graph/diagnostics.ts:22`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.implementedPaths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.neighbors (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.neighbors` at `src/graph/diagnostics.ts:19`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.neighbors\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.recordsById (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.recordsById` at `src/graph/diagnostics.ts:20`\n with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.recordsById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.diagnostics.symbolResolutionIndex\n (CC=35)'\n description: 'code2llm reports `src.graph.diagnostics.symbolResolutionIndex` at\n `src/graph/diagnostics.ts:24` with cyclomatic complexity 35 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/diagnostics.ts\n dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.symbolResolutionIndex\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n (CC=25)'\n description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates`\n at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker-llm.ts\n dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet\n (CC=27)'\n description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet`\n at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)'\n description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)'\n description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS`\n at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES`\n at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES`\n at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS`\n at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES`\n at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath`\n at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n (CC=41)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity\n 41 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText`\n at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor\n (CC=25)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor`\n at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity\n 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)'\n description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1`\n with cyclomatic complexity 52 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml\n- signal: code2llm_god\n title: 'Split god module: src/communication/llm/implementation.ts'\n description: 'code2llm reports `src/communication/llm/implementation.ts` as a large\n module (514 lines, 8 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/communication/llm/implementation.ts\n dedupe_key: code2llm:god:src/communication/llm/implementation.ts\n- signal: code2llm_god\n title: 'Split god module: src/extractors/communication.ts'\n description: 'code2llm reports `src/extractors/communication.ts` as a large module\n (515 lines, 5 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:god:src/extractors/communication.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts`\n as a large module (1310 lines, 10 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (195 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation`\n in `src/synthesis/code-change-plan/implementation.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions,\n 10 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God\n Module: src.synthesis.code-change-plan.implementation'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)'\n description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/io.ts\n dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.buildRecord (CC=18)'\n description: 'code2llm reports `src.core.record.buildRecord` at `src/core/record.ts:57`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.buildRecord\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=15)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:125`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.schema.intent.assertIntentRecord\n (CC=23)'\n description: 'code2llm reports `src.core.schema.intent.assertIntentRecord` at `src/core/schema/intent.ts:67`\n with cyclomatic complexity 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/schema/intent.ts\n dedupe_key: code2llm:cc:src/core/schema/intent.ts:src.core.schema.intent.assertIntentRecord\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.schema.utils.assertGroundedGenerationMetadata\n (CC=23)'\n description: 'code2llm reports `src.core.schema.utils.assertGroundedGenerationMetadata`\n at `src/core/schema/utils.ts:167` with cyclomatic complexity 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/schema/utils.ts\n dedupe_key: code2llm:cc:src/core/schema/utils.ts:src.core.schema.utils.assertGroundedGenerationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.STOP_WORDS (CC=17)'\n description: 'code2llm reports `src.core.text.STOP_WORDS` at `src/core/text.ts:30`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.STOP_WORDS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.classifyActionHeuristically\n (CC=17)'\n description: 'code2llm reports `src.core.text.classifyActionHeuristically` at `src/core/text.ts:40`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.classifyActionHeuristically\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication.inferIdentity\n (CC=15)'\n description: 'code2llm reports `src.extractors.communication.inferIdentity` at `src/extractors/communication.ts:337`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication.ts\n dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.inferIdentity\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n (CC=19)'\n description: 'code2llm reports `src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited`\n at `src/extractors/markdown-llm.ts:55` with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: code2llm:cc:src/extractors/markdown-llm.ts:src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.linker.scorePair (CC=18)'\n description: 'code2llm reports `src.graph.linker.scorePair` at `src/graph/linker.ts:342`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/linker.ts\n dedupe_key: code2llm:cc:src/graph/linker.ts:src.graph.linker.scorePair\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.graph.symbol-resolution.buildSymbolResolutionIndex\n (CC=15)'\n description: 'code2llm reports `src.graph.symbol-resolution.buildSymbolResolutionIndex`\n at `src/graph/symbol-resolution.ts:22` with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/graph/symbol-resolution.ts\n dedupe_key: code2llm:cc:src/graph/symbol-resolution.ts:src.graph.symbol-resolution.buildSymbolResolutionIndex\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations`\n at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult\n (CC=21)'\n description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult`\n at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.filterCommunicationGraph\n (CC=17)'\n description: 'code2llm reports `src.services.actions.filterCommunicationGraph` at\n `src/services/actions.ts:511` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.filterCommunicationGraph\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n (CC=23)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch`\n at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity\n 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n (CC=18)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet`\n at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff`\n at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths\n (CC=16)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths`\n at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity\n 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans`\n at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.tf.classifier.classifyAction (CC=17)'\n description: 'code2llm reports `src.tf.classifier.classifyAction` at `src/tf/classifier.ts:69`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/tf/classifier.ts\n dedupe_key: code2llm:cc:src/tf/classifier.ts:src.tf.classifier.classifyAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, root, changelog, todo, self'\n description: 'code2llm reports `Data Clump: markdown_mode, root, changelog, todo,\n self` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (markdown_mode, root, changelog, todo, self) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n markdown_mode, root, changelog, todo, self'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, root, changelog, todo, self'\n description: 'code2llm reports `Data Clump: markdown_mode, root, changelog, todo,\n self` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (markdown_mode, root, changelog, todo, self) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n markdown_mode, root, changelog, todo, self'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, patterns, root, excludes'\n description: 'code2llm reports `Data Clump: self, patterns, root, excludes` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (self, patterns, root, excludes) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n self, patterns, root, excludes'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, patterns, root, excludes'\n description: 'code2llm reports `Data Clump: self, patterns, root, excludes` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (self, patterns, root, excludes) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n self, patterns, root, excludes'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, file, nl_mode'\n description: 'code2llm reports `Data Clump: self, root, file, nl_mode` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (self, root, file, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n self, root, file, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, file, nl_mode'\n description: 'code2llm reports `Data Clump: self, root, file, nl_mode` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (self, root, file, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n self, root, file, nl_mode'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:343`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:343:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: add'\n description: 'code2llm reports `God Function: add` in `src/extractors/ast/typescript.ts:29`.\n\n\n Function ''add'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/typescript.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/typescript.ts:29:God\n Function: add'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:179`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:187`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:187:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:216`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:216:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertSourceApplyReceipt'\n description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`.\n\n\n Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God\n Function: assertSourceApplyReceipt'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: base'\n description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`.\n\n\n Function ''base'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/io.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:92:God Function: base'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byDeclaration'\n description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`.\n\n\n Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God\n Function: byDeclaration'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation.ts:303`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - co\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3586 func | 166f | 39601L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.8 critical=279 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded executeAction = 83 (limit:15)\n !!! cc_exceeded root = 83 (limit:15)\n !!! high_fan_out executeAction = 65 (limit:10)\n !!! high_fan_out root = 64 (limit:10)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded diffUiHtml = 52 (limit:15)\n !!! cc_exceeded extractCommunicationFile = 50 (limit:15)\n\nMODULES[246] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/synthesis/code-change-plan/implementation.ts] 1310L C:10 F:127 CC↑47 D:3 (typescript)\n M[src/cli.ts] 908L C:1 F:118 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/services/actions.ts] 700L C:0 F:74 CC↑83 D:0 (typescript)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[src/extractors/communication.ts] 515L C:5 F:76 CC↑50 D:0 (typescript)\n M[src/communication/llm/implementation.ts] 514L C:8 F:53 CC↑12 D:0 (typescript)\n M[src/core/text.ts] 491L C:0 F:51 CC↑34 D:0 (typescript)\n M[src/graph/linker.ts] 489L C:4 F:72 CC↑18 D:3 (typescript)\n LANGS: typescript:138/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ executeAction fan=65 // Orchestrates 65 calls\n ★ root fan=64 // Orchestrates 64 calls\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ extractTypeScriptFile fan=44 // Orchestrates 44 calls\n ★ diffUiHtml fan=42 // Orchestrates 42 calls\n\nREFACTOR[15]:\n [1] H/L Split extractCommunicationFile (CC=50)\n [2] H/L Split extractTypeScriptFile (CC=43)\n [3] H/L Split visit (CC=25)\n [4] H/L Split diagnoseGraph (CC=40)\n [5] H/L Split neighbors (CC=35)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.8 crit=279 39601L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; + const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "98.1KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.4KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3683 \n**Total Classes**: 373 \n**Modules**: 251 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "34.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 143, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3683\n- **Total Classes**: 373\n- **Modules**: 251\n- **Entry Points**: 2620\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.synthesis.code-change-plan.implementation\n- **Functions**: 148\n- **Classes**: 10\n- **File**: `implementation.ts`\n\n### src.services.actions\n- **Functions**: 118\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.graph.linker\n- **Functions**: 85\n- **Classes**: 4\n- **File**: `linker.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.core.text\n- **Functions**: 62\n- **File**: `text.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### src.services.actions.executeAction\n- **Calls**: src.services.actions.resolveRoot, src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent\n\n### src.services.actions.root\n- **Calls**: src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent, src.services.actions.extractMarkdownIntentAudited\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.web.diff-ui.diffUiHtml\n- **Calls**: src.web.diff-ui.gradient, src.web.diff-ui.min, src.web.diff-ui.clamp, src.web.diff-ui.not, src.web.diff-ui.media, src.web.diff-ui.token, src.web.diff-ui.getElementById, src.web.diff-ui.byId\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- **Calls**: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.implementation.trim, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.resolve, src.synthesis.code-change-plan.implementation.assertPathWithinRoot, src.synthesis.code-change-plan.implementation.ensureDir, src.synthesis.code-change-plan.implementation.dirname, src.synthesis.code-change-plan.implementation.open\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- **Calls**: src.synthesis.code-change-plan.implementation.assertIntentGraph, src.synthesis.code-change-plan.implementation.assertConclusions, src.synthesis.code-change-plan.implementation.Date, src.synthesis.code-change-plan.implementation.toISOString, src.synthesis.code-change-plan.implementation.isNaN, src.synthesis.code-change-plan.implementation.parse, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.isInteger\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### src.core.text.inferObject\n- **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.core.text.normalized\n- **Calls**: src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa, src.core.text.napraw, src.core.text.popraw\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: executeAction\n```\nexecuteAction [src.services.actions]\n └─> resolveRoot\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 2: root\n```\nroot [src.services.actions]\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 3: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 4: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 5: diffUiHtml\n```\ndiffUiHtml [src.web.diff-ui]\n```\n\n### Flow 6: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 7: applyCodeChangeSourcePatch\n```\napplyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation]\n └─> assertCodeChangeSourcePatch\n```\n\n### Flow 8: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 9: proposeCodeChangePlans\n```\nproposeCodeChangePlans [src.synthesis.code-change-plan.implementation]\n```\n\n### Flow 10: parseCommand\n```\nparseCommand [src.interfaces.a2a-message]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 29\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 28\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `src.services.actions.executeAction` - 65 calls\n- `src.services.actions.root` - 64 calls\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.web.diff-ui.diffUiHtml` - 42 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `src.core.text.inferObject` - 31 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.core.text.normalized` - 29 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n executeAction --> resolveRoot\n executeAction --> scopedPath\n executeAction --> extractNlIntentAudit\n executeAction --> nlModeValue\n executeAction --> extractGitIntent\n root --> scopedPath\n root --> extractNlIntentAudit\n root --> nlModeValue\n root --> extractGitIntent\n root --> numberValue\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n diffUiHtml --> gradient\n diffUiHtml --> min\n diffUiHtml --> clamp\n diffUiHtml --> not\n diffUiHtml --> media\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "70.4KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__offset["offset"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__server["server"]\n examples__backend__src__server__event["event"]\n examples__backend__src__server__store["store"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__server__limit["limit"]\n examples__backend__src__validation__agent["agent"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__app__createState["createState"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__app__refresh["refresh"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n end\n subgraph src__cli\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__absolute["absolute"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__stamp["stamp"]\n src__cli__diagnostics["diagnostics"]\n src__cli__svg["svg"]\n src__cli__taskFile["taskFile"]\n src__cli__diff["diff"]\n src__cli__handleReality["handleReality"]\n src__cli__invokedPath["invokedPath"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__optionNumber["optionNumber"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__controller["controller"]\n src__cli__result["result"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__command["command"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__optionNlMode["optionNlMode"]\n src__cli__pipeline["pipeline"]\n src__cli__optionTaskMode["optionTaskMode"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__optionString["optionString"]\n src__cli__handleExtract["handleExtract"]\n src__cli__context["context"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__handleLink["handleLink"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__handleIntake["handleIntake"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n src__cli__initProject["initProject"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__file["file"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__main["main"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__emitJson["emitJson"]\n src__cli__root["root"]\n src__cli__printHelp["printHelp"]\n src__cli__handler["handler"]\n src__cli__parsed["parsed"]\n src__cli__stop["stop"]\n src__cli__doctor["doctor"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__optionList["optionList"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__handleDiff["handleDiff"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__view["view"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__optionNullableString["optionNullableString"]\n end\n subgraph src__extractors\n src__extractors__todo__classified["classified"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__git__result["result"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__todo__body["body"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__ast__typescript__context["context"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__git__count["count"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__nl__action["action"]\n src__extractors__docs_record__target["target"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__configuration__match["match"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__git__state["state"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__configuration__entry["entry"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__configuration__relative["relative"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__git__runGit["runGit"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__todo__action["action"]\n src__extractors__git__readStats["readStats"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__configuration__pair["pair"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__git__root["root"]\n src__extractors__nl__body["body"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__ast__typescript__recordModuleFact["recordModuleFact"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__configuration__lines["lines"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__todo__raw["raw"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__configuration__heading["heading"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__todo__heading["heading"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__docs_schema__target["target"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__nl__object["object"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__todo__checked["checked"]\n src__extractors__todo__block["block"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__todo__text["text"]\n src__extractors__docs_record__action["action"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"]\n src__extractors__changelog__relative["relative"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__ast__records__start["start"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__nl__missing["missing"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__todo__lines["lines"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__configuration__line["line"]\n src__extractors__ast__external__result["result"]\n src__extractors__nl__classified["classified"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__ast__typescript__handleNode["handleNode"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__changelog__body["body"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__todo__match["match"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__changelog__lines["lines"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__todo__relative["relative"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"]\n src__extractors__configuration__files["files"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__todo__task["task"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__configuration__entries["entries"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>225 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>292 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2378 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [153KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [34KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "163.3KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "23.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 251f 39151L | typescript:143,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.26s\n# CC̅=3.6 | critical:90/3683 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC buildLocalWarnings CC=18 (limit:15)\n 🟡 CC executeAction CC=83 (limit:15)\n 🟡 CC root CC=83 (limit:15)\n 🟡 CC normalized CC=30 (limit:15)\n 🟡 CC inferObject CC=34 (limit:15)\n 🟡 CC walkFiles CC=15 (limit:15)\n 🟡 CC diffUiHtml CC=52 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC rerankSemanticCandidates CC=25 (limit:15)\n 🟡 CC assertSemanticRerankResult CC=21 (limit:15)\n 🟡 CC records CC=16 (limit:15)\n 🟡 CC seenDecisions CC=16 (limit:15)\n 🟡 CC acceptedDeclarations CC=16 (limit:15)\n 🟡 CC assertSemanticCandidateSet CC=27 (limit:15)\n 🟡 CC NON_SOURCE_DIR_SEGMENTS CC=38 (limit:15)\n 🟡 CC BINARY_EXTENSIONS CC=38 (limit:15)\n 🟡 CC GENERATED_ANALYSIS_BASENAMES CC=38 (limit:15)\n 🟡 CC T2C_ARTIFACT_BASENAMES CC=38 (limit:15)\n\nREFACTOR[2]:\n 1. split src/graph/linker.ts (god module)\n 2. split 19 high-CC methods (CC>15)\n\nPIPELINES[2061]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.8 ←in:0 →out:0\n │ !! cli.ts 935L 1C 124m CC=13 ←0\n │ !! actions.ts 737L 1C 79m CC=83 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! linker.ts 537L 4C 81m CC=10 ←3\n │ !! text.ts 517L 0C 57m CC=34 ←0\n │ diagnostics.ts 459L 1C 58m CC=11 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intent.ts 306L 4C 36m CC=12 ←0\n │ !! communication-file-helpers.ts 296L 2C 39m CC=18 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ !! result.ts 264L 0C 16m CC=21 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ intent.ts 258L 15C 0m CC=0.0 ←0\n │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ code-change.ts 221L 16C 0m CC=0.0 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ !! code-change-path.ts 204L 0C 14m CC=38 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! candidate.ts 200L 0C 13m CC=27 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ !! record.ts 183L 2C 13m CC=17 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ !! io.ts 177L 1C 32m CC=15 ←0\n │ markdown-llm.ts 175L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ !! diff-ui.ts 48L 0C 9m CC=52 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ !! implementation.ts 1L 10C 127m CC=47 ←3\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.diff/ (fan-in=6)\n HUB: src.synthesis/ (fan-in=5)\n HUB: src.live/ (fan-in=7)\n SMELL: scripts.research/ fan-out=11 → split needed\n SMELL: sdk.python/ fan-out=8 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.2KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 401 | edges: 500 | modules: 30\n# CC̄=3.6\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.ast.records.moduleRecords\n CC=6 in:1 out:14 total:15\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.body\n CC=7 in:0 out:15 total:15\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [11 funcs]\n context CC=1 out:4\n createTypeScriptExtractionContext CC=1 out:0\n extractTypeScriptFile CC=1 out:7\n handleExportDeclaration CC=4 out:3\n handleImportDeclaration CC=5 out:4\n handleNode CC=6 out:5\n handleSymbolDeclaration CC=4 out:9\n handleVariableDeclaration CC=8 out:7\n recordModuleFact CC=1 out:2\n scriptKind CC=4 out:3\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [4 funcs]\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [15 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n nonEmptyText CC=3 out:1\n normalizedText CC=1 out:1\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "251.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 401\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 639\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 92\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 705\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 869\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.handleVariableDeclaration:\n name: handleVariableDeclaration\n module: src.extractors.ast.typescript\n line: 111\n cyclomatic_complexity: 8\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 194\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 445\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 554\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.cli.svg:\n name: svg\n module: src.cli\n line: 560\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 344\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.diff:\n name: diff\n module: src.cli\n line: 500\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 547\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 929\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 405\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 830\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 823\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.cli.controller:\n name: controller\n module: src.cli\n line: 347\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.extractors.ast.typescript.handleSymbolDeclaration:\n name: handleSymbolDeclaration\n module: src.extractors.ast.typescript\n line: 87\n cyclomatic_complexity: 4\n calls_out: 9\n calls_in: 1\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.result:\n name: result\n module: src.cli\n line: 763\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 306\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 255\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 508\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 31\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 326\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 268\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 484\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 158\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.context:\n name: context\n module: src.extractors.ast.typescript\n line: 12\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 594\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 553\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 843\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 345\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 853\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 410\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 237\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 121\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 380\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 176\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 367\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 875\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 811\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 573\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.cli.context:\n name: context\n module: src.cli\n line: 531\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 168\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 142\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 87\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 530\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 127\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.ast.typescript.handleExportDeclaration:\n name: handleExportDeclaration\n module: src.extractors.ast.typescript\n line: 74\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 847\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 342\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 253\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 699\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.ast.typescript.recordModuleFact:\n name: recordModuleFact\n module: src.extractors.ast.typescript\n line: 229\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 629\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 237\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 218\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 286\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 363\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 75\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 729\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 197\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.file:\n name: file\n module: src.cli\n line: 595\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 185\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 444\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 612\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 622\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 617\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.ast.typescript.createTypeScriptExtractionContext:\n name: createTypeScriptExtractionContext\n module: src.extractors.ast.typescript\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 219\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.ast.typescript.visitTypeScriptNode:\n name: visitTypeScriptNode\n module: src.extractors.ast.typescript\n line: 46\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 259\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 684\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 694\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.root:\n name: root\n module: src.cli\n line: 660\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 883\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.handler:\n name: handler\n module: src.cli\n line: 587\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 189\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.cli.stop:\n name: stop\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.ast.typescript.handleNode:\n name: handleNode\n module: src.extractors.ast.typescript\n line: 52\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 750\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 513\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 649\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 90\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 838\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 215\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 159\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 772\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 607\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 464\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 490\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 859\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.extractors.ast.typescript.handleImportDeclaration:\n name: handleImportDeclaration\n module: src.extractors.ast.typescript\n line: 61\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.cli.view:\n name: view\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 659\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 816\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.docs-schema.target\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.target\n c\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3374 func | 137f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts\n WHY: 1310L, 10 classes, max CC=47\n EFFORT: ~4h IMPACT: 61570\n\n [2] !! SPLIT src/cli.ts\n WHY: 935L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12155\n\n [3] !! SPLIT-FUNC executeAction CC=83 fan=65\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5395\n\n [4] !! SPLIT-FUNC root CC=83 fan=64\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5312\n\n [5] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42\n WHY: CC=52 exceeds 15\n EFFORT: ~1h IMPACT: 2184\n\n [8] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [9] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n [10] !! SPLIT-FUNC applyCodeChangeSourcePatch CC=41 fan=35\n WHY: CC=41 exceeds 15\n EFFORT: ~1h IMPACT: 1435\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n\nMETRICS-TARGET:\n CC̄: 3.7 → ≤2.6\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 79 → ≤39\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.7 → now CC̄=3.7\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "153.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 251f 39151L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:143,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.03s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3683 func | 0 cls | 251 mod | CC̄=3.6 | critical:90 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64\n# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; diffUiHtml fan=42; compareWorkspaceIntent fan=40\n# evolution: CC̄ 3.7→3.6 (improved -0.1)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[251]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,935\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,177\n src/core/record.ts,183\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,306\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,517\n src/core/types/index.ts,4\n src/core/types/code-change.ts,221\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,258\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,296\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,175\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,256\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,537\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,210\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,200\n src/semantic/reranker/result.ts,264\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,737\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,204\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,48\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n file()\n text()\n analysis()\n records()\n graph()\n graph()\n diagnostics()\n graph()\n diagnostics()\n result()\n output()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n planSet()\n review()\n patchPath()\n auditPath()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n patch()\n receiptPath()\n result()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n beforePath()\n afterPath()\n diff()\n result()\n graph()\n diagnostics()\n view()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/web/diff-ui.ts:\n e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs\n diffUiHtml()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/synthesis/code-change-plan/implementation.ts:\n i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n CreateCodeChangeReviewOptions:\n CreatedCodeChangeReview:\n CreateCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n PreparedSourceEdit:\n IMPLEMENTATION_DIAGNOSTIC_CODES()\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n conclusions()\n proposals()\n recordsById()\n proposalsByDiagnostic()\n conclusionsByDiagnostic()\n candidates()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n generation()\n planHash()\n createRepositoryPathProbe()\n base()\n absolute()\n implementationDiagnosticRank()\n evaluateCodeChangeAcceptance()\n afterDiagnostics()\n beforeIds()\n afterById()\n targeted()\n clearedDiagnosticIds()\n remainingDiagnosticIds()\n newBlockingDiagnosticIds()\n accepted()\n evaluatedAt()\n closeCodeChanges()\n evaluatedAt()\n afterDiagnostics()\n planIds()\n acceptances()\n acceptedCount()\n indexProposalsByDiagnostic()\n index()\n list()\n indexConclusionsByDiagnostic()\n index()\n list()\n collectTarget()\n paths()\n symbols()\n tickets()\n versions()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n titleFor()\n record()\n object()\n startsWithImperative()\n descriptionFor()\n acceptanceCriteriaFor()\n priorityFor()\n confidenceFor()\n riskFor()\n level()\n rollbackFor()\n deterministicGeneration()\n uniqueSorted()\n createCodeChangeReviewPatch()\n createdAt()\n markdown()\n renderCodeChangeReviewMarkdown()\n symbols()\n assertCodeChangeReviewPatch()\n artifact()\n generation()\n priorityRank()\n inline()\n renderIds()\n createCodeChangeSourcePatch()\n plan()\n graphFingerprint()\n createdAt()\n allowed()\n diffs()\n normalized()\n path()\n rawDiff()\n unifiedDiff()\n patchHash()\n createCodeChangeSourcePatchSet()\n generatedAt()\n assertCodeChangeSourcePatch()\n patch()\n paths()\n path()\n expectedHash()\n allowed()\n expectedChanges()\n editPath()\n assertCodeChangeSourcePatchSet()\n set()\n plansById()\n patchIds()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n instructionFor()\n symbols()\n criteria()\n normalizeUnifiedDiff()\n normalized()\n path()\n bare()\n stripped()\n applyCodeChangeSourcePatch()\n root()\n receiptPath()\n existing()\n relative()\n absolute()\n exists()\n before()\n after()\n now()\n fileHashesAfter()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n expectedPaths()\n hashPaths()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n normalizedDiff()\n baseLines()\n diffLines()\n cursor()\n oldIndex()\n oldCount()\n newCount()\n mark()\n body()\n splitKeep()\n lines()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n lowerBasename()\n dot()\n ext()\n isUsefulCodeChangePath()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n result()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n src/semantic/reranker/candidate.ts:\n i: ../../core/schema.js,../../core/types.js,./validation.js\n e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair\n createSemanticCandidateSet()\n grouped()\n values()\n assertSemanticCandidateSet()\n records()\n seenIds()\n seenPairs()\n byDeclaration()\n declaration()\n module()\n existing()\n expectedHash()\n comparePair()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/semantic/reranker-llm.ts:\n i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util\n e: SemanticRerankerOptions,SemanticRerankerRequiredError\n SemanticRerankerOptions:\n SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1)\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n src/semantic/reranker/result.ts:\n i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js\n e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons\n createSemanticRerankResult()\n decisions()\n assertSemanticRerankResult()\n candidates()\n records()\n seenDecisions()\n acceptedDeclarations()\n candidate()\n citations()\n record()\n expectedHash()\n applyAcceptedSemanticRelations()\n candidates()\n added()\n candidate()\n assertSemanticVerdictReason()\n allowedVerdicts()\n allowedReasons()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,declaredRole,declaredA2aAgentId,declaredGitAuthors,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n declaredRole()\n declaredA2aAgentId()\n declaredGitAuthors()\n rawTimestamp()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n seed()\n buildRecordSeed()\n buildRecordStatement()\n buildRecordSource()\n buildRecordEpistemic()\n withRecordGeneration()\n generationMetadata()\n generationIdentity()\n separator()\n clamp()\n sourcePrefix()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n ignored()\n extensions()\n maxFiles()\n matcher()\n base()\n visit()\n entries()\n absolute()\n relative()\n extension()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTarget()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskStore()\n removeTemporaryFile()\n prepareTask()\n key()\n indexedTask()\n taskForMessage()\n indexedTaskId()\n task()\n continueTask()\n existing()\n continuationError()\n message()\n createTask()\n taskId()\n contextId()\n executeMessage()\n command()\n result()\n domainResult()\n rejectTask()\n protobuf()\n diagnostic()\n message()\n currentTaskState()\n completeTask()\n protobuf()\n message()\n protobufResult()\n intakeDomainResult()\n record()\n failTask()\n message()\n agentMessage()\n listTasks()\n contextId()\n status()\n pageSize()\n historyLength()\n includeArtifacts()\n statusTimestampAfter()\n filter()\n filtered()\n pageCursor()\n start()\n page()\n last()\n filteredTasks()\n compareTasksByUpdate()\n timestampOrder()\n indexAfterCursor()\n exact()\n cursorTime()\n next()\n taskTime()\n encodeCursor()\n decodeCursor()\n decoded()\n taskView()\n effectiveHistoryLength()\n history()\n cloneArtifact()\n ownedTask()\n task()\n messageKey()\n errorMessage()\n src/communication/intake-store.ts:\n i: ../core/io.js,../core/security.js,node:crypto,node:fs,node:path\n e: IntakeEvent,StreamSnapshot,IntakeEventStore\n IntakeEvent:\n StreamSnapshot:\n IntakeEventStore: read(-1),names(-1),name(-1),eventPath(-1),stat(-1),event(-1),lockPath(-1),stream(-1),existing(-1),writeRegistry(-1),projectionPath(-1),slug(-1),atomicWrite(-1),safe(-1),temp(-1),assertSafe(-1),hashEvent(-1),broken(-1),unsafe(-1)\n scripts/verify-workflow-yaml.mjs:\n i: node:fs,node:path\n e: explicit,files,body,seen,match,key,previous,workflowFiles,directory\n explicit()\n files()\n body()\n seen()\n match()\n key()\n previous()\n workflowFiles()\n directory()\n scripts/research/audit-changelog-sample.mjs:\n i: node:child_process,node:fs,node:path\n e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,classification,labelCounts,labelRepositories,stratifiedSample,groups,values,added,record,targetClass,target,classify,text,file,exactFileUpdate,match,candidate,basename,pathOwners,file,countBy,item,readJson,parseArgs,value,index,limitIndex,limit,intentDirectoryIndex,intentDirectory\n options()\n entries()\n root()\n latest()\n runDirectory()\n diagnostics()\n graph()\n recordsById()\n findings()\n selected()\n trackedFiles()\n classification()\n labelCounts()\n labelRepositories()\n stratifiedSample()\n groups()\n values()\n added()\n record()\n targetClass()\n target()\n classify()\n text()\n file()\n exactFileUpdate()\n match()\n candidate()\n basename()\n pathOwners()\n file()\n countBy()\n item()\n readJson()\n parseArgs()\n value()\n index()\n limitIndex()\n limit()\n intentDirectoryIndex()\n intentDirectory()\n sdk/php/src/Client.php:\n e: Client\n Client:\n sdk/python/examples/basic.py:\n e: main\n main()\n examples/backend/src/validation.ts:\n e: ValidationResult,ALLOWED_ACTIONS,validateEventPayload,invalid,record,agent,action,object\n ValidationResult:\n ALLOWED_ACTIONS()\n validateEventPayload()\n invalid()\n record(\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "190.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.17s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)'\n description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:466`\n with cyclomatic complexity 34 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)'\n description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:467`\n with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n (CC=25)'\n description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates`\n at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker-llm.ts\n dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet\n (CC=27)'\n description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet`\n at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)'\n description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)'\n description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS`\n at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES`\n at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES`\n at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS`\n at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES`\n at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath`\n at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n (CC=41)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity\n 41 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText`\n at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor\n (CC=25)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor`\n at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity\n 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)'\n description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1`\n with cyclomatic complexity 52 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml\n- signal: code2llm_god\n title: 'Split god module: src/graph/linker.ts'\n description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines,\n 4 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/graph/linker.ts\n dedupe_key: code2llm:god:src/graph/linker.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts`\n as a large module (1310 lines, 10 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation`\n in `src/synthesis/code-change-plan/implementation.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions,\n 10 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God\n Module: src.synthesis.code-change-plan.implementation'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)'\n description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/io.ts\n dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication-file-helpers.buildLocalWarnings\n (CC=18)'\n description: 'code2llm reports `src.extractors.communication-file-helpers.buildLocalWarnings`\n at `src/extractors/communication-file-helpers.ts:254` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: code2llm:cc:src/extractors/communication-file-helpers.ts:src.extractors.communication-file-helpers.buildLocalWarnings\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations`\n at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult\n (CC=21)'\n description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult`\n at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n (CC=23)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch`\n at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity\n 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n (CC=18)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet`\n at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff`\n at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths\n (CC=16)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths`\n at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity\n 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans`\n at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: action, self, payload'\n description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n action, self, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: action, self, payload'\n description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n action, self, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: excludes, self, patterns, root'\n description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (excludes, self, patterns, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n excludes, self, patterns, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: excludes, self, patterns, root'\n description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (excludes, self, patterns, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n excludes, self, patterns, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, nl_mode, self, root'\n description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (file, nl_mode, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n file, nl_mode, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, nl_mode, self, root'\n description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (file, nl_mode, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n file, nl_mode, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo'\n description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root,\n todo` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n markdown_mode, changelog, self, root, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo'\n description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root,\n todo` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n markdown_mode, changelog, self, root, todo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:369`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:369:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:179`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertSourceApplyReceipt'\n description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`.\n\n\n Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God\n Function: assertSourceApplyReceipt'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: base'\n description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`.\n\n\n Function ''base'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/io.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:92:God Function: base'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byDeclaration'\n description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`.\n\n\n Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God\n Function: byDeclaration'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: candidates'\n description: 'code2llm reports `God Function: candidates` in `src/synthesis/code-change-plan/implementation.ts:124`.\n\n\n Function ''candidates'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:124:God\n Function: candidates'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: closeCodeChanges'\n description: 'code2llm reports `God Function: closeCodeChanges` in `src/synthesis/code-change-plan/implementation.ts:298`.\n\n\n Function ''closeCodeChanges'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:298:God\n Function: closeCodeChanges'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: conclusions'\n description: 'code2llm reports `God Function: conclusions` in `src/synthesis/code-change-plan/implementation.ts:118`.\n\n\n Function ''conclusions'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:118:God\n Function: conclusions'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: conclusionsByDiagnostic'\n description: 'code2llm reports `God Function: conclusionsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:122`.\n\n\n Function ''conclusionsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:122:God\n Function: conclusionsByDiagnostic'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeReviewPatch'\n description: 'code2llm reports `God Function: createCodeChangeReviewPatch` in `src/synthesis/code-change-plan/implementation.ts:547`.\n\n\n Function ''createCodeChangeReviewPatch'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:547:God\n Function: createCodeChangeReviewPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: createCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation.ts:698`.\n\n\n Function ''createCodeChangeSourcePatch'' is oversized: CC=13, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:698:God\n Function: createCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeSourcePatchSet'\n description: 'code2llm reports `God Function: createCodeChangeSourcePatchSet` in\n `src/synthesis/code-change-plan/implementation.ts:759`.\n\n\n Function ''createCodeChangeSourcePatchSet'' is oversized: CC=8, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:759:God\n Function: createCodeChangeSourcePatchSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_f\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3683 func | 171f | 39185L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.6 critical=256 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded executeAction = 83 (limit:15)\n !!! cc_exceeded root = 83 (limit:15)\n !!! high_fan_out executeAction = 65 (limit:10)\n !!! high_fan_out root = 64 (limit:10)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded diffUiHtml = 52 (limit:15)\n !!! cc_exceeded analyzeCommunication = 48 (limit:15)\n\nMODULES[251] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/services/actions.ts] 737L C:1 F:79 CC↑83 D:0 (typescript)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[src/core/text.ts] 517L C:0 F:57 CC↑34 D:0 (typescript)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript)\n M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript)\n LANGS: typescript:143/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ executeAction fan=65 // Orchestrates 65 calls\n ★ root fan=64 // Orchestrates 64 calls\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ diffUiHtml fan=42 // Orchestrates 42 calls\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n\nREFACTOR[15]:\n [1] H/L Split executeAction (CC=83)\n [2] H/L Split root (CC=83)\n [3] H/L Split normalized (CC=30)\n [4] H/L Split inferObject (CC=34)\n [5] H/L Split diffUiHtml (CC=52)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.6 crit=256 39185L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; let currentFile = null; function renderFileList(filter = '') { diff --git a/project/map.toon.yaml b/project/map.toon.yaml index faba8bc..05f8759 100644 --- a/project/map.toon.yaml +++ b/project/map.toon.yaml @@ -1,12 +1,12 @@ -# todo2code | 246f 39628L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:138,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 +# todo2code | 251f 39151L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:143,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 # generated in 0.03s # producer: code2llm | artifact: map.toon.yaml | schema: 1 -# stats: 3592 func | 0 cls | 246 mod | CC̄=3.8 | critical:110 | cycles:0 +# stats: 3683 func | 0 cls | 251 mod | CC̄=3.6 | critical:90 | cycles:0 # alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64 -# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; extractTypeScriptFile fan=44; diffUiHtml fan=42 -# evolution: CC̄ 3.9→3.8 (improved -0.1) +# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; diffUiHtml fan=42; compareWorkspaceIntent fan=40 +# evolution: CC̄ 3.7→3.6 (improved -0.1) # Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods -M[246]: +M[251]: Dockerfile,45 Makefile,132 adapters/tensorflow/package.json,14 @@ -123,7 +123,8 @@ M[246]: src/communication/intake-service.ts,291 src/communication/intake-store.ts,161 src/communication/llm.ts,1 - src/communication/llm/implementation.ts,514 + src/communication/llm/implementation.ts,208 + src/communication/llm/implementation-helpers.ts,357 src/comparison/workspace.ts,342 src/config/env.ts,231 src/core/content-cache.ts,139 @@ -131,16 +132,16 @@ M[246]: src/core/id.ts,167 src/core/ignore.ts,200 src/core/io.ts,177 - src/core/record.ts,172 + src/core/record.ts,183 src/core/schema/index.ts,4 src/core/schema/code-change.ts,322 src/core/schema/conclusions.ts,210 src/core/schema/constants.ts,31 - src/core/schema/intent.ts,276 - src/core/schema/utils.ts,219 + src/core/schema/intent.ts,306 + src/core/schema/utils.ts,239 src/core/security.ts,55 src/core/target.ts,57 - src/core/text.ts,491 + src/core/text.ts,517 src/core/types/index.ts,4 src/core/types/code-change.ts,221 src/core/types/diagnostics.ts,45 @@ -168,10 +169,12 @@ M[246]: src/extractors/ast/records.ts,97 src/extractors/ast/rust.ts,20 src/extractors/ast/types.ts,20 - src/extractors/ast/typescript.ts,166 + src/extractors/ast/typescript.ts,266 src/extractors/ast/unsupported.ts,30 src/extractors/changelog.ts,99 - src/extractors/communication.ts,515 + src/extractors/communication.ts,63 + src/extractors/communication-file-helpers.ts,296 + src/extractors/communication-helpers.ts,320 src/extractors/configuration.ts,208 src/extractors/docs-chunks.ts,147 src/extractors/docs-deterministic.ts,369 @@ -182,18 +185,20 @@ M[246]: src/extractors/git.ts,397 src/extractors/markdown.ts,35 src/extractors/markdown-block.ts,67 - src/extractors/markdown-llm.ts,458 + src/extractors/markdown-llm.ts,175 + src/extractors/markdown-llm-helpers.ts,383 src/extractors/markdown-paths.ts,158 src/extractors/nl.ts,107 - src/extractors/nl-llm.ts,337 + src/extractors/nl-llm.ts,163 + src/extractors/nl-llm-helpers.ts,256 src/extractors/runtime-cycle.ts,306 src/extractors/todo.ts,93 src/graph/capability-evidence.ts,62 src/graph/changelog-signal.ts,89 - src/graph/diagnostics.ts,361 + src/graph/diagnostics.ts,459 src/graph/diff.ts,235 - src/graph/linker.ts,489 - src/graph/symbol-resolution.ts,120 + src/graph/linker.ts,537 + src/graph/symbol-resolution.ts,146 src/interfaces/a2a.ts,332 src/interfaces/a2a-card.ts,181 src/interfaces/a2a-history.ts,226 @@ -235,20 +240,20 @@ M[246]: src/semantic/reranker/result.ts,264 src/semantic/reranker/types.ts,106 src/semantic/reranker/validation.ts,111 - src/services/actions.ts,700 + src/services/actions.ts,737 src/summary/payload.ts,65 src/summary/render.ts,61 src/summary/summarizer.ts,333 src/synthesis/code-change-path.ts,204 src/synthesis/code-change-plan/index.ts,1 - src/synthesis/code-change-plan/implementation.ts,1310 + src/synthesis/code-change-plan/implementation.ts,1 src/synthesis/task-synthesis-contract.ts,66 src/synthesis/task-synthesis-materialize.ts,172 src/synthesis/task-synthesis-payload.ts,70 src/synthesis/tasks-llm.ts,266 src/synthesis/todo-patch.ts,372 src/synthesis/validation.ts,113 - src/tf/classifier.ts,96 + src/tf/classifier.ts,135 src/version.ts,2 src/watch/watcher.ts,243 src/web/diff-ui.ts,48 @@ -306,7 +311,8 @@ D: expectedHash() src/services/actions.ts: i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path - e: executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,participant,role,ticket,communicationOnly,records,isCommunication,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest + e: CommunicationGraphFilter,executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest + CommunicationGraphFilter: executeAction() root() file() @@ -382,12 +388,17 @@ D: diagnostics() view() filterCommunicationGraph() + filter() + records() + parseCommunicationGraphFilter() participant() role() ticket() communicationOnly() - records() - isCommunication() + matchesCommunicationFilter() + matchesParticipant() + matchesRole() + matchesTicket() nlModeValue() llmModeValue() taskSynthesisMode() @@ -540,94 +551,6 @@ D: fillSelect() loadRuns() compareGraphs() - src/extractors/communication.ts: - i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/security.js,../core/types.js,../core/types.js,../tf/classifier.js,node:path - e: CommunicationExtractionOptions,CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,CommunicationFileOutcome,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,fileResult,extractCommunicationFile,relativeToProject,segments,pathTicket,envelope,inferred,explicitEnvelope,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,declaredA2aAgentId,explicitPaths,explicitSymbols,classifiedSegments,newRecords,buildCommunicationRecords,segmentType,semantics,classified,action,line,resolveIdentity,sameStrings,normalize,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governance,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,isCommunicationNoise,normalized,governanceSectionType,normalized,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,semanticsFor,first,listValue,stripped,unquote,validTimestamp,parsed - CommunicationExtractionOptions: - CommunicationEnvelope: - InferredCommunicationIdentity: - CommunicationSegment: - CommunicationFileOutcome: - extractCommunicationIntent() - root() - projectRoot() - files() - identityRegistry() - communicationFiles() - fileResult() - extractCommunicationFile() - relativeToProject() - segments() - pathTicket() - envelope() - inferred() - explicitEnvelope() - declaredParticipant() - declaredRole() - declaredParticipantId() - identity() - participant() - role() - displayName() - explicitMessageType() - messageType() - ticket() - recipient() - rawTimestamp() - timestamp() - declaredGitAuthors() - gitAuthors() - declaredA2aAgentId() - explicitPaths() - explicitSymbols() - classifiedSegments() - newRecords() - buildCommunicationRecords() - segmentType() - semantics() - classified() - action() - line() - resolveIdentity() - sameStrings() - normalize() - parseEnvelope() - lines() - end() - match() - inferIdentity() - parts() - basename() - governance() - fileParts() - nestedRoleIndex() - nestedRole() - nestedParticipant() - isTicketEvidenceFile() - basename() - communicationSegments() - lines() - flush() - item() - raw() - heading() - cleaned() - isCommunicationNoise() - normalized() - governanceSectionType() - normalized() - looksLikeTicket() - normalizeRole() - normalizeType() - normalized() - isCommunicationType() - semanticsFor() - first() - listValue() - stripped() - unquote() - validTimestamp() - parsed() src/communication/analyzer.ts: i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex @@ -874,75 +797,6 @@ D: body() splitKeep() lines() - src/extractors/ast/typescript.ts: - i: ../../core/io.js,../../core/record.js,../../core/types.js,./records.js,node:path,typescript - e: extractTypeScriptFile,relative,sourceFile,moduleCapabilities,lineRange,excerpt,add,symbol,nameOf,modifiers,visit,symbol,symbolModifiers,declarationIsCallable,callee,capabilities,isTopLevel,scriptKind,extension,languageName,extension - extractTypeScriptFile() - relative() - sourceFile() - moduleCapabilities() - lineRange() - excerpt() - add() - symbol() - nameOf() - modifiers() - visit() - symbol() - symbolModifiers() - declarationIsCallable() - callee() - capabilities() - isTopLevel() - scriptKind() - extension() - languageName() - extension() - src/graph/diagnostics.ts: - i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js - e: diagnoseGraph,neighbors,recordsById,groundedImplementation,implementedPaths,documentedPaths,symbolResolutionIndex,related,evidenced,hasLocationOnlyEvidence,missingFields,symbolIssues,detail,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank - diagnoseGraph() - neighbors() - recordsById() - groundedImplementation() - implementedPaths() - documentedPaths() - symbolResolutionIndex() - related() - evidenced() - hasLocationOnlyEvidence() - missingFields() - symbolIssues() - detail() - indexGroundedImplementationEvidence() - grounded() - left() - right() - relationSupportsImplementation() - basis() - score() - ambiguityDetail() - paths() - ambiguityAction() - actions() - buildNeighbors() - map() - appendNeighbor() - values() - indexImplementedPaths() - paths() - indexDocumentedPaths() - paths() - hasImplementedTarget() - hasDocumentedTarget() - isPlan() - isImplementationEvidence() - isPublicImplementation() - symbol() - isReleaseCandidate() - isImportantRecord() - makeDiagnostic() - severityRank() src/synthesis/code-change-path.ts: e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath NON_SOURCE_DIR_SEGMENTS() @@ -970,12 +824,18 @@ D: parseFile() src/core/text.ts: i: ./types.js - e: STOP_WORDS,classifyActionHeuristically,conventional,prose,searchable,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value + e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value STOP_WORDS() + buildStopWords() classifyActionHeuristically() - conventional() + conventionalAction() prose() searchable() + matchedByPattern() + extractConventionalAction() + conventional() + findActionInText() + removeInlineCode() detectModality() prose() searchable() @@ -1235,85 +1095,6 @@ D: e: SemanticRerankerOptions,SemanticRerankerRequiredError SemanticRerankerOptions: SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1) - src/core/schema/intent.ts: - i: ../id.js - e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,target,lifecycle,source,lines,epistemic,metadata,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation - GroundedValidationContext: - TodoProposalValidationContext: - CodeChangePlanValidationContext: - CodeChangeAcceptanceValidationContext: - assertIntentRecord() - record() - statement() - target() - lifecycle() - source() - lines() - epistemic() - metadata() - assertGenerationMatchesExtractor() - generation() - separator() - expectedGenerator() - assertIntentGenerationMetadata() - generation() - assertIntentRecords() - assertIntentGraph() - graph() - recordIds() - relationIds() - stats() - records() - expectedFingerprint() - assertIntentGraphDiff() - diff() - records() - change() - relations() - summary() - assertRelation() - relation() - src/core/schema/utils.ts: - i: ../types.js - e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation - objectValue() - exactKeys() - expectedSet() - missing() - extra() - nonEmptyString() - nonBlankString() - nullableString() - enumValue() - stringArray() - nonEmptyUniqueStringArray() - repositoryPath() - normalized() - exactStringSet() - uniqueIdArray() - nonEmptyUniqueIdArray() - knownReferences() - unknown() - confidence() - assertAcyclicProposalDependencies() - byId() - visiting() - visited() - visit() - start() - dateString() - nullableDate() - fingerprint() - nonNegativeInteger() - countMap() - map() - countRecords() - key() - exactCounts() - actual() - isJsonValue() - assertGroundedGenerationMetadata() - generation() src/diff/git.ts: i: ./text.js,node:child_process,node:fs,node:path,node:util e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result @@ -1368,16 +1149,6 @@ D: main() run() joined_ids() - src/extractors/markdown-llm.ts: - i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./markdown.js,node:fs,node:path,node:url - e: MarkdownEnrichment,MarkdownResponse,AuditedMarkdownExtractionResult,MarkdownLlmRequiredError,MarkdownAttemptError,CoveredBatch,MARKDOWN_LLM_BATCH_RECORDS - MarkdownEnrichment: - MarkdownResponse: - AuditedMarkdownExtractionResult: - MarkdownLlmRequiredError: super(-1),extractMarkdownIntentAudited(-1),startedAt(-1),deterministic(-1),client(-1),prompt(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),failure(-1),failedResponses(-1) - MarkdownAttemptError: super(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1) - CoveredBatch: - MARKDOWN_LLM_BATCH_RECORDS() src/diff/text.ts: i: ./text-types.js e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers @@ -1480,102 +1251,54 @@ D: timer() onAbort() finish() - src/graph/linker.ts: - i: ../core/id.js,../core/schema.js,../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js,./symbol-resolution.js - e: PairEvidence,RecordKeywords,DirectedRelation,SourceRelationRule,indexKeywords,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,isSuppressedConfigurationPair,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,resolvedNlAstSymbol,capabilityOverlap,objectSimilarity,sharedTopics,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation,intersects,set,intersectsAliases,set,countBy,key - PairEvidence: - RecordKeywords: - DirectedRelation: - SourceRelationRule: - indexKeywords() - jaccard() - intersection() - linkIntentRecords() + src/extractors/communication-file-helpers.ts: + i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path + e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,declaredRole,declaredA2aAgentId,declaredGitAuthors,rawTimestamp + CommunicationFileOutcome: + CommunicationMetadata: + extractCommunicationFile() + scope() + readResult() + envelope() + inferred() + extracted() + localWarnings() + segmentResult() records() - byId() - keywordIndex() - symbolResolutionIndex() - candidatePairs() - resolvableBasenames() - left() - right() - evidence() - directed() - deduplicateRecords() - byId() - existing() - collectCandidatePairs() - buckets() - astIds() - moduleAstIds() - declarationAstIds() - configurationIds() - isModuleTopicSource() - indexTargetBuckets() - indexAliases() - indexKeywordBuckets() - indexTopicBuckets() - addToBucket() - values() - isSuppressedConfigurationPair() - pairsFromBuckets() - output() - leftId() - rightId() - isSuppressedAstPair() - leftAst() - rightAst() - astId() - indexResolvableBasenames() - owners() - normalized() - basename() - paths() - pathsIntersect() - expand() - output() - aliases() - full() - leftSet() - scorePair() - score() - leftKeywords() - rightKeywords() - resolvedNlAstSymbol() - capabilityOverlap() - objectSimilarity() - sharedTopics() - intersectionSize() - size() - isFileAggregateEvidencePair() - isModuleTopicEvidencePair() - determineRelation() - textScore() - sourceRelation() - relationForSourceKinds() - relation() - matchSourceRule() - orientRelation() - intersects() - set() - intersectsAliases() - set() - countBy() - key() - src/core/record.ts: - i: ./id.js,./target.js,./version.js - e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,withRecordGeneration,generationMetadata,used,extractorIdentity,separator,clamp,sourcePrefix - BuildRecordGenerationInput: - BuildRecordInput: - buildRecord() - rawExcerpt() - withRecordGeneration() - generationMetadata() - used() - extractorIdentity() - separator() - clamp() - sourcePrefix() + shouldSkipCommunicationFile() + explicitEnvelope() + hasExplicitEnvelopeMetadata() + buildCommunicationSegments() + inferredRole() + segments() + resolveFileScope() + relativeToProject() + segments() + pathTicket() + readCommunicationBody() + collectCommunicationMetadata() + declaredParticipant() + declaredRole() + declaredParticipantId() + identity() + participant() + role() + displayName() + explicitMessageType() + messageType() + ticket() + recipient() + rawTimestamp() + timestamp() + declaredGitAuthors() + gitAuthors() + explicitPaths() + explicitSymbols() + buildLocalWarnings() + declaredRole() + declaredA2aAgentId() + declaredGitAuthors() + rawTimestamp() src/interfaces/a2a-history.ts: i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath @@ -1725,40 +1448,6 @@ D: i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super:: e: Client Client: - src/tf/classifier.ts: - i: ../config/env.js,../core/text.js,../core/types.js,node:fs,node:path,node:url - e: TfTensor,TfModel,TfModule,ModelAssets,dynamicImport,importer,loadAssets,directory,vocabularyPath,labels,loadClassifier,modelPath,modulePath,moduleValue,absolute,model,assets,vectorize,values,index,classifyAction,fallback,loaded,vector,input,predictionValue,prediction,probabilities,bestIndex,action,confidence - TfTensor: - TfModel: - TfModule: - ModelAssets: - dynamicImport() - importer() - loadAssets() - directory() - vocabularyPath() - labels() - loadClassifier() - modelPath() - modulePath() - moduleValue() - absolute() - model() - assets() - vectorize() - values() - index() - classifyAction() - fallback() - loaded() - vector() - input() - predictionValue() - prediction() - probabilities() - bestIndex() - action() - confidence() sdk/typescript/examples/basic.ts: i: ../src/index.js e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison @@ -1781,6 +1470,24 @@ D: reality() gitDiff() comparison() + src/core/record.ts: + i: ./id.js,./target.js,./version.js + e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix + BuildRecordGenerationInput: + BuildRecordInput: + buildRecord() + rawExcerpt() + seed() + buildRecordSeed() + buildRecordStatement() + buildRecordSource() + buildRecordEpistemic() + withRecordGeneration() + generationMetadata() + generationIdentity() + separator() + clamp() + sourcePrefix() examples/backend/src/server.ts: i: ./store.js,./validation.js,node:http e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host @@ -1812,28 +1519,6 @@ D: is_module_entrypoint(node) iter_python_files(root;files_from) main() - src/graph/symbol-resolution.ts: - i: ../core/target.js,../core/types.js - e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,values,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration - AstSymbolCandidate: - NlSymbolResolution: - SymbolResolutionIndex: - buildSymbolResolutionIndex() - byAlias() - values() - byNlRecord() - hasResolvedNlAstSymbolPair() - nl() - ast() - resolveSymbol() - matched() - selected() - paths() - pathSelects() - normalized() - candidatePath() - uniquePaths() - isAstDeclaration() src/core/io.ts: i: ./types.js,node:fs,node:path e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix @@ -1922,6 +1607,70 @@ D: allowedAction() allowedModality() allowedLifecycle() + src/extractors/markdown-llm-helpers.ts: + i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url + e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS + MarkdownEnrichment: + MarkdownResponse: + CoveredBatch: + MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1) + StageAuditInput: + MARKDOWN_LLM_BATCH_RECORDS() + src/extractors/communication-helpers.ts: + i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path + e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote + CommunicationEnvelope: + InferredCommunicationIdentity: + CommunicationSegment: + buildCommunicationRecords() + segmentType() + semantics() + classified() + action() + line() + parseEnvelope() + lines() + end() + match() + inferIdentity() + parts() + basename() + governanceIdentity() + inferGovernanceIdentityFromFilename() + governance() + inferIdentityFromPathAndFilename() + fileParts() + nestedRoleIndex() + nestedRole() + nestedParticipant() + isTicketEvidenceFile() + basename() + communicationSegments() + lines() + flush() + item() + raw() + heading() + cleaned() + looksLikeTicket() + normalizeRole() + normalizeType() + normalized() + isCommunicationType() + first() + listValue() + stripped() + validTimestamp() + parsed() + resolveIdentity() + sameStrings() + normalize() + isCommunicationNoise() + normalized() + governanceSectionType() + normalized() + semanticsFor() + unquote() src/evaluation/gold.ts: i: ../core/id.js,./gold-extraction.js,node:fs e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result @@ -2015,164 +1764,57 @@ D: round() golang/ast_extract.go: e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash - Fact: - output: - factCollector: - main() - emit() - collectGoFiles() - parseFile() - position() - excerpt() - add() - visitDecl() - visitFunc() - visitGenDecl() - visitCalls() - typeName() - declaredTypeKind() - strPtr() - toSlash() - scripts/research/rerank-embedding-shortlist.mjs: - i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path - e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top - options() - records() - selectedRows() - declaration() - module() - candidateSet() - config() - rerank() - augmentedGraph() - originalRelationIds() - originallyRelatedPairs() - candidateById() - accepted() - candidate() - relation() - verdictCounts() - resolveDeclaration() - exact() - matches() - resolveModule() - exact() - matches() - readJson() - parseArgs() - values() - key() - value() - required() - value() - top() - src/config/env.ts: - i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path - e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter - T2CConfig: - loadEnvFile() - explicit() - candidates() - content() - trimmed() - separator() - key() - value() - envString() - value() - envOptional() - value() - envNumber() - raw() - value() - envBoolean() - raw() - envList() - raw() - envLlmMode() - value() - getConfig() - model() - root() - configForDisplay() - hasOpenRouter() - src/diff/text-render.ts: - i: ./text-types.js - e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number - TextDiffSvgOptions: - SideBySideRow: - renderUnifiedDiff() - marker() - toSideBySideRows() - index() - line() - pairs() - renderTextDiffSvg() - theme() - maxRows() - maxColumns() - title() - charWidth() - rowHeight() - gutterWidth() - columnWidth() - width() - totals() - y() - rendered() - skipped() - summarizeDiffs() - diffHeading() - svgBody() - sideBySideRowMarkup() - changed() - number() - renderTextDiffHtml() - title() - sections() - renderHtmlSection() - hunks() - rows() - htmlCell() - cssClass() - number() - src/operations/subactor.ts: - i: ../core/types.js,./validation.js - e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding - CompileSubactorEnvelopeOptions: - valueMatchesType() - assertBinding() - ageSeconds() - compileSubactorProcessEnvelope() - variableById() - referenced() - variable() - binding() - humanApproval() - binding() - src/communication/intake-service.ts: - i: ./intake-store.js,node:crypto,node:fs,node:path - e: IntakeState,GovernedIntakeService - IntakeState: - GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) - scripts/live-model-comparison.mjs: - i: node:fs,node:path,node:url - e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile - REPO_ROOT() + Fact: + output: + factCollector: main() - probe() - timeoutMs() - models() - root() + emit() + collectGoFiles() + parseFile() + position() + excerpt() + add() + visitDecl() + visitFunc() + visitGenDecl() + visitCalls() + typeName() + declaredTypeKind() + strPtr() + toSlash() + scripts/research/rerank-embedding-shortlist.mjs: + i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path + e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top + options() + records() + selectedRows() + declaration() + module() + candidateSet() config() - result() - comparison() - rendered() - jsonTarget() - markdownTarget() - failedAudit() - message() - writeFile() + rerank() + augmentedGraph() + originalRelationIds() + originallyRelatedPairs() + candidateById() + accepted() + candidate() + relation() + verdictCounts() + resolveDeclaration() + exact() + matches() + resolveModule() + exact() + matches() + readJson() + parseArgs() + values() + key() + value() + required() + value() + top() src/cli.ts: i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath @@ -2379,6 +2021,113 @@ D: reportPipelineDegradation() printHelp() invokedPath() + src/config/env.ts: + i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path + e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter + T2CConfig: + loadEnvFile() + explicit() + candidates() + content() + trimmed() + separator() + key() + value() + envString() + value() + envOptional() + value() + envNumber() + raw() + value() + envBoolean() + raw() + envList() + raw() + envLlmMode() + value() + getConfig() + model() + root() + configForDisplay() + hasOpenRouter() + src/diff/text-render.ts: + i: ./text-types.js + e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number + TextDiffSvgOptions: + SideBySideRow: + renderUnifiedDiff() + marker() + toSideBySideRows() + index() + line() + pairs() + renderTextDiffSvg() + theme() + maxRows() + maxColumns() + title() + charWidth() + rowHeight() + gutterWidth() + columnWidth() + width() + totals() + y() + rendered() + skipped() + summarizeDiffs() + diffHeading() + svgBody() + sideBySideRowMarkup() + changed() + number() + renderTextDiffHtml() + title() + sections() + renderHtmlSection() + hunks() + rows() + htmlCell() + cssClass() + number() + src/operations/subactor.ts: + i: ../core/types.js,./validation.js + e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding + CompileSubactorEnvelopeOptions: + valueMatchesType() + assertBinding() + ageSeconds() + compileSubactorProcessEnvelope() + variableById() + referenced() + variable() + binding() + humanApproval() + binding() + src/communication/intake-service.ts: + i: ./intake-store.js,node:crypto,node:fs,node:path + e: IntakeState,GovernedIntakeService + IntakeState: + GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) + scripts/live-model-comparison.mjs: + i: node:fs,node:path,node:url + e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile + REPO_ROOT() + main() + probe() + timeoutMs() + models() + root() + config() + result() + comparison() + rendered() + jsonTarget() + markdownTarget() + failedAudit() + message() + writeFile() src/extractors/ast.ts: i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result @@ -2401,14 +2150,6 @@ D: isIntentRecords() isExtractionResult() result() - src/extractors/nl-llm.ts: - i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./nl.js,node:fs,node:path,node:url - e: RawNlRecord,NlResponse,AuditedNlExtractionResult,NlLlmRequiredError,NlAttemptError - RawNlRecord: - NlResponse: - AuditedNlExtractionResult: - NlLlmRequiredError: super(-1),extractNlIntentAudited(-1),assertNlExtractionOptions(-1),startedAt(-1),result(-1),client(-1),absolute(-1),body(-1),sourcePath(-1),maxLine(-1),prompt(-1),response(-1),records(-1),failure(-1),responses(-1) - NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failedAudit(-1),deterministic(-1),markDeterministic(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),audit(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),readPrompt(-1),promptPath(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1) src/extractors/docs-llm.ts: i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url e: DocumentationLlmRequiredError @@ -2442,6 +2183,12 @@ D: absolute() addBasenameIndexMatch() matches() + src/extractors/nl-llm-helpers.ts: + i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url + e: RawNlRecord,NlResponse,NlAttemptError + RawNlRecord: + NlResponse: + NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1) src/synthesis/todo-patch.ts: i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings @@ -2618,16 +2365,62 @@ D: values() round() src/communication/llm/implementation.ts: - i: ../../config/env.js,../../core/id.js,../../core/io.js,../../core/record.js,../../llm/audit.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js,../../version.js,node:fs,node:path,node:url - e: RawCommunicationEnrichment,RawParticipantSynthesis,RawCommunicationResponse,ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError,ParticipantGroup - RawCommunicationEnrichment: - RawParticipantSynthesis: - RawCommunicationResponse: + i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js + e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError ParticipantCommunicationSynthesis: AuditedCommunicationExtractionResult: CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1) - CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1),participantGroups(-1),grouped(-1),participant(-1),role(-1),key(-1),values(-1),promptPayload(-1),validateEnrichments(-1),expected(-1),output(-1),materializeSyntheses(-1),byKey(-1),seen(-1),output(-1),group(-1),permitted(-1),recordIds(-1),enrichRecord(-1),deterministicSyntheses(-1),synthesis(-1),markDeterministic(-1),marked(-1),deterministicGeneration(-1),fallbackGeneration(-1),llmGeneration(-1),audit(-1),roleOf(-1),sortedUnique(-1),readPrompt(-1),promptPath(-1),communicationStrings(-1),COMMUNICATION_ENRICHMENT_CONTRACT(-1),PARTICIPANT_SYNTHESIS_CONTRACT(-1),COMMUNICATION_RESPONSE_CONTRACT(-1) - ParticipantGroup: + CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1) + src/core/schema/intent.ts: + i: ../id.js + e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation + GroundedValidationContext: + TodoProposalValidationContext: + CodeChangePlanValidationContext: + CodeChangeAcceptanceValidationContext: + assertIntentRecord() + record() + statement() + lifecycle() + source() + epistemic() + metadata() + assertIntentStatement() + statement() + assertIntentTarget() + target() + assertIntentLifecycle() + lifecycle() + assertIntentSource() + source() + lines() + assertIntentEpistemic() + epistemic() + assertIntentMetadata() + typedMetadata() + generation() + assertGenerationMatchesExtractor() + generation() + separator() + expectedGenerator() + assertIntentGenerationMetadata() + generation() + assertIntentRecords() + assertIntentGraph() + graph() + recordIds() + relationIds() + stats() + records() + expectedFingerprint() + assertIntentGraphDiff() + diff() + records() + change() + relations() + summary() + assertRelation() + relation() src/extractors/changelog.ts: i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower @@ -2802,18 +2595,83 @@ D: groups() identity() values() - recordIdentity() - normalizeRecord() - changedFieldPaths() - isObject() - relationKey() - compareRecords() - compareRelations() - recordLabel() - changeLabel() - metricCard() - escapeXml() - truncate() + recordIdentity() + normalizeRecord() + changedFieldPaths() + isObject() + relationKey() + compareRecords() + compareRelations() + recordLabel() + changeLabel() + metricCard() + escapeXml() + truncate() + src/graph/diagnostics.ts: + i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js + e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank + DiagnosticContext: + diagnoseGraph() + context() + buildDiagnosticContext() + neighbors() + recordsById() + collectRecordDiagnostics() + related() + missingFields() + symbolIssues() + isEvidence() + planned() + notPlanned() + notDocumented() + changelog() + ambiguous() + lowConfidence() + unlinked() + collectRelatedRecords() + collectMissingFields() + collectSymbolIssues() + isRecordEvidenced() + hasDocumentedTarget() + buildPlannedNotImplementedDiagnostic() + hasLocationOnlyEvidence() + buildImplementedWithoutPlanDiagnostic() + buildUndocumentedImplementationDiagnostic() + buildChangelogWithoutImplementationDiagnostic() + buildAmbiguousRequirementDiagnostic() + detail() + buildLowConfidenceDiagnostic() + buildUnlinkedRecordDiagnostic() + collectContradictionDiagnostics() + indexGroundedImplementationEvidence() + grounded() + left() + right() + relationSupportsImplementation() + basis() + score() + ambiguityDetail() + paths() + ambiguityAction() + actions() + buildNeighbors() + map() + appendNeighbor() + values() + indexImplementedPaths() + paths() + indexDocumentedPaths() + paths() + hasImplementedTarget() + hasDocumentedTarget() + isPlan() + isImplementationEvidence() + isPublicImplementation() + symbol() + isReleaseCandidate() + isImportantRecord() + makeDiagnostic() + severityRank() src/core/schema/code-change.ts: i: ../id.js,../types.js e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch @@ -3150,12 +3008,109 @@ D: findKeyLine() pattern() index() + src/extractors/nl-llm.ts: + i: ../config/env.js,../core/io.js,../llm/failure.js,../llm/openrouter.js,./nl.js,node:path + e: AuditedNlExtractionResult,NlLlmRequiredError + AuditedNlExtractionResult: + NlLlmRequiredError: super(-1),extractNlIntentAudited(-1),assertNlExtractionOptions(-1),startedAt(-1),result(-1),client(-1),absolute(-1),body(-1),sourcePath(-1),maxLine(-1),prompt(-1),response(-1),records(-1),failure(-1),responses(-1),classifyLlmFailure(-1),fallbackOrThrow(-1),failedAudit(-1),deterministic(-1) src/extractors/markdown-block.ts: e: MarkdownListBlock,readListBlock,cursor,line MarkdownListBlock: readListBlock() cursor() line() + src/graph/linker.ts: + i: ../core/id.js,../core/schema.js,../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js,./symbol-resolution.js + e: PairEvidence,RecordKeywords,DirectedRelation,SourceRelationRule,indexKeywords,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,isSuppressedConfigurationPair,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,objectSimilarity,scoreSharedTickets,scoreSharedSymbol,hasResolvedSymbol,hasSharedAlias,scoreSharedPath,points,capabilityOverlap,scoreSameAction,scoreObjectSimilarity,objectSimilarity,scoreSharedTopics,sharedTopics,scoreSourceKindPenalty,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation,intersects,set,intersectsAliases,set,countBy,key + PairEvidence: + RecordKeywords: + DirectedRelation: + SourceRelationRule: + indexKeywords() + jaccard() + intersection() + linkIntentRecords() + records() + byId() + keywordIndex() + symbolResolutionIndex() + candidatePairs() + resolvableBasenames() + left() + right() + evidence() + directed() + deduplicateRecords() + byId() + existing() + collectCandidatePairs() + buckets() + astIds() + moduleAstIds() + declarationAstIds() + configurationIds() + isModuleTopicSource() + indexTargetBuckets() + indexAliases() + indexKeywordBuckets() + indexTopicBuckets() + addToBucket() + values() + isSuppressedConfigurationPair() + pairsFromBuckets() + output() + leftId() + rightId() + isSuppressedAstPair() + leftAst() + rightAst() + astId() + indexResolvableBasenames() + owners() + normalized() + basename() + paths() + pathsIntersect() + expand() + output() + aliases() + full() + leftSet() + scorePair() + score() + leftKeywords() + rightKeywords() + objectSimilarity() + scoreSharedTickets() + scoreSharedSymbol() + hasResolvedSymbol() + hasSharedAlias() + scoreSharedPath() + points() + capabilityOverlap() + scoreSameAction() + scoreObjectSimilarity() + objectSimilarity() + scoreSharedTopics() + sharedTopics() + scoreSourceKindPenalty() + intersectionSize() + size() + isFileAggregateEvidencePair() + isModuleTopicEvidencePair() + determineRelation() + textScore() + sourceRelation() + relationForSourceKinds() + relation() + matchSourceRule() + orientRelation() + intersects() + set() + intersectsAliases() + set() + countBy() + key() src/graph/capability-evidence.ts: i: ../core/text.js,../core/types.js e: STRUCTURAL_TOPICS,declaredCapabilityTopics,topics,locationTopics,aggregateCapabilityTopics,values,aggregateCapabilityOverlap,aggregate,declaration,requested,implemented,overlap,hasCapabilityClaim,isFileAggregate @@ -3294,6 +3249,77 @@ D: unknown() main() args() + src/communication/llm/implementation-helpers.ts: + i: ../../core/id.js,../../core/io.js,../../core/record.js,../../llm/audit.js,../../llm/structured-schema.js,../../version.js,../extractors/communication.js,node:fs,node:path,node:url + e: RawCommunicationEnrichment,RawParticipantSynthesis,RawCommunicationResponse,ParticipantGroup,ParticipantCommunicationSynthesisInput,participantGroups,grouped,participant,role,key,values,promptPayload,validateEnrichments,expected,output,materializeSyntheses,byKey,seen,output,group,permitted,recordIds,enrichRecord,deterministicSyntheses,markDeterministic,marked,deterministicGeneration,fallbackGeneration,llmGeneration,audit,readPrompt,promptPath,synthesis,sortedUnique,roleOf,communicationStrings,COMMUNICATION_ENRICHMENT_CONTRACT,PARTICIPANT_SYNTHESIS_CONTRACT,COMMUNICATION_RESPONSE_CONTRACT + RawCommunicationEnrichment: + RawParticipantSynthesis: + RawCommunicationResponse: + ParticipantGroup: + ParticipantCommunicationSynthesisInput: + participantGroups() + grouped() + participant() + role() + key() + values() + promptPayload() + validateEnrichments() + expected() + output() + materializeSyntheses() + byKey() + seen() + output() + group() + permitted() + recordIds() + enrichRecord() + deterministicSyntheses() + markDeterministic() + marked() + deterministicGeneration() + fallbackGeneration() + llmGeneration() + audit() + readPrompt() + promptPath() + synthesis() + sortedUnique() + roleOf() + communicationStrings() + COMMUNICATION_ENRICHMENT_CONTRACT() + PARTICIPANT_SYNTHESIS_CONTRACT() + COMMUNICATION_RESPONSE_CONTRACT() + src/graph/symbol-resolution.ts: + i: ../core/target.js,../core/types.js + e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,collectAstCandidates,byAlias,candidate,values,buildAstCandidate,uniqueSymbols,sortCandidates,collectNlResolutions,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration + AstSymbolCandidate: + NlSymbolResolution: + SymbolResolutionIndex: + buildSymbolResolutionIndex() + byAlias() + collectAstCandidates() + byAlias() + candidate() + values() + buildAstCandidate() + uniqueSymbols() + sortCandidates() + collectNlResolutions() + byNlRecord() + hasResolvedNlAstSymbolPair() + nl() + ast() + resolveSymbol() + matched() + selected() + paths() + pathSelects() + normalized() + candidatePath() + uniquePaths() + isAstDeclaration() rust-ast/src/main.rs: i: proc_macro2::Span,quote::ToTokens,serde::Serialize,serde_json::,std::collections::BTreeSet,std::env,std::fs,std::path::,syn::spanned::Spanned,syn::visit:: e: Fact,Output,Collector,main,arguments,collect_files,new,qualified,add,excerpt,modifiers,visit_item_mod,visit_item_use,visit_item_struct,visit_item_enum,visit_item_trait,visit_item_type,visit_item_const,visit_item_static,visit_item_fn,visit_item_impl,visit_impl_item_fn,visit_expr_call,visit_expr_method_call @@ -3364,6 +3390,11 @@ D: proposalAction() factsMetadata() jsonScalar() + src/extractors/markdown-llm.ts: + i: ../config/env.js,../llm/failure.js,../llm/openrouter.js,./markdown.js + e: AuditedMarkdownExtractionResult,MarkdownLlmRequiredError + AuditedMarkdownExtractionResult: + MarkdownLlmRequiredError: super(-1),extractMarkdownIntentAudited(-1),startedAt(-1),deterministic(-1),client(-1),prompt(-1),failure(-1),failedResponses(-1),classifyLlmFailure(-1),fallbackOrThrow(-1),failed(-1) src/extractors/ast/external.ts: i: ../../core/io.js,../../core/types.js,./records.js,./types.js,node:child_process,node:util e: ExternalAdapterOptions,execFileAsync,runExternalAstAdapter,files,result,parsed @@ -3577,6 +3608,38 @@ D: size() offset() line() + src/extractors/ast/typescript.ts: + i: ../../core/io.js,../../core/record.js,../../core/types.js,./records.js,node:path,typescript + e: TypeScriptExtractionContext,extractTypeScriptFile,context,capabilities,createTypeScriptExtractionContext,visitTypeScriptNode,handleNode,handleImportDeclaration,handleExportDeclaration,handleSymbolDeclaration,symbol,symbolModifiers,handleVariableDeclaration,declarationIsCallable,handleCallExpression,callee,isTypeScriptSymbolDeclaration,extractSymbolName,extractModifiers,addTypeScriptRecord,symbol,sourceLineRange,nodeExcerpt,recordModuleFact,isTopLevel,scriptKind,extension,languageName,extension + TypeScriptExtractionContext: + extractTypeScriptFile() + context() + capabilities() + createTypeScriptExtractionContext() + visitTypeScriptNode() + handleNode() + handleImportDeclaration() + handleExportDeclaration() + handleSymbolDeclaration() + symbol() + symbolModifiers() + handleVariableDeclaration() + declarationIsCallable() + handleCallExpression() + callee() + isTypeScriptSymbolDeclaration() + extractSymbolName() + extractModifiers() + addTypeScriptRecord() + symbol() + sourceLineRange() + nodeExcerpt() + recordModuleFact() + isTopLevel() + scriptKind() + extension() + languageName() + extension() src/graph/changelog-signal.ts: i: ../core/types.js e: GENERATED_ANALYSIS_BASENAMES,isActionableChangelogRecord,text,paths,isPlaceholder,isFileSummary,isFileOnlyUpdate,match,candidate,basename,isGeneratedAnalysisPath,segments,basename @@ -3638,6 +3701,62 @@ D: ClientOptions: T2CClient: health(-1),agentCard(-1),send(-1),result(-1),call(-1),task(-1),detail(-1),part(-1),getTask(-1),cancelTask(-1),listTasks(-1),extractNl(-1),extractGit(-1),extractAst(-1),extractConfig(-1),link(-1),diagnose(-1),summarize(-1),compareWorkspace(-1),diffGraphs(-1),response(-1),body(-1),message(-1),diffFiles(-1),diffGit(-1),reality(-1),pipeline(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),rpc(-1),body(-1),response(-1),payload(-1),getJson(-1),response(-1),request(-1),controller(-1),timer(-1),clearTimeout(-1) unwrapTask() + src/core/schema/utils.ts: + i: ../types.js + e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation,assertGroundedLlMMode,assertModeRequirements,assertDeterministicGeneration,assertDegradedRequirements + objectValue() + exactKeys() + expectedSet() + missing() + extra() + nonEmptyString() + nonBlankString() + nullableString() + enumValue() + stringArray() + nonEmptyUniqueStringArray() + repositoryPath() + normalized() + exactStringSet() + uniqueIdArray() + nonEmptyUniqueIdArray() + knownReferences() + unknown() + confidence() + assertAcyclicProposalDependencies() + byId() + visiting() + visited() + visit() + start() + dateString() + nullableDate() + fingerprint() + nonNegativeInteger() + countMap() + map() + countRecords() + key() + exactCounts() + actual() + isJsonValue() + assertGroundedGenerationMetadata() + generation() + assertGroundedLlMMode() + assertModeRequirements() + assertDeterministicGeneration() + assertDegradedRequirements() + src/extractors/communication.ts: + i: ../communication/identity.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,./communication-file-helpers.js,node:path + e: CommunicationExtractionOptions,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,fileResult + CommunicationExtractionOptions: + extractCommunicationIntent() + root() + projectRoot() + files() + identityRegistry() + communicationFiles() + fileResult() src/core/security.ts: i: node:fs,node:path e: assertPathWithinRoot,rootAbsolute,candidateAbsolute,existingAncestor,ancestorReal,assertDescendant,relative,nearestExistingPath,current,code,parent @@ -3727,6 +3846,47 @@ Example: capabilities() boundedCapabilities() moduleTopicText() + src/tf/classifier.ts: + i: ../config/env.js,../core/text.js,../core/types.js,node:fs,node:path,node:url + e: TfTensor,TfModel,TfModule,ModelAssets,dynamicImport,importer,loadAssets,directory,vocabularyPath,labels,loadClassifier,modelPath,modulePath,moduleValue,absolute,model,assets,vectorize,values,index,classifyAction,fallback,loaded,probabilities,buildHeuristicActionResult,classifyWithTensorFlow,vector,input,predictionValue,prediction,probabilities,resolveActionFromTensorflow,bestIndex,action,confidence,indexOfMaxValue,bestIndex,clampProbability + TfTensor: + TfModel: + TfModule: + ModelAssets: + dynamicImport() + importer() + loadAssets() + directory() + vocabularyPath() + labels() + loadClassifier() + modelPath() + modulePath() + moduleValue() + absolute() + model() + assets() + vectorize() + values() + index() + classifyAction() + fallback() + loaded() + probabilities() + buildHeuristicActionResult() + classifyWithTensorFlow() + vector() + input() + predictionValue() + prediction() + probabilities() + resolveActionFromTensorflow() + bestIndex() + action() + confidence() + indexOfMaxValue() + bestIndex() + clampProbability() src/interfaces/mcp-resources.ts: i: ../config/env.js,../core/io.js,./mcp-errors.js,node:fs,node:path e: listMcpResources,readRequestedMcpResource,uri,readMcpResource,latestPath,selected,latest,filePath,latestPointer,assertInsideRoot,relative,isInvalidResourceError,resource diff --git a/project/mermaid.export b/project/mermaid.export index 6598708..b18415d 100644 --- a/project/mermaid.export +++ b/project/mermaid.export @@ -855,11 +855,17 @@ flowchart TD src__core__target__pathAliases["pathAliases"] src__core__target__basename["basename"] src__core__target__unique["unique"] - src__core__text__STOP_WORDS{{STOP_WORDS CC=17}} - src__core__text__classifyActionHeuristically{{classifyActionHeuristically CC=17}} - src__core__text__conventional["conventional"] + src__core__text__STOP_WORDS["STOP_WORDS"] + src__core__text__buildStopWords["buildStopWords"] + src__core__text__classifyActionHeuristically["classifyActionHeuristically"] + src__core__text__conventionalAction["conventionalAction"] src__core__text__prose["prose"] src__core__text__searchable["searchable"] + src__core__text__matchedByPattern["matchedByPattern"] + src__core__text__extractConventionalAction("extractConventionalAction CC=14") + src__core__text__conventional["conventional"] + src__core__text__findActionInText["findActionInText"] + src__core__text__removeInlineCode["removeInlineCode"] src__core__text__detectModality("detectModality CC=11") src__core__text__matches["matches"] src__core__text__detectPolarity("detectPolarity CC=8") @@ -897,12 +903,6 @@ flowchart TD src__core__text__camel["camel"] src__core__text__ticketPrefixes["ticketPrefixes"] src__core__text__extractTickets["extractTickets"] - src__core__text__values["values"] - src__core__text__extractVersions["extractVersions"] - src__core__text__inferObject{{inferObject CC=34}} - src__core__text__result["result"] - src__core__text__splitIntentLines["splitIntentLines"] - src__core__text__lines["lines"] end subgraph src__diff src__diff__svg__escapeXml["escapeXml"] @@ -1129,28 +1129,28 @@ flowchart TD src__graph__diff__metricCard["metricCard"] src__graph__diff__escapeXml["escapeXml"] src__graph__diff__truncate["truncate"] - src__graph__symbol_resolution__buildSymbolResolutionIndex{{buildSymbolResolutionIndex CC=15}} - src__graph__symbol_resolution__byAlias("byAlias CC=9") - src__graph__symbol_resolution__values["values"] - src__graph__symbol_resolution__byNlRecord["byNlRecord"] - src__graph__symbol_resolution__hasResolvedNlAstSymbolPair("hasResolvedNlAstSymbolPair CC=10") - src__graph__symbol_resolution__nl["nl"] - src__graph__symbol_resolution__ast["ast"] - src__graph__symbol_resolution__resolveSymbol("resolveSymbol CC=8") - src__graph__symbol_resolution__matched["matched"] - src__graph__symbol_resolution__selected["selected"] - src__graph__symbol_resolution__paths["paths"] - src__graph__symbol_resolution__pathSelects["pathSelects"] - src__graph__symbol_resolution__normalized["normalized"] - src__graph__symbol_resolution__candidatePath["candidatePath"] - src__graph__symbol_resolution__uniquePaths["uniquePaths"] - src__graph__symbol_resolution__isAstDeclaration["isAstDeclaration"] src__graph__linker__indexKeywords["indexKeywords"] src__graph__linker__jaccard["jaccard"] src__graph__linker__intersection["intersection"] src__graph__linker__linkIntentRecords["linkIntentRecords"] src__graph__linker__records["records"] src__graph__linker__byId["byId"] + src__graph__linker__keywordIndex["keywordIndex"] + src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"] + src__graph__linker__candidatePairs["candidatePairs"] + src__graph__linker__resolvableBasenames["resolvableBasenames"] + src__graph__linker__left["left"] + src__graph__linker__right["right"] + src__graph__linker__evidence["evidence"] + src__graph__linker__directed["directed"] + src__graph__linker__deduplicateRecords["deduplicateRecords"] + src__graph__linker__existing["existing"] + src__graph__linker__collectCandidatePairs("collectCandidatePairs CC=10") + src__graph__linker__buckets("buckets CC=10") + src__graph__linker__astIds("astIds CC=10") + src__graph__linker__moduleAstIds("moduleAstIds CC=10") + src__graph__linker__declarationAstIds("declarationAstIds CC=10") + src__graph__linker__configurationIds("configurationIds CC=10") end subgraph src__interfaces src__interfaces__a2a_card__sendAgentCard["sendAgentCard"] @@ -1548,7 +1548,7 @@ flowchart TD src__services__actions__file["file"] src__services__actions__text["text"] src__services__actions__analysis["analysis"] - src__services__actions__records("records CC=13") + src__services__actions__records["records"] src__services__actions__graph["graph"] src__services__actions__diagnostics["diagnostics"] src__services__actions__result["result"] @@ -1581,12 +1581,17 @@ flowchart TD src__services__actions__beforePath["beforePath"] src__services__actions__afterPath["afterPath"] src__services__actions__view["view"] - src__services__actions__filterCommunicationGraph{{filterCommunicationGraph CC=17}} - src__services__actions__participant("participant CC=13") - src__services__actions__role("role CC=13") - src__services__actions__ticket("ticket CC=13") - src__services__actions__communicationOnly("communicationOnly CC=13") - src__services__actions__isCommunication["isCommunication"] + src__services__actions__filterCommunicationGraph["filterCommunicationGraph"] + src__services__actions__filter["filter"] + src__services__actions__parseCommunicationGraphFilter["parseCommunicationGraphFilter"] + src__services__actions__participant["participant"] + src__services__actions__role["role"] + src__services__actions__ticket["ticket"] + src__services__actions__communicationOnly["communicationOnly"] + src__services__actions__matchesCommunicationFilter["matchesCommunicationFilter"] + src__services__actions__matchesParticipant["matchesParticipant"] + src__services__actions__matchesRole["matchesRole"] + src__services__actions__matchesTicket["matchesTicket"] src__services__actions__nlModeValue["nlModeValue"] src__services__actions__llmModeValue["llmModeValue"] src__services__actions__taskSynthesisMode["taskSynthesisMode"] @@ -1598,11 +1603,6 @@ flowchart TD src__services__actions__safePath["safePath"] src__services__actions__readActionObject["readActionObject"] src__services__actions__resolveRoot["resolveRoot"] - src__services__actions__requested["requested"] - src__services__actions__scopedPath["scopedPath"] - src__services__actions__selected["selected"] - src__services__actions__nullableScopedPath["nullableScopedPath"] - src__services__actions__readRecords["readRecords"] end subgraph src__summary src__summary__payload__compactSummaryPayload("compactSummaryPayload CC=12") @@ -1733,17 +1733,22 @@ flowchart TD src__tf__classifier__vectorize["vectorize"] src__tf__classifier__values["values"] src__tf__classifier__index["index"] - src__tf__classifier__classifyAction{{classifyAction CC=17}} + src__tf__classifier__classifyAction["classifyAction"] src__tf__classifier__fallback["fallback"] src__tf__classifier__loaded["loaded"] + src__tf__classifier__probabilities["probabilities"] + src__tf__classifier__buildHeuristicActionResult["buildHeuristicActionResult"] + src__tf__classifier__classifyWithTensorFlow["classifyWithTensorFlow"] src__tf__classifier__vector["vector"] src__tf__classifier__input["input"] src__tf__classifier__predictionValue["predictionValue"] src__tf__classifier__prediction["prediction"] - src__tf__classifier__probabilities["probabilities"] + src__tf__classifier__resolveActionFromTensorflow["resolveActionFromTensorflow"] src__tf__classifier__bestIndex["bestIndex"] src__tf__classifier__action["action"] src__tf__classifier__confidence["confidence"] + src__tf__classifier__indexOfMaxValue["indexOfMaxValue"] + src__tf__classifier__clampProbability["clampProbability"] end subgraph src__watch src__watch__watcher__scanTree("scanTree CC=12") @@ -1863,6 +1868,145 @@ flowchart TD java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__Collector java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape + src__cli__main --> src__cli__printHelp + src__cli__main --> src__cli__parseArgs + src__cli__main --> src__cli__resolveMainCommand + src__cli__main --> src__cli__commandHandlers + src__cli__main --> src__cli__handler + src__cli__parsed --> src__cli__printHelp + src__cli__command --> src__cli__printHelp + src__cli__commandHandlers --> src__cli__initProject + src__cli__commandHandlers --> src__cli__doctor + src__cli__handleLink --> src__cli__emitJson + src__cli__handleLink --> src__cli__optionString + src__cli__handleDiagnose --> src__cli__emitJson + src__cli__handleDiagnose --> src__cli__optionString + src__cli__handleSummarize --> src__cli__optionString + src__cli__handleSummarize --> src__cli__optionSummaryMode + src__cli__diagnosticsPath --> src__cli__optionNumber + src__cli__diagnosticsPath --> src__cli__optionBoolean + src__cli__diagnostics --> src__cli__optionNumber + src__cli__diagnostics --> src__cli__optionBoolean + src__cli__result --> src__cli__execFileAsync + src__cli__handleProposeTodo --> src__cli__optionString + src__cli__handleProposeTodo --> src__cli__optionTaskMode + src__cli__handleRenderTodo --> src__cli__optionString + src__cli__handleApplyTodo --> src__cli__optionString + src__cli__handleProposeCodeChange --> src__cli__optionString + src__cli__handleRenderCodeChange --> src__cli__optionString + src__cli__handleProposeSourcePatch --> src__cli__optionString + src__cli__isPlanSet --> src__cli__optionString + src__cli__handleApplySourcePatch --> src__cli__optionString + src__cli__handleEvaluateCodeChange --> src__cli__optionString + src__cli__handleCloseCodeChange --> src__cli__optionString + src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot + src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions + src__cli__root --> src__cli__optionString + src__cli__root --> src__cli__optionNullableString + src__cli__root --> src__cli__optionLlmMode + src__cli__handlePipeline --> src__cli__resolvePipelineRoot + src__cli__handlePipeline --> src__cli__buildPipelineOptions + src__cli__handlePipeline --> src__cli__optionNullableString + src__cli__handlePipeline --> src__cli__reportPipelineDegradation + src__cli__handleWatch --> src__cli__resolvePipelineRoot + src__cli__handleWatch --> src__cli__resolveWatchTaskFile + src__cli__handleWatch --> src__cli__buildPipelineOptions + src__cli__handleWatch --> src__cli__optionNumber + src__cli__handleWatch --> src__cli__optionBoolean + src__cli__handleWatch --> src__cli__formatWatchEvent + src__cli__taskFile --> src__cli__optionNumber + src__cli__taskFile --> src__cli__optionBoolean + src__cli__taskFile --> src__cli__formatWatchEvent + src__cli__pipeline --> src__cli__optionNumber + src__cli__pipeline --> src__cli__optionBoolean + src__cli__pipeline --> src__cli__formatWatchEvent + src__cli__controller --> src__cli__optionNumber + src__cli__controller --> src__cli__optionBoolean + src__cli__controller --> src__cli__formatWatchEvent + src__cli__stop --> src__cli__optionNumber + src__cli__stop --> src__cli__optionBoolean + src__cli__stop --> src__cli__formatWatchEvent + src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions + src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString + src__cli__buildCommonPipelineOptions --> src__cli__optionList + src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean + src__cli__buildCommonPipelineOptions --> src__cli__optionString + src__cli__buildCommonPipelineOptions --> src__cli__optionNumber + src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode + src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode + src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode + src__cli__resolveWatchTaskFile --> src__cli__optionNullableString + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode + src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber + src__cli__formatWatchEvent --> src__cli__file + src__cli__stamp --> src__cli__file + src__cli__handleDiff --> src__cli__parseDiffMode + src__cli__handleDiff --> src__cli__handleGraphDiff + src__cli__handleDiff --> src__cli__buildDiffPayload + src__cli__handleDiff --> src__cli__optionString + src__cli__handleDiff --> src__cli__optionNumber + src__cli__svg --> src__cli__optionNumber + src__cli__svg --> src__cli__optionBoolean + src__cli__parseDiffMode --> src__cli__optionString + src__cli__handleGraphDiff --> src__cli__optionString + src__cli__handleGraphDiff --> src__cli__optionNumber + src__cli__diff --> src__cli__optionNumber + src__cli__buildDiffPayload --> src__cli__buildFileDiff + src__cli__buildDiffPayload --> src__cli__buildGitDiff + src__cli__buildFileDiff --> src__cli__optionNumber + src__cli__context --> src__cli__optionString + src__cli__context --> src__cli__optionBoolean + src__cli__context --> src__cli__optionNumber + src__cli__buildGitDiff --> src__cli__optionNumber + src__cli__buildGitDiff --> src__cli__optionString + src__cli__buildGitDiff --> src__cli__optionBoolean + src__cli__handleReality --> src__cli__optionString + src__cli__handleReality --> src__cli__optionNumber + src__cli__handleReality --> src__cli__optionBoolean + src__cli__view --> src__cli__optionNumber + src__cli__view --> src__cli__optionBoolean + src__cli__handleExtract --> src__cli__optionString + src__cli__handleExtract --> src__cli__handler + src__cli__handleExtractNl --> src__cli__optionString + src__cli__handleExtractNl --> src__cli__optionNlMode + src__cli__handleExtractNl --> src__cli__emitExtraction + src__cli__handleExtractGit --> src__cli__optionNumber + src__cli__handleExtractGit --> src__cli__emitExtraction + src__cli__handleExtractAst --> src__cli__emitExtraction + src__cli__handleExtractConfig --> src__cli__emitExtraction + src__cli__handleExtractRuntime --> src__cli__emitExtraction + src__cli__handleExtractMarkdown --> src__cli__optionNullableString + src__cli__handleExtractMarkdown --> src__cli__optionLlmMode + src__cli__handleExtractMarkdown --> src__cli__emitExtraction + src__cli__handleExtractDocs --> src__cli__optionList + src__cli__handleExtractDocs --> src__cli__emitExtraction + src__cli__handleExtractCommunication --> src__cli__optionString + src__cli__handleExtractCommunication --> src__cli__optionNullableString + src__cli__handleExtractCommunication --> src__cli__optionLlmMode + src__cli__handleExtractCommunication --> src__cli__emitExtraction + src__cli__handleCommunication --> src__cli__optionString + src__cli__handleCommunication --> src__cli__optionNullableString + src__cli__handleCommunication --> src__cli__optionLlmMode + src__cli__handleCommunication --> src__cli__optionNumber + src__cli__handleCommunication --> src__cli__optionBoolean + src__cli__handleIntake --> src__cli__optionString + src__cli__handleIntake --> src__cli__optionBoolean + src__cli__handleIntake --> src__cli__intakeExitCode + src__cli__absolute --> src__cli__optionString + src__cli__doctor --> src__cli__execFileAsync + src__cli__optionNumber --> src__cli__optionString + src__cli__optionList --> src__cli__optionString + src__cli__optionNlMode --> src__cli__optionLlmMode + src__cli__optionLlmMode --> src__cli__optionString + src__cli__optionTaskMode --> src__cli__optionString + src__cli__optionSummaryMode --> src__cli__optionLlmMode + src__cli__optionSummaryMode --> src__cli__optionBoolean + src__cli__optionPipelineTaskMode --> src__cli__optionString + src__cli__invokedPath --> src__cli__main src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields src__extractors__nl__extractNlIntent --> src__extractors__nl__inferActor @@ -1949,38 +2093,8 @@ flowchart TD src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__markDeterministic - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__markDeterministic - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__markDeterministic - src__extractors__nl_llm__NlLlmRequiredError__startedAt --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__markDeterministic - src__extractors__nl_llm__NlLlmRequiredError__result --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlAttemptError__fallbackOrThrow - src__extractors__nl_llm__NlLlmRequiredError__absolute --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlLlmRequiredError__body --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlLlmRequiredError__sourcePath --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlLlmRequiredError__maxLine --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlLlmRequiredError__prompt --> src__extractors__nl_llm__NlAttemptError__extractNlWithCorrection - src__extractors__nl_llm__NlAttemptError__failedAudit --> src__extractors__nl_llm__NlAttemptError__audit - src__extractors__nl_llm__NlAttemptError__deterministic --> src__extractors__nl_llm__NlAttemptError__fallback - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveAction - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__nonEmptyText - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__resolveObject - src__extractors__nl_llm__NlAttemptError__toIntentRecord --> src__extractors__nl_llm__NlAttemptError__allowedModality - src__extractors__nl_llm__NlAttemptError__lines --> src__extractors__nl_llm__NlAttemptError__sourceExcerpt - src__extractors__nl_llm__NlAttemptError__action --> src__extractors__nl_llm__NlAttemptError__resolveObject - src__extractors__nl_llm__NlAttemptError__normalizedText --> src__extractors__nl_llm__NlAttemptError__resolveObject - src__extractors__nl_llm__NlAttemptError__statementText --> src__extractors__nl_llm__NlAttemptError__allowedModality - src__extractors__nl_llm__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm__NlAttemptError__clampLine - src__extractors__nl_llm__NlAttemptError__resolveAction --> src__extractors__nl_llm__NlAttemptError__allowedAction - src__extractors__nl_llm__NlAttemptError__isPlaceholder --> src__extractors__nl_llm__NlAttemptError__nonEmptyText - src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__isPlaceholder - src__extractors__nl_llm__NlAttemptError__resolveObject --> src__extractors__nl_llm__NlAttemptError__nonEmptyText - src__extractors__nl_llm__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm__NlAttemptError__nlStrings + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow + src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget @@ -2066,6 +2180,38 @@ flowchart TD src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering + src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings + src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote + src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename + src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename + src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename + src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename + src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise + src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush + src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__governanceSectionType + src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise + src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise + src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match + src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType + src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote + src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize src__extractors__todo__extractTodo --> src__extractors__todo__match src__extractors__todo__extractTodo --> src__extractors__todo__inferOwner src__extractors__todo__body --> src__extractors__todo__match @@ -2092,47 +2238,6 @@ flowchart TD src__extractors__todo__resolvedPaths --> src__extractors__todo__extractExplicitId src__extractors__todo__inferOwner --> src__extractors__todo__match src__extractors__todo__extractExplicitId --> src__extractors__todo__match - src__extractors__communication__extractCommunicationIntent --> src__extractors__communication__extractCommunicationFile - src__extractors__communication__identityRegistry --> src__extractors__communication__extractCommunicationFile - src__extractors__communication__communicationFiles --> src__extractors__communication__extractCommunicationFile - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__parseEnvelope - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__inferIdentity - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__first - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__isTicketEvidenceFile - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__looksLikeTicket - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__normalizeRole - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__resolveIdentity - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__basename - src__extractors__communication__extractCommunicationFile --> src__extractors__communication__normalizeType - src__extractors__communication__envelope --> src__extractors__communication__basename - src__extractors__communication__inferred --> src__extractors__communication__basename - src__extractors__communication__explicitEnvelope --> src__extractors__communication__basename - src__extractors__communication__declaredParticipant --> src__extractors__communication__basename - src__extractors__communication__declaredRole --> src__extractors__communication__basename - src__extractors__communication__declaredParticipantId --> src__extractors__communication__basename - src__extractors__communication__identity --> src__extractors__communication__basename - src__extractors__communication__participant --> src__extractors__communication__basename - src__extractors__communication__sameStrings --> src__extractors__communication__normalize - src__extractors__communication__parseEnvelope --> src__extractors__communication__match - src__extractors__communication__parseEnvelope --> src__extractors__communication__unquote - src__extractors__communication__inferIdentity --> src__extractors__communication__basename - src__extractors__communication__inferIdentity --> src__extractors__communication__match - src__extractors__communication__inferIdentity --> src__extractors__communication__isCommunicationType - src__extractors__communication__fileParts --> src__extractors__communication__isCommunicationType - src__extractors__communication__nestedRoleIndex --> src__extractors__communication__isCommunicationType - src__extractors__communication__nestedRole --> src__extractors__communication__isCommunicationType - src__extractors__communication__nestedParticipant --> src__extractors__communication__isCommunicationType - src__extractors__communication__isTicketEvidenceFile --> src__extractors__communication__basename - src__extractors__communication__communicationSegments --> src__extractors__communication__isCommunicationNoise - src__extractors__communication__communicationSegments --> src__extractors__communication__match - src__extractors__communication__communicationSegments --> src__extractors__communication__flush - src__extractors__communication__communicationSegments --> src__extractors__communication__governanceSectionType - src__extractors__communication__flush --> src__extractors__communication__isCommunicationNoise - src__extractors__communication__item --> src__extractors__communication__isCommunicationNoise - src__extractors__communication__raw --> src__extractors__communication__match - src__extractors__communication__heading --> src__extractors__communication__match - src__extractors__communication__normalizeType --> src__extractors__communication__isCommunicationType - src__extractors__communication__listValue --> src__extractors__communication__unquote src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories @@ -2183,25 +2288,27 @@ flowchart TD src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__readPrompt - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering - src__extractors__markdown_llm__MarkdownLlmRequiredError__startedAt --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownLlmRequiredError__deterministic --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow - src__extractors__markdown_llm__MarkdownLlmRequiredError__outcomes --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering - src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichMarkdownBatchWithCorrection - src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract - src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch - src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm__MarkdownAttemptError__emptyCoverage - src__extractors__markdown_llm__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm__MarkdownAttemptError__enrichBatchCovering - src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownAttemptError__fallbackOrThrow --> src__extractors__markdown_llm__MarkdownAttemptError__markDeterministic - src__extractors__markdown_llm__MarkdownAttemptError__failed --> src__extractors__markdown_llm__MarkdownAttemptError__stageAudit - src__extractors__markdown_llm__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm__MarkdownAttemptError__strings - src__extractors__markdown_llm__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm__MarkdownAttemptError__strings + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__classifyLlmFailure + src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow + src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile + src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile + src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality + src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt + src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject + src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject + src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality + src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine + src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction + src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText + src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords @@ -2210,24 +2317,32 @@ flowchart TD src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind - src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__lineRange - src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__excerpt - src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__languageName - src__extractors__ast__typescript__add --> src__extractors__ast__typescript__lineRange - src__extractors__ast__typescript__add --> src__extractors__ast__typescript__excerpt - src__extractors__ast__typescript__add --> src__extractors__ast__typescript__languageName - src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__modifiers - src__extractors__ast__typescript__symbol --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__nameOf - src__extractors__ast__typescript__visit --> src__extractors__ast__typescript__modifiers - src__extractors__ast__typescript__symbolModifiers --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__isTopLevel - src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__callee --> src__extractors__ast__typescript__add - src__extractors__ast__typescript__capabilities --> src__extractors__ast__typescript__add + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact + src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext + src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind + src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleCallExpression + src__extractors__ast__typescript__handleImportDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleExportDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__isTypeScriptSymbolDeclaration + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__extractSymbolName + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__extractModifiers + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__visitTypeScriptNode + src__extractors__ast__typescript__symbolModifiers --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleVariableDeclaration --> src__extractors__ast__typescript__isTopLevel + src__extractors__ast__typescript__handleVariableDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleCallExpression --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__callee --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__recordModuleFact --> src__extractors__ast__typescript__addTypeScriptRecord src__graph__diff__diffIntentGraphs --> src__graph__diff__assertGraph src__graph__diff__diffIntentGraphs --> src__graph__diff__groupRecords src__graph__diff__diffIntentGraphs --> src__graph__diff__changedFieldPaths @@ -2264,15 +2379,6 @@ flowchart TD src__graph__diff__changedFieldPaths --> src__graph__diff__isObject src__graph__diff__compareRelations --> src__graph__diff__relationKey src__graph__diff__metricCard --> src__graph__diff__escapeXml - src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__values - src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__resolveSymbol - src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol - src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects - src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths - src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords src__graph__linker__linkIntentRecords --> src__graph__linker__indexKeywords src__graph__linker__linkIntentRecords --> src__graph__linker__collectCandidatePairs @@ -2294,109 +2400,8 @@ flowchart TD src__graph__linker__deduplicateRecords --> src__graph__linker__values src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTargetBuckets src__graph__linker__collectCandidatePairs --> src__graph__linker__indexKeywordBuckets - src__graph__linker__collectCandidatePairs --> src__graph__linker__isModuleTopicSource - src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTopicBuckets - src__graph__linker__collectCandidatePairs --> src__graph__linker__pairsFromBuckets - src__graph__linker__buckets --> src__graph__linker__indexTargetBuckets - src__graph__linker__buckets --> src__graph__linker__indexKeywordBuckets - src__graph__linker__buckets --> src__graph__linker__isModuleTopicSource - src__graph__linker__buckets --> src__graph__linker__indexTopicBuckets - src__graph__linker__astIds --> src__graph__linker__indexTargetBuckets - src__graph__linker__astIds --> src__graph__linker__indexKeywordBuckets - src__graph__linker__astIds --> src__graph__linker__isModuleTopicSource - src__graph__linker__astIds --> src__graph__linker__indexTopicBuckets - src__graph__linker__moduleAstIds --> src__graph__linker__indexTargetBuckets - src__graph__linker__moduleAstIds --> src__graph__linker__indexKeywordBuckets - src__graph__linker__moduleAstIds --> src__graph__linker__isModuleTopicSource - src__graph__linker__moduleAstIds --> src__graph__linker__indexTopicBuckets - src__graph__linker__declarationAstIds --> src__graph__linker__indexTargetBuckets - src__graph__linker__declarationAstIds --> src__graph__linker__indexKeywordBuckets - src__graph__linker__declarationAstIds --> src__graph__linker__isModuleTopicSource - src__graph__linker__declarationAstIds --> src__graph__linker__indexTopicBuckets - src__graph__linker__configurationIds --> src__graph__linker__indexTargetBuckets - src__graph__linker__configurationIds --> src__graph__linker__indexKeywordBuckets - src__graph__linker__configurationIds --> src__graph__linker__isModuleTopicSource - src__graph__linker__configurationIds --> src__graph__linker__indexTopicBuckets - src__graph__linker__indexTargetBuckets --> src__graph__linker__addToBucket - src__graph__linker__indexTargetBuckets --> src__graph__linker__indexAliases - src__graph__linker__indexAliases --> src__graph__linker__aliases - src__graph__linker__indexAliases --> src__graph__linker__addToBucket - src__graph__linker__indexKeywordBuckets --> src__graph__linker__addToBucket - src__graph__linker__indexTopicBuckets --> src__graph__linker__addToBucket - src__graph__linker__addToBucket --> src__graph__linker__set - src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedAstPair - src__graph__linker__pairsFromBuckets --> src__graph__linker__isSuppressedConfigurationPair - src__graph__linker__pairsFromBuckets --> src__graph__linker__set - src__graph__linker__leftId --> src__graph__linker__set - src__graph__linker__rightId --> src__graph__linker__set - src__graph__linker__indexResolvableBasenames --> src__graph__linker__set - src__graph__linker__owners --> src__graph__linker__set - src__graph__linker__pathsIntersect --> src__graph__linker__expand - src__graph__linker__scorePair --> src__graph__linker__intersects - src__graph__linker__scorePair --> src__graph__linker__intersectsAliases - src__graph__linker__scorePair --> src__graph__linker__pathsIntersect - src__graph__linker__scorePair --> src__graph__linker__isFileAggregateEvidencePair - src__graph__linker__scorePair --> src__graph__linker__jaccard - src__graph__linker__scorePair --> src__graph__linker__isModuleTopicEvidencePair - src__graph__linker__scorePair --> src__graph__linker__intersectionSize - src__graph__linker__score --> src__graph__linker__intersects - src__graph__linker__leftKeywords --> src__graph__linker__intersects - src__graph__linker__rightKeywords --> src__graph__linker__intersects - src__graph__linker__resolvedNlAstSymbol --> src__graph__linker__intersectsAliases - src__graph__linker__determineRelation --> src__graph__linker__relationForSourceKinds - src__graph__linker__relationForSourceKinds --> src__graph__linker__matchSourceRule - src__graph__linker__matchSourceRule --> src__graph__linker__orientRelation - src__graph__linker__intersectsAliases --> src__graph__linker__aliases - src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__buildNeighbors - src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__map - src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__indexGroundedImplementationEvidence - src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__indexImplementedPaths - src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__indexDocumentedPaths - src__graph__diagnostics__neighbors --> src__graph__diagnostics__map - src__graph__diagnostics__neighbors --> src__graph__diagnostics__hasImplementedTarget - src__graph__diagnostics__neighbors --> src__graph__diagnostics__hasDocumentedTarget - src__graph__diagnostics__neighbors --> src__graph__diagnostics__isPlan - src__graph__diagnostics__neighbors --> src__graph__diagnostics__makeDiagnostic - src__graph__diagnostics__neighbors --> src__graph__diagnostics__isPublicImplementation - src__graph__diagnostics__neighbors --> src__graph__diagnostics__isReleaseCandidate - src__graph__diagnostics__recordsById --> src__graph__diagnostics__map - src__graph__diagnostics__recordsById --> src__graph__diagnostics__hasImplementedTarget - src__graph__diagnostics__recordsById --> src__graph__diagnostics__hasDocumentedTarget - src__graph__diagnostics__recordsById --> src__graph__diagnostics__isPlan - src__graph__diagnostics__recordsById --> src__graph__diagnostics__makeDiagnostic - src__graph__diagnostics__recordsById --> src__graph__diagnostics__isPublicImplementation - src__graph__diagnostics__recordsById --> src__graph__diagnostics__isReleaseCandidate - src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__map - src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__hasImplementedTarget - src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__hasDocumentedTarget - src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__isPlan - src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__makeDiagnostic - src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__isPublicImplementation - src__graph__diagnostics__groundedImplementation --> src__graph__diagnostics__isReleaseCandidate - src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__map - src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__hasImplementedTarget - src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__hasDocumentedTarget - src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__isPlan - src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__makeDiagnostic - src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__isPublicImplementation - src__graph__diagnostics__implementedPaths --> src__graph__diagnostics__isReleaseCandidate - src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__map - src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__hasImplementedTarget - src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__hasDocumentedTarget - src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__isPlan - src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__makeDiagnostic - src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__isPublicImplementation - src__graph__diagnostics__documentedPaths --> src__graph__diagnostics__isReleaseCandidate - src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__map - src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__hasImplementedTarget - src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__hasDocumentedTarget - src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__isPlan - src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__makeDiagnostic - src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__isPublicImplementation - src__graph__diagnostics__symbolResolutionIndex --> src__graph__diagnostics__isReleaseCandidate - src__graph__diagnostics__related --> src__graph__diagnostics__isPlan classDef highCC fill:#ff6b6b,stroke:#c92a2a,color:#fff classDef medCC fill:#ffd43b,stroke:#f08c00,color:#000 - class examples__backend__src__server__handleRequest,src__extractors__communication__extractCommunicationFile,src__extractors__communication__inferIdentity,src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited,src__extractors__ast__typescript__extractTypeScriptFile,src__extractors__ast__typescript__visit,src__graph__symbol_resolution__buildSymbolResolutionIndex,src__graph__linker__scorePair,src__graph__diagnostics__diagnoseGraph,src__graph__diagnostics__neighbors,src__graph__diagnostics__recordsById,src__graph__diagnostics__groundedImplementation,src__graph__diagnostics__implementedPaths,src__graph__diagnostics__documentedPaths,src__graph__diagnostics__symbolResolutionIndex,src__services__actions__executeAction,src__services__actions__root,src__services__actions__filterCommunicationGraph,src__tf__classifier__classifyAction,src__core__text__STOP_WORDS,src__core__text__classifyActionHeuristically,src__core__text__normalized,src__core__text__inferObject,src__core__record__buildRecord,src__core__record__generationMetadata,src__core__io__walkFiles,src__core__schema__intent__assertIntentRecord,src__core__schema__utils__assertGroundedGenerationMetadata,src__web__diff_ui__diffUiHtml,src__web__diff_ui__compareGraphs highCC - class rust_ast__src__main__collect_files,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__nl_llm__NlAttemptError__toIntentRecord,src__extractors__nl_llm__NlAttemptError__statementText,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk,src__extractors__changelog__extractChangelog,src__extractors__changelog__changelogAction,src__extractors__docs_deterministic__parseSectionHeading,src__extractors__docs_deterministic__readParagraph,src__extractors__docs_deterministic__cursor,src__extractors__markdown_paths__createMarkdownPathResolver,src__extractors__markdown_paths__repositoryRoot,src__extractors__markdown_paths__basenames,src__extractors__markdown_paths__headingDirectories,src__extractors__markdown_paths__scanDirectoryForBasenames,src__extractors__docs_record__OBJECT_PLACEHOLDERS,src__extractors__docs_record__toDocumentIntentRecord medCC + class examples__backend__src__server__handleRequest,src__extractors__communication_file_helpers__buildLocalWarnings,src__services__actions__executeAction,src__services__actions__root,src__core__text__normalized,src__core__text__inferObject,src__core__io__walkFiles,src__web__diff_ui__diffUiHtml,src__web__diff_ui__compareGraphs,src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates,src__semantic__reranker__result__assertSemanticRerankResult,src__semantic__reranker__result__records,src__semantic__reranker__result__seenDecisions,src__semantic__reranker__result__acceptedDeclarations,src__semantic__reranker__candidate__assertSemanticCandidateSet,src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS,src__synthesis__code_change_path__BINARY_EXTENSIONS,src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES,src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES,src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES,src__synthesis__code_change_path__isPlannablePath,src__synthesis__code_change_plan__implementation__proposeCodeChangePlans,src__synthesis__code_change_plan__implementation__paths,src__synthesis__code_change_plan__implementation__assertCodeChangeReviewPatch,src__synthesis__code_change_plan__implementation__assertCodeChangeSourcePatch,src__synthesis__code_change_plan__implementation__assertCodeChangeSourcePatchSet,src__synthesis__code_change_plan__implementation__normalizeUnifiedDiff,src__synthesis__code_change_plan__implementation__applyCodeChangeSourcePatch,src__synthesis__code_change_plan__implementation__applyUnifiedDiffToText,src__synthesis__code_change_plan__implementation__cursor highCC + class rust_ast__src__main__collect_files,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__cli__main,src__cli__handleRenderTodo,src__cli__handleApplyTodo,src__cli__options,src__cli__formatWatchEvent,src__cli__stamp,src__cli__handleDiff,src__cli__handleReality,src__cli__handleCommunication,src__cli__handleIntake,src__cli__intakeExitCode,src__cli__parseArgs,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk,src__extractors__changelog__extractChangelog,src__extractors__changelog__changelogAction medCC diff --git a/project/planfile-tickets.yaml b/project/planfile-tickets.yaml index 77f6b78..b43fc0f 100644 --- a/project/planfile-tickets.yaml +++ b/project/planfile-tickets.yaml @@ -1,5 +1,5 @@ source: code2llm -# generated in 0.18s +# generated in 0.17s schema: code2llm.planfile_tickets.v1 project_root: /home/tom/github/semcod/todo2code tickets: @@ -162,7 +162,7 @@ tickets: dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)' - description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:440` + description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:466` with cyclomatic complexity 34 (limit 15). @@ -179,7 +179,7 @@ tickets: dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)' - description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:441` + description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:467` with cyclomatic complexity 30 (limit 15). @@ -229,182 +229,6 @@ tickets: files: - src/evaluation/gold-types.ts dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.ast.typescript.extractTypeScriptFile - (CC=43)' - description: 'code2llm reports `src.extractors.ast.typescript.extractTypeScriptFile` - at `src/extractors/ast/typescript.ts:11` with cyclomatic complexity 43 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/ast/typescript.ts - dedupe_key: code2llm:cc:src/extractors/ast/typescript.ts:src.extractors.ast.typescript.extractTypeScriptFile -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.ast.typescript.visit (CC=25)' - description: 'code2llm reports `src.extractors.ast.typescript.visit` at `src/extractors/ast/typescript.ts:77` - with cyclomatic complexity 25 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/ast/typescript.ts - dedupe_key: code2llm:cc:src/extractors/ast/typescript.ts:src.extractors.ast.typescript.visit -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.communication.extractCommunicationFile - (CC=50)' - description: 'code2llm reports `src.extractors.communication.extractCommunicationFile` - at `src/extractors/communication.ts:102` with cyclomatic complexity 50 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/communication.ts - dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.extractCommunicationFile -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.graph.diagnostics.diagnoseGraph (CC=40)' - description: 'code2llm reports `src.graph.diagnostics.diagnoseGraph` at `src/graph/diagnostics.ts:16` - with cyclomatic complexity 40 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/graph/diagnostics.ts - dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.diagnoseGraph -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.graph.diagnostics.documentedPaths (CC=35)' - description: 'code2llm reports `src.graph.diagnostics.documentedPaths` at `src/graph/diagnostics.ts:23` - with cyclomatic complexity 35 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/graph/diagnostics.ts - dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.documentedPaths -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.graph.diagnostics.groundedImplementation - (CC=35)' - description: 'code2llm reports `src.graph.diagnostics.groundedImplementation` at - `src/graph/diagnostics.ts:21` with cyclomatic complexity 35 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/graph/diagnostics.ts - dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.groundedImplementation -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.graph.diagnostics.implementedPaths (CC=35)' - description: 'code2llm reports `src.graph.diagnostics.implementedPaths` at `src/graph/diagnostics.ts:22` - with cyclomatic complexity 35 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/graph/diagnostics.ts - dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.implementedPaths -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.graph.diagnostics.neighbors (CC=35)' - description: 'code2llm reports `src.graph.diagnostics.neighbors` at `src/graph/diagnostics.ts:19` - with cyclomatic complexity 35 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/graph/diagnostics.ts - dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.neighbors -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.graph.diagnostics.recordsById (CC=35)' - description: 'code2llm reports `src.graph.diagnostics.recordsById` at `src/graph/diagnostics.ts:20` - with cyclomatic complexity 35 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/graph/diagnostics.ts - dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.recordsById -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.graph.diagnostics.symbolResolutionIndex - (CC=35)' - description: 'code2llm reports `src.graph.diagnostics.symbolResolutionIndex` at - `src/graph/diagnostics.ts:24` with cyclomatic complexity 35 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/graph/diagnostics.ts - dedupe_key: code2llm:cc:src/graph/diagnostics.ts:src.graph.diagnostics.symbolResolutionIndex - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)' description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42` @@ -858,9 +682,9 @@ tickets: - src/web/diff-ui.ts dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml - signal: code2llm_god - title: 'Split god module: src/communication/llm/implementation.ts' - description: 'code2llm reports `src/communication/llm/implementation.ts` as a large - module (514 lines, 8 classes). + title: 'Split god module: src/graph/linker.ts' + description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines, + 4 classes). Split it by responsibility, keep public imports stable, and add focused tests @@ -872,25 +696,8 @@ tickets: - god-module - refactor files: - - src/communication/llm/implementation.ts - dedupe_key: code2llm:god:src/communication/llm/implementation.ts -- signal: code2llm_god - title: 'Split god module: src/extractors/communication.ts' - description: 'code2llm reports `src/extractors/communication.ts` as a large module - (515 lines, 5 classes). - - - Split it by responsibility, keep public imports stable, and add focused tests - around the moved behavior.' - priority: high - labels: - - llm-ready - - code2llm - - god-module - - refactor - files: - - src/extractors/communication.ts - dedupe_key: code2llm:god:src/extractors/communication.ts + - src/graph/linker.ts + dedupe_key: code2llm:god:src/graph/linker.ts - signal: code2llm_god title: 'Split god module: src/synthesis/code-change-plan/implementation.ts' description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts` @@ -989,7 +796,7 @@ tickets: description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`. - Module ''src.cli'' is too large (195 functions, 1 classes). Consider splitting + Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting into sub-modules. @@ -1270,26 +1077,9 @@ tickets: - src/core/io.ts dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.record.buildRecord (CC=18)' - description: 'code2llm reports `src.core.record.buildRecord` at `src/core/record.ts:57` - with cyclomatic complexity 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/record.ts - dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.buildRecord -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=15)' - description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:125` - with cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)' + description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141` + with cyclomatic complexity 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1303,77 +1093,6 @@ tickets: files: - src/core/record.ts dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.schema.intent.assertIntentRecord - (CC=23)' - description: 'code2llm reports `src.core.schema.intent.assertIntentRecord` at `src/core/schema/intent.ts:67` - with cyclomatic complexity 23 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/schema/intent.ts - dedupe_key: code2llm:cc:src/core/schema/intent.ts:src.core.schema.intent.assertIntentRecord -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.schema.utils.assertGroundedGenerationMetadata - (CC=23)' - description: 'code2llm reports `src.core.schema.utils.assertGroundedGenerationMetadata` - at `src/core/schema/utils.ts:167` with cyclomatic complexity 23 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/schema/utils.ts - dedupe_key: code2llm:cc:src/core/schema/utils.ts:src.core.schema.utils.assertGroundedGenerationMetadata -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.text.STOP_WORDS (CC=17)' - description: 'code2llm reports `src.core.text.STOP_WORDS` at `src/core/text.ts:30` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/text.ts - dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.STOP_WORDS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.text.classifyActionHeuristically - (CC=17)' - description: 'code2llm reports `src.core.text.classifyActionHeuristically` at `src/core/text.ts:40` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/text.ts - dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.classifyActionHeuristically - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)' description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41` @@ -1700,63 +1419,11 @@ tickets: - src/evaluation/gold-types.ts dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.communication.inferIdentity - (CC=15)' - description: 'code2llm reports `src.extractors.communication.inferIdentity` at `src/extractors/communication.ts:337` - with cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/communication.ts - dedupe_key: code2llm:cc:src/extractors/communication.ts:src.extractors.communication.inferIdentity -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited - (CC=19)' - description: 'code2llm reports `src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited` - at `src/extractors/markdown-llm.ts:55` with cyclomatic complexity 19 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/markdown-llm.ts - dedupe_key: code2llm:cc:src/extractors/markdown-llm.ts:src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.graph.linker.scorePair (CC=18)' - description: 'code2llm reports `src.graph.linker.scorePair` at `src/graph/linker.ts:342` - with cyclomatic complexity 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/graph/linker.ts - dedupe_key: code2llm:cc:src/graph/linker.ts:src.graph.linker.scorePair -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.graph.symbol-resolution.buildSymbolResolutionIndex - (CC=15)' - description: 'code2llm reports `src.graph.symbol-resolution.buildSymbolResolutionIndex` - at `src/graph/symbol-resolution.ts:22` with cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: src.extractors.communication-file-helpers.buildLocalWarnings + (CC=18)' + description: 'code2llm reports `src.extractors.communication-file-helpers.buildLocalWarnings` + at `src/extractors/communication-file-helpers.ts:254` with cyclomatic complexity + 18 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1768,8 +1435,8 @@ tickets: - complexity - refactor files: - - src/graph/symbol-resolution.ts - dedupe_key: code2llm:cc:src/graph/symbol-resolution.ts:src.graph.symbol-resolution.buildSymbolResolutionIndex + - src/extractors/communication-file-helpers.ts + dedupe_key: code2llm:cc:src/extractors/communication-file-helpers.ts:src.extractors.communication-file-helpers.buildLocalWarnings - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)' description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107` @@ -1912,24 +1579,6 @@ tickets: files: - src/semantic/reranker/result.ts dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.services.actions.filterCommunicationGraph - (CC=17)' - description: 'code2llm reports `src.services.actions.filterCommunicationGraph` at - `src/services/actions.ts:511` with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/services/actions.ts - dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.filterCommunicationGraph - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch (CC=23)' @@ -2025,23 +1674,6 @@ tickets: files: - src/synthesis/code-change-plan/implementation.ts dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.tf.classifier.classifyAction (CC=17)' - description: 'code2llm reports `src.tf.classifier.classifyAction` at `src/tf/classifier.ts:69` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/tf/classifier.ts - dedupe_key: code2llm:cc:src/tf/classifier.ts:src.tf.classifier.classifyAction - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS (CC=19)' @@ -2113,13 +1745,12 @@ tickets: - src/web/diff-ui.ts dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: markdown_mode, root, changelog, todo, self' - description: 'code2llm reports `Data Clump: markdown_mode, root, changelog, todo, - self` in `sdk/python/todo2code/client.py:332`. + title: 'Address code smell: Data Clump: action, self, payload' + description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:249`. - Arguments (markdown_mode, root, changelog, todo, self) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + sdk.python.todo2code.client.T2CClient.call. Make the smallest refactor that removes the smell and run local tests.' @@ -2131,16 +1762,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: - markdown_mode, root, changelog, todo, self' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: + action, self, payload' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: markdown_mode, root, changelog, todo, self' - description: 'code2llm reports `Data Clump: markdown_mode, root, changelog, todo, - self` in `sdk/python/todo2code/client.py:341`. + title: 'Address code smell: Data Clump: action, self, payload' + description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:261`. - Arguments (markdown_mode, root, changelog, todo, self) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + sdk.python.todo2code.client.T2CClient.call. Make the smallest refactor that removes the smell and run local tests.' @@ -2152,15 +1782,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: - markdown_mode, root, changelog, todo, self' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: + action, self, payload' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, action, payload' - description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`. + title: 'Address code smell: Data Clump: excludes, self, patterns, root' + description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:354`. - Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, - sdk.python.todo2code.client.T2CClient.call. + Arguments (excludes, self, patterns, root) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. Make the smallest refactor that removes the smell and run local tests.' @@ -2172,15 +1802,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: - self, action, payload' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: + excludes, self, patterns, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, action, payload' - description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`. + title: 'Address code smell: Data Clump: excludes, self, patterns, root' + description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:362`. - Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, - sdk.python.todo2code.client.T2CClient.call. + Arguments (excludes, self, patterns, root) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. Make the smallest refactor that removes the smell and run local tests.' @@ -2192,15 +1822,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: - self, action, payload' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: + excludes, self, patterns, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, patterns, root, excludes' - description: 'code2llm reports `Data Clump: self, patterns, root, excludes` in `sdk/python/todo2code/client.py:354`. + title: 'Address code smell: Data Clump: file, nl_mode, self, root' + description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:307`. - Arguments (self, patterns, root, excludes) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. + Arguments (file, nl_mode, self, root) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. Make the smallest refactor that removes the smell and run local tests.' @@ -2212,15 +1842,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: - self, patterns, root, excludes' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: + file, nl_mode, self, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, patterns, root, excludes' - description: 'code2llm reports `Data Clump: self, patterns, root, excludes` in `sdk/python/todo2code/client.py:362`. + title: 'Address code smell: Data Clump: file, nl_mode, self, root' + description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:312`. - Arguments (self, patterns, root, excludes) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. + Arguments (file, nl_mode, self, root) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. Make the smallest refactor that removes the smell and run local tests.' @@ -2232,15 +1862,16 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: - self, patterns, root, excludes' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: + file, nl_mode, self, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, file, nl_mode' - description: 'code2llm reports `Data Clump: self, root, file, nl_mode` in `sdk/python/todo2code/client.py:307`. + title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo' + description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root, + todo` in `sdk/python/todo2code/client.py:332`. - Arguments (self, root, file, nl_mode) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. + Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -2252,15 +1883,16 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: - self, root, file, nl_mode' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: + markdown_mode, changelog, self, root, todo' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, file, nl_mode' - description: 'code2llm reports `Data Clump: self, root, file, nl_mode` in `sdk/python/todo2code/client.py:312`. + title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo' + description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root, + todo` in `sdk/python/todo2code/client.py:341`. - Arguments (self, root, file, nl_mode) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. + Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -2272,8 +1904,8 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: - self, root, file, nl_mode' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: + markdown_mode, changelog, self, root, todo' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: MAX_PER_SECTION' description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`. @@ -2314,7 +1946,7 @@ tickets: OBJECT_PLACEHOLDERS' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: PATH_ROOTS' - description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:343`. + description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:369`. Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0. @@ -2329,7 +1961,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:343:God Function: PATH_ROOTS' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:369:God Function: PATH_ROOTS' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: RPC' description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`. @@ -2403,25 +2035,6 @@ tickets: - src/extractors/todo.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function: action' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: add' - description: 'code2llm reports `God Function: add` in `src/extractors/ast/typescript.ts:29`. - - - Function ''add'' is oversized: CC=14, fan-out=7, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/extractors/ast/typescript.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/typescript.ts:29:God - Function: add' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics' description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics` @@ -2560,9 +2173,30 @@ tickets: - src/core/schema/conclusions.ts dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function: assertConclusionValue' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: assertGroundedGenerationMetadata' + description: 'code2llm reports `God Function: assertGroundedGenerationMetadata` + in `src/core/schema/utils.ts:167`. + + + Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12, + mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/schema/utils.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function: + assertGroundedGenerationMetadata' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertIntentGraph' - description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:187`. + description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`. Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0. @@ -2577,11 +2211,11 @@ tickets: - god-function files: - src/core/schema/intent.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:187:God Function: + dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function: assertIntentGraph' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertIntentGraphDiff' - description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:216`. + description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`. Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0. @@ -2596,7 +2230,7 @@ tickets: - god-function files: - src/core/schema/intent.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:216:God Function: + dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function: assertIntentGraphDiff' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertParticipant' @@ -2845,7 +2479,7 @@ tickets: Function: byDeclaration' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: byKey' - description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation.ts:303`. + description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`. Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0. @@ -2859,8 +2493,8 @@ tickets: - code-smell - god-function files: - - src/communication/llm/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:303:God + - src/communication/llm/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God Function: byKey' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: candidates' @@ -2977,11 +2611,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function: collect' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: collect_files' - description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`. + title: 'Address code smell: God Function: collectCommunicationMetadata' + description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`. - Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0. + Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2992,15 +2626,15 @@ tickets: - code-smell - god-function files: - - rust-ast/src/main.rs - dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function: - collect_files' + - src/extractors/communication-file-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God + Function: collectCommunicationMetadata' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: communicationOnly' - description: 'code2llm reports `God Function: communicationOnly` in `src/services/actions.ts:515`. + title: 'Address code smell: God Function: collectRecordDiagnostics' + description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`. - Function ''communicationOnly'' is oversized: CC=13, fan-out=4, mutations=0. + Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -3011,12 +2645,31 @@ tickets: - code-smell - god-function files: - - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:515:God Function: - communicationOnly' + - src/graph/diagnostics.ts + dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function: + collectRecordDiagnostics' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: collect_files' + description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`. + + + Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - rust-ast/src/main.rs + dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function: + collect_files' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: communicationSegments' - description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication.ts:391`. + description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`. Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0. @@ -3030,8 +2683,8 @@ tickets: - code-smell - god-function files: - - src/extractors/communication.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/communication.ts:391:God + - src/extractors/communication-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God Function: communicationSegments' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: compareWorkspaceIntent' @@ -3282,6 +2935,25 @@ tickets: - sdk/rust/src/client.rs dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:189:God Function: decode_chunked' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: diagnoseGraph' + description: 'code2llm reports `God Function: diagnoseGraph` in `src/graph/diagnostics.ts:16`. + + + Function ''diagnoseGraph'' is oversized: CC=6, fan-out=15, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/graph/diagnostics.ts + dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:16:God Function: + diagnoseGraph' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: diffIntentGraphs' description: 'code2llm reports `God Function: diffIntentGraphs` in `src/graph/diff.ts:16`. @@ -3321,10 +2993,10 @@ tickets: encode_envelope' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: enrichBatchCovering' - description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm.ts:161`. + description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm-helpers.ts:112`. - Function ''enrichBatchCovering'' is oversized: CC=8, fan-out=11, mutations=0. + Function ''enrichBatchCovering'' is oversized: CC=6, fan-out=11, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -3335,12 +3007,31 @@ tickets: - code-smell - god-function files: - - src/extractors/markdown-llm.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:161:God + - src/extractors/markdown-llm-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:112:God Function: enrichBatchCovering' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: enrichMarkdownRecords' + description: 'code2llm reports `God Function: enrichMarkdownRecords` in `src/extractors/markdown-llm-helpers.ts:57`. + + + Function ''enrichMarkdownRecords'' is oversized: CC=13, fan-out=9, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/extractors/markdown-llm-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:57:God + Function: enrichMarkdownRecords' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: enrichRecord' - description: 'code2llm reports `God Function: enrichRecord` in `src/extractors/markdown-llm.ts:359`. + description: 'code2llm reports `God Function: enrichRecord` in `src/extractors/markdown-llm-helpers.ts:274`. Function ''enrichRecord'' is oversized: CC=14, fan-out=4, mutations=0. @@ -3354,8 +3045,8 @@ tickets: - code-smell - god-function files: - - src/extractors/markdown-llm.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:359:God + - src/extractors/markdown-llm-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God Function: enrichRecord' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: evaluateCodeChangeAcceptance' @@ -3486,17 +3177,36 @@ tickets: - code-smell - god-function files: - - src/extractors/changelog.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:18:God Function: - extractChangelog' + - src/extractors/changelog.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:18:God Function: + extractChangelog' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: extractCommunicationIntentAudited' + description: 'code2llm reports `God Function: extractCommunicationIntentAudited` + in `src/communication/llm/implementation.ts:63`. + + + Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23, + mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/llm/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:63:God + Function: extractCommunicationIntentAudited' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: extractCommunicationIntentAudited' - description: 'code2llm reports `God Function: extractCommunicationIntentAudited` - in `src/communication/llm/implementation.ts:86`. + title: 'Address code smell: God Function: extractConventionalAction' + description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:62`. - Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23, - mutations=0. + Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -3507,9 +3217,8 @@ tickets: - code-smell - god-function files: - - src/communication/llm/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:86:God - Function: extractCommunicationIntentAudited' + - src/core/text.ts + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:62:God Function: extractConventionalAction' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractDocumentationIntent' description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`. @@ -3529,6 +3238,25 @@ tickets: - src/extractors/docs-llm.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-llm.ts:45:God Function: extractDocumentationIntent' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: extractMarkdownIntentAudited' + description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:31`. + + + Function ''extractMarkdownIntentAudited'' is oversized: CC=9, fan-out=14, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/extractors/markdown-llm.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:31:God Function: + extractMarkdownIntentAudited' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractNlIntent' description: 'code2llm reports `God Function: extractNlIntent` in `src/extractors/nl.ts:38`. @@ -3549,7 +3277,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:38:God Function: extractNlIntent' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractNlIntentAudited' - description: 'code2llm reports `God Function: extractNlIntentAudited` in `src/extractors/nl-llm.ts:53`. + description: 'code2llm reports `God Function: extractNlIntentAudited` in `src/extractors/nl-llm.ts:33`. Function ''extractNlIntentAudited'' is oversized: CC=10, fan-out=22, mutations=0. @@ -3564,7 +3292,7 @@ tickets: - god-function files: - src/extractors/nl-llm.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:53:God Function: + dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:33:God Function: extractNlIntentAudited' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractPhpAst' @@ -3644,7 +3372,7 @@ tickets: Function: extractRuntimeCycleIntent' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractSymbols' - description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:412`. + description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:438`. Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0. @@ -3659,7 +3387,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:412:God Function: extractSymbols' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:438:God Function: extractSymbols' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractTodo' description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`. @@ -3738,7 +3466,7 @@ tickets: Function: graph' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleCommunication' - description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:632`. + description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:659`. Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0. @@ -3753,10 +3481,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:632:God Function: handleCommunication' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:659:God Function: handleCommunication' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleDiff' - description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:437`. + description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:464`. Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0. @@ -3771,10 +3499,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:437:God Function: handleDiff' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:464:God Function: handleDiff' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleGraphDiff' - description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:463`. + description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:490`. Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0. @@ -3789,10 +3517,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:463:God Function: handleGraphDiff' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:490:God Function: handleGraphDiff' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleIntake' - description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:672`. + description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:699`. Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0. @@ -3807,28 +3535,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:672:God Function: handleIntake' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: handlePipeline' - description: 'code2llm reports `God Function: handlePipeline` in `src/cli.ts:345`. - - - Function ''handlePipeline'' is oversized: CC=4, fan-out=13, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:345:God Function: handlePipeline' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:699:God Function: handleIntake' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleReality' - description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:520`. + description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:547`. Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0. @@ -3843,13 +3553,13 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:520:God Function: handleReality' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:547:God Function: handleReality' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleWatch' - description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:374`. + description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:342`. - Function ''handleWatch'' is oversized: CC=6, fan-out=18, mutations=0. + Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -3861,7 +3571,7 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:374:God Function: handleWatch' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:342:God Function: handleWatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: ignored' description: 'code2llm reports `God Function: ignored` in `src/core/io.ts:88`. @@ -3937,7 +3647,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:298:God Function: indexResolvableBasenames' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: isPathLike' - description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:361`. + description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:387`. Function ''isPathLike'' is oversized: CC=13, fan-out=12, mutations=0. @@ -3952,7 +3662,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:361:God Function: isPathLike' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:387:God Function: isPathLike' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: lines' description: 'code2llm reports `God Function: lines` in `src/extractors/changelog.ts:30`. @@ -4177,6 +3887,24 @@ tickets: - java/JavaAstExtract.java dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:21:God Function: main' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: main' + description: 'code2llm reports `God Function: main` in `src/cli.ts:61`. + + + Function ''main'' is oversized: CC=9, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:61:God Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' description: 'code2llm reports `God Function: main` in `src/evaluation/gold-cli.ts:11`. @@ -4272,24 +4000,6 @@ tickets: - python/ast_extract.py dedupe_key: 'code2llm:smell:god_function:python/ast_extract.py:195:God Function: main' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `src/cli.ts:61`. - - - Function ''main'' is oversized: CC=9, fan-out=12, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:61:God Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: matcher' description: 'code2llm reports `God Function: matcher` in `src/core/io.ts:91`. @@ -4329,7 +4039,7 @@ tickets: matchesRunFilters' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: materializeSyntheses' - description: 'code2llm reports `God Function: materializeSyntheses` in `src/communication/llm/implementation.ts:296`. + description: 'code2llm reports `God Function: materializeSyntheses` in `src/communication/llm/implementation-helpers.ts:127`. Function ''materializeSyntheses'' is oversized: CC=9, fan-out=14, mutations=0. @@ -4343,8 +4053,8 @@ tickets: - code-smell - god-function files: - - src/communication/llm/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:296:God + - src/communication/llm/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:127:God Function: materializeSyntheses' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: materializeTaskSynthesisResponse' @@ -4483,7 +4193,7 @@ tickets: object' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: options' - description: 'code2llm reports `God Function: options` in `src/cli.ts:747`. + description: 'code2llm reports `God Function: options` in `src/cli.ts:774`. Function ''options'' is oversized: CC=13, fan-out=5, mutations=0. @@ -4498,10 +4208,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:747:God Function: options' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:774:God Function: options' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: output' - description: 'code2llm reports `God Function: output` in `src/communication/llm/implementation.ts:305`. + description: 'code2llm reports `God Function: output` in `src/communication/llm/implementation-helpers.ts:148`. Function ''output'' is oversized: CC=6, fan-out=11, mutations=0. @@ -4515,15 +4225,15 @@ tickets: - code-smell - god-function files: - - src/communication/llm/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:305:God + - src/communication/llm/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:148:God Function: output' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parseArgs' - description: 'code2llm reports `God Function: parseArgs` in `scripts/research/rerank-embedding-shortlist.mjs:164`. + description: 'code2llm reports `God Function: parseArgs` in `src/cli.ts:772`. - Function ''parseArgs'' is oversized: CC=14, fan-out=11, mutations=0. + Function ''parseArgs'' is oversized: CC=13, fan-out=5, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4534,15 +4244,14 @@ tickets: - code-smell - god-function files: - - scripts/research/rerank-embedding-shortlist.mjs - dedupe_key: 'code2llm:smell:god_function:scripts/research/rerank-embedding-shortlist.mjs:164:God - Function: parseArgs' + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:772:God Function: parseArgs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parseArgs' - description: 'code2llm reports `God Function: parseArgs` in `src/cli.ts:745`. + description: 'code2llm reports `God Function: parseArgs` in `scripts/research/rerank-embedding-shortlist.mjs:164`. - Function ''parseArgs'' is oversized: CC=13, fan-out=5, mutations=0. + Function ''parseArgs'' is oversized: CC=14, fan-out=11, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4553,8 +4262,9 @@ tickets: - code-smell - god-function files: - - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:745:God Function: parseArgs' + - scripts/research/rerank-embedding-shortlist.mjs + dedupe_key: 'code2llm:smell:god_function:scripts/research/rerank-embedding-shortlist.mjs:164:God + Function: parseArgs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parse_args' description: 'code2llm reports `God Function: parse_args` in `scripts/research/evaluate-embedding-pairs.py:14`. @@ -4612,28 +4322,9 @@ tickets: - sdk/rust/src/client.rs dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:172:God Function: parse_base_url' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: participant' - description: 'code2llm reports `God Function: participant` in `src/services/actions.ts:512`. - - - Function ''participant'' is oversized: CC=13, fan-out=4, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:512:God Function: - participant' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: participantGroups' - description: 'code2llm reports `God Function: participantGroups` in `src/communication/llm/implementation.ts:241`. + description: 'code2llm reports `God Function: participantGroups` in `src/communication/llm/implementation-helpers.ts:72`. Function ''participantGroups'' is oversized: CC=10, fan-out=12, mutations=0. @@ -4647,8 +4338,8 @@ tickets: - code-smell - god-function files: - - src/communication/llm/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:241:God + - src/communication/llm/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:72:God Function: participantGroups' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: primaryTargetKey' @@ -4744,25 +4435,6 @@ tickets: - src/interfaces/a2a-history.ts dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:155:God Function: readCommunicationSummary' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: records' - description: 'code2llm reports `God Function: records` in `src/services/actions.ts:517`. - - - Function ''records'' is oversized: CC=13, fan-out=4, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:517:God Function: - records' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: records' description: 'code2llm reports `God Function: records` in `src/semantic/reranker/candidate.ts:120`. @@ -4803,7 +4475,7 @@ tickets: Function: recordsById' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: registerRunArtifacts' - description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:686`. + description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:723`. Function ''registerRunArtifacts'' is oversized: CC=7, fan-out=12, mutations=0. @@ -4818,7 +4490,7 @@ tickets: - god-function files: - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:686:God Function: + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:723:God Function: registerRunArtifacts' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: relative' @@ -4989,25 +4661,6 @@ tickets: - src/extractors/todo.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:51:God Function: resolvedPaths' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: role' - description: 'code2llm reports `God Function: role` in `src/services/actions.ts:513`. - - - Function ''role'' is oversized: CC=13, fan-out=4, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:513:God Function: - role' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: rpc' description: 'code2llm reports `God Function: rpc` in `sdk/rust/src/client.rs:55`. @@ -5083,9 +4736,27 @@ tickets: files: - src/watch/watcher.ts dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:37:God Function: scanTree' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: scorePair' + description: 'code2llm reports `God Function: scorePair` in `src/graph/linker.ts:342`. + + + Function ''scorePair'' is oversized: CC=1, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/graph/linker.ts + dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:342:God Function: scorePair' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: seen' - description: 'code2llm reports `God Function: seen` in `src/communication/llm/implementation.ts:304`. + description: 'code2llm reports `God Function: seen` in `src/communication/llm/implementation-helpers.ts:147`. Function ''seen'' is oversized: CC=6, fan-out=11, mutations=0. @@ -5099,8 +4770,8 @@ tickets: - code-smell - god-function files: - - src/communication/llm/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:304:God + - src/communication/llm/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:147:God Function: seen' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: seenIds' @@ -5310,25 +4981,6 @@ tickets: - src/extractors/todo.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:48:God Function: text' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: ticket' - description: 'code2llm reports `God Function: ticket` in `src/services/actions.ts:514`. - - - Function ''ticket'' is oversized: CC=13, fan-out=4, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:514:God Function: - ticket' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: toDocumentIntentRecord' description: 'code2llm reports `God Function: toDocumentIntentRecord` in `src/extractors/docs-record.ts:25`. @@ -5350,7 +5002,7 @@ tickets: toDocumentIntentRecord' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: toIntentRecord' - description: 'code2llm reports `God Function: toIntentRecord` in `src/extractors/nl-llm.ts:175`. + description: 'code2llm reports `God Function: toIntentRecord` in `src/extractors/nl-llm-helpers.ts:86`. Function ''toIntentRecord'' is oversized: CC=12, fan-out=11, mutations=0. @@ -5364,9 +5016,9 @@ tickets: - code-smell - god-function files: - - src/extractors/nl-llm.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:175:God Function: - toIntentRecord' + - src/extractors/nl-llm-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm-helpers.ts:86:God + Function: toIntentRecord' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: toSideBySideRows' description: 'code2llm reports `God Function: toSideBySideRows` in `src/diff/text-render.ts:41`. @@ -5424,24 +5076,6 @@ tickets: - src/extractors/ast/unsupported.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/unsupported.ts:11:God Function: unsupportedSourceWarning' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: used' - description: 'code2llm reports `God Function: used` in `src/core/record.ts:130`. - - - Function ''used'' is oversized: CC=13, fan-out=0, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/core/record.ts - dedupe_key: 'code2llm:smell:god_function:src/core/record.ts:130:God Function: used' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: validateCodeChangePlanContext' description: 'code2llm reports `God Function: validateCodeChangePlanContext` in @@ -5733,27 +5367,6 @@ tickets: - src/communication/intake-service.ts dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:1:God Module: src.communication.intake-service' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.communication.llm.implementation' - description: 'code2llm reports `God Module: src.communication.llm.implementation` - in `src/communication/llm/implementation.ts:1`. - - - Module ''src.communication.llm.implementation'' is too large (55 functions, 8 - classes). Consider splitting into sub-modules. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/communication/llm/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:1:God - Module: src.communication.llm.implementation' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.comparison.workspace' description: 'code2llm reports `God Module: src.comparison.workspace` in `src/comparison/workspace.ts:1`. @@ -5794,12 +5407,52 @@ tickets: - src/core/schema/code-change.ts dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:1:God Module: src.core.schema.code-change' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.core.schema.intent' + description: 'code2llm reports `God Module: src.core.schema.intent` in `src/core/schema/intent.ts:1`. + + + Module ''src.core.schema.intent'' is too large (43 functions, 4 classes). Consider + splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/schema/intent.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:1:God Module: + src.core.schema.intent' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.core.schema.utils' + description: 'code2llm reports `God Module: src.core.schema.utils` in `src/core/schema/utils.ts:1`. + + + Module ''src.core.schema.utils'' is too large (42 functions, 0 classes). Consider + splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/schema/utils.ts + dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:1:God Module: + src.core.schema.utils' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.core.text' description: 'code2llm reports `God Module: src.core.text` in `src/core/text.ts:1`. - Module ''src.core.text'' is too large (56 functions, 0 classes). Consider splitting + Module ''src.core.text'' is too large (62 functions, 0 classes). Consider splitting into sub-modules. @@ -5932,12 +5585,13 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-types.ts:1:God Module: src.evaluation.gold-types' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.extractors.communication' - description: 'code2llm reports `God Module: src.extractors.communication` in `src/extractors/communication.ts:1`. + title: 'Address code smell: God Module: src.extractors.communication-file-helpers' + description: 'code2llm reports `God Module: src.extractors.communication-file-helpers` + in `src/extractors/communication-file-helpers.ts:1`. - Module ''src.extractors.communication'' is too large (80 functions, 5 classes). - Consider splitting into sub-modules. + Module ''src.extractors.communication-file-helpers'' is too large (43 functions, + 2 classes). Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -5948,17 +5602,17 @@ tickets: - code-smell - god-function files: - - src/extractors/communication.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/communication.ts:1:God Module: - src.extractors.communication' + - src/extractors/communication-file-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:1:God + Module: src.extractors.communication-file-helpers' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.extractors.docs-deterministic' - description: 'code2llm reports `God Module: src.extractors.docs-deterministic` in - `src/extractors/docs-deterministic.ts:1`. + title: 'Address code smell: God Module: src.extractors.communication-helpers' + description: 'code2llm reports `God Module: src.extractors.communication-helpers` + in `src/extractors/communication-helpers.ts:1`. - Module ''src.extractors.docs-deterministic'' is too large (46 functions, 3 classes). - Consider splitting into sub-modules. + Module ''src.extractors.communication-helpers'' is too large (49 functions, 3 + classes). Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -5969,16 +5623,17 @@ tickets: - code-smell - god-function files: - - src/extractors/docs-deterministic.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-deterministic.ts:1:God - Module: src.extractors.docs-deterministic' + - src/extractors/communication-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:1:God + Module: src.extractors.communication-helpers' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.extractors.git' - description: 'code2llm reports `God Module: src.extractors.git` in `src/extractors/git.ts:1`. + title: 'Address code smell: God Module: src.extractors.docs-deterministic' + description: 'code2llm reports `God Module: src.extractors.docs-deterministic` in + `src/extractors/docs-deterministic.ts:1`. - Module ''src.extractors.git'' is too large (64 functions, 6 classes). Consider - splitting into sub-modules. + Module ''src.extractors.docs-deterministic'' is too large (46 functions, 3 classes). + Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -5989,14 +5644,15 @@ tickets: - code-smell - god-function files: - - src/extractors/git.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:1:God Module: src.extractors.git' + - src/extractors/docs-deterministic.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-deterministic.ts:1:God + Module: src.extractors.docs-deterministic' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.extractors.nl-llm' - description: 'code2llm reports `God Module: src.extractors.nl-llm` in `src/extractors/nl-llm.ts:1`. + title: 'Address code smell: God Module: src.extractors.git' + description: 'code2llm reports `God Module: src.extractors.git` in `src/extractors/git.ts:1`. - Module ''src.extractors.nl-llm'' is too large (46 functions, 5 classes). Consider + Module ''src.extractors.git'' is too large (64 functions, 6 classes). Consider splitting into sub-modules. @@ -6008,15 +5664,14 @@ tickets: - code-smell - god-function files: - - src/extractors/nl-llm.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:1:God Module: - src.extractors.nl-llm' + - src/extractors/git.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:1:God Module: src.extractors.git' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.graph.diagnostics' description: 'code2llm reports `God Module: src.graph.diagnostics` in `src/graph/diagnostics.ts:1`. - Module ''src.graph.diagnostics'' is too large (42 functions, 0 classes). Consider + Module ''src.graph.diagnostics'' is too large (61 functions, 1 classes). Consider splitting into sub-modules. @@ -6036,7 +5691,7 @@ tickets: description: 'code2llm reports `God Module: src.graph.linker` in `src/graph/linker.ts:1`. - Module ''src.graph.linker'' is too large (75 functions, 4 classes). Consider splitting + Module ''src.graph.linker'' is too large (85 functions, 4 classes). Consider splitting into sub-modules. @@ -6191,7 +5846,7 @@ tickets: description: 'code2llm reports `God Module: src.services.actions` in `src/services/actions.ts:1`. - Module ''src.services.actions'' is too large (113 functions, 0 classes). Consider + Module ''src.services.actions'' is too large (118 functions, 1 classes). Consider splitting into sub-modules. diff --git a/project/project.toon.yaml b/project/project.toon.yaml index 1ae4afc..784f88a 100644 --- a/project/project.toon.yaml +++ b/project/project.toon.yaml @@ -1,8 +1,8 @@ -# todo2code | 3586 func | 166f | 39601L | typescript | 2026-08-04 +# todo2code | 3683 func | 171f | 39185L | typescript | 2026-08-04 # generated in 0.00s HEALTH: - CC̄=3.8 critical=279 (limit:10) dup=28 cycles=0 + CC̄=3.6 critical=256 (limit:10) dup=28 cycles=0 ALERTS[20]: !!! cc_exceeded assertOperationPlan = 84 (limit:15) @@ -14,39 +14,39 @@ ALERTS[20]: !!! cc_exceeded runPipeline = 56 (limit:15) !!! high_fan_out runPipeline = 56 (limit:10) !!! cc_exceeded diffUiHtml = 52 (limit:15) - !!! cc_exceeded extractCommunicationFile = 50 (limit:15) + !!! cc_exceeded analyzeCommunication = 48 (limit:15) -MODULES[246] (top by size): +MODULES[251] (top by size): M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json) - M[src/synthesis/code-change-plan/implementation.ts] 1310L C:10 F:127 CC↑47 D:3 (typescript) - M[src/cli.ts] 908L C:1 F:118 CC↑13 D:0 (typescript) + M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript) M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json) - M[src/services/actions.ts] 700L C:0 F:74 CC↑83 D:0 (typescript) + M[src/services/actions.ts] 737L C:1 F:79 CC↑83 D:0 (typescript) M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript) M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript) M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json) M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript) M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript) + M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript) M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml) - M[src/extractors/communication.ts] 515L C:5 F:76 CC↑50 D:0 (typescript) - M[src/communication/llm/implementation.ts] 514L C:8 F:53 CC↑12 D:0 (typescript) - M[src/core/text.ts] 491L C:0 F:51 CC↑34 D:0 (typescript) - M[src/graph/linker.ts] 489L C:4 F:72 CC↑18 D:3 (typescript) - LANGS: typescript:138/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 + M[src/core/text.ts] 517L C:0 F:57 CC↑34 D:0 (typescript) + M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python) + M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript) + M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript) + LANGS: typescript:143/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 HOTSPOTS[10]: ★ executeAction fan=65 // Orchestrates 65 calls ★ root fan=64 // Orchestrates 64 calls ★ runPipeline fan=56 // Orchestrates 56 calls - ★ extractTypeScriptFile fan=44 // Orchestrates 44 calls ★ diffUiHtml fan=42 // Orchestrates 42 calls + ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls REFACTOR[15]: - [1] H/L Split extractCommunicationFile (CC=50) - [2] H/L Split extractTypeScriptFile (CC=43) - [3] H/L Split visit (CC=25) - [4] H/L Split diagnoseGraph (CC=40) - [5] H/L Split neighbors (CC=35) + [1] H/L Split executeAction (CC=83) + [2] H/L Split root (CC=83) + [3] H/L Split normalized (CC=30) + [4] H/L Split inferObject (CC=34) + [5] H/L Split diffUiHtml (CC=52) EVOLUTION: - 2026-08-04 CC̄=3.8 crit=279 39601L // Automated analysis + 2026-08-04 CC̄=3.6 crit=256 39185L // Automated analysis diff --git a/project/prompt.txt b/project/prompt.txt index c05f2b1..25bf7fc 100644 --- a/project/prompt.txt +++ b/project/prompt.txt @@ -9,10 +9,10 @@ Files for analysis: Note: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup) - analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB] -- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [146KB] +- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [153KB] - evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB] - project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB] -- context.md (LLM narrative - architecture summary and project context) [35KB] +- context.md (LLM narrative - architecture summary and project context) [34KB] - README.md (Generated documentation - overview and usage guide) [9KB] Task: diff --git a/src/communication/llm/implementation-helpers.ts b/src/communication/llm/implementation-helpers.ts new file mode 100644 index 0000000..5a0a390 --- /dev/null +++ b/src/communication/llm/implementation-helpers.ts @@ -0,0 +1,357 @@ +import { promises as fs } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { createIntentId, sha256, stableStringify } from '../../core/id.js'; +import { pathExists } from '../../core/io.js'; +import { buildRecord, withRecordGeneration } from '../../core/record.js'; +import type { + GroundedGenerationMetadata, + IntentAction, + IntentRecord, + LlmResponseMetadata, + PipelineStageAudit, + T2CConfig, + LlmExtractionMode, +} from '../../core/types.js'; +import { openRouterAuditConfiguration } from '../../llm/audit.js'; +import { structuredSchema as s, type StructuredSchema } from '../../llm/structured-schema.js'; +import { T2C_VERSION } from '../../version.js'; +import type { CommunicationRole, CommunicationExtractionOptions } from '../extractors/communication.js'; + +export const ACTIONS = [ + 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', + 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', +] as const satisfies readonly IntentAction[]; + +export interface RawCommunicationEnrichment { + recordId: string; + action: IntentAction; + object: string; + polarity: 'positive' | 'negative'; + confidence: number; + basis: string[]; + target: { paths: string[]; symbols: string[]; versions: string[] }; + topics: string[]; +} + +export interface RawParticipantSynthesis { + participantKey: string; + summary: string; + commitments: string[]; + risks: string[]; + recordIds: string[]; + confidence: number; +} + +export interface RawCommunicationResponse { + enrichments: RawCommunicationEnrichment[]; + participantSyntheses: RawParticipantSynthesis[]; +} + +export interface ParticipantGroup { + key: string; + participant: string; + role: CommunicationRole; + tickets: string[]; + records: IntentRecord[]; +} + +export interface ParticipantCommunicationSynthesisInput { + schemaVersion: 't2c.participant-synthesis/v1'; + participant: string; + role: CommunicationRole; + tickets: string[]; + summary: string; + commitments: string[]; + risks: string[]; + recordIds: string[]; + confidence: number; + generation: GroundedGenerationMetadata; +} + +export function participantGroups(records: IntentRecord[]): ParticipantGroup[] { + const grouped = new Map(); + for (const record of records) { + const participant = String(record.metadata.participant ?? record.statement.actor ?? `unknown:${record.id}`); + const role = roleOf(record); + const key = stableStringify({ participant, role }); + const values = grouped.get(key); + if (values) values.push(record); + else grouped.set(key, [record]); + } + return [...grouped.values()].map((values, index) => ({ + key: `participant-${index + 1}`, + participant: String(values[0]?.metadata.participant ?? values[0]?.statement.actor ?? 'unknown'), + role: roleOf(values[0]), + tickets: [...new Set(values.flatMap((record) => record.statement.target.tickets))].sort(), + records: [...values].sort((left, right) => left.id.localeCompare(right.id)), + })).sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)) + .map((group, index) => ({ ...group, key: `participant-${index + 1}` })); +} + +export function promptPayload(records: IntentRecord[], groups: ParticipantGroup[]): Record { + return { + records: records.map((record) => ({ + recordId: record.id, + participantKey: groups.find((group) => group.records.some((item) => item.id === record.id))?.key, + text: record.statement.text, + deterministic: { + action: record.statement.action, + object: record.statement.object, + polarity: record.statement.polarity, + paths: record.statement.target.paths, + symbols: record.statement.target.symbols, + versions: record.statement.target.versions, + }, + })), + participants: groups.map((group) => ({ + participantKey: group.key, + recordIds: group.records.map((record) => record.id), + })), + }; +} + +export function validateEnrichments(values: RawCommunicationEnrichment[] | undefined, records: IntentRecord[]): Map { + if (!Array.isArray(values)) throw new Error('Structured response does not contain communication enrichments'); + const expected = new Set(records.map((record) => record.id)); + const output = new Map(); + for (const value of values) { + if (!expected.has(value.recordId)) throw new Error(`Structured response contains unknown recordId: ${value.recordId}`); + if (output.has(value.recordId)) throw new Error(`Structured response duplicates recordId: ${value.recordId}`); + output.set(value.recordId, value); + } + if (output.size !== expected.size) throw new Error(`Structured response returned ${output.size} of ${expected.size} enrichments`); + return output; +} + +export function materializeSyntheses( + values: RawParticipantSynthesis[] | undefined, + groups: ParticipantGroup[], + enrichedByOriginal: Map, + generation: GroundedGenerationMetadata, +): Array<{ + schemaVersion: 't2c.participant-synthesis/v1'; + id: string; + participant: string; + role: CommunicationRole; + tickets: string[]; + summary: string; + commitments: string[]; + risks: string[]; + recordIds: string[]; + confidence: number; + generation: GroundedGenerationMetadata; +}> { + if (!Array.isArray(values)) throw new Error('Structured response does not contain participantSyntheses'); + const byKey = new Map(groups.map((group) => [group.key, group])); + const seen = new Set(); + const output = values.map((raw) => { + const group = byKey.get(raw.participantKey); + if (!group) throw new Error(`Structured response contains unknown participantKey: ${raw.participantKey}`); + if (seen.has(raw.participantKey)) throw new Error(`Structured response duplicates participantKey: ${raw.participantKey}`); + seen.add(raw.participantKey); + const permitted = new Set(group.records.map((record) => record.id)); + if (!raw.recordIds.length || raw.recordIds.some((id) => !permitted.has(id))) { + throw new Error(`Participant synthesis ${raw.participantKey} contains ungrounded recordIds`); + } + const recordIds = raw.recordIds.map((id) => enrichedByOriginal.get(id)?.id) + .filter((id): id is string => Boolean(id)).sort(); + return synthesis({ + participant: group.participant, + role: group.role, + tickets: group.tickets, + summary: raw.summary, + commitments: raw.commitments, + risks: raw.risks, + recordIds, + confidence: raw.confidence, + generation, + }); + }); + if (seen.size !== groups.length) throw new Error(`Structured response returned ${seen.size} of ${groups.length} participant syntheses`); + return output.sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)); +} + +export function enrichRecord( + record: IntentRecord, + enrichment: RawCommunicationEnrichment, + config: T2CConfig, + response: LlmResponseMetadata, +): IntentRecord { + return buildRecord({ + kind: record.statement.kind, + actor: record.statement.actor, + action: enrichment.action, + subject: record.statement.subject, + object: enrichment.object.trim() || record.statement.object, + target: { + paths: [...record.statement.target.paths, ...enrichment.target.paths], + symbols: [...record.statement.target.symbols, ...enrichment.target.symbols], + // Ticket ownership is structural and never accepted from the model. + tickets: record.statement.target.tickets, + versions: [...record.statement.target.versions, ...enrichment.target.versions], + }, + modality: record.statement.modality, + polarity: enrichment.polarity, + text: record.statement.text, + lifecycle: record.lifecycle.status, + sourceKind: record.source.kind, + sourcePath: record.source.path, + sourceLines: record.source.lines, + revision: record.source.revision, + symbol: record.source.symbol, + commitIndex: record.source.commitIndex, + extractor: 't2c/project-communication-openrouter@1', + rawExcerpt: record.source.rawExcerpt, + // A plan/declaration/claim cannot become a fact through model prose. + epistemicClass: record.epistemic.class, + confidence: Math.min(0.85, Math.max(0.05, enrichment.confidence)), + basis: [...record.epistemic.basis, 'openrouter_communication_enrichment', ...enrichment.basis], + observedAt: record.observedAt, + generation: { + requested: 'llm', used: 'llm', provider: response.provider ?? 'openrouter', + model: response.model ?? config.openRouter.communicationModel, responseId: response.responseId, + }, + metadata: { + ...record.metadata, + llmUsed: true, + topics: sortedUnique(enrichment.topics), + response, + }, + }); +} + +export function deterministicSyntheses(records: IntentRecord[], generation: GroundedGenerationMetadata) { + return participantGroups(records).map((group) => synthesis({ + participant: group.participant, + role: group.role, + tickets: group.tickets, + summary: `${group.participant} (${group.role}) ma ${group.records.length} uziemionych rekordów komunikacji.`, + commitments: group.records.filter((record) => record.epistemic.class === 'plan') + .map((record) => record.statement.text), + risks: group.records.filter((record) => record.statement.polarity === 'negative') + .map((record) => record.statement.text), + recordIds: group.records.map((record) => record.id).sort(), + confidence: 1, + generation, + })); +} + +export function markDeterministic(records: IntentRecord[], degraded: boolean, fallbackReason: string | null): IntentRecord[] { + return records.map((record) => { + const marked = withRecordGeneration(record, { + requested: degraded ? 'llm' : 'deterministic', used: 'deterministic', degraded, fallbackReason, + }); + return { ...marked, metadata: { ...marked.metadata, llmUsed: false } }; + }); +} + +export function deterministicGeneration(): GroundedGenerationMetadata { + return { + generator: 't2c/participant-synthesis', generatorVersion: '1', + runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), + requestedMode: 'deterministic', effectiveMode: 'deterministic', degraded: false, + model: null, provider: null, responseId: null, + configurationFingerprint: sha256('t2c-communication-deterministic/v1'), reason: null, + }; +} + +export function fallbackGeneration(reason: string): GroundedGenerationMetadata { + return { + generator: 't2c/participant-synthesis', generatorVersion: '1', + runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), + requestedMode: 'prefer-llm', effectiveMode: 'deterministic', degraded: true, + model: null, provider: null, responseId: null, + configurationFingerprint: sha256(stableStringify({ stage: 'communication', reason })), reason, + }; +} + +export function llmGeneration(config: T2CConfig, mode: LlmExtractionMode, response: LlmResponseMetadata): GroundedGenerationMetadata { + return { + generator: 't2c/participant-synthesis', generatorVersion: '1', + runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), + requestedMode: mode, effectiveMode: 'llm', degraded: false, + model: response.model ?? config.openRouter.communicationModel, + provider: response.provider ?? 'openrouter', responseId: response.responseId, + configurationFingerprint: sha256(stableStringify(openRouterAuditConfiguration(config, config.openRouter.communicationModel))), + reason: null, + }; +} + +export function audit( + status: PipelineStageAudit['status'], requestedMode: PipelineStageAudit['requestedMode'], + effectiveMode: PipelineStageAudit['effectiveMode'], degraded: boolean, recordCount: number, + warningCount: number, model: string | null, reason: PipelineStageAudit['reason'], durationMs: number, + responses: LlmResponseMetadata[], config: T2CConfig, options: CommunicationExtractionOptions, +): PipelineStageAudit { + return { + runtimeVersion: T2C_VERSION, + configuration: { + ...openRouterAuditConfiguration(config, model), + projectDirectory: options.projectDir ?? 'project', + ticket: options.ticket ?? null, + }, + status, requestedMode, effectiveMode, degraded, recordCount, warningCount, + model, durationMs, reason, responses, + }; +} + +export async function readPrompt(): Promise { + const promptPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../prompts', 'communication-to-intent.system.md'); + if (!(await pathExists(promptPath))) throw new Error(`Prompt not found: ${promptPath}`); + return fs.readFile(promptPath, 'utf8'); +} + +function synthesis(input: Omit): ParticipantCommunicationSynthesisInput & { id: string } { + const semantic = { + participant: input.participant, + role: input.role, + tickets: sortedUnique(input.tickets), + summary: input.summary.trim(), + commitments: sortedUnique(input.commitments), + risks: sortedUnique(input.risks), + recordIds: sortedUnique(input.recordIds), + }; + if (!semantic.summary || !semantic.recordIds.length) throw new Error('Participant synthesis requires a summary and record citations'); + return { + schemaVersion: 't2c.participant-synthesis/v1', + id: createIntentId(semantic, 'COMM-SYN'), + ...semantic, + confidence: Math.min(1, Math.max(0, input.confidence)), + generation: input.generation, + }; +} + +function sortedUnique(values: string[]): string[] { + return [...new Set(values.map((value) => value.trim()).filter(Boolean))].sort(); +} + +function roleOf(record: IntentRecord | undefined): CommunicationRole { + return record?.metadata.participantRole === 'human' || record?.metadata.participantRole === 'agent' + ? record.metadata.participantRole + : 'unknown'; +} + +const communicationStrings = () => s.array(s.string()); +const COMMUNICATION_ENRICHMENT_CONTRACT = s.object({ + recordId: s.string(), + action: s.enum(ACTIONS), + object: s.string(), + polarity: s.enum(['positive', 'negative']), + confidence: s.number({ minimum: 0, maximum: 0.85 }), + basis: communicationStrings(), + target: s.object({ paths: communicationStrings(), symbols: communicationStrings(), versions: communicationStrings() }), + topics: communicationStrings(), +}) satisfies StructuredSchema; +const PARTICIPANT_SYNTHESIS_CONTRACT = s.object({ + participantKey: s.string(), + summary: s.string({ minLength: 1, pattern: '.*\\S.*' }), + commitments: communicationStrings(), + risks: communicationStrings(), + recordIds: communicationStrings(), + confidence: s.number({ minimum: 0, maximum: 0.85 }), +}) satisfies StructuredSchema; +export const COMMUNICATION_RESPONSE_CONTRACT = s.object({ + enrichments: s.array(COMMUNICATION_ENRICHMENT_CONTRACT), + participantSyntheses: s.array(PARTICIPANT_SYNTHESIS_CONTRACT), +}) satisfies StructuredSchema; diff --git a/src/communication/llm/implementation.ts b/src/communication/llm/implementation.ts index 0e1778e..be6e7db 100644 --- a/src/communication/llm/implementation.ts +++ b/src/communication/llm/implementation.ts @@ -1,59 +1,36 @@ -import { promises as fs } from 'node:fs'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; import type { T2CConfig } from '../../config/env.js'; -import { createIntentId, sha256, stableStringify } from '../../core/id.js'; -import { pathExists } from '../../core/io.js'; -import { buildRecord, withRecordGeneration } from '../../core/record.js'; import type { GroundedGenerationMetadata, - IntentAction, IntentRecord, LlmExtractionMode, LlmResponseMetadata, PipelineStageAudit, } from '../../core/types.js'; import { classifyLlmFailure, rejectedLlmResponseMetadata, type LlmFailureReason } from '../../llm/failure.js'; -import { openRouterAuditConfiguration } from '../../llm/audit.js'; import { OpenRouterClient, type OpenRouterResult } from '../../llm/openrouter.js'; -import { StructuredResponseError, structuredSchema as s, type StructuredSchema } from '../../llm/structured-schema.js'; -import { T2C_VERSION } from '../../version.js'; +import { StructuredResponseError } from '../../llm/structured-schema.js'; +import { + audit, + deterministicGeneration, + deterministicSyntheses, + enrichRecord, + fallbackGeneration, + llmGeneration, + markDeterministic, + materializeSyntheses, + participantGroups, + promptPayload, + readPrompt, + type RawCommunicationResponse, + validateEnrichments, + COMMUNICATION_RESPONSE_CONTRACT, +} from './implementation-helpers.js'; import { extractCommunicationIntent, type CommunicationExtractionOptions, type CommunicationRole, } from '../extractors/communication.js'; -const ACTIONS = [ - 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', - 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', -] as const satisfies readonly IntentAction[]; - -interface RawCommunicationEnrichment { - recordId: string; - action: IntentAction; - object: string; - polarity: 'positive' | 'negative'; - confidence: number; - basis: string[]; - target: { paths: string[]; symbols: string[]; versions: string[] }; - topics: string[]; -} - -interface RawParticipantSynthesis { - participantKey: string; - summary: string; - commitments: string[]; - risks: string[]; - recordIds: string[]; - confidence: number; -} - -interface RawCommunicationResponse { - enrichments: RawCommunicationEnrichment[]; - participantSyntheses: RawParticipantSynthesis[]; -} - export interface ParticipantCommunicationSynthesis { schemaVersion: 't2c.participant-synthesis/v1'; id: string; @@ -229,286 +206,3 @@ async function fallbackOrThrow( config.openRouter.communicationModel, reason, Date.now() - startedAt, responses, config, options), }; } - -interface ParticipantGroup { - key: string; - participant: string; - role: CommunicationRole; - tickets: string[]; - records: IntentRecord[]; -} - -function participantGroups(records: IntentRecord[]): ParticipantGroup[] { - const grouped = new Map(); - for (const record of records) { - const participant = String(record.metadata.participant ?? record.statement.actor ?? `unknown:${record.id}`); - const role = roleOf(record); - const key = stableStringify({ participant, role }); - const values = grouped.get(key); - if (values) values.push(record); - else grouped.set(key, [record]); - } - return [...grouped.values()].map((values, index) => ({ - key: `participant-${index + 1}`, - participant: String(values[0]?.metadata.participant ?? values[0]?.statement.actor ?? 'unknown'), - role: roleOf(values[0]), - tickets: [...new Set(values.flatMap((record) => record.statement.target.tickets))].sort(), - records: [...values].sort((left, right) => left.id.localeCompare(right.id)), - })).sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)) - .map((group, index) => ({ ...group, key: `participant-${index + 1}` })); -} - -function promptPayload(records: IntentRecord[], groups: ParticipantGroup[]): Record { - return { - records: records.map((record) => ({ - recordId: record.id, - participantKey: groups.find((group) => group.records.some((item) => item.id === record.id))?.key, - text: record.statement.text, - deterministic: { - action: record.statement.action, - object: record.statement.object, - polarity: record.statement.polarity, - paths: record.statement.target.paths, - symbols: record.statement.target.symbols, - versions: record.statement.target.versions, - }, - })), - participants: groups.map((group) => ({ - participantKey: group.key, - recordIds: group.records.map((record) => record.id), - })), - }; -} - -function validateEnrichments(values: RawCommunicationEnrichment[] | undefined, records: IntentRecord[]): Map { - if (!Array.isArray(values)) throw new Error('Structured response does not contain communication enrichments'); - const expected = new Set(records.map((record) => record.id)); - const output = new Map(); - for (const value of values) { - if (!expected.has(value.recordId)) throw new Error(`Structured response contains unknown recordId: ${value.recordId}`); - if (output.has(value.recordId)) throw new Error(`Structured response duplicates recordId: ${value.recordId}`); - output.set(value.recordId, value); - } - if (output.size !== expected.size) throw new Error(`Structured response returned ${output.size} of ${expected.size} enrichments`); - return output; -} - -function materializeSyntheses( - values: RawParticipantSynthesis[] | undefined, - groups: ParticipantGroup[], - enrichedByOriginal: Map, - generation: GroundedGenerationMetadata, -): ParticipantCommunicationSynthesis[] { - if (!Array.isArray(values)) throw new Error('Structured response does not contain participantSyntheses'); - const byKey = new Map(groups.map((group) => [group.key, group])); - const seen = new Set(); - const output = values.map((raw) => { - const group = byKey.get(raw.participantKey); - if (!group) throw new Error(`Structured response contains unknown participantKey: ${raw.participantKey}`); - if (seen.has(raw.participantKey)) throw new Error(`Structured response duplicates participantKey: ${raw.participantKey}`); - seen.add(raw.participantKey); - const permitted = new Set(group.records.map((record) => record.id)); - if (!raw.recordIds.length || raw.recordIds.some((id) => !permitted.has(id))) { - throw new Error(`Participant synthesis ${raw.participantKey} contains ungrounded recordIds`); - } - const recordIds = raw.recordIds.map((id) => enrichedByOriginal.get(id)?.id) - .filter((id): id is string => Boolean(id)).sort(); - return synthesis({ - participant: group.participant, - role: group.role, - tickets: group.tickets, - summary: raw.summary, - commitments: raw.commitments, - risks: raw.risks, - recordIds, - confidence: raw.confidence, - generation, - }); - }); - if (seen.size !== groups.length) throw new Error(`Structured response returned ${seen.size} of ${groups.length} participant syntheses`); - return output.sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)); -} - -function enrichRecord( - record: IntentRecord, - enrichment: RawCommunicationEnrichment, - config: T2CConfig, - response: LlmResponseMetadata, -): IntentRecord { - return buildRecord({ - kind: record.statement.kind, - actor: record.statement.actor, - action: enrichment.action, - subject: record.statement.subject, - object: enrichment.object.trim() || record.statement.object, - target: { - paths: [...record.statement.target.paths, ...enrichment.target.paths], - symbols: [...record.statement.target.symbols, ...enrichment.target.symbols], - // Ticket ownership is structural and never accepted from the model. - tickets: record.statement.target.tickets, - versions: [...record.statement.target.versions, ...enrichment.target.versions], - }, - modality: record.statement.modality, - polarity: enrichment.polarity, - text: record.statement.text, - lifecycle: record.lifecycle.status, - sourceKind: record.source.kind, - sourcePath: record.source.path, - sourceLines: record.source.lines, - revision: record.source.revision, - symbol: record.source.symbol, - commitIndex: record.source.commitIndex, - extractor: 't2c/project-communication-openrouter@1', - rawExcerpt: record.source.rawExcerpt, - // A plan/declaration/claim cannot become a fact through model prose. - epistemicClass: record.epistemic.class, - confidence: Math.min(0.85, Math.max(0.05, enrichment.confidence)), - basis: [...record.epistemic.basis, 'openrouter_communication_enrichment', ...enrichment.basis], - observedAt: record.observedAt, - generation: { - requested: 'llm', used: 'llm', provider: response.provider ?? 'openrouter', - model: response.model ?? config.openRouter.communicationModel, responseId: response.responseId, - }, - metadata: { - ...record.metadata, - llmUsed: true, - topics: sortedUnique(enrichment.topics), - response, - }, - }); -} - -function deterministicSyntheses(records: IntentRecord[], generation: GroundedGenerationMetadata): ParticipantCommunicationSynthesis[] { - return participantGroups(records).map((group) => synthesis({ - participant: group.participant, - role: group.role, - tickets: group.tickets, - summary: `${group.participant} (${group.role}) ma ${group.records.length} uziemionych rekordów komunikacji.`, - commitments: group.records.filter((record) => record.epistemic.class === 'plan') - .map((record) => record.statement.text), - risks: group.records.filter((record) => record.statement.polarity === 'negative') - .map((record) => record.statement.text), - recordIds: group.records.map((record) => record.id).sort(), - confidence: 1, - generation, - })); -} - -function synthesis(input: Omit): ParticipantCommunicationSynthesis { - const semantic = { - participant: input.participant, - role: input.role, - tickets: sortedUnique(input.tickets), - summary: input.summary.trim(), - commitments: sortedUnique(input.commitments), - risks: sortedUnique(input.risks), - recordIds: sortedUnique(input.recordIds), - }; - if (!semantic.summary || !semantic.recordIds.length) throw new Error('Participant synthesis requires a summary and record citations'); - return { - schemaVersion: 't2c.participant-synthesis/v1', - id: createIntentId(semantic, 'COMM-SYN'), - ...semantic, - confidence: Math.min(1, Math.max(0, input.confidence)), - generation: input.generation, - }; -} - -function markDeterministic(records: IntentRecord[], degraded: boolean, fallbackReason: string | null): IntentRecord[] { - return records.map((record) => { - const marked = withRecordGeneration(record, { - requested: degraded ? 'llm' : 'deterministic', used: 'deterministic', degraded, fallbackReason, - }); - return { ...marked, metadata: { ...marked.metadata, llmUsed: false } }; - }); -} - -function deterministicGeneration(): GroundedGenerationMetadata { - return { - generator: 't2c/participant-synthesis', generatorVersion: '1', - runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), - requestedMode: 'deterministic', effectiveMode: 'deterministic', degraded: false, - model: null, provider: null, responseId: null, - configurationFingerprint: sha256('t2c-communication-deterministic/v1'), reason: null, - }; -} - -function fallbackGeneration(reason: string): GroundedGenerationMetadata { - return { - generator: 't2c/participant-synthesis', generatorVersion: '1', - runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), - requestedMode: 'prefer-llm', effectiveMode: 'deterministic', degraded: true, - model: null, provider: null, responseId: null, - configurationFingerprint: sha256(stableStringify({ stage: 'communication', reason })), reason, - }; -} - -function llmGeneration(config: T2CConfig, mode: LlmExtractionMode, response: LlmResponseMetadata): GroundedGenerationMetadata { - return { - generator: 't2c/participant-synthesis', generatorVersion: '1', - runtimeVersion: T2C_VERSION, generatedAt: new Date().toISOString(), - requestedMode: mode, effectiveMode: 'llm', degraded: false, - model: response.model ?? config.openRouter.communicationModel, - provider: response.provider ?? 'openrouter', responseId: response.responseId, - configurationFingerprint: sha256(stableStringify(openRouterAuditConfiguration(config, config.openRouter.communicationModel))), - reason: null, - }; -} - -function audit( - status: PipelineStageAudit['status'], requestedMode: PipelineStageAudit['requestedMode'], - effectiveMode: PipelineStageAudit['effectiveMode'], degraded: boolean, recordCount: number, - warningCount: number, model: string | null, reason: PipelineStageAudit['reason'], durationMs: number, - responses: LlmResponseMetadata[], config: T2CConfig, options: CommunicationExtractionOptions, -): PipelineStageAudit { - return { - runtimeVersion: T2C_VERSION, - configuration: { - ...openRouterAuditConfiguration(config, model), - projectDirectory: options.projectDir ?? 'project', - ticket: options.ticket ?? null, - }, - status, requestedMode, effectiveMode, degraded, recordCount, warningCount, - model, durationMs, reason, responses, - }; -} - -function roleOf(record: IntentRecord | undefined): CommunicationRole { - return record?.metadata.participantRole === 'human' || record?.metadata.participantRole === 'agent' - ? record.metadata.participantRole - : 'unknown'; -} - -function sortedUnique(values: string[]): string[] { - return [...new Set(values.map((value) => value.trim()).filter(Boolean))].sort(); -} - -async function readPrompt(): Promise { - const promptPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../prompts', 'communication-to-intent.system.md'); - if (!(await pathExists(promptPath))) throw new Error(`Prompt not found: ${promptPath}`); - return fs.readFile(promptPath, 'utf8'); -} - -const communicationStrings = () => s.array(s.string()); -const COMMUNICATION_ENRICHMENT_CONTRACT = s.object({ - recordId: s.string(), - action: s.enum(ACTIONS), - object: s.string(), - polarity: s.enum(['positive', 'negative']), - confidence: s.number({ minimum: 0, maximum: 0.85 }), - basis: communicationStrings(), - target: s.object({ paths: communicationStrings(), symbols: communicationStrings(), versions: communicationStrings() }), - topics: communicationStrings(), -}) satisfies StructuredSchema; -const PARTICIPANT_SYNTHESIS_CONTRACT = s.object({ - participantKey: s.string(), - summary: s.string({ minLength: 1, pattern: '.*\\S.*' }), - commitments: communicationStrings(), - risks: communicationStrings(), - recordIds: communicationStrings(), - confidence: s.number({ minimum: 0, maximum: 0.85 }), -}) satisfies StructuredSchema; -const COMMUNICATION_RESPONSE_CONTRACT = s.object({ - enrichments: s.array(COMMUNICATION_ENRICHMENT_CONTRACT), - participantSyntheses: s.array(PARTICIPANT_SYNTHESIS_CONTRACT), -}) satisfies StructuredSchema; diff --git a/src/core/io.ts b/src/core/io.ts index 927b304..597abff 100644 --- a/src/core/io.ts +++ b/src/core/io.ts @@ -85,33 +85,67 @@ export interface WalkOptions { } export async function walkFiles(root: string, options: WalkOptions = {}): Promise { - const ignored = new Set([...DEFAULT_IGNORED_DIRS, ...(options.ignoredDirs ?? [])]); - const extensions = options.extensions ? new Set(options.extensions.map((value) => value.toLowerCase())) : null; - const maxFiles = options.maxFiles ?? 20_000; - const matcher = options.matcher; - const base = path.resolve(root); - const output: string[] = []; - - async function visit(directory: string): Promise { - const entries = await fs.readdir(directory, { withFileTypes: true }); - entries.sort((a, b) => a.name.localeCompare(b.name)); - for (const entry of entries) { - if (output.length >= maxFiles) throw new Error(`File limit exceeded (${maxFiles}) under ${root}`); - const absolute = path.join(directory, entry.name); - if (entry.isSymbolicLink()) continue; - const relative = relativePosix(base, absolute); - if (matcher?.ignores(relative, entry.isDirectory())) continue; - if (entry.isDirectory()) { - if (!ignored.has(entry.name)) await visit(absolute); - } else if (entry.isFile()) { - const extension = path.extname(entry.name).toLowerCase(); - if (!extensions || extensions.has(extension)) output.push(absolute); - } - } + const state = createWalkState(root, options); + if (await pathExists(root)) await walkDirectory(state.base, state); + return state.output; +} + +interface WalkState { + base: string; + root: string; + output: string[]; + maxFiles: number; + extensions: Set | null; + ignored: Set; + matcher?: { ignores(relativePath: string, isDirectory?: boolean): boolean }; +} + +function createWalkState(root: string, options: WalkOptions): WalkState { + return { + base: path.resolve(root), + root, + output: [], + maxFiles: options.maxFiles ?? 20_000, + extensions: options.extensions ? new Set(options.extensions.map((value) => value.toLowerCase())) : null, + ignored: new Set([...DEFAULT_IGNORED_DIRS, ...(options.ignoredDirs ?? [])]), + matcher: options.matcher, + }; +} + +async function walkDirectory(directory: string, state: WalkState): Promise { + const entries = await fs.readdir(directory, { withFileTypes: true }); + entries.sort((a, b) => a.name.localeCompare(b.name)); + for (const entry of entries) { + if (entry.isSymbolicLink()) continue; + await walkEntry(directory, entry, state); } +} + +async function walkEntry( + directory: string, + entry: { isDirectory(): boolean; isFile(): boolean; name: string }, + state: WalkState, +): Promise { + if (state.output.length >= state.maxFiles) { + throw new Error(`File limit exceeded (${state.maxFiles}) under ${state.root}`); + } + const absolute = path.join(directory, entry.name); + const relative = relativePosix(state.base, absolute); + if (state.matcher?.ignores(relative, entry.isDirectory())) return; + + if (entry.isDirectory()) { + if (!state.ignored.has(entry.name)) await walkDirectory(absolute, state); + return; + } + + if (entry.isFile() && isTargetFile(entry.name, state.extensions)) { + state.output.push(absolute); + } +} - if (await pathExists(root)) await visit(base); - return output; +function isTargetFile(name: string, extensions: Set | null): boolean { + if (!extensions) return true; + return extensions.has(path.extname(name).toLowerCase()); } function escapeRegex(value: string): string { diff --git a/src/core/record.ts b/src/core/record.ts index 4e989de..0f9d6dd 100644 --- a/src/core/record.ts +++ b/src/core/record.ts @@ -57,7 +57,24 @@ export interface BuildRecordInput { export function buildRecord(input: BuildRecordInput): IntentRecord { const target: IntentTarget = normalizeTarget(input.target); const rawExcerpt = input.rawExcerpt ?? input.text; - const seed = { + const seed = buildRecordSeed(input, target, rawExcerpt); + return { + schemaVersion: 't2c.intent/v1', + id: createIntentId(seed, input.prefix ?? sourcePrefix(input.sourceKind)), + statement: buildRecordStatement(input, target), + lifecycle: { status: input.lifecycle }, + source: buildRecordSource(input, rawExcerpt), + epistemic: buildRecordEpistemic(input), + observedAt: input.observedAt ?? null, + metadata: { + ...(input.metadata ?? {}), + generation: generationMetadata(input.extractor, input.generation), + }, + }; +} + +function buildRecordSeed(input: BuildRecordInput, target: IntentTarget, rawExcerpt: string): Omit { + return { kind: input.kind, action: input.action, object: input.object, @@ -69,42 +86,41 @@ export function buildRecord(input: BuildRecordInput): IntentRecord { symbol: input.symbol ?? null, rawExcerpt, }; +} + +function buildRecordStatement(input: BuildRecordInput, target: IntentTarget): IntentRecord['statement'] { return { - schemaVersion: 't2c.intent/v1', - id: createIntentId(seed, input.prefix ?? sourcePrefix(input.sourceKind)), - statement: { - kind: input.kind, - actor: input.actor ?? null, - action: input.action, - subject: input.subject ?? null, - object: input.object, - target, - modality: input.modality ?? 'unknown', - polarity: input.polarity ?? 'positive', - text: input.text, - }, - lifecycle: { status: input.lifecycle }, - source: { - kind: input.sourceKind, - path: input.sourcePath ?? null, - lines: input.sourceLines ?? null, - revision: input.revision ?? null, - symbol: input.symbol ?? null, - commitIndex: input.commitIndex ?? null, - extractor: input.extractor, - contentHash: sha256(rawExcerpt), - rawExcerpt, - }, - epistemic: { - class: input.epistemicClass, - confidence: clamp(input.confidence), - basis: [...new Set(input.basis)].sort(), - }, - observedAt: input.observedAt ?? null, - metadata: { - ...(input.metadata ?? {}), - generation: generationMetadata(input.extractor, input.generation), - }, + kind: input.kind, + actor: input.actor ?? null, + action: input.action, + subject: input.subject ?? null, + object: input.object, + target, + modality: input.modality ?? 'unknown', + polarity: input.polarity ?? 'positive', + text: input.text, + }; +} + +function buildRecordSource(input: BuildRecordInput, rawExcerpt: string): IntentRecord['source'] { + return { + kind: input.sourceKind, + path: input.sourcePath ?? null, + lines: input.sourceLines ?? null, + revision: input.revision ?? null, + symbol: input.symbol ?? null, + commitIndex: input.commitIndex ?? null, + extractor: input.extractor, + contentHash: sha256(rawExcerpt), + rawExcerpt, + }; +} + +function buildRecordEpistemic(input: BuildRecordInput): IntentRecord['epistemic'] { + return { + class: input.epistemicClass, + confidence: clamp(input.confidence), + basis: [...new Set(input.basis)].sort(), }; } @@ -126,14 +142,11 @@ function generationMetadata( extractor: string, input: BuildRecordGenerationInput | undefined, ): IntentGenerationMetadata { - const { generator, generatorVersion } = extractorIdentity(extractor); - const used = input?.used ?? 'deterministic'; return { - generator, - generatorVersion, + ...generationIdentity(extractor), runtimeVersion: T2C_VERSION, - requested: input?.requested ?? used, - used, + requested: input?.requested ?? (input?.used ?? 'deterministic'), + used: input?.used ?? 'deterministic', degraded: input?.degraded ?? false, fallbackReason: input?.fallbackReason ?? null, provider: input?.provider ?? null, @@ -142,13 +155,11 @@ function generationMetadata( }; } -function extractorIdentity(extractor: string): { generator: string; generatorVersion: string } { +function generationIdentity(extractor: string): { generator: string; generatorVersion: string } { const separator = extractor.lastIndexOf('@'); if (separator > 0 && separator < extractor.length - 1) { return { generator: extractor.slice(0, separator), generatorVersion: extractor.slice(separator + 1) }; } - // External/test builders that still supply an unversioned name are tied to - // the runtime implementation that materialized the record. return { generator: extractor, generatorVersion: T2C_VERSION }; } diff --git a/src/core/schema/intent.ts b/src/core/schema/intent.ts index 481c355..e0389ba 100644 --- a/src/core/schema/intent.ts +++ b/src/core/schema/intent.ts @@ -69,67 +69,97 @@ export function assertIntentRecord(value: unknown): asserts value is IntentRecor exactKeys(record, ['schemaVersion', 'id', 'statement', 'lifecycle', 'source', 'epistemic', 'observedAt', 'metadata'], 'Intent record'); if (record.schemaVersion !== 't2c.intent/v1') throw new Error('Unsupported intent schemaVersion'); if (typeof record.id !== 'string' || !RECORD_ID.test(record.id)) throw new Error('Intent record id must match INT--<20 hex>'); + const statement = assertIntentStatement(record); + const lifecycle = assertIntentLifecycle(record); + const source = assertIntentSource(record); + const epistemic = assertIntentEpistemic(record); + const metadata = objectValue(record.metadata, `Intent ${record.id}: metadata`); + assertIntentMetadata(record, metadata, source.extractor, epistemic.class); +} - const statement = objectValue(record.statement, `Intent ${record.id}: statement`); - exactKeys(statement, ['kind', 'actor', 'action', 'subject', 'object', 'target', 'modality', 'polarity', 'text'], `Intent ${record.id}: statement`); - nonEmptyString(statement.kind, `Intent ${record.id}: statement.kind`); - nullableString(statement.actor, `Intent ${record.id}: statement.actor`); - enumValue(statement.action, ACTIONS, `Intent ${record.id}: statement.action`); +function assertIntentStatement(record: Record): IntentRecord['statement'] { + const statement = objectValue(record.statement, `Intent ${(record.id as string ?? 'unknown')}: statement`); + exactKeys(statement, ['kind', 'actor', 'action', 'subject', 'object', 'target', 'modality', 'polarity', 'text'], `Intent ${(record.id as string ?? 'unknown')}: statement`); + nonEmptyString(statement.kind, `Intent ${(record.id as string ?? 'unknown')}: statement.kind`); + nullableString(statement.actor, `Intent ${(record.id as string ?? 'unknown')}: statement.actor`); + enumValue(statement.action, ACTIONS, `Intent ${(record.id as string ?? 'unknown')}: statement.action`); nullableString(statement.subject, `Intent ${record.id}: statement.subject`); nonEmptyString(statement.object, `Intent ${record.id}: statement.object`); if (typeof statement.text !== 'string') throw new Error(`Intent ${record.id}: statement.text must be a string`); enumValue(statement.modality, MODALITIES, `Intent ${record.id}: statement.modality`); enumValue(statement.polarity, POLARITIES, `Intent ${record.id}: statement.polarity`); + statement.target = assertIntentTarget(record.id, statement.target); + return statement; +} - const target = objectValue(statement.target, `Intent ${record.id}: statement.target`); - exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `Intent ${record.id}: statement.target`); +function assertIntentTarget(recordId: string, targetValue: unknown): IntentRecord['statement']['target'] { + const target = objectValue(targetValue, `Intent ${recordId}: statement.target`); + exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `Intent ${recordId}: statement.target`); for (const key of ['paths', 'symbols', 'tickets', 'versions'] as const) { - stringArray(target[key], `Intent ${record.id}: statement.target.${key}`, true); + stringArray(target[key], `Intent ${recordId}: statement.target.${key}`, true); } + return target; +} - const lifecycle = objectValue(record.lifecycle, `Intent ${record.id}: lifecycle`); - exactKeys(lifecycle, ['status'], `Intent ${record.id}: lifecycle`); - enumValue(lifecycle.status, LIFECYCLES, `Intent ${record.id}: lifecycle.status`); +function assertIntentLifecycle(record: Record): IntentRecord['lifecycle'] { + const lifecycle = objectValue(record.lifecycle, `Intent ${record.id as string}: lifecycle`); + exactKeys(lifecycle, ['status'], `Intent ${record.id as string}: lifecycle`); + enumValue(lifecycle.status, LIFECYCLES, `Intent ${record.id as string}: lifecycle.status`); + return lifecycle; +} - const source = objectValue(record.source, `Intent ${record.id}: source`); - exactKeys(source, ['kind', 'path', 'lines', 'revision', 'symbol', 'commitIndex', 'extractor', 'contentHash', 'rawExcerpt'], `Intent ${record.id}: source`); - enumValue(source.kind, SOURCE_KINDS, `Intent ${record.id}: source.kind`); - nullableString(source.path, `Intent ${record.id}: source.path`); - nullableString(source.revision, `Intent ${record.id}: source.revision`); - nullableString(source.symbol, `Intent ${record.id}: source.symbol`); - nullableString(source.rawExcerpt, `Intent ${record.id}: source.rawExcerpt`); - nonEmptyString(source.extractor, `Intent ${record.id}: source.extractor`); +function assertIntentSource(record: Record): IntentRecord['source'] { + const source = objectValue(record.source, `Intent ${record.id as string}: source`); + exactKeys(source, ['kind', 'path', 'lines', 'revision', 'symbol', 'commitIndex', 'extractor', 'contentHash', 'rawExcerpt'], `Intent ${record.id as string}: source`); + enumValue(source.kind, SOURCE_KINDS, `Intent ${record.id as string}: source.kind`); + nullableString(source.path, `Intent ${record.id as string}: source.path`); + nullableString(source.revision, `Intent ${record.id as string}: source.revision`); + nullableString(source.symbol, `Intent ${record.id as string}: source.symbol`); + nullableString(source.rawExcerpt, `Intent ${record.id as string}: source.rawExcerpt`); + nonEmptyString(source.extractor, `Intent ${record.id as string}: source.extractor`); if (typeof source.contentHash !== 'string' || !FINGERPRINT.test(source.contentHash)) { - throw new Error(`Intent ${record.id}: source.contentHash must be SHA-256`); + throw new Error(`Intent ${record.id as string}: source.contentHash must be SHA-256`); } if (source.commitIndex !== null && (!Number.isInteger(source.commitIndex) || (source.commitIndex as number) < 1)) { - throw new Error(`Intent ${record.id}: source.commitIndex must be null or an integer >= 1`); + throw new Error(`Intent ${record.id as string}: source.commitIndex must be null or an integer >= 1`); } if (source.lines !== null) { - const lines = objectValue(source.lines, `Intent ${record.id}: source.lines`); - exactKeys(lines, ['start', 'end'], `Intent ${record.id}: source.lines`); - if (!Number.isInteger(lines.start) || (lines.start as number) < 1 || !Number.isInteger(lines.end) || (lines.end as number) < (lines.start as number)) { - throw new Error(`Intent ${record.id}: source.lines must be positive and end >= start`); + const lines = objectValue(source.lines, `Intent ${record.id as string}: source.lines`); + exactKeys(lines, ['start', 'end'], `Intent ${record.id as string}: source.lines`); + if (!Number.isInteger(lines.start) || (lines.start as number) < 1 + || !Number.isInteger(lines.end) || (lines.end as number) < (lines.start as number)) { + throw new Error(`Intent ${record.id as string}: source.lines must be positive and end >= start`); } } + return source; +} - const epistemic = objectValue(record.epistemic, `Intent ${record.id}: epistemic`); - exactKeys(epistemic, ['class', 'confidence', 'basis'], `Intent ${record.id}: epistemic`); - enumValue(epistemic.class, EPISTEMIC_CLASSES, `Intent ${record.id}: epistemic.class`); +function assertIntentEpistemic(record: Record): IntentRecord['epistemic'] { + const epistemic = objectValue(record.epistemic, `Intent ${record.id as string}: epistemic`); + exactKeys(epistemic, ['class', 'confidence', 'basis'], `Intent ${record.id as string}: epistemic`); + enumValue(epistemic.class, EPISTEMIC_CLASSES, `Intent ${record.id as string}: epistemic.class`); if (typeof epistemic.confidence !== 'number' || !Number.isFinite(epistemic.confidence) || epistemic.confidence < 0 || epistemic.confidence > 1) { - throw new Error(`Intent ${record.id}: epistemic.confidence must be between 0 and 1`); + throw new Error(`Intent ${record.id as string}: epistemic.confidence must be between 0 and 1`); } - stringArray(epistemic.basis, `Intent ${record.id}: epistemic.basis`, true); - nullableDate(record.observedAt, `Intent ${record.id}: observedAt`); + stringArray(epistemic.basis, `Intent ${record.id as string}: epistemic.basis`, true); + return epistemic; +} - const metadata = objectValue(record.metadata, `Intent ${record.id}: metadata`); - if (!isJsonValue(metadata)) throw new Error(`Intent ${record.id}: metadata must contain JSON values only`); - assertIntentGenerationMetadata(metadata.generation, `Intent ${record.id}: metadata.generation`); - assertGenerationMatchesExtractor(metadata.generation, source.extractor as string, `Intent ${record.id}: metadata.generation`); - if (epistemic.class === 'llm_inference' - && (metadata.generation as { used: unknown }).used !== 'llm') { - throw new Error(`Intent ${record.id}: llm_inference requires metadata.generation.used=llm`); +function assertIntentMetadata( + record: Record, + metadata: unknown, + sourceExtractor: string, + epistemicClass: string, +): void { + if (!isJsonValue(metadata)) throw new Error(`Intent ${record.id as string}: metadata must contain JSON values only`); + const typedMetadata = metadata as Record; + const generation = objectValue(typedMetadata.generation, `Intent ${record.id as string}: metadata.generation`); + assertIntentGenerationMetadata(generation, `Intent ${record.id as string}: metadata.generation`); + assertGenerationMatchesExtractor(generation, sourceExtractor, `Intent ${record.id as string}: metadata.generation`); + nullableDate((record as { observedAt?: unknown }).observedAt, `Intent ${record.id as string}: observedAt`); + if (epistemicClass === 'llm_inference' && (generation as { used?: unknown }).used !== 'llm') { + throw new Error(`Intent ${record.id as string}: llm_inference requires metadata.generation.used=llm`); } } diff --git a/src/core/schema/utils.ts b/src/core/schema/utils.ts index 1195bc0..555e9ff 100644 --- a/src/core/schema/utils.ts +++ b/src/core/schema/utils.ts @@ -188,32 +188,52 @@ export function assertGroundedGenerationMetadata( fingerprint(generation.configurationFingerprint, `${name}.configurationFingerprint`); nullableString(generation.reason, `${name}.reason`); - if (generation.effectiveMode === 'llm') { - nonBlankString(generation.model, `${name}.model`); - nonBlankString(generation.provider, `${name}.provider`); - if (generation.degraded) throw new Error(`${name}.degraded must be false when effectiveMode is llm`); - } + assertGroundedLlMMode(generation, name); + assertModeRequirements(generation, name); + assertDegradedRequirements(generation, name); +} + +function assertGroundedLlMMode(generation: Record, name: string): void { + if (generation.effectiveMode !== 'llm') return; + nonBlankString(generation.model, `${name}.model`); + nonBlankString(generation.provider, `${name}.provider`); + if (generation.degraded) throw new Error(`${name}.degraded must be false when effectiveMode is llm`); +} + +function assertModeRequirements(generation: Record, name: string): void { if (generation.requestedMode === 'deterministic') { - if ( - generation.effectiveMode !== 'deterministic' || generation.degraded - || generation.model !== null || generation.provider !== null || generation.responseId !== null - || generation.reason !== null - ) { - throw new Error(`${name} deterministic mode cannot contain LLM or degradation metadata`); - } + assertDeterministicGeneration(generation, name); + return; } if (generation.requestedMode === 'require-llm' && generation.effectiveMode !== 'llm') { throw new Error(`${name} require-llm mode cannot use deterministic output`); } - if (generation.requestedMode === 'prefer-llm' && generation.effectiveMode === 'deterministic' && !generation.degraded) { + if (generation.requestedMode === 'prefer-llm' + && generation.effectiveMode === 'deterministic' + && !generation.degraded) { throw new Error(`${name} prefer-llm deterministic output must be marked degraded`); } - if (generation.degraded) { - if (generation.requestedMode !== 'prefer-llm' || generation.effectiveMode !== 'deterministic') { - throw new Error(`${name} degraded output is only valid for prefer-llm deterministic fallback`); +} + +function assertDeterministicGeneration(generation: Record, name: string): void { + if ( + generation.effectiveMode !== 'deterministic' || generation.degraded + || generation.model !== null || generation.provider !== null || generation.responseId !== null + || generation.reason !== null + ) { + throw new Error(`${name} deterministic mode cannot contain LLM or degradation metadata`); + } +} + +function assertDegradedRequirements(generation: Record, name: string): void { + if (!generation.degraded) { + if (generation.reason !== null) { + throw new Error(`${name}.reason must be null when output is not degraded`); } - nonBlankString(generation.reason, `${name}.reason`); - } else if (generation.reason !== null) { - throw new Error(`${name}.reason must be null when output is not degraded`); + return; + } + if (generation.requestedMode !== 'prefer-llm' || generation.effectiveMode !== 'deterministic') { + throw new Error(`${name} degraded output is only valid for prefer-llm deterministic fallback`); } + nonBlankString(generation.reason, `${name}.reason`); } diff --git a/src/core/text.ts b/src/core/text.ts index 6c6dd55..fb73b27 100644 --- a/src/core/text.ts +++ b/src/core/text.ts @@ -16,6 +16,27 @@ const ACTION_PATTERNS: Array<[IntentAction, RegExp]> = [ ['preserve', /\b(preserve|keep|maintain|zachowa(?:ć|c)|utrzyma(?:ć|c))\b/i], ]; +const OBJECT_PATTERNS: Record = { + add: /\b(add|create|implement|introduce|build|utworzy(?:ć|c)|doda(?:ć|c)|zaimplementowa(?:ć|c)|stworzy(?:ć|c)|zbudowa(?:ć|c))\b/i, + fix: /\b(fix|repair|correct|napraw(?:ić|ic)|popraw(?:ić|ic))\b/i, + remove: /\b(remove|delete|drop|usun(?:ąć|ac)|wycofa(?:ć|c))\b/i, + refactor: /\b(refactor|restructure|przebudowa(?:ć|c)|refaktoryz)\w*/i, + test: /\b(test|spec|coverage|przetestowa(?:ć|c)|testowa(?:ć|c))\b/i, + document: /\b(document|udokumentowa(?:ć|c)|readme|changelog|documentation|dokumentacj)\b/i, + configure: /\b(configure|configur|setup|ustawi(?:ć|c)|konfigur)\w*/i, + analyze: /\b(analy[sz]|inspect|scan|compare|analiz|por[oó]wn|zbada(?:ć|c))\w*/i, + validate: /\b(validat(?:e[sd]?|ing)|verify|check|walid(?:uj\w*|ow\w*)|sprawdzi(?:ć|c)|zweryfikowa(?:ć|c))\b/i, + call: /\b(call|wywoł)\w*/i, + depend_on: /\b(depends?|zależ)\w*/i, + declare: /\b(declare|deklar)\w*/i, + release: /\b(release|wydaj)\w*/i, + change: /\b(change|update|modify|zmieni(?:ć|c)|aktualizowa(?:ć|c)|modyfikowa(?:ć|c))\b/i, + preserve: /\b(preserve|keep|maintain|zachowa(?:ć|c)|utrzyma(?:ć|c))\b/i, + block: /\b(block|deny|prevent|zablokowa(?:ć|c)|zabroni(?:ć|c))\b/i, + approve: /\b(approve|accept|zatwierdzi(?:ć|c)|zaakceptowa(?:ć|c))\b/i, + unknown: /$a/, +}; + /** * Function words, folded exactly as `keywords` folds its input. * @@ -27,7 +48,7 @@ const ACTION_PATTERNS: Array<[IntentAction, RegExp]> = [ * buckets keep only the first twelve tokens per record, so pure grammar was * displacing real vocabulary before matching even began. */ -const STOP_WORDS = new Set([ +const STOP_WORDS = new Set(buildStopWords([ 'the', 'a', 'an', 'and', 'or', 'to', 'of', 'for', 'in', 'on', 'with', 'from', 'by', 'i', 'oraz', 'lub', 'do', 'z', 'ze', 'na', 'w', 'we', 'dla', 'przez', 'sie', 'ma', 'musi', 'musza', 'powinien', 'powinna', 'powinno', 'powinny', 'nalezy', 'trzeba', @@ -35,9 +56,31 @@ const STOP_WORDS = new Set([ 'nie', 'jest', 'sa', 'jako', 'bez', 'ani', 'albo', 'ale', 'tylko', 'wylacznie', 'tego', 'tym', 'tej', 'ten', 'ta', 'to', 'te', 'przy', 'po', 'przed', 'aby', 'gdy', 'kazdy', 'kazda', 'kazde', 'juz', 'tez', 'takze', 'byc', 'byl', 'byla', 'bylo', -].map((value) => normalizeToken(value))); +], normalizeToken)); + +function buildStopWords( + words: readonly string[], + normalizer: (value: string) => string, +): Set { + return new Set(words.map(normalizer)); +} export function classifyActionHeuristically(text: string): IntentAction { + const conventionalAction = extractConventionalAction(text); + if (conventionalAction !== 'unknown') return conventionalAction; + // Inline code is a target, not a verb. Without masking it, an identifier + // such as `validateContract` can override the explicit verb "implement". + const prose = removeInlineCode(text); + // Fold diacritics before dictionary matching. JavaScript's `\b` treats letters such + // as `ć` or `ą` as non-word characters, so matching only the raw Polish text + // would miss perfectly valid imperatives such as `dodać`. + const searchable = normalizeToken(prose); + const matchedByPattern = findActionInText(prose, searchable); + if (matchedByPattern) return matchedByPattern; + return 'unknown'; +} + +function extractConventionalAction(text: string): IntentAction { const conventional = text.match(/^\s*(feat|fix|refactor|test|docs|chore|build|ci|perf)(?:\([^)]*\))?!?:/i)?.[1]?.toLowerCase(); if (conventional === 'feat') return 'add'; if (conventional === 'fix') return 'fix'; @@ -45,17 +88,21 @@ export function classifyActionHeuristically(text: string): IntentAction { if (conventional === 'test') return 'test'; if (conventional === 'docs') return 'document'; if (conventional === 'build' || conventional === 'ci' || conventional === 'chore') return 'configure'; - // Inline code is a target, not a verb. Without masking it, an identifier - // such as `validateContract` can override the explicit verb "implement". - const prose = text.replace(/`[^`]*`/g, ' '); - // Fold diacritics before dictionary matching. JavaScript's `\b` treats letters such - // as `ć` or `ą` as non-word characters, so matching only the raw Polish text - // would miss perfectly valid imperatives such as `dodać`. - const searchable = normalizeToken(prose); + return 'unknown'; +} + +function findActionInText( + prose: string, + searchable: string, +): IntentAction | null { for (const [action, pattern] of ACTION_PATTERNS) { if (pattern.test(prose) || pattern.test(searchable)) return action; } - return 'unknown'; + return null; +} + +function removeInlineCode(value: string): string { + return value.replace(/`[^`]*`/g, ' '); } /** @@ -438,35 +485,27 @@ export function extractVersions(text: string): string[] { } export function inferObject(text: string, action: IntentAction): string { - const normalized = text + const normalized = normalizeForObject(text); + const withoutAction = removeObjectAction(normalized, action); + const result = stripObjectConnector(withoutAction); + return result || normalized || 'unspecified'; +} + +function normalizeForObject(text: string): string { + return text .replace(/^\s*[-*+]\s+/, '') .replace(/^\s*\d+[.)]\s+/, '') .replace(/^\s*\[[ xX]\]\s+/, '') .replace(/^\s*(feat|fix|refactor|test|docs|chore|build|ci|perf)(?:\([^)]*\))?!?:\s*/i, '') .trim(); +} - const actionWords: Record = { - add: /\b(add|create|implement|introduce|build|utworzy(?:ć|c)|doda(?:ć|c)|zaimplementowa(?:ć|c)|stworzy(?:ć|c)|zbudowa(?:ć|c))\b/i, - fix: /\b(fix|repair|correct|napraw(?:ić|ic)|popraw(?:ić|ic))\b/i, - remove: /\b(remove|delete|drop|usun(?:ąć|ac)|wycofa(?:ć|c))\b/i, - refactor: /\b(refactor|restructure|przebudowa(?:ć|c)|refaktoryz)\w*/i, - test: /\b(test|przetestowa(?:ć|c)|testowa(?:ć|c))\b/i, - document: /\b(document|udokumentowa(?:ć|c))\b/i, - configure: /\b(configur\w*|setup|ustawi(?:ć|c)|konfigurowa(?:ć|c))\b/i, - analyze: /\b(analy[sz]\w*|inspect|scan|analizowa(?:ć|c)|zbada(?:ć|c))\b/i, - validate: /\b(validat\w*|verify|check|walidowa(?:ć|c)|sprawdzi(?:ć|c))\b/i, - call: /\b(call|wywoł)\w*/i, - depend_on: /\b(depends?|zależ)\w*/i, - declare: /\b(declare|deklar)\w*/i, - release: /\b(release|wydaj)\w*/i, - change: /\b(change|update|modify|zmieni(?:ć|c)|aktualizowa(?:ć|c)|modyfikowa(?:ć|c))\b/i, - preserve: /\b(preserve|keep|maintain|zachowa(?:ć|c)|utrzyma(?:ć|c))\b/i, - block: /\b(block|deny|prevent|zablokowa(?:ć|c)|zabroni(?:ć|c))\b/i, - approve: /\b(approve|accept|zatwierdzi(?:ć|c)|zaakceptowa(?:ć|c))\b/i, - unknown: /$a/, - }; - const result = normalized.replace(actionWords[action], '').replace(/^\s*(to|aby|żeby)\s+/i, '').trim(); - return result || normalized || 'unspecified'; +function removeObjectAction(value: string, action: IntentAction): string { + return value.replace(OBJECT_PATTERNS[action], '').trim(); +} + +function stripObjectConnector(value: string): string { + return value.replace(/^\s*(to|aby|żeby)\s+/i, '').trim(); } export function splitIntentLines(text: string): Array<{ text: string; line: number }> { diff --git a/src/extractors/ast/typescript.ts b/src/extractors/ast/typescript.ts index 8991dc8..40a16e0 100644 --- a/src/extractors/ast/typescript.ts +++ b/src/extractors/ast/typescript.ts @@ -9,137 +9,237 @@ export const JS_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mj export const TYPESCRIPT_AST_CACHE_IDENTITY = `t2c/typescript-ast@1/typescript-${ts.version}`; export function extractTypeScriptFile(root: string, filePath: string, body: string): IntentRecord[] { - const relative = relativePosix(root, filePath); - const sourceFile = ts.createSourceFile(filePath, body, ts.ScriptTarget.Latest, true, scriptKind(filePath)); - const records: IntentRecord[] = []; - const scope: string[] = []; - const moduleCapabilities = new Set(); - - function lineRange(node: ts.Node): { start: number; end: number } { - return { - start: sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1, - end: sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1, - }; - } + const context = createTypeScriptExtractionContext({ + filePath, + relative: relativePosix(root, filePath), + sourceFile: ts.createSourceFile(filePath, body, ts.ScriptTarget.Latest, true, scriptKind(filePath)), + records: [], + scope: [], + moduleCapabilities: new Set(), + }); + visitTypeScriptNode(context.sourceFile, context); + const capabilities = boundedCapabilities(context.moduleCapabilities); + recordModuleFact(context, context.sourceFile, capabilities); + return context.records; +} - function excerpt(node: ts.Node): string { - return node.getText(sourceFile).slice(0, 2000); +interface TypeScriptExtractionContext { + filePath: string; + relative: string; + sourceFile: ts.SourceFile; + records: IntentRecord[]; + scope: string[]; + moduleCapabilities: Set; +} + +function createTypeScriptExtractionContext(args: { + filePath: string; + relative: string; + sourceFile: ts.SourceFile; + records: IntentRecord[]; + scope: string[]; + moduleCapabilities: Set; +}): TypeScriptExtractionContext { + return args; +} + +function visitTypeScriptNode(node: ts.Node, context: TypeScriptExtractionContext): void { + if (handleNode(node, context)) { + ts.forEachChild(node, (child) => visitTypeScriptNode(child, context)); } +} + +function handleNode(node: ts.Node, context: TypeScriptExtractionContext): boolean { + if (handleImportDeclaration(node, context)) return true; + if (handleExportDeclaration(node, context)) return true; + if (handleSymbolDeclaration(node, context)) return true; + if (handleVariableDeclaration(node, context)) return true; + if (handleCallExpression(node, context)) return true; + return true; +} + +function handleImportDeclaration(node: ts.Node, context: TypeScriptExtractionContext): boolean { + if (!ts.isImportDeclaration(node) || !ts.isStringLiteral(node.moduleSpecifier)) return false; + addTypeScriptRecord({ + context, + node, + kind: 'module_dependency_fact', + action: 'depend_on', + object: node.moduleSpecifier.text, + metadata: { importClause: node.importClause?.getText(context.sourceFile) ?? null }, + }); + return true; +} + +function handleExportDeclaration(node: ts.Node, context: TypeScriptExtractionContext): boolean { + if (!ts.isExportDeclaration(node) || !node.moduleSpecifier || !ts.isStringLiteral(node.moduleSpecifier)) return false; + addTypeScriptRecord({ + context, + node, + kind: 'module_dependency_fact', + action: 'depend_on', + object: node.moduleSpecifier.text, + metadata: { reExport: true }, + }); + return true; +} - function add(node: ts.Node, input: { +function handleSymbolDeclaration(node: ts.Node, context: TypeScriptExtractionContext): boolean { + if (!isTypeScriptSymbolDeclaration(node)) return false; + const symbol = extractSymbolName(node, context.sourceFile); + if (!symbol) return true; + const symbolModifiers = extractModifiers(node); + addTypeScriptRecord({ + context, + node, + kind: 'symbol_fact', + action: 'declare', + object: symbol, + symbol, + metadata: { + symbolKind: ts.SyntaxKind[node.kind] ?? 'unknown', + modifiers: symbolModifiers, + exported: symbolModifiers.includes('ExportKeyword'), + }, + }); + context.scope.push(symbol); + ts.forEachChild(node, (child) => visitTypeScriptNode(child, context)); + context.scope.pop(); + return false; +} + +function handleVariableDeclaration(node: ts.Node, context: TypeScriptExtractionContext): boolean { + if (!ts.isVariableDeclaration(node) || !ts.isIdentifier(node.name)) return false; + const declarationIsCallable = Boolean(node.initializer && (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))); + if (!declarationIsCallable && !isTopLevel(node)) return true; + addTypeScriptRecord({ + context, + node, + kind: 'symbol_fact', + action: 'declare', + object: node.name.text, + symbol: node.name.text, + metadata: { symbolKind: declarationIsCallable ? 'callable_variable' : 'variable' }, + }); + return true; +} + +function handleCallExpression(node: ts.Node, context: TypeScriptExtractionContext): boolean { + if (!ts.isCallExpression(node)) return false; + const callee = node.expression.getText(context.sourceFile).slice(0, 300); + addTypeScriptRecord({ + context, + node, + kind: 'call_fact', + action: 'call', + object: callee, + symbol: context.scope.length ? context.scope.join('.') : null, + metadata: { callee, argumentCount: node.arguments.length }, + }); + return true; +} + +function isTypeScriptSymbolDeclaration( + node: ts.Node, +): node is + | ts.FunctionDeclaration + | ts.ClassDeclaration + | ts.InterfaceDeclaration + | ts.TypeAliasDeclaration + | ts.EnumDeclaration + | ts.MethodDeclaration { + return ( + ts.isFunctionDeclaration(node) + || ts.isClassDeclaration(node) + || ts.isInterfaceDeclaration(node) + || ts.isTypeAliasDeclaration(node) + || ts.isEnumDeclaration(node) + || ts.isMethodDeclaration(node) + ); +} + +function extractSymbolName( + node: ts.Node & { name?: ts.Node }, + sourceFile: ts.SourceFile, +): string | null { + if (!node.name) return null; + return node.name.getText(sourceFile).replace(/^['"]|['"]$/g, ''); +} + +function extractModifiers(node: ts.Node): string[] { + if (!ts.canHaveModifiers(node)) return []; + return (ts.getModifiers(node) ?? []).map((modifier) => ts.SyntaxKind[modifier.kind] ?? String(modifier.kind)); +} + +function addTypeScriptRecord( + input: { + context: TypeScriptExtractionContext; + node: ts.Node; kind: string; action: IntentAction; object: string; symbol?: string | null; + text?: string; subject?: string | null; metadata?: Record; - text?: string; - }): void { - const symbol = input.symbol ?? null; - if (input.kind === 'symbol_fact' || input.kind === 'module_dependency_fact') moduleCapabilities.add(input.object); - records.push(buildRecord({ - kind: input.kind, - action: input.action, - subject: input.subject ?? (scope.length ? scope.join('.') : null), - object: input.object, - target: { paths: [relative], symbols: symbol ? [symbol] : [] }, - modality: 'observed', - text: input.text ?? `${input.action} ${input.object}`, - lifecycle: 'implemented', - sourceKind: 'ast', - sourcePath: relative, - sourceLines: lineRange(node), - symbol, - extractor: 't2c/typescript-ast@1', - rawExcerpt: excerpt(node), - epistemicClass: 'fact', - confidence: 1, - basis: ['typescript_compiler_ast'], - metadata: { - language: languageName(filePath), - syntaxKind: ts.SyntaxKind[node.kind] ?? String(node.kind), - llmUsed: false, - ...(input.metadata ?? {}), - }, - })); - } - - function nameOf(node: ts.Node & { name?: ts.Node }): string | null { - if (!node.name) return null; - return node.name.getText(sourceFile).replace(/^['"]|['"]$/g, ''); + }, +): void { + const symbol = input.symbol ?? null; + if (input.kind === 'symbol_fact' || input.kind === 'module_dependency_fact') { + input.context.moduleCapabilities.add(input.object); } + input.context.records.push(buildRecord({ + kind: input.kind, + action: input.action, + subject: input.subject ?? (input.context.scope.length ? input.context.scope.join('.') : null), + object: input.object, + target: { paths: [input.context.relative], symbols: symbol ? [symbol] : [] }, + modality: 'observed', + text: input.text ?? `${input.action} ${input.object}`, + lifecycle: 'implemented', + sourceKind: 'ast', + sourcePath: input.context.relative, + sourceLines: sourceLineRange(input.node, input.context.sourceFile), + symbol, + extractor: 't2c/typescript-ast@1', + rawExcerpt: nodeExcerpt(input.node, input.context.sourceFile), + epistemicClass: 'fact', + confidence: 1, + basis: ['typescript_compiler_ast'], + metadata: { + language: languageName(input.context.filePath), + syntaxKind: ts.SyntaxKind[input.node.kind] ?? String(input.node.kind), + llmUsed: false, + ...(input.metadata ?? {}), + }, + })); +} - function modifiers(node: ts.Node): string[] { - if (!ts.canHaveModifiers(node)) return []; - return (ts.getModifiers(node) ?? []).map((modifier) => ts.SyntaxKind[modifier.kind] ?? String(modifier.kind)); - } +function sourceLineRange(node: ts.Node, sourceFile: ts.SourceFile): { start: number; end: number } { + return { + start: sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1, + end: sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1, + }; +} - function visit(node: ts.Node): void { - if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) { - add(node, { kind: 'module_dependency_fact', action: 'depend_on', object: node.moduleSpecifier.text, metadata: { importClause: node.importClause?.getText(sourceFile) ?? null } }); - } else if (ts.isExportDeclaration(node) && node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) { - add(node, { kind: 'module_dependency_fact', action: 'depend_on', object: node.moduleSpecifier.text, metadata: { reExport: true } }); - } else if ( - ts.isFunctionDeclaration(node) - || ts.isClassDeclaration(node) - || ts.isInterfaceDeclaration(node) - || ts.isTypeAliasDeclaration(node) - || ts.isEnumDeclaration(node) - || ts.isMethodDeclaration(node) - ) { - const symbol = nameOf(node); - if (symbol) { - const symbolModifiers = modifiers(node); - add(node, { - kind: 'symbol_fact', - action: 'declare', - object: symbol, - symbol, - metadata: { - symbolKind: ts.SyntaxKind[node.kind] ?? 'unknown', - modifiers: symbolModifiers, - exported: symbolModifiers.includes('ExportKeyword'), - }, - }); - scope.push(symbol); - ts.forEachChild(node, visit); - scope.pop(); - return; - } - } else if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) { - const declarationIsCallable = Boolean(node.initializer && (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))); - if (declarationIsCallable || isTopLevel(node)) { - add(node, { - kind: 'symbol_fact', - action: 'declare', - object: node.name.text, - symbol: node.name.text, - metadata: { symbolKind: declarationIsCallable ? 'callable_variable' : 'variable' }, - }); - } - } else if (ts.isCallExpression(node)) { - const callee = node.expression.getText(sourceFile).slice(0, 300); - add(node, { - kind: 'call_fact', - action: 'call', - object: callee, - symbol: scope.length ? scope.join('.') : null, - metadata: { callee, argumentCount: node.arguments.length }, - }); - } - ts.forEachChild(node, visit); - } +function nodeExcerpt(node: ts.Node, sourceFile: ts.SourceFile): string { + return node.getText(sourceFile).slice(0, 2000); +} - visit(sourceFile); - const capabilities = boundedCapabilities(moduleCapabilities); - add(sourceFile, { +function recordModuleFact( + context: TypeScriptExtractionContext, + node: ts.SourceFile, + capabilities: string[], +): void { + addTypeScriptRecord({ + context, + node, kind: 'module_fact', action: 'declare', - object: relative, - text: moduleTopicText(relative, capabilities), + object: context.relative, + text: moduleTopicText(context.relative, capabilities), metadata: { aggregate: 'module', factGranularity: 'file', capabilities }, }); - return records; } function isTopLevel(node: ts.Node): boolean { diff --git a/src/extractors/communication-file-helpers.ts b/src/extractors/communication-file-helpers.ts new file mode 100644 index 0000000..cdc28c5 --- /dev/null +++ b/src/extractors/communication-file-helpers.ts @@ -0,0 +1,342 @@ +import path from 'node:path'; +import type { T2CConfig } from '../config/env.js'; +import { relativePosix } from '../core/io.js'; +import type { ExtractionResult } from '../core/types.js'; +import type { LoadedParticipantIdentityRegistry, ParticipantIdentityEntry } from '../communication/identity.js'; +import { + buildCommunicationRecords, + CommunicationType, + communicationSegments, + first, + inferIdentity, + isTicketEvidenceFile, + listValue, + looksLikeTicket, + normalizeRole, + normalizeType, + parseEnvelope, + resolveIdentity, + sameStrings, + validTimestamp, +} from './communication-helpers.js'; +import type { CommunicationRole } from './communication-helpers.js'; + +export interface CommunicationFileOutcome { + records: ExtractionResult['records']; + warnings: string[]; + communicationFiles: number; +} + +export async function extractCommunicationFile( + file: string, + projectRoot: string, + root: string, + options: { ticket?: string | null }, + config: T2CConfig, + readText: (filePath: string, maxBytes: number) => Promise, + identityRegistry: LoadedParticipantIdentityRegistry | null, +): Promise { + const scope = resolveFileScope(file, projectRoot, options.ticket); + if (!scope) return null; + + const readResult = await readCommunicationBody(file, config.maxFileBytes, readText); + if (!readResult.success) { + return { + records: [], + warnings: [`${scope.relativeToProject}: ${readResult.error}`], + communicationFiles: 0, + }; + } + + const envelope = parseEnvelope(readResult.body); + const inferred = inferIdentity(scope.relativeToProject); + if (shouldSkipCommunicationFile(scope.relativeToProject, options.ticket, scope.pathTicket, envelope, inferred, identityRegistry)) { + return null; + } + + const extracted = collectCommunicationMetadata( + scope.relativeToProject, + scope.pathTicket, + inferred, + envelope, + identityRegistry, + ); + + const localWarnings = buildLocalWarnings( + scope.relativeToProject, + extracted, + identityRegistry, + envelope, + ); + + const segmentResult = buildCommunicationSegments(scope.relativeToProject, extracted, envelope); + localWarnings.push(...segmentResult.warnings); + + const records = await buildCommunicationRecords( + root, + file, + extracted.role, + extracted.ticket, + extracted.participant, + extracted.identity, + extracted.recipient, + extracted.timestamp, + extracted.explicitPaths, + extracted.explicitSymbols, + extracted.gitAuthors, + extracted.displayName, + segmentResult.segments, + config, + envelope.bodyStartLine, + Boolean(identityRegistry), + identityRegistry ? relativePosix(root, identityRegistry.path) : null, + ); + + return { + records, + warnings: localWarnings, + communicationFiles: 1, + }; +} + +function shouldSkipCommunicationFile( + relativeToProject: string, + ticket: string | null | undefined, + pathTicket: string, + envelope: ReturnType, + inferred: ReturnType, + identityRegistry: LoadedParticipantIdentityRegistry | null, +): boolean { + const explicitEnvelope = hasExplicitEnvelopeMetadata(envelope); + if (!explicitEnvelope && isTicketEvidenceFile(relativeToProject)) return true; + if (!ticket && !identityRegistry && !looksLikeTicket(pathTicket) && !inferred.role && !explicitEnvelope) return true; + return false; +} + +function hasExplicitEnvelopeMetadata(envelope: ReturnType): boolean { + return Boolean( + first( + envelope.metadata.participant, + envelope.metadata.participant_id, + envelope.metadata['participant-id'], + envelope.metadata.role, + envelope.metadata.type, + envelope.metadata.ticket, + ), + ); +} + +function buildCommunicationSegments( + relativeToProject: string, + metadata: CommunicationMetadata, + envelope: ReturnType, +): { segments: ReturnType; warnings: string[] } { + const inferredRole = metadata.inferred.governanceParticipantFile && !metadata.explicitMessageType ? metadata.role : null; + const segments = communicationSegments(envelope.body, metadata.messageType, inferredRole); + if (segments.length === 0 && metadata.inferred.governanceParticipantFile && envelope.body.trim()) { + return { + segments, + warnings: [ + `${relativeToProject}: no recognized intent sections for ${metadata.role}:${metadata.participant}; ` + + `${metadata.role} participant must classify the content under a supported heading or add explicit type front matter`, + ], + }; + } + + return { segments, warnings: [] }; +} + +interface CommunicationMetadata { + declaredRole: CommunicationRole; + role: CommunicationRole; + participant: string; + identity: { entry: ParticipantIdentityEntry | null }; + displayName: string; + recipient: string | null; + timestamp: string | null; + explicitPaths: string[]; + explicitSymbols: string[]; + gitAuthors: string[]; + messageType: CommunicationType; + explicitMessageType: string | null; + ticket: string; + inferred: ReturnType; +} + +function resolveFileScope( + file: string, + projectRoot: string, + ticket?: string | null, +): { relativeToProject: string; pathTicket: string } | null { + const relativeToProject = relativePosix(projectRoot, file); + const segments = relativeToProject.split('/'); + const pathTicket = segments.length > 1 ? segments[0] ?? '' : ''; + if (!pathTicket) return null; + if (ticket && pathTicket.toLowerCase() !== ticket.toLowerCase()) return null; + return { relativeToProject, pathTicket }; +} + +async function readCommunicationBody( + file: string, + maxBytes: number, + readText: (filePath: string, maxBytes: number) => Promise, +): Promise<{ success: true; body: string } | { success: false; error: string }> { + try { + return { success: true, body: await readText(file, maxBytes) }; + } catch (error) { + return { success: false, error: error instanceof Error ? error.message : String(error) }; + } +} + +function collectCommunicationMetadata( + relativeToProject: string, + pathTicket: string, + inferred: ReturnType, + envelope: ReturnType, + identityRegistry: LoadedParticipantIdentityRegistry | null, +): CommunicationMetadata { + const declaredParticipant = first( + envelope.metadata.participant, + envelope.metadata.actor, + inferred.participant, + ); + const declaredRole = normalizeRole(first(envelope.metadata.role, inferred.role)); + const declaredParticipantId = first(envelope.metadata.participant_id, envelope.metadata['participant-id']); + const identity = resolveIdentity(identityRegistry?.byId ?? null, declaredParticipantId); + const participant = identity.entry?.id ?? declaredParticipantId ?? declaredParticipant ?? `unknown:${path.basename(relativeToProject)}`; + const role = identity.entry?.role ?? declaredRole; + const displayName = identity.entry?.displayName ?? declaredParticipant ?? participant; + const explicitMessageType = first(envelope.metadata.type, envelope.metadata.kind); + const messageType = normalizeType(first(explicitMessageType, inferred.type)); + const ticket = first(envelope.metadata.ticket, pathTicket) ?? pathTicket; + const recipient = first(envelope.metadata.recipient, envelope.metadata.to); + const rawTimestamp = first( + envelope.metadata.timestamp, + envelope.metadata.created_at, + envelope.metadata.createdat, + ); + const timestamp = validTimestamp(rawTimestamp); + const declaredGitAuthors = listValue(first( + envelope.metadata.git_authors, + envelope.metadata['git-authors'], + envelope.metadata.git_author, + )); + const gitAuthors = identity.entry ? [...identity.entry.gitAuthors] : declaredGitAuthors; + const explicitPaths = listValue(first( + envelope.metadata.paths, + envelope.metadata.target_paths, + envelope.metadata['target-paths'], + )); + const explicitSymbols = listValue(first( + envelope.metadata.symbols, + envelope.metadata.target_symbols, + envelope.metadata['target-symbols'], + )); + + return { + declaredRole, + role, + participant, + identity, + displayName, + recipient, + timestamp, + explicitPaths, + explicitSymbols, + gitAuthors, + messageType, + explicitMessageType, + ticket, + inferred, + }; +} + +function buildLocalWarnings( + relativeToProject: string, + metadata: CommunicationMetadata, + identityRegistry: LoadedParticipantIdentityRegistry | null, + envelope: ReturnType, +): string[] { + const warnings: string[] = []; + appendRoleAndParticipantWarnings(relativeToProject, metadata, warnings); + + if (identityRegistry && !metadata.identity.entry) { + appendIdentityWarnings(relativeToProject, metadata, identityRegistry, envelope, warnings); + } + appendRegistryAlignmentWarnings(relativeToProject, metadata, warnings); + appendA2aAgentWarnings(relativeToProject, metadata, envelope, warnings); + appendTimestampWarnings(relativeToProject, metadata, envelope, warnings); + + return warnings; +} + +function appendRoleAndParticipantWarnings( + relativeToProject: string, + metadata: CommunicationMetadata, + warnings: string[], +): void { + if (metadata.role === 'unknown') warnings.push(`${relativeToProject}: role must be human or agent`); + if (metadata.participant.startsWith('unknown:')) warnings.push(`${relativeToProject}: participant is missing`); +} + +function appendIdentityWarnings( + relativeToProject: string, + metadata: CommunicationMetadata, + identityRegistry: LoadedParticipantIdentityRegistry | null, + envelope: ReturnType, + warnings: string[], +): void { + if (!identityRegistry) return; + if (!first(envelope.metadata.participant_id, envelope.metadata['participant-id'])) { + warnings.push(`${relativeToProject}: participant-id is required when project/participants.json exists`); + } else { + if (!metadata.identity.entry) { + warnings.push(`${relativeToProject}: participant-id is not present in project/participants.json`); + } + } +} + +function appendRegistryAlignmentWarnings( + relativeToProject: string, + metadata: CommunicationMetadata, + warnings: string[], +): void { + if (!metadata.identity.entry) return; + if (metadata.declaredRole !== 'unknown' && metadata.declaredRole !== metadata.identity.entry.role) { + warnings.push(`${relativeToProject}: declared role conflicts with participant registry`); + } + if (metadata.identity.entry && metadata.gitAuthors.length + && !sameStrings(metadata.gitAuthors, metadata.identity.entry.gitAuthors)) { + warnings.push(`${relativeToProject}: git-authors differ from participant registry and were ignored`); + } +} + +function appendA2aAgentWarnings( + relativeToProject: string, + metadata: CommunicationMetadata, + envelope: ReturnType, + warnings: string[], +): void { + const declaredA2aAgentId = first(envelope.metadata.a2a_agent_id, envelope.metadata['a2a-agent-id']); + if (!declaredA2aAgentId) return; + const hasRegistryEntry = Boolean(metadata.identity.entry?.a2aAgentIds.includes(declaredA2aAgentId)); + if (!metadata.identity.entry || !hasRegistryEntry) { + warnings.push(`${relativeToProject}: a2a-agent-id is not assigned to participant-id in the registry`); + } +} + +function appendTimestampWarnings( + relativeToProject: string, + metadata: CommunicationMetadata, + envelope: ReturnType, + warnings: string[], +): void { + const rawTimestamp = first( + envelope.metadata.timestamp, + envelope.metadata.created_at, + envelope.metadata.createdat, + ); + if (!metadata.timestamp && rawTimestamp) { + warnings.push(`${relativeToProject}: invalid timestamp`); + } +} diff --git a/src/extractors/communication-helpers.ts b/src/extractors/communication-helpers.ts new file mode 100644 index 0000000..8ec0da4 --- /dev/null +++ b/src/extractors/communication-helpers.ts @@ -0,0 +1,320 @@ +import path from 'node:path'; +import type { T2CConfig } from '../config/env.js'; +import { + detectModality, + detectPolarity, + extractPaths, + extractSymbols, + extractTickets, + extractVersions, + inferObject, + splitIntentLines, +} from '../core/text.js'; +import type { EpistemicClass, IntentRecord, LifecycleStatus } from '../core/types.js'; +import { buildRecord } from '../core/record.js'; +import type { ParticipantIdentityEntry } from '../communication/identity.js'; +import { classifyAction } from '../tf/classifier.js'; +import { relativePosix } from '../core/io.js'; + +export type CommunicationRole = 'human' | 'agent' | 'unknown'; +export type CommunicationType = 'request' | 'plan' | 'decision' | 'message' | 'report' | 'result' | 'claim'; + +export interface CommunicationEnvelope { + body: string; + bodyStartLine: number; + metadata: Record; +} + +export interface InferredCommunicationIdentity { + role: string | null; + participant: string | null; + type: string | null; + governanceParticipantFile: boolean; +} + +export interface CommunicationSegment { + text: string; + line: number; + type: CommunicationType; +} + +export async function buildCommunicationRecords( + root: string, + file: string, + role: CommunicationRole, + ticket: string, + participant: string, + identity: { entry: ParticipantIdentityEntry | null }, + recipient: string | null, + timestamp: string | null, + explicitPaths: string[], + explicitSymbols: string[], + gitAuthors: string[], + displayName: string, + segments: CommunicationSegment[], + config: T2CConfig, + bodyStartLine: number, + hasIdentityRegistry: boolean, + participantRegistryPath: string | null, +): Promise { + const records: IntentRecord[] = []; + for (const segment of segments) { + const segmentType = segment.type; + const semantics = semanticsFor(segmentType, role); + const classified = await classifyAction(segment.text, config); + const action = segmentType === 'decision' && classified.action === 'unknown' ? 'approve' : classified.action; + const line = bodyStartLine + segment.line - 1; + const segmentTickets = [...new Set([ticket.toUpperCase(), ...extractTickets(segment.text)])]; + const symbols = [...new Set([...explicitSymbols, ...extractSymbols(segment.text)])] + .filter((symbol) => !segmentTickets.some((item) => item === symbol.toUpperCase() || item.startsWith(`${symbol.toUpperCase()}-`))); + + records.push(buildRecord({ + kind: `communication_${segmentType}`, + actor: participant, + action, + subject: recipient ? `to:${recipient}` : `ticket:${ticket}`, + object: inferObject(segment.text, action), + target: { + paths: [...new Set([...explicitPaths, ...extractPaths(segment.text)])], + symbols, + tickets: segmentTickets, + versions: extractVersions(segment.text), + }, + modality: segmentType === 'report' || segmentType === 'result' || segmentType === 'claim' + ? 'claimed' + : detectModality(segment.text), + polarity: detectPolarity(segment.text), + text: segment.text, + lifecycle: semantics.lifecycle, + sourceKind: 'agent_log', + sourcePath: relativePosix(root, file), + sourceLines: { start: line, end: line }, + extractor: 't2c/project-communication@1', + epistemicClass: semantics.epistemicClass, + confidence: role === 'unknown' || participant.startsWith('unknown:') ? 0.55 : 0.88, + basis: ['project_ticket_path', 'communication_front_matter', classified.basis], + observedAt: timestamp, + metadata: { + participant, + participantId: identity.entry?.id ?? null, + displayName, + participantRole: role, + messageType: segmentType, + ticket, + recipient, + gitAuthors, + a2aAgentIds: identity.entry?.a2aAgentIds ?? [], + humanAliases: identity.entry?.humanAliases ?? [], + identityResolved: hasIdentityRegistry ? Boolean(identity.entry) : role !== 'unknown' && !participant.startsWith('unknown:'), + identitySource: identity.entry ? 'registry' : hasIdentityRegistry ? 'unresolved' : 'legacy', + participantRegistry: participantRegistryPath, + llmUsed: false, + }, + })); + } + return records; +} + +export function parseEnvelope(value: string): CommunicationEnvelope { + const lines = value.split(/\r?\n/); + if (lines[0]?.trim() !== '---') return { body: value, bodyStartLine: 1, metadata: {} }; + const end = lines.slice(1).findIndex((line) => line.trim() === '---'); + if (end < 0) return { body: value, bodyStartLine: 1, metadata: {} }; + const metadata: Record = {}; + for (const line of lines.slice(1, end + 1)) { + const match = line.match(/^\s*([A-Za-z][A-Za-z0-9_-]*)\s*:\s*(.*?)\s*$/); + if (!match?.[1]) continue; + metadata[match[1].toLowerCase()] = unquote(match[2] ?? ''); + } + return { body: lines.slice(end + 2).join('\n'), bodyStartLine: end + 3, metadata }; +} + +export function inferIdentity(relativePath: string): InferredCommunicationIdentity { + const parts = relativePath.split('/'); + const basename = path.basename(relativePath, path.extname(relativePath)); + const governanceIdentity = inferGovernanceIdentityFromFilename(basename); + if (governanceIdentity) return governanceIdentity; + + return inferIdentityFromPathAndFilename(parts, basename); +} + +function inferGovernanceIdentityFromFilename(basename: string): InferredCommunicationIdentity | null { + const governance = basename.match(/^(user|human|ai|agent)-(.+)$/i); + if (!governance?.[1] || !governance[2] || /-logs$/i.test(governance[2])) return null; + const role = /^(user|human)$/i.test(governance[1]) ? 'human' : 'agent'; + return { + role, + participant: governance[2].toLowerCase(), + type: role === 'human' ? 'request' : 'plan', + governanceParticipantFile: true, + }; +} + +function inferIdentityFromPathAndFilename(parts: string[], basename: string): InferredCommunicationIdentity { + const fileParts = basename.split('.'); + const nestedRoleIndex = parts.findIndex((part) => /^(agents?|humans?|users?)$/i.test(part)); + const nestedRole = nestedRoleIndex >= 0 ? parts[nestedRoleIndex] ?? null : null; + const nestedParticipant = nestedRoleIndex >= 0 ? parts[nestedRoleIndex + 1] ?? null : null; + const filenameRole = /^(agent|human|user)$/i.test(fileParts[0] ?? '') ? fileParts[0] ?? null : null; + return { + role: filenameRole ?? nestedRole, + participant: filenameRole ? fileParts[1] ?? null : nestedParticipant, + type: filenameRole ? fileParts[2] ?? null : fileParts.find((part) => isCommunicationType(part)) ?? null, + governanceParticipantFile: false, + }; +} + +export function isTicketEvidenceFile(relativePath: string): boolean { + const basename = path.basename(relativePath).toLowerCase(); + return [ + 'readme.md', + 'preprompt.md', + 'changelog.md', + 'audit.md', + 'baseline.md', + 'logs.txt', + ].includes(basename) + || /^iteration-\d+(?:-[a-z0-9-]+)?\.md$/.test(basename) + || /^(?:ai|agent)-.+-logs\.txt$/.test(basename); +} + +export function communicationSegments( + body: string, + defaultType: CommunicationType, + governanceRole: CommunicationRole | null, +): CommunicationSegment[] { + if (!governanceRole || governanceRole === 'unknown') { + return splitIntentLines(body) + .filter((segment) => !isCommunicationNoise(segment.text)) + .map((segment) => ({ ...segment, type: defaultType })); + } + const output: CommunicationSegment[] = []; + const lines = body.split(/\r?\n/); + let sectionType: CommunicationType | null = null; + let pending: { text: string; line: number; type: CommunicationType } | null = null; + const flush = (): void => { + if (!pending) return; + const item = pending; + pending = null; + if (/^(?:none|brak)[.!]?$/i.test(item.text.trim())) return; + for (const segment of splitIntentLines(item.text)) { + if (isCommunicationNoise(segment.text)) continue; + output.push({ text: segment.text, line: item.line + segment.line - 1, type: item.type }); + } + }; + for (let index = 0; index < lines.length; index += 1) { + const raw = lines[index] ?? ''; + const heading = raw.match(/^\s{0,3}#{2,6}\s+(.+?)\s*$/)?.[1]; + if (heading) { + flush(); + sectionType = governanceSectionType(heading, governanceRole); + continue; + } + if (!sectionType) { + flush(); + continue; + } + if (!raw.trim()) { + flush(); + continue; + } + const startsListItem = /^\s*(?:[-*+]|\d+[.)]|\[[ xX]\])\s+/.test(raw); + if (startsListItem) flush(); + const cleaned = raw + .replace(/^\s*[-*+]\s+/, '') + .replace(/^\s*\d+[.)]\s+/, '') + .replace(/^\s*\[[ xX]\]\s+/, '') + .trim(); + if (!cleaned) continue; + if (pending) pending.text = `${pending.text} ${cleaned}`; + else pending = { text: cleaned, line: index + 1, type: sectionType }; + } + flush(); + return output; +} + +export function looksLikeTicket(value: string): boolean { + return /^[A-Za-z][A-Za-z0-9]*-\d+(?:[-_][A-Za-z0-9]+)*$/.test(value); +} + +export function normalizeRole(value: string | null): CommunicationRole { + if (/^agents?$/i.test(value ?? '')) return 'agent'; + if (/^(human|humans|user|users|person)$/i.test(value ?? '')) return 'human'; + return 'unknown'; +} + +export function normalizeType(value: string | null): CommunicationType { + const normalized = value?.toLowerCase(); + return isCommunicationType(normalized ?? '') ? normalized as CommunicationType : 'message'; +} + +export function isCommunicationType(value: string): boolean { + return ['request', 'plan', 'decision', 'message', 'report', 'result', 'claim'].includes(value.toLowerCase()); +} + +export function first(...values: Array): string | null { + return values.find((value) => typeof value === 'string' && Boolean(value.trim()))?.trim() ?? null; +} + +export function listValue(value: string | null): string[] { + if (!value) return []; + const stripped = value.replace(/^\[|\]$/g, ''); + return [...new Set(stripped.split(',').map((item) => unquote(item.trim())).filter(Boolean))].sort(); +} + +export function validTimestamp(value: string | null): string | null { + if (!value) return null; + const parsed = new Date(value); + return Number.isNaN(parsed.valueOf()) ? null : parsed.toISOString(); +} + +export function resolveIdentity( + byId: Map | null, + participantId: string | null, +): { entry: ParticipantIdentityEntry | null } { + if (!byId || !participantId) return { entry: null }; + // Stable IDs are canonical and exact. Display names and aliases are never + // searched here, so a similar-looking name cannot acquire another identity. + return { entry: byId.get(participantId) ?? null }; +} + +export function sameStrings(left: string[], right: string[]): boolean { + const normalize = (values: string[]): string[] => values.map((value) => value.trim().toLowerCase()).sort(); + return JSON.stringify(normalize(left)) === JSON.stringify(normalize(right)); +} + +function isCommunicationNoise(value: string): boolean { + const normalized = value.trim(); + return /^#{1,6}\s*\d+(?:[.):_-]\d+)*[.):_-]?\s*$/.test(normalized) + || /^(?:-{3,}|_{3,}|\*{3,})$/.test(normalized); +} + +function governanceSectionType(heading: string, role: Exclude): CommunicationType | null { + const normalized = heading.toLowerCase().replace(/[^a-z0-9ąćęłńóśźż]+/gi, ' ').trim(); + if (role === 'human') { + if (/\b(decision|decisions|decyzj|approval|zatwierdzen)/i.test(normalized)) return 'decision'; + if (/\b(instruction|instructions|request|requirements?|goal|scope|polecen|wymagan|zakres|cel)\b/i.test(normalized)) { + return 'request'; + } + return null; + } + if (/\b(actual changes?|result|results|report|unfinished|blockers?|wykonan|zmian|wynik|raport|blokad)\b/i.test(normalized)) { + return 'report'; + } + if (/\b(understanding|execution plan|plan|scope|guardrails?|risks?|hypotheses|code locations?|rozumien|zakres|ryzyk)\b/i.test(normalized)) { + return 'plan'; + } + if (/\b(approval|zatwierdzen)\b/i.test(normalized)) return 'claim'; + return null; +} + +function semanticsFor(type: CommunicationType, role: CommunicationRole): { lifecycle: LifecycleStatus; epistemicClass: EpistemicClass } { + if (type === 'plan') return { lifecycle: 'planned', epistemicClass: 'plan' }; + if (type === 'report' || type === 'result' || type === 'claim') return { lifecycle: 'implemented', epistemicClass: 'claim' }; + if (type === 'decision') return { lifecycle: 'completed', epistemicClass: 'declaration' }; + return { lifecycle: 'proposed', epistemicClass: role === 'agent' ? 'claim' : 'declaration' }; +} + +function unquote(value: string): string { + return value.replace(/^['"]|['"]$/g, '').trim(); +} diff --git a/src/extractors/communication.ts b/src/extractors/communication.ts index a326d3f..cf42880 100644 --- a/src/extractors/communication.ts +++ b/src/extractors/communication.ts @@ -1,25 +1,12 @@ import path from 'node:path'; import type { T2CConfig } from '../config/env.js'; import { pathExists, readText, relativePosix, walkFiles } from '../core/io.js'; -import { buildRecord } from '../core/record.js'; +import type { ExtractionResult } from '../core/types.js'; import { assertPathWithinRoot } from '../core/security.js'; -import { - detectModality, - detectPolarity, - extractPaths, - extractSymbols, - extractTickets, - extractVersions, - inferObject, - splitIntentLines, -} from '../core/text.js'; -import type { EpistemicClass, ExtractionResult, LifecycleStatus } from '../core/types.js'; -import type { IntentRecord } from '../core/types.js'; -import { classifyAction } from '../tf/classifier.js'; -import { loadParticipantIdentityRegistry, type ParticipantIdentityEntry } from '../communication/identity.js'; +import { loadParticipantIdentityRegistry } from '../communication/identity.js'; +import { extractCommunicationFile } from './communication-file-helpers.js'; -export type CommunicationRole = 'human' | 'agent' | 'unknown'; -export type CommunicationType = 'request' | 'plan' | 'decision' | 'message' | 'report' | 'result' | 'claim'; +export type { CommunicationRole, CommunicationType } from './communication-helpers.js'; export interface CommunicationExtractionOptions { root: string; @@ -27,25 +14,6 @@ export interface CommunicationExtractionOptions { ticket?: string | null; } -interface CommunicationEnvelope { - body: string; - bodyStartLine: number; - metadata: Record; -} - -interface InferredCommunicationIdentity { - role: string | null; - participant: string | null; - type: string | null; - governanceParticipantFile: boolean; -} - -interface CommunicationSegment { - text: string; - line: number; - type: CommunicationType; -} - /** * Converts append-only human/agent communication under project// to * canonical agent_log records. Front matter is intentionally parsed without a @@ -81,6 +49,7 @@ export async function extractCommunicationIntent( root, options, config, + readText, identityRegistry, ); if (!fileResult) continue; @@ -92,424 +61,3 @@ export async function extractCommunicationIntent( if (records.length === 0 && communicationFiles > 0) warnings.push('No intent-like communication statements were found'); return { records, warnings: [...new Set(warnings)].sort() }; } - -interface CommunicationFileOutcome { - records: ExtractionResult['records']; - warnings: string[]; - communicationFiles: number; -} - -async function extractCommunicationFile( - file: string, - projectRoot: string, - root: string, - options: CommunicationExtractionOptions, - config: T2CConfig, - identityRegistry: Awaited> | null, -): Promise { - const relativeToProject = relativePosix(projectRoot, file); - const segments = relativeToProject.split('/'); - const pathTicket = segments.length > 1 ? segments[0] ?? '' : ''; - if (!pathTicket) return null; - if (options.ticket && pathTicket.toLowerCase() !== options.ticket.toLowerCase()) return null; - - let body: string; - try { - body = await readText(file, config.maxFileBytes); - } catch (error) { - return { - records: [], - warnings: [`${relativeToProject}: ${error instanceof Error ? error.message : String(error)}`], - communicationFiles: 0, - }; - } - - const envelope = parseEnvelope(body); - const inferred = inferIdentity(relativeToProject); - const explicitEnvelope = Boolean(first( - envelope.metadata.participant, - envelope.metadata.participant_id, - envelope.metadata['participant-id'], - envelope.metadata.role, - envelope.metadata.type, - envelope.metadata.ticket, - )); - if (!explicitEnvelope && isTicketEvidenceFile(relativeToProject)) return null; - if (!options.ticket && !identityRegistry && !looksLikeTicket(pathTicket) - && !inferred.role && !explicitEnvelope) return null; - - const declaredParticipant = first(envelope.metadata.participant, envelope.metadata.actor, inferred.participant); - const declaredRole = normalizeRole(first(envelope.metadata.role, inferred.role)); - const declaredParticipantId = first(envelope.metadata.participant_id, envelope.metadata['participant-id']); - const identity = resolveIdentity(identityRegistry?.byId ?? null, declaredParticipantId); - const participant = identity.entry?.id ?? declaredParticipantId ?? declaredParticipant ?? `unknown:${path.basename(file)}`; - const role = identity.entry?.role ?? declaredRole; - const displayName = identity.entry?.displayName ?? declaredParticipant ?? participant; - const explicitMessageType = first(envelope.metadata.type, envelope.metadata.kind); - const messageType = normalizeType(first(explicitMessageType, inferred.type)); - const ticket = first(envelope.metadata.ticket, pathTicket) ?? pathTicket; - const recipient = first(envelope.metadata.recipient, envelope.metadata.to); - const rawTimestamp = first(envelope.metadata.timestamp, envelope.metadata.created_at, envelope.metadata.createdat); - const timestamp = validTimestamp(rawTimestamp); - const declaredGitAuthors = listValue(first( - envelope.metadata.git_authors, - envelope.metadata['git-authors'], - envelope.metadata.git_author, - )); - const gitAuthors = identity.entry ? [...identity.entry.gitAuthors] : declaredGitAuthors; - const declaredA2aAgentId = first(envelope.metadata.a2a_agent_id, envelope.metadata['a2a-agent-id']); - const explicitPaths = listValue(first( - envelope.metadata.paths, - envelope.metadata.target_paths, - envelope.metadata['target-paths'], - )); - const explicitSymbols = listValue(first( - envelope.metadata.symbols, - envelope.metadata.target_symbols, - envelope.metadata['target-symbols'], - )); - - const localWarnings: string[] = []; - if (role === 'unknown') localWarnings.push(`${relativeToProject}: role must be human or agent`); - if (participant.startsWith('unknown:')) localWarnings.push(`${relativeToProject}: participant is missing`); - if (identityRegistry && !declaredParticipantId) { - localWarnings.push(`${relativeToProject}: participant-id is required when project/participants.json exists`); - } else if (identityRegistry && !identity.entry) { - localWarnings.push(`${relativeToProject}: participant-id is not present in project/participants.json`); - } - if (identity.entry && declaredRole !== 'unknown' && declaredRole !== identity.entry.role) { - localWarnings.push(`${relativeToProject}: declared role conflicts with participant registry`); - } - if (identity.entry && declaredGitAuthors.length - && !sameStrings(declaredGitAuthors, identity.entry.gitAuthors)) { - localWarnings.push(`${relativeToProject}: git-authors differ from participant registry and were ignored`); - } - if (declaredA2aAgentId && (!identity.entry || !identity.entry.a2aAgentIds.includes(declaredA2aAgentId))) { - localWarnings.push(`${relativeToProject}: a2a-agent-id is not assigned to participant-id in the registry`); - } - if (!timestamp && rawTimestamp) localWarnings.push(`${relativeToProject}: invalid timestamp`); - - const classifiedSegments = communicationSegments( - envelope.body, - messageType, - inferred.governanceParticipantFile && !explicitMessageType ? role : null, - ); - if (classifiedSegments.length === 0 - && inferred.governanceParticipantFile - && envelope.body.trim()) { - localWarnings.push( - `${relativeToProject}: no recognized intent sections for ${role}:${participant}; ` - + `${role} participant must classify the content under a supported heading or add explicit type front matter`, - ); - } - - const newRecords = await buildCommunicationRecords( - root, - file, - role, - ticket, - participant, - identity, - recipient, - identityRegistry, - timestamp, - explicitPaths, - explicitSymbols, - gitAuthors, - displayName, - classifiedSegments, - config, - envelope.bodyStartLine, - ); - - return { - records: newRecords, - warnings: localWarnings, - communicationFiles: 1, - }; -} - -async function buildCommunicationRecords( - root: string, - file: string, - role: CommunicationRole, - ticket: string, - participant: string, - identity: { entry: ParticipantIdentityEntry | null }, - recipient: string | null, - identityRegistry: Awaited> | null, - timestamp: string | null, - explicitPaths: string[], - explicitSymbols: string[], - gitAuthors: string[], - displayName: string, - segments: CommunicationSegment[], - config: T2CConfig, - bodyStartLine: number, -): Promise { - const records: IntentRecord[] = []; - for (const segment of segments) { - const segmentType = segment.type; - const semantics = semanticsFor(segmentType, role); - const classified = await classifyAction(segment.text, config); - const action = segmentType === 'decision' && classified.action === 'unknown' ? 'approve' : classified.action; - const line = bodyStartLine + segment.line - 1; - const segmentTickets = [...new Set([ticket.toUpperCase(), ...extractTickets(segment.text)])]; - const symbols = [...new Set([...explicitSymbols, ...extractSymbols(segment.text)])] - .filter((symbol) => !segmentTickets.some((item) => item === symbol.toUpperCase() || item.startsWith(`${symbol.toUpperCase()}-`))); - - records.push(buildRecord({ - kind: `communication_${segmentType}`, - actor: participant, - action, - subject: recipient ? `to:${recipient}` : `ticket:${ticket}`, - object: inferObject(segment.text, action), - target: { - paths: [...new Set([...explicitPaths, ...extractPaths(segment.text)])], - symbols, - tickets: segmentTickets, - versions: extractVersions(segment.text), - }, - modality: segmentType === 'report' || segmentType === 'result' || segmentType === 'claim' - ? 'claimed' - : detectModality(segment.text), - polarity: detectPolarity(segment.text), - text: segment.text, - lifecycle: semantics.lifecycle, - sourceKind: 'agent_log', - sourcePath: relativePosix(root, file), - sourceLines: { start: line, end: line }, - extractor: 't2c/project-communication@1', - epistemicClass: semantics.epistemicClass, - confidence: role === 'unknown' || participant.startsWith('unknown:') ? 0.55 : 0.88, - basis: ['project_ticket_path', 'communication_front_matter', classified.basis], - observedAt: timestamp, - metadata: { - participant, - participantId: identity.entry?.id ?? null, - displayName, - participantRole: role, - messageType: segmentType, - ticket, - recipient, - gitAuthors, - a2aAgentIds: identity.entry?.a2aAgentIds ?? [], - humanAliases: identity.entry?.humanAliases ?? [], - identityResolved: identityRegistry ? Boolean(identity.entry) : role !== 'unknown' && !participant.startsWith('unknown:'), - identitySource: identity.entry ? 'registry' : identityRegistry ? 'unresolved' : 'legacy', - participantRegistry: identityRegistry ? relativePosix(root, identityRegistry.path) : null, - llmUsed: false, - }, - })); - } - return records; -} - -function resolveIdentity( - byId: Map | null, - participantId: string | null, -): { entry: ParticipantIdentityEntry | null } { - if (!byId || !participantId) return { entry: null }; - // Stable IDs are canonical and exact. Display names and aliases are never - // searched here, so a similar-looking name cannot acquire another identity. - return { entry: byId.get(participantId) ?? null }; -} - -function sameStrings(left: string[], right: string[]): boolean { - const normalize = (values: string[]): string[] => values.map((value) => value.trim().toLowerCase()).sort(); - return JSON.stringify(normalize(left)) === JSON.stringify(normalize(right)); -} - -function parseEnvelope(value: string): CommunicationEnvelope { - const lines = value.split(/\r?\n/); - if (lines[0]?.trim() !== '---') return { body: value, bodyStartLine: 1, metadata: {} }; - const end = lines.slice(1).findIndex((line) => line.trim() === '---'); - if (end < 0) return { body: value, bodyStartLine: 1, metadata: {} }; - const metadata: Record = {}; - for (const line of lines.slice(1, end + 1)) { - const match = line.match(/^\s*([A-Za-z][A-Za-z0-9_-]*)\s*:\s*(.*?)\s*$/); - if (!match?.[1]) continue; - metadata[match[1].toLowerCase()] = unquote(match[2] ?? ''); - } - return { body: lines.slice(end + 2).join('\n'), bodyStartLine: end + 3, metadata }; -} - -function inferIdentity(relativePath: string): InferredCommunicationIdentity { - const parts = relativePath.split('/'); - const basename = path.basename(relativePath, path.extname(relativePath)); - const governance = basename.match(/^(user|human|ai|agent)-(.+)$/i); - if (governance?.[1] && governance[2] && !/-logs$/i.test(governance[2])) { - const role = /^(user|human)$/i.test(governance[1]) ? 'human' : 'agent'; - return { - role, - participant: governance[2].toLowerCase(), - type: role === 'human' ? 'request' : 'plan', - governanceParticipantFile: true, - }; - } - const fileParts = basename.split('.'); - const nestedRoleIndex = parts.findIndex((part) => /^(agents?|humans?|users?)$/i.test(part)); - const nestedRole = nestedRoleIndex >= 0 ? parts[nestedRoleIndex] ?? null : null; - const nestedParticipant = nestedRoleIndex >= 0 ? parts[nestedRoleIndex + 1] ?? null : null; - const filenameRole = /^(agent|human|user)$/i.test(fileParts[0] ?? '') ? fileParts[0] ?? null : null; - return { - role: filenameRole ?? nestedRole, - participant: filenameRole ? fileParts[1] ?? null : nestedParticipant, - type: filenameRole ? fileParts[2] ?? null : fileParts.find((part) => isCommunicationType(part)) ?? null, - governanceParticipantFile: false, - }; -} - -/** - * Governance tickets contain specifications, raw logs and captured results - * beside participant files. Those artifacts are evidence for the ticket, not - * utterances by an anonymous participant. Explicit communication front matter - * still wins, so a deliberately authored file with one of these names remains - * available to callers. - */ -function isTicketEvidenceFile(relativePath: string): boolean { - const basename = path.basename(relativePath).toLowerCase(); - return [ - 'readme.md', - 'preprompt.md', - 'changelog.md', - 'audit.md', - 'baseline.md', - 'logs.txt', - ].includes(basename) - || /^iteration-\d+(?:-[a-z0-9-]+)?\.md$/.test(basename) - || /^(?:ai|agent)-.+-logs\.txt$/.test(basename); -} - -/** - * The governance-standard participant files are structured documents rather - * than one homogeneous message. Heading ownership is deterministic: - * instructions/decisions belong to the human, while an agent's plan and actual - * changes remain different epistemic classes. Metadata and ownership boilerplate - * are deliberately skipped. - */ -function communicationSegments( - body: string, - defaultType: CommunicationType, - governanceRole: CommunicationRole | null, -): CommunicationSegment[] { - if (!governanceRole || governanceRole === 'unknown') { - return splitIntentLines(body) - .filter((segment) => !isCommunicationNoise(segment.text)) - .map((segment) => ({ ...segment, type: defaultType })); - } - const output: CommunicationSegment[] = []; - const lines = body.split(/\r?\n/); - let sectionType: CommunicationType | null = null; - let pending: { text: string; line: number; type: CommunicationType } | null = null; - const flush = (): void => { - if (!pending) return; - const item = pending; - pending = null; - if (/^(?:none|brak)[.!]?$/i.test(item.text.trim())) return; - for (const segment of splitIntentLines(item.text)) { - if (isCommunicationNoise(segment.text)) continue; - output.push({ text: segment.text, line: item.line + segment.line - 1, type: item.type }); - } - }; - for (let index = 0; index < lines.length; index += 1) { - const raw = lines[index] ?? ''; - const heading = raw.match(/^\s{0,3}#{2,6}\s+(.+?)\s*$/)?.[1]; - if (heading) { - flush(); - sectionType = governanceSectionType(heading, governanceRole); - continue; - } - if (!sectionType) { - flush(); - continue; - } - if (!raw.trim()) { - flush(); - continue; - } - const startsListItem = /^\s*(?:[-*+]|\d+[.)]|\[[ xX]\])\s+/.test(raw); - if (startsListItem) flush(); - const cleaned = raw - .replace(/^\s*[-*+]\s+/, '') - .replace(/^\s*\d+[.)]\s+/, '') - .replace(/^\s*\[[ xX]\]\s+/, '') - .trim(); - if (!cleaned) continue; - if (pending) pending.text = `${pending.text} ${cleaned}`; - else pending = { text: cleaned, line: index + 1, type: sectionType }; - } - flush(); - return output; -} - -function isCommunicationNoise(value: string): boolean { - const normalized = value.trim(); - return /^#{1,6}\s*\d+(?:[.):_-]\d+)*[.):_-]?\s*$/.test(normalized) - || /^(?:-{3,}|_{3,}|\*{3,})$/.test(normalized); -} - -function governanceSectionType(heading: string, role: Exclude): CommunicationType | null { - const normalized = heading.toLowerCase().replace(/[^a-z0-9ąćęłńóśźż]+/gi, ' ').trim(); - if (role === 'human') { - if (/\b(decision|decisions|decyzj|approval|zatwierdzen)/i.test(normalized)) return 'decision'; - if (/\b(instruction|instructions|request|requirements?|goal|scope|polecen|wymagan|zakres|cel)\b/i.test(normalized)) { - return 'request'; - } - return null; - } - if (/\b(actual changes?|result|results|report|unfinished|blockers?|wykonan|zmian|wynik|raport|blokad)\b/i.test(normalized)) { - return 'report'; - } - if (/\b(understanding|execution plan|plan|scope|guardrails?|risks?|hypotheses|code locations?|rozumien|zakres|ryzyk)\b/i.test(normalized)) { - return 'plan'; - } - if (/\b(approval|zatwierdzen)\b/i.test(normalized)) return 'claim'; - return null; -} - -function looksLikeTicket(value: string): boolean { - return /^[A-Za-z][A-Za-z0-9]*-\d+(?:[-_][A-Za-z0-9]+)*$/.test(value); -} - -function normalizeRole(value: string | null): CommunicationRole { - if (/^agents?$/i.test(value ?? '')) return 'agent'; - if (/^(human|humans|user|users|person)$/i.test(value ?? '')) return 'human'; - return 'unknown'; -} - -function normalizeType(value: string | null): CommunicationType { - const normalized = value?.toLowerCase(); - return isCommunicationType(normalized ?? '') ? normalized as CommunicationType : 'message'; -} - -function isCommunicationType(value: string): boolean { - return ['request', 'plan', 'decision', 'message', 'report', 'result', 'claim'].includes(value.toLowerCase()); -} - -function semanticsFor(type: CommunicationType, role: CommunicationRole): { lifecycle: LifecycleStatus; epistemicClass: EpistemicClass } { - if (type === 'plan') return { lifecycle: 'planned', epistemicClass: 'plan' }; - if (type === 'report' || type === 'result' || type === 'claim') return { lifecycle: 'implemented', epistemicClass: 'claim' }; - if (type === 'decision') return { lifecycle: 'completed', epistemicClass: 'declaration' }; - return { lifecycle: 'proposed', epistemicClass: role === 'agent' ? 'claim' : 'declaration' }; -} - -function first(...values: Array): string | null { - return values.find((value) => typeof value === 'string' && Boolean(value.trim()))?.trim() ?? null; -} - -function listValue(value: string | null): string[] { - if (!value) return []; - const stripped = value.replace(/^\[|\]$/g, ''); - return [...new Set(stripped.split(',').map((item) => unquote(item.trim())).filter(Boolean))].sort(); -} - -function unquote(value: string): string { - return value.replace(/^['"]|['"]$/g, '').trim(); -} - -function validTimestamp(value: string | null): string | null { - if (!value) return null; - const parsed = new Date(value); - return Number.isNaN(parsed.valueOf()) ? null : parsed.toISOString(); -} diff --git a/src/extractors/markdown-llm-helpers.ts b/src/extractors/markdown-llm-helpers.ts new file mode 100644 index 0000000..1eef97c --- /dev/null +++ b/src/extractors/markdown-llm-helpers.ts @@ -0,0 +1,383 @@ +import { promises as fs } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import type { T2CConfig } from '../config/env.js'; +import { pathExists } from '../core/io.js'; +import { buildRecord, withRecordGeneration } from '../core/record.js'; +import type { + ExtractionResult, + IntentAction, + IntentRecord, + LlmResponseMetadata, + PipelineStageAudit, +} from '../core/types.js'; +import { openRouterAuditConfiguration } from '../llm/audit.js'; +import { OpenRouterClient } from '../llm/openrouter.js'; +import { StructuredResponseError, structuredSchema as s, type StructuredSchema } from '../llm/structured-schema.js'; +import { T2C_VERSION } from '../version.js'; +import { mapConcurrent } from './docs-chunks.js'; + +export interface MarkdownEnrichment { + recordId: string; + actor: string | null; + action: IntentAction; + object: string; + polarity: 'positive' | 'negative'; + confidence: number; + basis: string[]; + target: { paths: string[]; symbols: string[]; tickets: string[]; versions: string[] }; + acceptanceEvidence: string[]; +} + +export interface MarkdownResponse { + enrichments: MarkdownEnrichment[]; +} + +export interface CoveredBatch { + enrichments: Map; + metadataByRecord: Map; + responses: LlmResponseMetadata[]; +} + +export const MARKDOWN_ACTIONS = [ + 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', + 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', +] as const satisfies readonly IntentAction[]; + +/** Keeps one provider request bounded even for repository-sized backlogs. */ +export const MARKDOWN_LLM_BATCH_RECORDS = 32; + +export class MarkdownAttemptError extends Error { + constructor(readonly failure: unknown, readonly responses: LlmResponseMetadata[]) { + super(failure instanceof Error ? failure.message : String(failure)); + this.name = 'MarkdownAttemptError'; + } +} + +export async function enrichMarkdownRecords( + client: OpenRouterClient, + prompt: string, + model: string, + records: IntentRecord[], + concurrency: number, +): Promise<{ enrichments: Map; responseByRecord: Map; responses: LlmResponseMetadata[] }> { + const responses: LlmResponseMetadata[] = []; + const enrichments = new Map(); + const responseByRecord = new Map(); + const batches: IntentRecord[][] = []; + for (let offset = 0; offset < records.length; offset += MARKDOWN_LLM_BATCH_RECORDS) { + batches.push(records.slice(offset, offset + MARKDOWN_LLM_BATCH_RECORDS)); + } + const outcomes = await mapConcurrent(batches, concurrency, async (batch) => { + try { + const corrected = await enrichBatchCovering(client, prompt, model, batch); + return { ok: true as const, batch, corrected }; + } catch (error) { + return { + ok: false as const, + failure: error instanceof MarkdownAttemptError ? error.failure : error, + responses: error instanceof MarkdownAttemptError + ? error.responses + : [], + }; + } + }); + responses.push(...outcomes.flatMap((outcome) => (outcome.ok ? outcome.corrected.responses : outcome.responses))); + const failed = outcomes.find((outcome) => !outcome.ok); + if (failed && !failed.ok) throw new MarkdownAttemptError(failed.failure, responses); + + for (const outcome of outcomes) { + if (!outcome.ok) continue; + const { batch, corrected } = outcome; + for (const record of batch) { + const enrichment = corrected.enrichments.get(record.id); + if (!enrichment) continue; + enrichments.set(record.id, enrichment); + const metadata = corrected.metadataByRecord.get(record.id); + if (metadata) responseByRecord.set(record.id, metadata); + } + } + return { enrichments, responseByRecord, responses }; +} + +/** + * Enriches every record of a batch, splitting the batch when a model truncates. + * + * Truncation is length-driven, so re-asking the same 32 records the same way + * reproduces it; halving the uncovered remainder is what actually converges. + * Splitting also keeps `require-llm` honest: partial coverage would otherwise + * be a silent per-record deterministic fallback inside a run that promised + * none. A single record the model still will not enrich is a real failure. + */ +async function enrichBatchCovering( + client: OpenRouterClient, + prompt: string, + model: string, + batch: IntentRecord[], +): Promise { + let attempt: Awaited>; + try { + attempt = await enrichMarkdownBatchWithCorrection(client, [ + { role: 'system', content: prompt }, + { role: 'user', content: JSON.stringify({ records: batch.map(promptRecord) }) }, + ], markdownResponseContract(batch.length), model, batch); + } catch (error) { + if (batch.length === 1) throw error; + return await enrichSplitBatch(client, prompt, model, batch, emptyCoverage(error)); + } + // Provenance is per record, not per batch: a record answered by the split + // retry must carry that response's ID, or the audit would credit it to a + // response that never mentioned it. + const metadataByRecord = new Map( + [...attempt.enrichments.keys()].map((recordId) => [recordId, attempt.metadata]), + ); + + const uncovered = batch.filter((record) => !attempt.enrichments.has(record.id)); + if (uncovered.length === 0) { + return { enrichments: attempt.enrichments, metadataByRecord, responses: attempt.responses }; + } + if (batch.length === 1) { + throw new MarkdownAttemptError( + new Error(`Structured response omitted the only requested record: ${batch[0]?.id}`), + attempt.responses, + ); + } + return await enrichSplitBatch(client, prompt, model, uncovered, { + enrichments: attempt.enrichments, + metadataByRecord, + responses: attempt.responses, + }); +} + +/** Re-asks for exactly the uncovered records, in halves, merging what returns. */ +async function enrichSplitBatch( + client: OpenRouterClient, + prompt: string, + model: string, + uncovered: IntentRecord[], + covered: CoveredBatch, +): Promise { + const half = Math.ceil(uncovered.length / 2); + const halves = [uncovered.slice(0, half), uncovered.slice(half)].filter((part) => part.length > 0); + const parts: CoveredBatch[] = []; + for (const part of halves) parts.push(await enrichBatchCovering(client, prompt, model, part)); + + return { + enrichments: new Map([ + ...covered.enrichments, + ...parts.flatMap((part) => [...part.enrichments]), + ]), + metadataByRecord: new Map([ + ...covered.metadataByRecord, + ...parts.flatMap((part) => [...part.metadataByRecord]), + ]), + responses: [...covered.responses, ...parts.flatMap((part) => part.responses)], + }; +} + +/** The responses a failed attempt still produced, with nothing covered. */ +function emptyCoverage(error: unknown): CoveredBatch { + return { + enrichments: new Map(), + metadataByRecord: new Map(), + responses: error instanceof MarkdownAttemptError ? error.responses : [], + }; +} + +async function enrichMarkdownBatchWithCorrection( + client: OpenRouterClient, + baseMessages: Array<{ role: 'system' | 'user'; content: string }>, + contract: StructuredSchema, + model: string, + batch: IntentRecord[], +): Promise<{ + enrichments: Map; + metadata: LlmResponseMetadata; + responses: LlmResponseMetadata[]; +}> { + const responses: LlmResponseMetadata[] = []; + let correction: string | null = null; + for (let attempt = 0; attempt < 2; attempt += 1) { + try { + const completion = await client.chatStructuredWithMetadata([ + ...baseMessages, + ...(correction ? [{ + role: 'user' as const, + content: `The previous response was rejected: ${correction}\n` + + 'Correct exactly that violation and re-emit the full object. Do not add, rename, or omit properties.\n' + + `The exact required JSON Schema is: ${JSON.stringify(contract.jsonSchema)}`, + }] : []), + ], 't2c_markdown_intent_enrichment', contract, model); + responses.push(completion.metadata); + try { + return { + enrichments: validateEnrichments(completion.value.enrichments, batch), + metadata: completion.metadata, + responses, + }; + } catch (error) { + if (attempt === 0) { + correction = error instanceof Error ? error.message : String(error); + continue; + } + throw new MarkdownAttemptError(error, [...responses]); + } + } catch (error) { + if (error instanceof MarkdownAttemptError) throw error; + if (error instanceof StructuredResponseError) { + if (error.responseMetadata) responses.push(error.responseMetadata); + if (attempt === 0) { + correction = error.message; + continue; + } + } + throw new MarkdownAttemptError(error, [...responses]); + } + } + throw new MarkdownAttemptError(new Error('Markdown correction retry budget exhausted'), responses); +} + +export function promptRecord(record: IntentRecord): Record { + return { + recordId: record.id, + sourceKind: record.source.kind, + sourcePath: record.source.path, + sourceLines: record.source.lines, + text: record.statement.text, + structural: { + lifecycle: record.lifecycle.status, + modality: record.statement.modality, + subject: record.statement.subject, + checked: record.metadata.checked ?? null, + headingPath: record.metadata.headingPath ?? [], + version: record.metadata.version ?? null, + releaseDate: record.metadata.releaseDate ?? null, + category: record.metadata.category ?? null, + }, + }; +} + +export function validateEnrichments(values: MarkdownEnrichment[] | undefined, records: IntentRecord[]): Map { + if (!Array.isArray(values)) throw new Error('Structured response does not contain enrichments'); + const expected = new Set(records.map((record) => record.id)); + const output = new Map(); + for (const value of values) { + if (!expected.has(value.recordId)) throw new Error(`Structured response contains unknown recordId: ${value.recordId}`); + if (output.has(value.recordId)) throw new Error(`Structured response duplicates recordId: ${value.recordId}`); + output.set(value.recordId, value); + } + // Partial coverage is not a violation here; the caller re-asks for exactly + // the records the model left out. + return output; +} + +export function enrichRecord( + record: IntentRecord, + enrichment: MarkdownEnrichment, + config: T2CConfig, + response: LlmResponseMetadata, +): IntentRecord { + const target = { + paths: [...record.statement.target.paths, ...(enrichment.target?.paths ?? [])], + symbols: [...record.statement.target.symbols, ...(enrichment.target?.symbols ?? [])], + tickets: [...record.statement.target.tickets, ...(enrichment.target?.tickets ?? [])], + versions: [...record.statement.target.versions, ...(enrichment.target?.versions ?? [])], + }; + return buildRecord({ + kind: record.statement.kind, + actor: enrichment.actor ?? record.statement.actor, + action: enrichment.action, + subject: record.statement.subject, + object: enrichment.object.trim() || record.statement.object, + target, + modality: record.statement.modality, + polarity: enrichment.polarity, + text: record.statement.text, + lifecycle: record.lifecycle.status, + sourceKind: record.source.kind, + sourcePath: record.source.path, + sourceLines: record.source.lines, + revision: record.source.revision, + symbol: record.source.symbol, + commitIndex: record.source.commitIndex, + extractor: record.source.kind === 'todo' + ? 't2c/markdown-todo-openrouter@1' + : 't2c/markdown-changelog-openrouter@1', + rawExcerpt: record.source.rawExcerpt, + epistemicClass: record.epistemic.class, + confidence: Math.min(0.94, Math.max(0.05, enrichment.confidence)), + basis: [...record.epistemic.basis, 'openrouter_markdown_enrichment', ...enrichment.basis], + observedAt: record.observedAt, + generation: { + requested: 'llm', used: 'llm', provider: response.provider ?? 'openrouter', + model: response.model ?? config.openRouter.markdownModel, responseId: response.responseId, + }, + metadata: { + ...record.metadata, + llmUsed: true, + acceptanceEvidence: enrichment.acceptanceEvidence, + response, + }, + }); +} + +export function markDeterministic(records: IntentRecord[], degraded: boolean, fallbackReason: string | null): IntentRecord[] { + return records.map((record) => { + const marked = withRecordGeneration(record, { + requested: degraded ? 'llm' : 'deterministic', used: 'deterministic', degraded, fallbackReason, + }); + return { ...marked, metadata: { ...marked.metadata, llmUsed: false } }; + }); +} + +export interface StageAuditInput { + status: PipelineStageAudit['status']; + requestedMode: PipelineStageAudit['requestedMode']; + effectiveMode: PipelineStageAudit['effectiveMode']; + degraded: boolean; + result: ExtractionResult; + model: string | null; + reason: PipelineStageAudit['reason']; + durationMs: number; + responses: LlmResponseMetadata[]; + config: T2CConfig; +} + +export function stageAudit(input: StageAuditInput): PipelineStageAudit { + return { + runtimeVersion: T2C_VERSION, + configuration: openRouterAuditConfiguration(input.config, input.model), + status: input.status, + requestedMode: input.requestedMode, + effectiveMode: input.effectiveMode, + degraded: input.degraded, + recordCount: input.result.records.length, + warningCount: input.result.warnings.length, + model: input.model, + durationMs: input.durationMs, + reason: input.reason, + responses: input.responses, + }; +} + +export async function readPrompt(name: string): Promise { + const promptPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../prompts', name); + if (!(await pathExists(promptPath))) throw new Error(`Prompt not found: ${promptPath}`); + return fs.readFile(promptPath, 'utf8'); +} + +function markdownResponseContract(batchSize: number): StructuredSchema { + const strings = () => s.array(s.string()); + const enrichment = s.object({ + recordId: s.string(), + actor: s.nullableString(), + action: s.enum(MARKDOWN_ACTIONS), + object: s.string(), + polarity: s.enum(['positive', 'negative']), + confidence: s.number({ minimum: 0, maximum: 0.94 }), + basis: strings(), + target: s.object({ paths: strings(), symbols: strings(), tickets: strings(), versions: strings() }), + acceptanceEvidence: strings(), + }) satisfies StructuredSchema; + return s.object({ enrichments: s.array(enrichment, { minItems: 1, maxItems: batchSize }) }); +} diff --git a/src/extractors/markdown-llm.ts b/src/extractors/markdown-llm.ts index 0bfbf31..ef39a46 100644 --- a/src/extractors/markdown-llm.ts +++ b/src/extractors/markdown-llm.ts @@ -1,45 +1,21 @@ -import { promises as fs } from 'node:fs'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; import type { T2CConfig } from '../config/env.js'; -import { pathExists } from '../core/io.js'; -import { buildRecord, withRecordGeneration } from '../core/record.js'; +import { extractMarkdownIntent, type MarkdownExtractionOptions } from './markdown.js'; import type { ExtractionResult, - IntentAction, - IntentRecord, LlmExtractionMode, LlmResponseMetadata, PipelineStageAudit, } from '../core/types.js'; import { classifyLlmFailure, rejectedLlmResponseMetadata, type LlmFailureReason } from '../llm/failure.js'; -import { openRouterAuditConfiguration } from '../llm/audit.js'; import { OpenRouterClient } from '../llm/openrouter.js'; -import { StructuredResponseError, structuredSchema as s, type StructuredSchema } from '../llm/structured-schema.js'; -import { T2C_VERSION } from '../version.js'; -import { mapConcurrent } from './docs-chunks.js'; -import { extractMarkdownIntent, type MarkdownExtractionOptions } from './markdown.js'; - -interface MarkdownEnrichment { - recordId: string; - actor: string | null; - action: IntentAction; - object: string; - polarity: 'positive' | 'negative'; - confidence: number; - basis: string[]; - target: { paths: string[]; symbols: string[]; tickets: string[]; versions: string[] }; - acceptanceEvidence: string[]; -} - -interface MarkdownResponse { enrichments: MarkdownEnrichment[] } - -const MARKDOWN_ACTIONS = [ - 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', - 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', -] as const satisfies readonly IntentAction[]; -/** Keeps one provider request bounded even for repository-sized backlogs. */ -export const MARKDOWN_LLM_BATCH_RECORDS = 32; +import { + enrichMarkdownRecords, + enrichRecord, + markDeterministic, + MarkdownAttemptError, + readPrompt, + stageAudit, +} from './markdown-llm-helpers.js'; export interface AuditedMarkdownExtractionResult extends ExtractionResult { audit: PipelineStageAudit; @@ -62,62 +38,57 @@ export async function extractMarkdownIntentAudited( if (deterministic.records.length === 0) { return { ...deterministic, - audit: stageAudit('skipped', mode === 'deterministic' ? 'deterministic' : 'llm', 'none', false, deterministic, null, { - code: 'NO_MARKDOWN_RECORDS', message: 'No TODO or CHANGELOG records were available for enrichment', - }, Date.now() - startedAt, [], config), + audit: stageAudit({ + status: 'skipped', + requestedMode: mode === 'deterministic' ? 'deterministic' : 'llm', + effectiveMode: 'none', + degraded: false, + result: deterministic, + model: null, + reason: { code: 'NO_MARKDOWN_RECORDS', message: 'No TODO or CHANGELOG records were available for enrichment' }, + durationMs: Date.now() - startedAt, + responses: [], + config, + }), }; } + if (mode === 'deterministic') { const result = { ...deterministic, records: markDeterministic(deterministic.records, false, null) }; return { ...result, - audit: stageAudit('succeeded', 'deterministic', 'deterministic', false, result, null, null, Date.now() - startedAt, [], config), + audit: stageAudit({ + status: 'succeeded', + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + result, + model: null, + reason: null, + durationMs: Date.now() - startedAt, + responses: [], + config, + }), }; } const client = new OpenRouterClient(config.openRouter); if (!client.isConfigured()) { return fallbackOrThrow(deterministic, config, mode, startedAt, { - code: 'LLM_NOT_CONFIGURED', message: 'OPENROUTER_API_KEY is not configured', + code: 'LLM_NOT_CONFIGURED', + message: 'OPENROUTER_API_KEY is not configured', }); } - const responses: LlmResponseMetadata[] = []; try { const prompt = await readPrompt('markdown-to-intent.system.md'); - const enrichments = new Map(); - const responseByRecord = new Map(); - const batches: IntentRecord[][] = []; - for (let offset = 0; offset < deterministic.records.length; offset += MARKDOWN_LLM_BATCH_RECORDS) { - batches.push(deterministic.records.slice(offset, offset + MARKDOWN_LLM_BATCH_RECORDS)); - } - const outcomes = await mapConcurrent(batches, config.markdownConcurrency, async (batch) => { - try { - const corrected = await enrichBatchCovering(client, prompt, config.openRouter.markdownModel, batch); - return { ok: true as const, batch, corrected }; - } catch (error) { - return { - ok: false as const, - failure: error instanceof MarkdownAttemptError ? error.failure : error, - responses: error instanceof MarkdownAttemptError - ? error.responses - : rejectedLlmResponseMetadata(error), - }; - } - }); - responses.push(...outcomes.flatMap((outcome) => ( - outcome.ok ? outcome.corrected.responses : outcome.responses - ))); - const failed = outcomes.find((outcome) => !outcome.ok); - if (failed && !failed.ok) throw new MarkdownAttemptError(failed.failure, []); - for (const outcome of outcomes) { - if (!outcome.ok) continue; - const { batch, corrected } = outcome; - for (const record of batch) { - enrichments.set(record.id, corrected.enrichments.get(record.id)!); - responseByRecord.set(record.id, corrected.metadataByRecord.get(record.id)!); - } - } + const { enrichments, responseByRecord, responses } = await enrichMarkdownRecords( + client, + prompt, + config.openRouter.markdownModel, + deterministic.records, + config.markdownConcurrency, + ); const result: ExtractionResult = { records: deterministic.records.map((record) => enrichRecord( record, @@ -129,176 +100,35 @@ export async function extractMarkdownIntentAudited( }; return { ...result, - audit: stageAudit('succeeded', 'llm', 'llm', false, result, config.openRouter.markdownModel, null, Date.now() - startedAt, responses, config), + audit: stageAudit({ + status: 'succeeded', + requestedMode: 'llm', + effectiveMode: 'llm', + degraded: false, + result, + model: config.openRouter.markdownModel, + reason: null, + durationMs: Date.now() - startedAt, + responses, + config, + }), }; } catch (error) { const failure = error instanceof MarkdownAttemptError ? error.failure : error; const failedResponses = error instanceof MarkdownAttemptError - ? [...responses, ...error.responses] - : [...responses, ...rejectedLlmResponseMetadata(error)]; + ? error.responses + : rejectedLlmResponseMetadata(error); return fallbackOrThrow( - deterministic, config, mode, startedAt, classifyLlmFailure(failure), failedResponses, + deterministic, + config, + mode, + startedAt, + classifyLlmFailure(failure), + failedResponses, ); } } -class MarkdownAttemptError extends Error { - constructor(readonly failure: unknown, readonly responses: LlmResponseMetadata[]) { - super(failure instanceof Error ? failure.message : String(failure)); - this.name = 'MarkdownAttemptError'; - } -} - -/** - * Enriches every record of a batch, splitting the batch when a model truncates. - * - * Truncation is length-driven, so re-asking the same 32 records the same way - * reproduces it; halving the uncovered remainder is what actually converges. - * Splitting also keeps `require-llm` honest: partial coverage would otherwise - * be a silent per-record deterministic fallback inside a run that promised - * none. A single record the model still will not enrich is a real failure. - */ -async function enrichBatchCovering( - client: OpenRouterClient, - prompt: string, - model: string, - batch: IntentRecord[], -): Promise { - let attempt: Awaited>; - try { - attempt = await enrichMarkdownBatchWithCorrection(client, [ - { role: 'system', content: prompt }, - { role: 'user', content: JSON.stringify({ records: batch.map(promptRecord) }) }, - ], markdownResponseContract(batch.length), model, batch); - } catch (error) { - // A malformed response is the same problem as a truncated one, one step - // earlier: measured live, `google/gemini-3.6-flash` answers a 32-record - // batch of this repository with prose instead of JSON, and the corrective - // retry re-asks the same oversized question. Fewer records per request is - // the remedy for both, so the failure splits like a short answer does — - // except for a single record, where it is simply a failure. - if (batch.length === 1) throw error; - return await enrichSplitBatch(client, prompt, model, batch, emptyCoverage(error)); - } - // Provenance is per record, not per batch: a record answered by the split - // retry must carry that response's ID, or the audit would credit it to a - // response that never mentioned it. - const metadataByRecord = new Map( - [...attempt.enrichments.keys()].map((recordId) => [recordId, attempt.metadata]), - ); - - const uncovered = batch.filter((record) => !attempt.enrichments.has(record.id)); - if (uncovered.length === 0) { - return { enrichments: attempt.enrichments, metadataByRecord, responses: attempt.responses }; - } - if (batch.length === 1) { - throw new MarkdownAttemptError( - new Error(`Structured response omitted the only requested record: ${batch[0]?.id}`), - attempt.responses, - ); - } - - return await enrichSplitBatch(client, prompt, model, uncovered, { - enrichments: attempt.enrichments, - metadataByRecord, - responses: attempt.responses, - }); -} - -/** Re-asks for exactly the uncovered records, in halves, merging what returns. */ -async function enrichSplitBatch( - client: OpenRouterClient, - prompt: string, - model: string, - uncovered: IntentRecord[], - covered: CoveredBatch, -): Promise { - const half = Math.ceil(uncovered.length / 2); - const halves = [uncovered.slice(0, half), uncovered.slice(half)].filter((part) => part.length > 0); - const parts: CoveredBatch[] = []; - for (const part of halves) parts.push(await enrichBatchCovering(client, prompt, model, part)); - - return { - enrichments: new Map([ - ...covered.enrichments, - ...parts.flatMap((part) => [...part.enrichments]), - ]), - metadataByRecord: new Map([ - ...covered.metadataByRecord, - ...parts.flatMap((part) => [...part.metadataByRecord]), - ]), - responses: [...covered.responses, ...parts.flatMap((part) => part.responses)], - }; -} - -/** The responses a failed attempt still produced, with nothing covered. */ -function emptyCoverage(error: unknown): CoveredBatch { - return { - enrichments: new Map(), - metadataByRecord: new Map(), - responses: error instanceof MarkdownAttemptError ? error.responses : [], - }; -} - -interface CoveredBatch { - enrichments: Map; - metadataByRecord: Map; - responses: LlmResponseMetadata[]; -} - -async function enrichMarkdownBatchWithCorrection( - client: OpenRouterClient, - baseMessages: Array<{ role: 'system' | 'user'; content: string }>, - contract: StructuredSchema, - model: string, - batch: IntentRecord[], -): Promise<{ - enrichments: Map; - metadata: LlmResponseMetadata; - responses: LlmResponseMetadata[]; -}> { - const responses: LlmResponseMetadata[] = []; - let correction: string | null = null; - for (let attempt = 0; attempt < 2; attempt += 1) { - try { - const completion = await client.chatStructuredWithMetadata([ - ...baseMessages, - ...(correction ? [{ - role: 'user' as const, - content: `The previous response was rejected: ${correction}\n` - + 'Correct exactly that violation and re-emit the full object. Do not add, rename, or omit properties.\n' - + `The exact required JSON Schema is: ${JSON.stringify(contract.jsonSchema)}`, - }] : []), - ], 't2c_markdown_intent_enrichment', contract, model); - responses.push(completion.metadata); - try { - return { - enrichments: validateEnrichments(completion.value.enrichments, batch), - metadata: completion.metadata, - responses, - }; - } catch (error) { - if (attempt === 0) { - correction = error instanceof Error ? error.message : String(error); - continue; - } - throw new MarkdownAttemptError(error, [...responses]); - } - } catch (error) { - if (error instanceof MarkdownAttemptError) throw error; - if (error instanceof StructuredResponseError) { - if (error.responseMetadata) responses.push(error.responseMetadata); - if (attempt === 0) { - correction = error.message; - continue; - } - } - throw new MarkdownAttemptError(error, [...responses]); - } - } - throw new MarkdownAttemptError(new Error('Markdown correction retry budget exhausted'), responses); -} - async function fallbackOrThrow( deterministic: ExtractionResult, config: T2CConfig, @@ -307,7 +137,18 @@ async function fallbackOrThrow( reason: LlmFailureReason, responses: LlmResponseMetadata[] = [], ): Promise { - const failed = stageAudit('failed', 'llm', 'none', true, { records: [], warnings: [] }, config.openRouter.markdownModel, reason, Date.now() - startedAt, responses, config); + const failed = stageAudit({ + status: 'failed', + requestedMode: 'llm', + effectiveMode: 'none', + degraded: true, + result: { records: [], warnings: [] }, + model: config.openRouter.markdownModel, + reason, + durationMs: Date.now() - startedAt, + responses, + config, + }); if (mode === 'require-llm') { throw new MarkdownLlmRequiredError(`TODO/CHANGELOG -> DSL requires LLM: ${reason.message}`, failed); } @@ -318,141 +159,17 @@ async function fallbackOrThrow( }; return { ...result, - audit: stageAudit('fallback', 'llm', 'deterministic', true, result, config.openRouter.markdownModel, reason, Date.now() - startedAt, responses, config), - }; -} - -function promptRecord(record: IntentRecord): Record { - return { - recordId: record.id, - sourceKind: record.source.kind, - sourcePath: record.source.path, - sourceLines: record.source.lines, - text: record.statement.text, - structural: { - lifecycle: record.lifecycle.status, - modality: record.statement.modality, - subject: record.statement.subject, - checked: record.metadata.checked ?? null, - headingPath: record.metadata.headingPath ?? [], - version: record.metadata.version ?? null, - releaseDate: record.metadata.releaseDate ?? null, - category: record.metadata.category ?? null, - }, - }; -} - -function validateEnrichments(values: MarkdownEnrichment[] | undefined, records: IntentRecord[]): Map { - if (!Array.isArray(values)) throw new Error('Structured response does not contain enrichments'); - const expected = new Set(records.map((record) => record.id)); - const output = new Map(); - for (const value of values) { - if (!expected.has(value.recordId)) throw new Error(`Structured response contains unknown recordId: ${value.recordId}`); - if (output.has(value.recordId)) throw new Error(`Structured response duplicates recordId: ${value.recordId}`); - output.set(value.recordId, value); - } - // Partial coverage is not a violation here; the caller re-asks for exactly - // the records the model left out. - return output; -} - -function enrichRecord(record: IntentRecord, enrichment: MarkdownEnrichment, config: T2CConfig, response: LlmResponseMetadata): IntentRecord { - const target = { - paths: [...record.statement.target.paths, ...(enrichment.target?.paths ?? [])], - symbols: [...record.statement.target.symbols, ...(enrichment.target?.symbols ?? [])], - tickets: [...record.statement.target.tickets, ...(enrichment.target?.tickets ?? [])], - versions: [...record.statement.target.versions, ...(enrichment.target?.versions ?? [])], - }; - return buildRecord({ - kind: record.statement.kind, - actor: enrichment.actor ?? record.statement.actor, - action: enrichment.action, - subject: record.statement.subject, - object: enrichment.object.trim() || record.statement.object, - target, - modality: record.statement.modality, - polarity: enrichment.polarity, - text: record.statement.text, - lifecycle: record.lifecycle.status, - sourceKind: record.source.kind, - sourcePath: record.source.path, - sourceLines: record.source.lines, - revision: record.source.revision, - symbol: record.source.symbol, - commitIndex: record.source.commitIndex, - extractor: record.source.kind === 'todo' ? 't2c/markdown-todo-openrouter@1' : 't2c/markdown-changelog-openrouter@1', - rawExcerpt: record.source.rawExcerpt, - epistemicClass: record.epistemic.class, - confidence: Math.min(0.94, Math.max(0.05, enrichment.confidence)), - basis: [...record.epistemic.basis, 'openrouter_markdown_enrichment', ...enrichment.basis], - observedAt: record.observedAt, - generation: { - requested: 'llm', used: 'llm', provider: response.provider ?? 'openrouter', - model: response.model ?? config.openRouter.markdownModel, responseId: response.responseId, - }, - metadata: { - ...record.metadata, - llmUsed: true, - acceptanceEvidence: enrichment.acceptanceEvidence, - response, - }, - }); -} - -function markDeterministic(records: IntentRecord[], degraded: boolean, fallbackReason: string | null): IntentRecord[] { - return records.map((record) => { - const marked = withRecordGeneration(record, { - requested: degraded ? 'llm' : 'deterministic', used: 'deterministic', degraded, fallbackReason, - }); - return { ...marked, metadata: { ...marked.metadata, llmUsed: false } }; - }); -} - -function stageAudit( - status: PipelineStageAudit['status'], - requestedMode: PipelineStageAudit['requestedMode'], - effectiveMode: PipelineStageAudit['effectiveMode'], - degraded: boolean, - result: ExtractionResult, - model: string | null, - reason: PipelineStageAudit['reason'], - durationMs: number, - responses: LlmResponseMetadata[], - config: T2CConfig, -): PipelineStageAudit { - return { - runtimeVersion: T2C_VERSION, - configuration: openRouterAuditConfiguration(config, model), - status, requestedMode, effectiveMode, degraded, recordCount: result.records.length, - warningCount: result.warnings.length, model, durationMs, reason, responses, + audit: stageAudit({ + status: 'fallback', + requestedMode: 'llm', + effectiveMode: 'deterministic', + degraded: true, + result, + model: config.openRouter.markdownModel, + reason, + durationMs: Date.now() - startedAt, + responses, + config, + }), }; } - -async function readPrompt(name: string): Promise { - const promptPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../prompts', name); - if (!(await pathExists(promptPath))) throw new Error(`Prompt not found: ${promptPath}`); - return fs.readFile(promptPath, 'utf8'); -} - -function markdownResponseContract(batchSize: number): StructuredSchema { - const strings = () => s.array(s.string()); - const enrichment = s.object({ - recordId: s.string(), - actor: s.nullableString(), - action: s.enum(MARKDOWN_ACTIONS), - object: s.string(), - polarity: s.enum(['positive', 'negative']), - confidence: s.number({ minimum: 0, maximum: 0.94 }), - basis: strings(), - target: s.object({ paths: strings(), symbols: strings(), tickets: strings(), versions: strings() }), - acceptanceEvidence: strings(), - }) satisfies StructuredSchema; - // The floor used to equal the batch size, which made an incomplete response - // unreadable: a model that emitted 27 of 32 enrichments failed schema - // validation, and every enrichment it did produce was discarded with it. - // Measured live, both `qwen/qwen3.7-plus` and `google/gemini-3.6-flash` - // truncate long batches this way. Each enrichment names its `recordId`, so a - // short response is attributable; coverage is enforced by splitting the - // uncovered records into a smaller batch instead of by the schema. - return s.object({ enrichments: s.array(enrichment, { minItems: 1, maxItems: batchSize }) }); -} diff --git a/src/extractors/nl-llm-helpers.ts b/src/extractors/nl-llm-helpers.ts new file mode 100644 index 0000000..e6656f7 --- /dev/null +++ b/src/extractors/nl-llm-helpers.ts @@ -0,0 +1,256 @@ +import { promises as fs } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import type { T2CConfig } from '../config/env.js'; +import { pathExists } from '../core/io.js'; +import { buildRecord, withRecordGeneration } from '../core/record.js'; +import type { + ExtractionResult, + IntentAction, + IntentRecord, + LlmResponseMetadata, + Modality, + PipelineStageAudit, + LifecycleStatus, +} from '../core/types.js'; +import { openRouterAuditConfiguration } from '../llm/audit.js'; +import { OpenRouterClient, type OpenRouterResult } from '../llm/openrouter.js'; +import { StructuredResponseError, structuredSchema as s, type StructuredSchema } from '../llm/structured-schema.js'; +import { T2C_VERSION } from '../version.js'; + +export interface RawNlRecord { + kind: string; + actor: string | null; + action: IntentAction; + subject: string | null; + object: string; + modality: Modality; + polarity: 'positive' | 'negative'; + lifecycle: LifecycleStatus; + confidence: number; + basis: string[]; + target: { paths: string[]; symbols: string[]; tickets: string[]; versions: string[] }; + sourceLines: { start: number; end: number }; + text: string; +} + +export interface NlResponse { records: RawNlRecord[] } + +export class NlAttemptError extends Error { + constructor(readonly failure: unknown, readonly responses: LlmResponseMetadata[]) { + super(failure instanceof Error ? failure.message : String(failure)); + this.name = 'NlAttemptError'; + } +} + +export async function extractNlWithCorrection( + client: OpenRouterClient, + baseMessages: Array<{ role: 'system' | 'user'; content: string }>, + model: string, +): Promise<{ completion: OpenRouterResult; responses: LlmResponseMetadata[] }> { + const responses: LlmResponseMetadata[] = []; + let correction: string | null = null; + for (let attempt = 0; attempt < 2; attempt += 1) { + try { + const completion = await client.chatStructuredWithMetadata([ + ...baseMessages, + ...(correction ? [{ + role: 'user' as const, + content: `The previous response was rejected: ${correction}\n` + + 'Correct exactly that violation and re-emit the full object. Do not add, rename, or omit properties.\n' + + `The exact required JSON Schema is: ${JSON.stringify(NL_RESPONSE_CONTRACT.jsonSchema)}`, + }] : []), + ], 't2c_natural_language_intent', NL_RESPONSE_CONTRACT, model); + responses.push(completion.metadata); + return { completion, responses }; + } catch (error) { + if (error instanceof StructuredResponseError) { + if (error.responseMetadata) responses.push(error.responseMetadata); + if (attempt === 0) { + correction = error.message; + continue; + } + } + throw new NlAttemptError(error, [...responses]); + } + } + throw new NlAttemptError(new Error('NL correction retry budget exhausted'), responses); +} + +export function markDeterministicNlRecords(records: IntentRecord[], degraded: boolean, fallbackReason: string | null): IntentRecord[] { + return records.map((record) => withRecordGeneration(record, { + requested: degraded ? 'llm' : 'deterministic', used: 'deterministic', degraded, fallbackReason, + })); +} + +export function toIntentRecord(raw: RawNlRecord, sourcePath: string, body: string, maxLine: number, config: T2CConfig, response: LlmResponseMetadata): IntentRecord { + const lines = body.split(/\r?\n/); + const { start, end, excerpt } = sourceExcerpt(raw, lines, maxLine); + const action = resolveAction(raw.action); + const normalizedText = nonEmptyText(raw.text); + const { object, missingFields } = resolveObject(raw, action, normalizedText); + const statementText = normalizedText ?? object; + return buildRecord({ + kind: raw.kind || 'declared_intent', + actor: raw.actor ?? null, + action, + subject: raw.subject ?? null, + object, + target: raw.target, + modality: allowedModality(raw.modality) ? raw.modality : 'unknown', + polarity: raw.polarity === 'negative' ? 'negative' : 'positive', + text: statementText, + lifecycle: 'proposed', + sourceKind: 'nl', + sourcePath, + sourceLines: { start, end }, + extractor: 't2c/nl-openrouter@1', + rawExcerpt: excerpt || statementText, + epistemicClass: 'llm_inference', + confidence: Math.min(0.9, Math.max(0.05, Number(raw.confidence) || 0.5)), + basis: [...new Set(['openrouter_structured_extraction', ...(raw.basis ?? [])])], + generation: { + requested: 'llm', used: 'llm', provider: response.provider ?? 'openrouter', + model: response.model ?? config.openRouter.nlModel, responseId: response.responseId, + }, + metadata: { + missingFields, + llmUsed: true, + response, + }, + }); +} + +export function nlStageAudit(input: { + status: PipelineStageAudit['status']; + requestedMode: PipelineStageAudit['requestedMode']; + effectiveMode: PipelineStageAudit['effectiveMode']; + degraded: boolean; + result: ExtractionResult; + model: string | null; + reason: PipelineStageAudit['reason']; + durationMs: number; + responses: LlmResponseMetadata[]; + config: T2CConfig; +}): PipelineStageAudit { + return { + runtimeVersion: T2C_VERSION, + configuration: openRouterAuditConfiguration(input.config, input.model), + status: input.status, + requestedMode: input.requestedMode, + effectiveMode: input.effectiveMode, + degraded: input.degraded, + recordCount: input.result.records.length, + warningCount: input.result.warnings.length, + model: input.model, + durationMs: input.durationMs, + reason: input.reason, + responses: input.responses, + }; +} + +export async function readPrompt(name: string): Promise { + const promptPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../prompts', name); + if (!(await pathExists(promptPath))) throw new Error(`Prompt not found: ${promptPath}`); + return fs.readFile(promptPath, 'utf8'); +} + +function sourceExcerpt( + raw: RawNlRecord, + lines: string[], + maxLine: number, +): { start: number; end: number; excerpt: string } { + const start = clampLine(raw.sourceLines?.start ?? 1, 1, maxLine); + const end = clampLine(raw.sourceLines?.end ?? start, start, maxLine); + return { start, end, excerpt: lines.slice(start - 1, end).join('\n').slice(0, 2000) }; +} + +function resolveAction(rawAction: string): IntentAction { + return allowedAction(rawAction) ? rawAction : 'unknown'; +} + +/** + * `statement.object` is free text, but neighbouring fields (`action`, `modality`, + * `lifecycle`) are enums that include the literal `unknown`. Models copy that + * token into the free-text slot, and the runtime used to accept it as content. + * + * That is worse than an empty field: `object` seeds the linker's keyword bucket, + * so every record carrying the placeholder would collide with every other one. + * A placeholder is therefore treated as an absent value — the statement falls + * back to its own text, and the gap is recorded in `missingFields` so the + * diagnostics can see it. + */ +const OBJECT_PLACEHOLDERS = new Set(['unknown', 'unspecified', 'none', 'null', 'n/a', 'na', '-', 'brak', 'nieznany', 'nieokreślony']); + +function nonEmptyText(value: unknown): string | null { + return typeof value === 'string' && value.trim() ? value.trim() : null; +} + +function isPlaceholder(value: unknown): boolean { + const text = nonEmptyText(value); + return text === null || OBJECT_PLACEHOLDERS.has(text.toLowerCase()); +} + +function resolveObject( + raw: RawNlRecord, + action: IntentAction, + normalizedText: string | null, +): { object: string; missingFields: string[] } { + const missingFields: string[] = []; + if (action === 'unknown') missingFields.push('action'); + if (normalizedText === null) { + missingFields.push('text'); + } + + if (!isPlaceholder(raw.object)) return { object: nonEmptyText(raw.object) as string, missingFields }; + + missingFields.push('object'); + const fallback = normalizedText; + if (fallback === null) { + return { object: 'unspecified', missingFields }; + } + return { object: isPlaceholder(fallback) ? 'unspecified' : (fallback as string), missingFields }; +} + +function clampLine(value: number, min: number, max: number): number { + return Math.max(min, Math.min(max, Math.trunc(value))); +} + +function allowedAction(value: string): value is IntentAction { + return NL_ACTIONS.includes(value); +} + +function allowedModality(value: string): value is Modality { + return NL_MODALITIES.includes(value); +} + +const NL_ACTIONS = [ + 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', + 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', +] as const; +const NL_MODALITIES = ['required', 'recommended', 'optional', 'observed', 'claimed', 'unknown'] as const; +const NL_LIFECYCLES = [ + 'proposed', 'planned', 'in_progress', 'implemented', 'verified', 'released', 'completed', 'blocked', 'unknown', +] as const; + +const nlStrings = () => s.array(s.string()); +const NL_RECORD_CONTRACT = s.object({ + kind: s.string(), + actor: s.nullableString(), + action: s.enum(NL_ACTIONS), + subject: s.nullableString(), + object: s.string({ + minLength: 1, + description: 'Concrete thing the statement is about, in the source language. Free text: never the literal word "unknown" — quote the subject matter instead.', + }), + modality: s.enum(NL_MODALITIES), + polarity: s.enum(['positive', 'negative']), + lifecycle: s.enum(NL_LIFECYCLES), + confidence: s.number({ minimum: 0, maximum: 0.9 }), + basis: nlStrings(), + target: s.object({ paths: nlStrings(), symbols: nlStrings(), tickets: nlStrings(), versions: nlStrings() }), + sourceLines: s.object({ start: s.integer({ minimum: 1 }), end: s.integer({ minimum: 1 }) }), + text: s.string(), +}) satisfies StructuredSchema; + +const NL_RESPONSE_CONTRACT = s.object({ records: s.array(NL_RECORD_CONTRACT) }) satisfies StructuredSchema; diff --git a/src/extractors/nl-llm.ts b/src/extractors/nl-llm.ts index 8929c81..5d29ce9 100644 --- a/src/extractors/nl-llm.ts +++ b/src/extractors/nl-llm.ts @@ -1,43 +1,23 @@ -import { promises as fs } from 'node:fs'; import path from 'node:path'; -import { fileURLToPath } from 'node:url'; import type { T2CConfig } from '../config/env.js'; -import { pathExists, readText, relativePosix } from '../core/io.js'; -import { buildRecord, withRecordGeneration } from '../core/record.js'; +import { readText, relativePosix } from '../core/io.js'; import type { ExtractionResult, - IntentAction, - IntentRecord, - LifecycleStatus, LlmResponseMetadata, - Modality, NlExtractionMode, PipelineStageAudit, } from '../core/types.js'; import { classifyLlmFailure, rejectedLlmResponseMetadata } from '../llm/failure.js'; -import { openRouterAuditConfiguration } from '../llm/audit.js'; -import { OpenRouterClient, type OpenRouterResult } from '../llm/openrouter.js'; -import { StructuredResponseError, structuredSchema as s, type StructuredSchema } from '../llm/structured-schema.js'; -import { T2C_VERSION } from '../version.js'; +import { OpenRouterClient } from '../llm/openrouter.js'; import { assertNlExtractionOptions, extractNlIntent, type NlExtractionOptions } from './nl.js'; - -interface RawNlRecord { - kind: string; - actor: string | null; - action: IntentAction; - subject: string | null; - object: string; - modality: Modality; - polarity: 'positive' | 'negative'; - lifecycle: LifecycleStatus; - confidence: number; - basis: string[]; - target: { paths: string[]; symbols: string[]; tickets: string[]; versions: string[] }; - sourceLines: { start: number; end: number }; - text: string; -} - -interface NlResponse { records: RawNlRecord[] } +import { + extractNlWithCorrection, + markDeterministicNlRecords, + NlAttemptError, + nlStageAudit, + readPrompt, + toIntentRecord, +} from './nl-llm-helpers.js'; export interface AuditedNlExtractionResult extends ExtractionResult { audit: PipelineStageAudit; @@ -57,12 +37,24 @@ export async function extractNlIntentAudited( ): Promise { assertNlExtractionOptions(options); const startedAt = Date.now(); + if (mode === 'deterministic') { const result = await extractNlIntent(options, config); return { ...result, - records: markDeterministic(result.records, false, null), - audit: audit('succeeded', 'deterministic', 'deterministic', false, result, null, null, Date.now() - startedAt, [], config), + records: markDeterministicNlRecords(result.records, false, null), + audit: nlStageAudit({ + status: 'succeeded', + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + result, + model: null, + reason: null, + durationMs: Date.now() - startedAt, + responses: [], + config, + }), }; } @@ -94,58 +86,33 @@ export async function extractNlIntentAudited( }; return { ...result, - audit: audit('succeeded', 'llm', 'llm', false, result, config.openRouter.nlModel, null, Date.now() - startedAt, responses, config), + audit: nlStageAudit({ + status: 'succeeded', + requestedMode: 'llm', + effectiveMode: 'llm', + degraded: false, + result, + model: config.openRouter.nlModel, + reason: null, + durationMs: Date.now() - startedAt, + responses, + config, + }), }; } catch (error) { const failure = error instanceof NlAttemptError ? error.failure : error; const responses = error instanceof NlAttemptError ? error.responses : rejectedLlmResponseMetadata(error); return fallbackOrThrow( - options, config, mode, startedAt, classifyLlmFailure(failure), responses, + options, + config, + mode, + startedAt, + classifyLlmFailure(failure), + responses, ); } } -class NlAttemptError extends Error { - constructor(readonly failure: unknown, readonly responses: LlmResponseMetadata[]) { - super(failure instanceof Error ? failure.message : String(failure)); - this.name = 'NlAttemptError'; - } -} - -async function extractNlWithCorrection( - client: OpenRouterClient, - baseMessages: Array<{ role: 'system' | 'user'; content: string }>, - model: string, -): Promise<{ completion: OpenRouterResult; responses: LlmResponseMetadata[] }> { - const responses: LlmResponseMetadata[] = []; - let correction: string | null = null; - for (let attempt = 0; attempt < 2; attempt += 1) { - try { - const completion = await client.chatStructuredWithMetadata([ - ...baseMessages, - ...(correction ? [{ - role: 'user' as const, - content: `The previous response was rejected: ${correction}\n` - + 'Correct exactly that violation and re-emit the full object. Do not add, rename, or omit properties.\n' - + `The exact required JSON Schema is: ${JSON.stringify(NL_RESPONSE_CONTRACT.jsonSchema)}`, - }] : []), - ], 't2c_natural_language_intent', NL_RESPONSE_CONTRACT, model); - responses.push(completion.metadata); - return { completion, responses }; - } catch (error) { - if (error instanceof StructuredResponseError) { - if (error.responseMetadata) responses.push(error.responseMetadata); - if (attempt === 0) { - correction = error.message; - continue; - } - } - throw new NlAttemptError(error, [...responses]); - } - } - throw new NlAttemptError(new Error('NL correction retry budget exhausted'), responses); -} - async function fallbackOrThrow( options: NlExtractionOptions, config: T2CConfig, @@ -154,184 +121,43 @@ async function fallbackOrThrow( reason: { code: string; message: string }, responses: LlmResponseMetadata[] = [], ): Promise { - const failedAudit = audit('failed', 'llm', 'none', true, { records: [], warnings: [] }, config.openRouter.nlModel, reason, Date.now() - startedAt, responses, config); - if (mode === 'require-llm') throw new NlLlmRequiredError(`NL -> DSL requires LLM: ${reason.message}`, failedAudit); - - const deterministic = await extractNlIntent(options, config); - const warning = `NL -> DSL used deterministic fallback (${reason.code}): ${reason.message}`; - const result = { records: markDeterministic(deterministic.records, true, reason.code), warnings: [...deterministic.warnings, warning] }; - return { - ...result, - audit: audit('fallback', 'llm', 'deterministic', true, result, config.openRouter.nlModel, reason, Date.now() - startedAt, responses, config), - }; -} - -function markDeterministic(records: IntentRecord[], degraded: boolean, fallbackReason: string | null): IntentRecord[] { - return records.map((record) => withRecordGeneration(record, { - requested: degraded ? 'llm' : 'deterministic', used: 'deterministic', degraded, fallbackReason, - })); -} - -function toIntentRecord(raw: RawNlRecord, sourcePath: string, body: string, maxLine: number, config: T2CConfig, response: LlmResponseMetadata): IntentRecord { - const lines = body.split(/\r?\n/); - const { start, end, excerpt } = sourceExcerpt(raw, lines, maxLine); - const action = resolveAction(raw.action); - const normalizedText = nonEmptyText(raw.text); - const { object, missingFields } = resolveObject(raw, action, normalizedText); - const statementText = normalizedText ?? object; - return buildRecord({ - kind: raw.kind || 'declared_intent', - actor: raw.actor ?? null, - action, - subject: raw.subject ?? null, - object, - target: raw.target, - modality: allowedModality(raw.modality) ? raw.modality : 'unknown', - polarity: raw.polarity === 'negative' ? 'negative' : 'positive', - text: statementText, - lifecycle: 'proposed', - sourceKind: 'nl', - sourcePath, - sourceLines: { start, end }, - extractor: 't2c/nl-openrouter@1', - rawExcerpt: excerpt || statementText, - epistemicClass: 'llm_inference', - confidence: Math.min(0.9, Math.max(0.05, Number(raw.confidence) || 0.5)), - basis: [...new Set(['openrouter_structured_extraction', ...(raw.basis ?? [])])], - generation: { - requested: 'llm', used: 'llm', provider: response.provider ?? 'openrouter', - model: response.model ?? config.openRouter.nlModel, responseId: response.responseId, - }, - metadata: { - missingFields, - llmUsed: true, - response, - }, + const failedAudit = nlStageAudit({ + status: 'failed', + requestedMode: 'llm', + effectiveMode: 'none', + degraded: true, + result: { records: [], warnings: [] }, + model: config.openRouter.nlModel, + reason, + durationMs: Date.now() - startedAt, + responses, + config, }); -} -function sourceExcerpt( - raw: RawNlRecord, - lines: string[], - maxLine: number, -): { start: number; end: number; excerpt: string } { - const start = clampLine(raw.sourceLines?.start ?? 1, 1, maxLine); - const end = clampLine(raw.sourceLines?.end ?? start, start, maxLine); - return { start, end, excerpt: lines.slice(start - 1, end).join('\n').slice(0, 2000) }; -} - -function resolveAction(rawAction: string): IntentAction { - return allowedAction(rawAction) ? rawAction : 'unknown'; -} - -/** - * `statement.object` is free text, but neighbouring fields (`action`, `modality`, - * `lifecycle`) are enums that include the literal `unknown`. Models copy that - * token into the free-text slot, and the runtime used to accept it as content. - * - * That is worse than an empty field: `object` seeds the linker's keyword bucket, - * so every record carrying the placeholder would collide with every other one. - * A placeholder is therefore treated as an absent value — the statement falls - * back to its own text, and the gap is recorded in `missingFields` so the - * diagnostics can see it. - */ -const OBJECT_PLACEHOLDERS = new Set(['unknown', 'unspecified', 'none', 'null', 'n/a', 'na', '-', 'brak', 'nieznany', 'nieokreślony']); - -function nonEmptyText(value: unknown): string | null { - return typeof value === 'string' && value.trim() ? value.trim() : null; -} - -function isPlaceholder(value: unknown): boolean { - const text = nonEmptyText(value); - return text === null || OBJECT_PLACEHOLDERS.has(text.toLowerCase()); -} - -function resolveObject( - raw: RawNlRecord, - action: IntentAction, - normalizedText: string | null, -): { object: string; missingFields: string[] } { - const missingFields: string[] = []; - if (action === 'unknown') missingFields.push('action'); - if (normalizedText === null) { - missingFields.push('text'); + if (mode === 'require-llm') { + throw new NlLlmRequiredError(`NL -> DSL requires LLM: ${reason.message}`, failedAudit); } - if (!isPlaceholder(raw.object)) return { object: nonEmptyText(raw.object) as string, missingFields }; - - missingFields.push('object'); - // Falling back to the statement text keeps the record linkable by its own - // wording instead of by a placeholder shared with unrelated records. - const fallback = normalizedText; - if (fallback === null) { - return { object: 'unspecified', missingFields }; - } - return { object: isPlaceholder(fallback) ? 'unspecified' : (fallback as string), missingFields }; -} + const deterministic = await extractNlIntent(options, config); + const warning = `NL -> DSL used deterministic fallback (${reason.code}): ${reason.message}`; + const result = { + records: markDeterministicNlRecords(deterministic.records, true, reason.code), + warnings: [...deterministic.warnings, warning], + }; -function audit( - status: PipelineStageAudit['status'], - requestedMode: PipelineStageAudit['requestedMode'], - effectiveMode: PipelineStageAudit['effectiveMode'], - degraded: boolean, - result: ExtractionResult, - model: string | null, - reason: PipelineStageAudit['reason'], - durationMs: number, - responses: LlmResponseMetadata[], - config: T2CConfig, -): PipelineStageAudit { return { - runtimeVersion: T2C_VERSION, - configuration: openRouterAuditConfiguration(config, model), - status, requestedMode, effectiveMode, degraded, recordCount: result.records.length, - warningCount: result.warnings.length, model, durationMs, reason, responses, + ...result, + audit: nlStageAudit({ + status: 'fallback', + requestedMode: 'llm', + effectiveMode: 'deterministic', + degraded: true, + result, + model: config.openRouter.nlModel, + reason, + durationMs: Date.now() - startedAt, + responses, + config, + }), }; } - -function clampLine(value: number, min: number, max: number): number { - return Math.max(min, Math.min(max, Math.trunc(value))); -} - -function allowedAction(value: string): value is IntentAction { - return ['add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown'].includes(value); -} - -function allowedModality(value: string): value is Modality { - return ['required', 'recommended', 'optional', 'observed', 'claimed', 'unknown'].includes(value); -} - -async function readPrompt(name: string): Promise { - const promptPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../prompts', name); - if (!(await pathExists(promptPath))) throw new Error(`Prompt not found: ${promptPath}`); - return fs.readFile(promptPath, 'utf8'); -} - -const NL_ACTIONS = [ - 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', - 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', -] as const; -const NL_MODALITIES = ['required', 'recommended', 'optional', 'observed', 'claimed', 'unknown'] as const; -const NL_LIFECYCLES = [ - 'proposed', 'planned', 'in_progress', 'implemented', 'verified', 'released', 'completed', 'blocked', 'unknown', -] as const; -const nlStrings = () => s.array(s.string()); -const NL_RECORD_CONTRACT = s.object({ - kind: s.string(), - actor: s.nullableString(), - action: s.enum(NL_ACTIONS), - subject: s.nullableString(), - object: s.string({ - minLength: 1, - description: 'Concrete thing the statement is about, in the source language. Free text: never the literal word "unknown" — quote the subject matter instead.', - }), - modality: s.enum(NL_MODALITIES), - polarity: s.enum(['positive', 'negative']), - lifecycle: s.enum(NL_LIFECYCLES), - confidence: s.number({ minimum: 0, maximum: 0.9 }), - basis: nlStrings(), - target: s.object({ paths: nlStrings(), symbols: nlStrings(), tickets: nlStrings(), versions: nlStrings() }), - sourceLines: s.object({ start: s.integer({ minimum: 1 }), end: s.integer({ minimum: 1 }) }), - text: s.string(), -}) satisfies StructuredSchema; -const NL_RESPONSE_CONTRACT = s.object({ records: s.array(NL_RECORD_CONTRACT) }) satisfies StructuredSchema; diff --git a/src/graph/diagnostics.ts b/src/graph/diagnostics.ts index fc56f06..644b9fe 100644 --- a/src/graph/diagnostics.ts +++ b/src/graph/diagnostics.ts @@ -15,120 +15,12 @@ import { hasCapabilityClaim, isFileAggregate } from './capability-evidence.js'; export function diagnoseGraph(graph: IntentGraph, generatedAt = new Date().toISOString()): DiagnosticReport { assertIntentGraph(graph); + const context = buildDiagnosticContext(graph); const diagnostics: Diagnostic[] = []; - const neighbors = buildNeighbors(graph); - const recordsById = new Map(graph.records.map((record) => [record.id, record])); - const groundedImplementation = indexGroundedImplementationEvidence(graph, recordsById); - const implementedPaths = indexImplementedPaths(graph); - const documentedPaths = indexDocumentedPaths(graph); - const symbolResolutionIndex = buildSymbolResolutionIndex(graph.records); - for (const record of graph.records) { - const related = (neighbors.get(record.id) ?? []) - .map((id) => recordsById.get(id)) - .filter((item): item is IntentRecord => Boolean(item)); - const evidenced = groundedImplementation.has(record.id) - || !hasCapabilityClaim(record) && hasImplementedTarget(record, implementedPaths) - || record.source.kind === 'changelog' && hasDocumentedTarget(record, documentedPaths); - if (isPlan(record) && !evidenced) { - const hasLocationOnlyEvidence = related.some(isImplementationEvidence); - diagnostics.push(makeDiagnostic( - record.lifecycle.status === 'completed' ? 'blocking' : 'warning', - 'PLANNED_NOT_IMPLEMENTED', - record.lifecycle.status === 'completed' ? 'Zadanie oznaczone jako ukończone bez dowodu implementacji' : 'Zaplanowane zadanie bez dowodu implementacji', - hasLocationOnlyEvidence - ? `Powiązany rekord Git/AST wskazuje lokalizację, ale nie potwierdza wymaganej zmiany: ${record.statement.text}` - : `Nie znaleziono powiązanego rekordu Git ani faktu AST dla: ${record.statement.text}`, - [record.id], - hasLocationOnlyEvidence - ? 'Zrealizować konkretną zmianę opisaną w rekordzie źródłowym albo wskazać jednoznaczny symbol lub dowód; następnie ponownie uruchomić linker.' - : 'Dodać identyfikator ticketu/symbolu albo dostarczyć implementację i ponownie uruchomić linker.', - )); - } - - if (isPublicImplementation(record) && !related.some(isPlan)) { - diagnostics.push(makeDiagnostic( - 'warning', - 'IMPLEMENTED_NOT_PLANNED', - 'Implementacja bez powiązanego planu', - `Fakt implementacyjny nie ma relacji do NL, TODO ani dokumentacji intencji: ${record.statement.object}`, - [record.id], - 'Powiązać symbol z ticketem/TODO lub udokumentować, dlaczego implementacja jest poza planem.', - )); - } - - if (isReleaseCandidate(record) && !related.some((item) => item.source.kind === 'changelog' || item.source.kind === 'document')) { - diagnostics.push(makeDiagnostic( - 'info', - 'IMPLEMENTED_NOT_DOCUMENTED', - 'Zmiana bez dokumentacji wydania', - `Zmiana ${record.statement.object} nie ma powiązanego wpisu dokumentacyjnego lub changelogu.`, - [record.id], - 'Dodać albo powiązać wpis CHANGELOG/dokumentacji, jeśli zmiana jest publiczna.', - )); - } - - if (record.source.kind === 'changelog' && isActionableChangelogRecord(record) && !evidenced) { - diagnostics.push(makeDiagnostic( - 'review_required', - 'CHANGELOG_WITHOUT_IMPLEMENTATION', - 'Wpis changelogu bez dowodu implementacji', - `Wpis wydania nie ma powiązanego commita ani faktu AST: ${record.statement.text}`, - [record.id], - 'Zweryfikować wpis lub dodać jednoznaczne odwołanie do ticketu, commita, pliku albo symbolu.', - )); - } - - const missingFields = Array.isArray(record.metadata.missingFields) - ? record.metadata.missingFields.filter((item): item is string => typeof item === 'string') - : []; - const symbolIssues = (symbolResolutionIndex.byNlRecord.get(record.id) ?? []) - .filter((resolution) => resolution.status === 'ambiguous' || resolution.status === 'conflicting'); - if (missingFields.length > 0 || symbolIssues.length > 0) { - const detail = ambiguityDetail(record, missingFields, symbolIssues); - diagnostics.push(makeDiagnostic( - 'review_required', - 'AMBIGUOUS_REQUIREMENT', - symbolIssues.length > 0 ? 'Niejednoznaczny cel wymagania' : 'Niekompletne wymaganie', - detail, - [record.id], - ambiguityAction(missingFields, symbolIssues), - )); - } - - if (record.epistemic.confidence < 0.5 && record.source.kind !== 'ast') { - diagnostics.push(makeDiagnostic( - 'info', - 'LOW_CONFIDENCE', - 'Niska pewność ekstrakcji', - `Rekord ma confidence=${record.epistemic.confidence}: ${record.statement.text}`, - [record.id], - 'Doprecyzować źródło lub dodać jawny identyfikator, ścieżkę albo symbol.', - )); - } - - if ((neighbors.get(record.id)?.length ?? 0) === 0 && isImportantRecord(record)) { - diagnostics.push(makeDiagnostic( - 'warning', - 'UNLINKED_RECORD', - 'Rekord niepołączony z przepływem wiedzy', - `Nie znaleziono relacji dla ${record.id}: ${record.statement.text}`, - [record.id], - 'Dodać wspólny ticket, symbol, ścieżkę lub bardziej jednoznaczny obiekt intencji.', - )); - } - } - - for (const relation of graph.relations.filter((item) => item.type === 'contradicts')) { - diagnostics.push(makeDiagnostic( - 'blocking', - 'CONFLICTING_INTENT', - 'Sprzeczne intencje lub dowody', - `Relacja ${relation.id} łączy rekordy o przeciwnej polaryzacji.`, - [relation.from, relation.to], - 'Rozstrzygnąć konflikt w kanonicznym tickecie lub decyzji człowieka.', - )); + diagnostics.push(...collectRecordDiagnostics(record, context)); } + diagnostics.push(...collectContradictionDiagnostics(graph.relations)); if (!diagnostics.some((item) => item.severity === 'blocking' || item.severity === 'review_required')) { diagnostics.push(makeDiagnostic( @@ -154,6 +46,212 @@ export function diagnoseGraph(graph: IntentGraph, generatedAt = new Date().toISO }; } +interface DiagnosticContext { + neighbors: Map; + recordsById: Map; + groundedImplementation: Set; + implementedPaths: Set; + documentedPaths: Set; + symbolResolutionIndex: ReturnType; +} + +function buildDiagnosticContext(graph: IntentGraph): DiagnosticContext { + const neighbors = buildNeighbors(graph); + const recordsById = new Map(graph.records.map((record) => [record.id, record])); + return { + neighbors, + recordsById, + groundedImplementation: indexGroundedImplementationEvidence(graph, recordsById), + implementedPaths: indexImplementedPaths(graph), + documentedPaths: indexDocumentedPaths(graph), + symbolResolutionIndex: buildSymbolResolutionIndex(graph.records), + }; +} + +function collectRecordDiagnostics(record: IntentRecord, context: DiagnosticContext): Diagnostic[] { + const diagnostics: Diagnostic[] = []; + const related = collectRelatedRecords(record.id, context); + const missingFields = collectMissingFields(record); + const symbolIssues = collectSymbolIssues(record, context); + const isEvidence = isRecordEvidenced(record, context); + + const planned = buildPlannedNotImplementedDiagnostic(record, related, isEvidence); + if (planned) diagnostics.push(planned); + + const notPlanned = buildImplementedWithoutPlanDiagnostic(record, related); + if (notPlanned) diagnostics.push(notPlanned); + + const notDocumented = buildUndocumentedImplementationDiagnostic(record, related); + if (notDocumented) diagnostics.push(notDocumented); + + const changelog = buildChangelogWithoutImplementationDiagnostic(record, isEvidence); + if (changelog) diagnostics.push(changelog); + + const ambiguous = buildAmbiguousRequirementDiagnostic(record, missingFields, symbolIssues); + if (ambiguous) diagnostics.push(ambiguous); + + const lowConfidence = buildLowConfidenceDiagnostic(record); + if (lowConfidence) diagnostics.push(lowConfidence); + + const unlinked = buildUnlinkedRecordDiagnostic(record, related); + if (unlinked) diagnostics.push(unlinked); + + return diagnostics; +} + +function collectRelatedRecords(recordId: string, context: DiagnosticContext): IntentRecord[] { + return (context.neighbors.get(recordId) ?? []) + .map((id) => context.recordsById.get(id)) + .filter((item): item is IntentRecord => Boolean(item)); +} + +function collectMissingFields(record: IntentRecord): string[] { + return Array.isArray(record.metadata.missingFields) + ? record.metadata.missingFields.filter((item): item is string => typeof item === 'string') + : []; +} + +function collectSymbolIssues(record: IntentRecord, context: DiagnosticContext): NlSymbolResolution[] { + return (context.symbolResolutionIndex.byNlRecord.get(record.id) ?? []) + .filter((resolution) => resolution.status === 'ambiguous' || resolution.status === 'conflicting'); +} + +function isRecordEvidenced( + record: IntentRecord, + context: DiagnosticContext, +): boolean { + const hasImplementedTarget = !hasCapabilityClaim(record) && hasImplementedTarget(record, context.implementedPaths); + const hasDocumentedTarget = record.source.kind === 'changelog' && hasDocumentedTarget(record, context.documentedPaths); + return context.groundedImplementation.has(record.id) + || hasImplementedTarget + || hasDocumentedTarget; +} + +function buildPlannedNotImplementedDiagnostic( + record: IntentRecord, + related: IntentRecord[], + evidenced: boolean, +): Diagnostic | null { + if (!isPlan(record) || evidenced) return null; + const hasLocationOnlyEvidence = related.some(isImplementationEvidence); + const severity: DiagnosticSeverity = record.lifecycle.status === 'completed' ? 'blocking' : 'warning'; + return makeDiagnostic( + severity, + 'PLANNED_NOT_IMPLEMENTED', + record.lifecycle.status === 'completed' + ? 'Zadanie oznaczone jako ukończone bez dowodu implementacji' + : 'Zaplanowane zadanie bez dowodu implementacji', + hasLocationOnlyEvidence + ? `Powiązany rekord Git/AST wskazuje lokalizację, ale nie potwierdza wymaganej zmiany: ${record.statement.text}` + : `Nie znaleziono powiązanego rekordu Git ani faktu AST dla: ${record.statement.text}`, + [record.id], + hasLocationOnlyEvidence + ? 'Zrealizować konkretną zmianę opisaną w rekordzie źródłowym albo wskazać jednoznaczny symbol lub dowód; następnie ponownie uruchomić linker.' + : 'Dodać identyfikator ticketu/symbolu albo dostarczyć implementację i ponownie uruchomić linker.', + ); +} + +function buildImplementedWithoutPlanDiagnostic( + record: IntentRecord, + related: IntentRecord[], +): Diagnostic | null { + if (!isPublicImplementation(record) || related.some(isPlan)) return null; + return makeDiagnostic( + 'warning', + 'IMPLEMENTED_NOT_PLANNED', + 'Implementacja bez powiązanego planu', + `Fakt implementacyjny nie ma relacji do NL, TODO ani dokumentacji intencji: ${record.statement.object}`, + [record.id], + 'Powiązać symbol z ticketem/TODO lub udokumentować, dlaczego implementacja jest poza planem.', + ); +} + +function buildUndocumentedImplementationDiagnostic( + record: IntentRecord, + related: IntentRecord[], +): Diagnostic | null { + if (!isReleaseCandidate(record) || related.some((item) => item.source.kind === 'changelog' || item.source.kind === 'document')) { + return null; + } + return makeDiagnostic( + 'info', + 'IMPLEMENTED_NOT_DOCUMENTED', + 'Zmiana bez dokumentacji wydania', + `Zmiana ${record.statement.object} nie ma powiązanego wpisu dokumentacyjnego lub changelogu.`, + [record.id], + 'Dodać albo powiązać wpis CHANGELOG/dokumentacji, jeśli zmiana jest publiczna.', + ); +} + +function buildChangelogWithoutImplementationDiagnostic( + record: IntentRecord, + evidenced: boolean, +): Diagnostic | null { + if (record.source.kind !== 'changelog' || !isActionableChangelogRecord(record) || evidenced) return null; + return makeDiagnostic( + 'review_required', + 'CHANGELOG_WITHOUT_IMPLEMENTATION', + 'Wpis changelogu bez dowodu implementacji', + `Wpis wydania nie ma powiązanego commita ani faktu AST: ${record.statement.text}`, + [record.id], + 'Zweryfikować wpis lub dodać jednoznaczne odwołanie do ticketu, commita, pliku albo symbolu.', + ); +} + +function buildAmbiguousRequirementDiagnostic( + record: IntentRecord, + missingFields: string[], + symbolIssues: NlSymbolResolution[], +): Diagnostic | null { + if (missingFields.length === 0 && symbolIssues.length === 0) return null; + const detail = ambiguityDetail(record, missingFields, symbolIssues); + return makeDiagnostic( + 'review_required', + 'AMBIGUOUS_REQUIREMENT', + symbolIssues.length > 0 ? 'Niejednoznaczny cel wymagania' : 'Niekompletne wymaganie', + detail, + [record.id], + ambiguityAction(missingFields, symbolIssues), + ); +} + +function buildLowConfidenceDiagnostic(record: IntentRecord): Diagnostic | null { + if (record.epistemic.confidence >= 0.5 || record.source.kind === 'ast') return null; + return makeDiagnostic( + 'info', + 'LOW_CONFIDENCE', + 'Niska pewność ekstrakcji', + `Rekord ma confidence=${record.epistemic.confidence}: ${record.statement.text}`, + [record.id], + 'Doprecyzować źródło lub dodać jawny identyfikator, ścieżkę albo symbol.', + ); +} + +function buildUnlinkedRecordDiagnostic(record: IntentRecord, related: IntentRecord[]): Diagnostic | null { + if (related.length !== 0 || !isImportantRecord(record)) return null; + return makeDiagnostic( + 'warning', + 'UNLINKED_RECORD', + 'Rekord niepołączony z przepływem wiedzy', + `Nie znaleziono relacji dla ${record.id}: ${record.statement.text}`, + [record.id], + 'Dodać wspólny ticket, symbol, ścieżkę lub bardziej jednoznaczny obiekt intencji.', + ); +} + +function collectContradictionDiagnostics(relations: IntentGraph['relations']): Diagnostic[] { + return relations + .filter((relation) => relation.type === 'contradicts') + .map((relation) => makeDiagnostic( + 'blocking', + 'CONFLICTING_INTENT', + 'Sprzeczne intencje lub dowody', + `Relacja ${relation.id} łączy rekordy o przeciwnej polaryzacji.`, + [relation.from, relation.to], + 'Rozstrzygnąć konflikt w kanonicznym tickecie lub decyzji człowieka.', + )); +} + /** * Relations are navigation until their basis proves the requested behaviour. * In particular, `shared_path + module_coverage` says only that a file exists. diff --git a/src/graph/linker.ts b/src/graph/linker.ts index e3243d0..1897c86 100644 --- a/src/graph/linker.ts +++ b/src/graph/linker.ts @@ -350,29 +350,67 @@ function scorePair( const basis: string[] = []; const leftKeywords = index.get(left.id); const rightKeywords = index.get(right.id); - if (intersects(left.statement.target.tickets, right.statement.target.tickets)) { - score += 0.62; - basis.push('shared_ticket'); - } - const resolvedNlAstSymbol = hasResolvedNlAstSymbolPair(left, right, symbolResolutionIndex); - if ((resolvedNlAstSymbol ?? intersectsAliases(left.statement.target.symbols, right.statement.target.symbols, symbolAliases))) { - score += 0.48; - basis.push('shared_symbol'); - } - if (pathsIntersect(left.statement.target.paths, right.statement.target.paths, resolvableBasenames)) { - score += 0.28; - basis.push('shared_path'); - if (isFileAggregateEvidencePair(left, right)) { - score += 0.24; - basis.push('module_coverage'); - const capabilityOverlap = aggregateCapabilityOverlap(left, right); - if (capabilityOverlap > 0) basis.push(`capability_overlap:${capabilityOverlap}`); - } - } - if (left.statement.action === right.statement.action && left.statement.action !== 'unknown') { - score += 0.13; - basis.push('same_action'); - } + score += scoreSharedTickets(left, right, basis); + score += scoreSharedSymbol(left, right, symbolResolutionIndex, basis); + score += scoreSharedPath(left, right, resolvableBasenames, basis); + score += scoreSameAction(left, right, basis); + const objectSimilarity = scoreObjectSimilarity(leftKeywords, rightKeywords, basis); + score += scoreSharedTopics(left, right, leftKeywords, rightKeywords, basis); + score += scoreSourceKindPenalty(left, right); + return { + score: Math.max(0, score), + basis: [...new Set(basis)].sort(), + textScore: objectSimilarity, + }; +} + +function scoreSharedTickets(left: IntentRecord, right: IntentRecord, basis: string[]): number { + if (!intersects(left.statement.target.tickets, right.statement.target.tickets)) return 0; + basis.push('shared_ticket'); + return 0.62; +} + +function scoreSharedSymbol( + left: IntentRecord, + right: IntentRecord, + symbolResolutionIndex: SymbolResolutionIndex, + basis: string[], +): number { + const hasResolvedSymbol = hasResolvedNlAstSymbolPair(left, right, symbolResolutionIndex); + const hasSharedAlias = intersectsAliases(left.statement.target.symbols, right.statement.target.symbols, symbolAliases); + if (!(hasResolvedSymbol ?? hasSharedAlias)) return 0; + basis.push('shared_symbol'); + return 0.48; +} + +function scoreSharedPath( + left: IntentRecord, + right: IntentRecord, + resolvableBasenames: Set, + basis: string[], +): number { + if (!pathsIntersect(left.statement.target.paths, right.statement.target.paths, resolvableBasenames)) return 0; + let points = 0.28; + basis.push('shared_path'); + if (!isFileAggregateEvidencePair(left, right)) return points; + points += 0.24; + basis.push('module_coverage'); + const capabilityOverlap = aggregateCapabilityOverlap(left, right); + if (capabilityOverlap > 0) basis.push(`capability_overlap:${capabilityOverlap}`); + return points; +} + +function scoreSameAction(left: IntentRecord, right: IntentRecord, basis: string[]): number { + if (!(left.statement.action === right.statement.action && left.statement.action !== 'unknown')) return 0; + basis.push('same_action'); + return 0.13; +} + +function scoreObjectSimilarity( + leftKeywords: RecordKeywords | undefined, + rightKeywords: RecordKeywords | undefined, + basis: string[], +): number { const objectSimilarity = leftKeywords && rightKeywords ? Math.max( jaccard(leftKeywords.object, rightKeywords.object), @@ -380,21 +418,31 @@ function scorePair( ) : 0; if (objectSimilarity >= 0.2) { - score += objectSimilarity * 0.48; basis.push(`text_similarity:${objectSimilarity.toFixed(3)}`); + return objectSimilarity * 0.48; } - if (isModuleTopicEvidencePair(left, right) && leftKeywords && rightKeywords) { - const sharedTopics = intersectionSize(leftKeywords.topics, rightKeywords.topics); - // Two generic words still connected one declaration to dozens of modules - // in the measured repository. Three independently normalised topics keeps - // prose-only matching useful while retaining a precision-oriented floor. - if (sharedTopics >= 3) { - score += Math.min(0.64, 0.32 + sharedTopics * 0.08); - basis.push(`module_topic:${sharedTopics}`); - } - } - if (left.source.kind === right.source.kind) score -= 0.08; - return { score: Math.max(0, score), basis: [...new Set(basis)].sort(), textScore: objectSimilarity }; + return 0; +} + +function scoreSharedTopics( + left: IntentRecord, + right: IntentRecord, + leftKeywords: RecordKeywords | undefined, + rightKeywords: RecordKeywords | undefined, + basis: string[], +): number { + if (!isModuleTopicEvidencePair(left, right) || !leftKeywords || !rightKeywords) return 0; + const sharedTopics = intersectionSize(leftKeywords.topics, rightKeywords.topics); + // Two generic words still connected one declaration to dozens of modules + // in the measured repository. Three independently normalised topics keeps + // prose-only matching useful while retaining a precision-oriented floor. + if (sharedTopics < 3) return 0; + basis.push(`module_topic:${sharedTopics}`); + return Math.min(0.64, 0.32 + sharedTopics * 0.08); +} + +function scoreSourceKindPenalty(left: IntentRecord, right: IntentRecord): number { + return left.source.kind === right.source.kind ? -0.08 : 0; } function intersectionSize(left: Set, right: Set): number { diff --git a/src/graph/symbol-resolution.ts b/src/graph/symbol-resolution.ts index f40b2d6..4d1aebf 100644 --- a/src/graph/symbol-resolution.ts +++ b/src/graph/symbol-resolution.ts @@ -20,15 +20,17 @@ export interface SymbolResolutionIndex { /** Resolves explicit NL symbols only against observed AST declarations. */ export function buildSymbolResolutionIndex(records: IntentRecord[]): SymbolResolutionIndex { + const byAlias = collectAstCandidates(records); + sortCandidates(byAlias); + return { byNlRecord: collectNlResolutions(records, byAlias) }; +} + +function collectAstCandidates(records: IntentRecord[]): Map { const byAlias = new Map(); for (const record of records) { if (!isAstDeclaration(record) || !record.source.path) continue; - const symbols = [...new Set([ - ...record.statement.target.symbols, - ...(record.source.symbol ? [record.source.symbol] : []), - ])]; - for (const symbol of symbols) { - const candidate = { recordId: record.id, path: normalizePath(record.source.path), symbol }; + for (const symbol of uniqueSymbols(record)) { + const candidate = buildAstCandidate(record, symbol); for (const alias of symbolAliases(symbol)) { const values = byAlias.get(alias) ?? []; if (!values.some((value) => value.recordId === candidate.recordId)) values.push(candidate); @@ -36,12 +38,36 @@ export function buildSymbolResolutionIndex(records: IntentRecord[]): SymbolResol } } } + return byAlias; +} + +function buildAstCandidate(record: IntentRecord, symbol: string): AstSymbolCandidate { + return { + recordId: record.id, + path: normalizePath(record.source.path ?? ''), + symbol, + }; +} + +function uniqueSymbols(record: IntentRecord): string[] { + return [...new Set([ + ...record.statement.target.symbols, + ...(record.source.symbol ? [record.source.symbol] : []), + ])]; +} + +function sortCandidates(byAlias: Map): void { for (const values of byAlias.values()) { values.sort((left, right) => left.path.localeCompare(right.path) || left.symbol.localeCompare(right.symbol) || left.recordId.localeCompare(right.recordId)); } +} +function collectNlResolutions( + records: IntentRecord[], + byAlias: Map, +): Map { const byNlRecord = new Map(); for (const record of records) { if (record.source.kind !== 'nl' || record.statement.target.symbols.length === 0) continue; @@ -51,7 +77,7 @@ export function buildSymbolResolutionIndex(records: IntentRecord[]): SymbolResol byAlias, ))); } - return { byNlRecord }; + return byNlRecord; } /** diff --git a/src/semantic/reranker-llm.ts b/src/semantic/reranker-llm.ts index 200c155..09e6f4d 100644 --- a/src/semantic/reranker-llm.ts +++ b/src/semantic/reranker-llm.ts @@ -15,6 +15,7 @@ import { } from './reranker.js'; import { assertSemanticRerankerResponse, + type SemanticRerankerResponse, SEMANTIC_RERANK_RESPONSE_CONTRACT, } from './reranker-response.js'; @@ -42,41 +43,89 @@ export async function rerankSemanticCandidates( options: SemanticRerankerOptions, ): Promise { assertSemanticCandidateSet(candidateSet, graph); + validateCandidateSetSize(candidateSet); + const model = resolveRerankerModel(config, options.model); + const modelRevision = resolveModelRevision(options.modelRevision); + const cached = resolveCachedResult(options.cachedResult, candidateSet, graph, model, modelRevision); + if (cached) return cached; + + const client = assertRerankerClient(config); + await assertTrackedSnapshotAvailable(graph, candidateSet, options.trackedSnapshot); + const payload = buildRerankerPayload(graph, candidateSet); + const response = await callReranker(client, messagesForCandidates(graph, candidateSet, payload), model); + return buildRerankResult(graph, candidateSet, response, model, modelRevision); +} + +function validateCandidateSetSize(candidateSet: SemanticCandidateSet): void { if (!candidateSet.candidates.length) { throw new Error('Semantic reranker requires at least one candidate'); } if (candidateSet.candidates.length > 100) { throw new Error('Semantic reranker payload is limited to 100 candidates'); } - const model = options.model?.trim() || config.openRouter.taskModel; - const modelRevision = options.modelRevision?.trim(); - if (!modelRevision) throw new Error('Semantic reranker requires an explicit modelRevision'); - if (options.cachedResult) { - assertSemanticRerankResult(options.cachedResult, candidateSet, graph); - if (options.cachedResult.generation.requestedModel !== model - || options.cachedResult.generation.modelRevision !== modelRevision) { - throw new Error('Cached semantic rerank result has a different model identity'); - } - return options.cachedResult; +} + +function resolveRerankerModel(config: T2CConfig, modelOverride?: string): string { + return modelOverride?.trim() || config.openRouter.taskModel; +} + +function resolveModelRevision(modelRevision: string): string { + const revision = modelRevision?.trim(); + if (!revision) throw new Error('Semantic reranker requires an explicit modelRevision'); + return revision; +} + +function resolveCachedResult( + cachedResult: SemanticRerankResult | null | undefined, + candidateSet: SemanticCandidateSet, + graph: IntentGraph, + model: string, + modelRevision: string, +): SemanticRerankResult | null { + if (!cachedResult) return null; + assertSemanticRerankResult(cachedResult, candidateSet, graph); + if (cachedResult.generation.requestedModel !== model || cachedResult.generation.modelRevision !== modelRevision) { + throw new Error('Cached semantic rerank result has a different model identity'); } + return cachedResult; +} + +function assertRerankerClient(config: T2CConfig): OpenRouterClient { const client = new OpenRouterClient(config.openRouter); if (!client.isConfigured()) { throw new SemanticRerankerRequiredError( 'Cross-language reranking requires OpenRouter; no deterministic or embedding-only fallback is allowed', ); } - if (!options.trackedSnapshot) { - throw new Error('Cross-language reranking requires a verified trackedSnapshot'); - } - await assertTrackedSnapshot(graph, candidateSet, options.trackedSnapshot); + return client; +} + +function assertTrackedSnapshotAvailable( + graph: IntentGraph, + candidateSet: SemanticCandidateSet, + trackedSnapshot: { root: string; revision: string } | undefined, +): Promise { + if (!trackedSnapshot) throw new Error('Cross-language reranking requires a verified trackedSnapshot'); + return assertTrackedSnapshot(graph, candidateSet, trackedSnapshot); +} + +function buildRerankerPayload(graph: IntentGraph, candidateSet: SemanticCandidateSet): Array<{ + candidateId: string; + retrieval: { score: number; rank: number }; + declaration: Record; + module: Record; +}> { const records = new Map(graph.records.map((record) => [record.id, record])); - const payload = candidateSet.candidates.map((candidate) => ({ + return candidateSet.candidates.map((candidate) => ({ candidateId: candidate.id, retrieval: { score: candidate.score, rank: candidate.rank }, declaration: projectRecord(records.get(candidate.declarationRecordId), candidate.declarationRecordId), module: projectRecord(records.get(candidate.moduleRecordId), candidate.moduleRecordId), })); - const messages = [ +} + +function messagesForCandidates(graph: IntentGraph, candidateSet: SemanticCandidateSet, payload: ReturnType): Array<{ role: 'system' | 'user'; content: string }> { + return [ { role: 'system' as const, content: [ @@ -100,19 +149,51 @@ export async function rerankSemanticCandidates( }), }, ]; - const response = await client.chatStructuredWithMetadata( - messages, - 't2c_cross_language_rerank_v1', - SEMANTIC_RERANK_RESPONSE_CONTRACT, - model, - ).catch((error: unknown) => { +} + +async function callReranker( + client: OpenRouterClient, + messages: Array<{ role: 'system' | 'user'; content: string }>, + model: string, +): Promise<{ + value: SemanticRerankerResponse; + metadata: { + provider?: string | null; + model?: string | null; + responseId?: string | null; + }; +}> { + try { + return await client.chatStructuredWithMetadata( + messages, + 't2c_cross_language_rerank_v1', + SEMANTIC_RERANK_RESPONSE_CONTRACT, + model, + ); + } catch (error: unknown) { const metadata = error instanceof StructuredResponseError ? error.responseMetadata : undefined; const identity = [metadata?.provider, metadata?.model, metadata?.responseId].filter(Boolean).join('/'); throw new Error( `Invalid semantic reranker response${identity ? ` from ${identity}` : ''}: ` + `${error instanceof Error ? error.message : String(error)}`, ); - }); + } +} + +function buildRerankResult( + graph: IntentGraph, + candidateSet: SemanticCandidateSet, + response: { + value: SemanticRerankerResponse; + metadata: { + provider?: string | null; + model?: string | null; + responseId?: string | null; + }; + }, + model: string, + modelRevision: string, +): SemanticRerankResult { try { assertSemanticRerankerResponse(response.value); } catch (error) { diff --git a/src/semantic/reranker/candidate.ts b/src/semantic/reranker/candidate.ts index 7dbf6c6..0b84d15 100644 --- a/src/semantic/reranker/candidate.ts +++ b/src/semantic/reranker/candidate.ts @@ -3,7 +3,7 @@ import { stableStringify, } from '../../core/id.js'; import { assertIntentGraph } from '../../core/schema.js'; -import type { IntentGraph } from '../../core/types.js'; +import type { IntentGraph, IntentRecord } from '../../core/types.js'; import { boundedScore, requiredText, validDate, validateRetrieval } from './validation.js'; import { type SemanticCandidate, @@ -100,6 +100,18 @@ export function assertSemanticCandidateSet( graph: IntentGraph, ): void { assertIntentGraph(graph); + assertCandidateSetHeader(value, graph); + + const state = createCandidateValidationState(graph); + for (const candidate of value.candidates) { + addValidatedCandidate(value, candidate, state); + } + + assertBoundedRanks(value, state.byDeclaration); + assertCandidateSetHash(value); +} + +function assertCandidateSetHeader(value: SemanticCandidateSet, graph: IntentGraph): void { if (value.schemaVersion !== 't2c.semantic-candidate-set/v1') { throw new Error('Unsupported semantic candidate-set schemaVersion'); } @@ -114,57 +126,93 @@ export function assertSemanticCandidateSet( ) { throw new Error('candidateSet.maxCandidatesPerDeclaration must be an integer between 1 and 10'); } - validateRetrieval(value.retrieval); +} - const records = new Map(graph.records.map((record) => [record.id, record])); - const seenIds = new Set(); - const seenPairs = new Set(); - const byDeclaration = new Map(); +interface CandidateValidationState { + records: Map; + seenIds: Set; + seenPairs: Set; + byDeclaration: Map; +} - for (const candidate of value.candidates) { - if (!/^SCAND-[a-f0-9]{20}$/.test(candidate.id)) { - throw new Error(`Invalid semantic candidate ID: ${candidate.id}`); - } - if (seenIds.has(candidate.id)) { - throw new Error(`Duplicate semantic candidate ID: ${candidate.id}`); - } - seenIds.add(candidate.id); +function createCandidateValidationState(graph: IntentGraph): CandidateValidationState { + return { + records: new Map(graph.records.map((record) => [record.id, record])), + seenIds: new Set(), + seenPairs: new Set(), + byDeclaration: new Map(), + }; +} - const declaration = records.get(candidate.declarationRecordId); - const module = records.get(candidate.moduleRecordId); - if (!declaration || !module) { - throw new Error(`Semantic candidate ${candidate.id} cites an unknown record`); - } - if (declaration.statement.kind === 'module_fact') { - throw new Error(`Semantic candidate ${candidate.id} declarationRecordId points to a module`); - } - if (module.statement.kind !== 'module_fact' || module.source.kind !== 'ast') { - throw new Error(`Semantic candidate ${candidate.id} moduleRecordId must point to an AST module_fact`); - } +function addValidatedCandidate( + value: SemanticCandidateSet, + candidate: SemanticCandidate, + state: CandidateValidationState, +): void { + validateCandidateId(candidate); + validateCandidateRecords(candidate, state); + validateCandidateRank(value.maxCandidatesPerDeclaration, candidate); + boundedScore(candidate.score); + registerCandidate(candidate, state); +} - const pair = `${candidate.declarationRecordId}|${candidate.moduleRecordId}`; - if (seenPairs.has(pair)) { - throw new Error(`Duplicate semantic candidate pair: ${pair}`); - } - seenPairs.add(pair); - boundedScore(candidate.score); - - if (!Number.isInteger(candidate.rank) - || candidate.rank < 1 - || candidate.rank > value.maxCandidatesPerDeclaration - ) { - throw new Error(`Semantic candidate ${candidate.id} has an invalid rank`); - } +function validateCandidateId(candidate: SemanticCandidate): void { + if (!/^SCAND-[a-f0-9]{20}$/.test(candidate.id)) { + throw new Error(`Invalid semantic candidate ID: ${candidate.id}`); + } +} - const existing = byDeclaration.get(candidate.declarationRecordId); - if (existing) { - existing.push(candidate); - } else { - byDeclaration.set(candidate.declarationRecordId, [candidate]); - } +function validateCandidateRecords( + candidate: SemanticCandidate, + state: CandidateValidationState, +): void { + if (state.seenIds.has(candidate.id)) { + throw new Error(`Duplicate semantic candidate ID: ${candidate.id}`); + } + state.seenIds.add(candidate.id); + + const declaration = state.records.get(candidate.declarationRecordId); + const module = state.records.get(candidate.moduleRecordId); + if (!declaration || !module) { + throw new Error(`Semantic candidate ${candidate.id} cites an unknown record`); + } + if (declaration.statement.kind === 'module_fact') { + throw new Error(`Semantic candidate ${candidate.id} declarationRecordId points to a module`); + } + if (module.statement.kind !== 'module_fact' || module.source.kind !== 'ast') { + throw new Error(`Semantic candidate ${candidate.id} moduleRecordId must point to an AST module_fact`); + } + + const pair = `${candidate.declarationRecordId}|${candidate.moduleRecordId}`; + if (state.seenPairs.has(pair)) { + throw new Error(`Duplicate semantic candidate pair: ${pair}`); } + state.seenPairs.add(pair); +} + +function validateCandidateRank(maxCandidatesPerDeclaration: number, candidate: SemanticCandidate): void { + if (!Number.isInteger(candidate.rank) + || candidate.rank < 1 + || candidate.rank > maxCandidatesPerDeclaration + ) { + throw new Error(`Semantic candidate ${candidate.id} has an invalid rank`); + } +} +function registerCandidate(candidate: SemanticCandidate, state: CandidateValidationState): void { + const existing = state.byDeclaration.get(candidate.declarationRecordId); + if (existing) { + existing.push(candidate); + } else { + state.byDeclaration.set(candidate.declarationRecordId, [candidate]); + } +} + +function assertBoundedRanks( + value: SemanticCandidateSet, + byDeclaration: Map, +): void { for (const [declarationRecordId, candidates] of byDeclaration) { if (candidates.length > value.maxCandidatesPerDeclaration) { throw new Error(`Declaration ${declarationRecordId} exceeds the bounded candidate limit`); @@ -179,7 +227,9 @@ export function assertSemanticCandidateSet( } }); } +} +function assertCandidateSetHash(value: SemanticCandidateSet): void { const expectedHash = sha256(stableStringify({ graphFingerprint: value.graphFingerprint, maxCandidatesPerDeclaration: value.maxCandidatesPerDeclaration, diff --git a/src/services/actions.ts b/src/services/actions.ts index 2e40c7d..c225d0b 100644 --- a/src/services/actions.ts +++ b/src/services/actions.ts @@ -509,20 +509,57 @@ export async function executeAction(action: T2CAction, input: Record): IntentGraph { + const filter = parseCommunicationGraphFilter(input); + if (!filter.hasFilters) return graph; + const records = graph.records.filter((record) => matchesCommunicationFilter(record, filter)); + return linkIntentRecords(records, graph.generatedAt); +} + +interface CommunicationGraphFilter { + hasFilters: boolean; + participant: string; + role: string; + ticket: string; + communicationOnly: boolean; +} + +function parseCommunicationGraphFilter(input: Record): CommunicationGraphFilter { const participant = stringValue(input.participant, '').toLowerCase(); const role = stringValue(input.role, '').toLowerCase(); const ticket = stringValue(input.ticket, '').toLowerCase(); const communicationOnly = booleanValue(input.communicationOnly, false); - if (!participant && !role && !ticket && !communicationOnly) return graph; - const records = graph.records.filter((record) => { - const isCommunication = record.source.kind === 'agent_log'; - if (communicationOnly && !isCommunication) return false; - if (participant && (!isCommunication || String(record.metadata.participant ?? '').toLowerCase() !== participant)) return false; - if (role && (!isCommunication || String(record.metadata.participantRole ?? '').toLowerCase() !== role)) return false; - if (ticket && !record.statement.target.tickets.some((value) => value.toLowerCase() === ticket)) return false; - return true; - }); - return linkIntentRecords(records, graph.generatedAt); + return { + participant, + role, + ticket, + communicationOnly, + hasFilters: participant !== '' || role !== '' || ticket !== '' || communicationOnly, + }; +} + +function matchesCommunicationFilter(record: IntentRecord, filter: CommunicationGraphFilter): boolean { + if (filter.communicationOnly && record.source.kind !== 'agent_log') return false; + if (!matchesParticipant(record, filter.participant)) return false; + if (!matchesRole(record, filter.role)) return false; + if (!matchesTicket(record, filter.ticket)) return false; + return true; +} + +function matchesParticipant(record: IntentRecord, participant: string): boolean { + if (!participant) return true; + if (record.source.kind !== 'agent_log') return false; + return String(record.metadata.participant ?? '').toLowerCase() === participant; +} + +function matchesRole(record: IntentRecord, role: string): boolean { + if (!role) return true; + if (record.source.kind !== 'agent_log') return false; + return String(record.metadata.participantRole ?? '').toLowerCase() === role; +} + +function matchesTicket(record: IntentRecord, ticket: string): boolean { + if (!ticket) return true; + return record.statement.target.tickets.some((value) => value.toLowerCase() === ticket); } function nlModeValue(value: unknown, fallback: NlExtractionMode): NlExtractionMode { diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts new file mode 100644 index 0000000..b5eabc6 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -0,0 +1,1310 @@ +import { randomUUID } from 'node:crypto'; +import { existsSync, promises as fs } from 'node:fs'; +import path from 'node:path'; +import { + createCodeChangePlanHash, + createCodeChangePlanId, + createCodeChangeSourcePatchHash, + createCodeChangeSourcePatchId, + sha256, + stableStringify, +} from '../../core/id.js'; +import { ensureDir, pathExists, readJson, readText } from '../../core/io.js'; +import { assertPathWithinRoot } from '../../core/security.js'; +import { + assertCodeChangeAcceptance, + assertCodeChangePlanForAcceptance, + assertCodeChangePlans, + assertCodeChangePlansForReview, + assertConclusions, + assertGroundedGenerationMetadata, + assertIntentGraph, +} from '../../core/schema.js'; +import type { + CodeChangeAcceptance, + CodeChangeCloseResult, + CodeChangeFile, + CodeChangeFileAction, + CodeChangePlan, + CodeChangeReviewPatch, + CodeChangeSourceApplyReceipt, + CodeChangeSourceEdit, + CodeChangeSourcePatch, + CodeChangeSourcePatchApproval, + CodeChangeSourcePatchSet, + Conclusion, + Diagnostic, + DiagnosticReport, + GroundedGenerationMetadata, + IntentGraph, + IntentRecord, + IntentTarget, + TodoPriority, + TodoProposal, +} from '../../core/types.js'; +import { normalizeTarget } from '../../core/target.js'; +import { diagnoseGraph } from '../../graph/diagnostics.js'; +import { T2C_VERSION } from '../../version.js'; +import { isUsefulCodeChangePath } from '../code-change-path.js'; + +export { isUsefulCodeChangePath } from '../code-change-path.js'; + +const IMPLEMENTATION_DIAGNOSTIC_CODES = new Set([ + 'PLANNED_NOT_IMPLEMENTED', + 'CHANGELOG_WITHOUT_IMPLEMENTATION', +]); + +export interface ProposeCodeChangePlansOptions { + graph: IntentGraph; + diagnostics: DiagnosticReport; + conclusions?: Conclusion[]; + proposals?: TodoProposal[]; + generatedAt?: string; + /** Limit how many plans are materialised from open diagnostics. Default 50. */ + maxPlans?: number; + /** + * Repository probe used to tell `create` from `modify`. Injected rather than + * read here so plan synthesis stays pure and deterministic; when omitted the + * plan cannot know and keeps the conservative `modify`. + * See {@link createRepositoryPathProbe}. + */ + pathExists?: (relativePath: string) => boolean; +} + +export interface ProposeCodeChangePlansResult { + schemaVersion: 't2c.code-change-plan-set/v1'; + plans: CodeChangePlan[]; + generatedAt: string; + graphFingerprint: string; + sourceDiagnosticCount: number; + generation: GroundedGenerationMetadata; +} + +export interface EvaluateCodeChangeAcceptanceOptions { + plan: CodeChangePlan; + /** Graph and diagnostics that the plan was grounded on. */ + before: { graph: IntentGraph; diagnostics: DiagnosticReport }; + /** Graph after an attempted implementation (re-extracted and re-linked). */ + afterGraph: IntentGraph; + /** Optional precomputed after diagnostics; derived when omitted. */ + afterDiagnostics?: DiagnosticReport; + evaluatedAt?: string; +} + +export interface CloseCodeChangesOptions { + plans: CodeChangePlan[]; + before: { graph: IntentGraph; diagnostics: DiagnosticReport }; + afterGraph: IntentGraph; + afterDiagnostics?: DiagnosticReport; + evaluatedAt?: string; +} + +/** + * Build grounded code-change plans from open implementation diagnostics. + * + * One plan is produced per diagnostic that can name at least one target path + * (from the diagnostic's records or a matching TODO proposal). The runtime + * never invents file paths and never marks work complete. + */ +export function proposeCodeChangePlans(options: ProposeCodeChangePlansOptions): ProposeCodeChangePlansResult { + assertIntentGraph(options.graph); + assertConclusions([], { graph: options.graph, diagnostics: options.diagnostics }); + const generatedAt = options.generatedAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(generatedAt))) throw new Error('generatedAt must be an ISO date-time'); + const maxPlans = options.maxPlans ?? 50; + if (!Number.isInteger(maxPlans) || maxPlans < 1 || maxPlans > 500) { + throw new Error('maxPlans must be an integer between 1 and 500'); + } + const conclusions = options.conclusions ?? []; + const proposals = options.proposals ?? []; + const recordsById = new Map(options.graph.records.map((record) => [record.id, record])); + const proposalsByDiagnostic = indexProposalsByDiagnostic(proposals); + const conclusionsByDiagnostic = indexConclusionsByDiagnostic(conclusions); + + const candidates = options.diagnostics.diagnostics + .filter((diagnostic) => IMPLEMENTATION_DIAGNOSTIC_CODES.has(diagnostic.code)) + // A released CHANGELOG entry is an audit signal; an open TODO is an + // explicit request for work. With a bounded plan set, sorting only by + // content id allowed historical release notes to consume every slot and + // hide the repository's actual backlog from autonomous executors. + .sort((left, right) => implementationDiagnosticRank(left) + - implementationDiagnosticRank(right) || left.id.localeCompare(right.id)); + + const plans: CodeChangePlan[] = []; + for (const diagnostic of candidates) { + if (plans.length >= maxPlans) break; + const relatedRecords = diagnostic.recordIds + .map((id) => recordsById.get(id)) + .filter((record): record is IntentRecord => Boolean(record)); + if (!relatedRecords.length) continue; + + const matchingProposals = proposalsByDiagnostic.get(diagnostic.id) ?? []; + const matchingConclusions = conclusionsByDiagnostic.get(diagnostic.id) ?? []; + const target = collectTarget(relatedRecords, matchingProposals); + const changes = buildChanges(target, relatedRecords, diagnostic, options.pathExists); + if (!changes.length) continue; + + const generation = deterministicGeneration(generatedAt, 't2c/code-change-plan'); + const evidence = { + graphFingerprint: options.graph.fingerprint, + recordIds: uniqueSorted(relatedRecords.map((record) => record.id)), + diagnosticIds: [diagnostic.id], + conclusionIds: uniqueSorted(matchingConclusions.map((item) => item.id)), + proposalIds: uniqueSorted(matchingProposals.map((item) => item.id)), + }; + const semantic = { + title: titleFor(diagnostic, relatedRecords), + description: descriptionFor(diagnostic, relatedRecords, target), + priority: priorityFor(diagnostic), + target, + acceptanceCriteria: acceptanceCriteriaFor(diagnostic, target), + changes, + risk: riskFor(diagnostic, changes), + rollback: rollbackFor(changes), + evidence, + }; + const planHash = createCodeChangePlanHash(semantic); + const plan: CodeChangePlan = { + schemaVersion: 't2c.code-change-plan/v1', + id: createCodeChangePlanId(semantic), + planHash, + status: 'proposed', + createdAt: generatedAt, + ...semantic, + confidence: confidenceFor(diagnostic, matchingProposals), + generation, + }; + plans.push(plan); + } + + assertCodeChangePlans(plans, { + graph: options.graph, + diagnostics: options.diagnostics, + conclusions, + proposals, + }); + + return { + schemaVersion: 't2c.code-change-plan-set/v1', + plans, + generatedAt, + graphFingerprint: options.graph.fingerprint, + sourceDiagnosticCount: candidates.length, + generation: deterministicGeneration(generatedAt, 't2c/code-change-plan-set'), + }; +} + +/** + * Build the repository probe for {@link ProposeCodeChangePlansOptions.pathExists}. + * + * A path that escapes the analysed root is reported as existing, so an unusual + * value degrades to today's conservative `modify` instead of instructing an + * executor to create a file outside the repository. + */ +export function createRepositoryPathProbe(root: string): (relativePath: string) => boolean { + const base = path.resolve(root); + return (relativePath: string): boolean => { + const absolute = path.resolve(base, relativePath); + if (absolute !== base && !absolute.startsWith(base + path.sep)) return true; + return existsSync(absolute); + }; +} + +function implementationDiagnosticRank(diagnostic: Diagnostic): number { + return diagnostic.code === 'PLANNED_NOT_IMPLEMENTED' ? 0 : 1; +} + +/** + * Re-diagnose an after graph and decide whether the plan's targeted + * diagnostics cleared without introducing new blocking findings. + * + * Diagnostic IDs are content-bound, so a still-open finding on the same + * records keeps the same ID. Cleared findings simply disappear. + */ +export function evaluateCodeChangeAcceptance( + options: EvaluateCodeChangeAcceptanceOptions, +): CodeChangeAcceptance { + assertIntentGraph(options.before.graph); + assertIntentGraph(options.afterGraph); + assertConclusions([], options.before); + assertCodeChangePlanForAcceptance(options.plan, options.before); + + const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph( + options.afterGraph, + options.evaluatedAt ?? new Date().toISOString(), + ); + assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); + + const beforeIds = new Set(options.before.diagnostics.diagnostics.map((item) => item.id)); + const afterById = new Map(afterDiagnostics.diagnostics.map((item) => [item.id, item])); + const afterIds = [...afterById.keys()].sort(); + const targeted = options.plan.evidence.diagnosticIds; + const clearedDiagnosticIds = targeted.filter((id) => !afterById.has(id)).sort(); + const remainingDiagnosticIds = targeted.filter((id) => afterById.has(id)).sort(); + const newBlockingDiagnosticIds = afterDiagnostics.diagnostics + .filter((item) => item.severity === 'blocking' && !beforeIds.has(item.id)) + .map((item) => item.id) + .sort(); + + const reasons: string[] = []; + if (remainingDiagnosticIds.length) { + reasons.push( + `Targeted diagnostics still open: ${remainingDiagnosticIds.join(', ')}.`, + ); + } else { + reasons.push('All targeted diagnostics cleared after re-analysis.'); + } + if (newBlockingDiagnosticIds.length) { + reasons.push( + `New blocking diagnostics appeared: ${newBlockingDiagnosticIds.join(', ')}.`, + ); + } else { + reasons.push('No new blocking diagnostics appeared.'); + } + + const accepted = remainingDiagnosticIds.length === 0 && newBlockingDiagnosticIds.length === 0; + if (accepted) { + reasons.push('Acceptance gate passed; human approval is still required before DONE.'); + } else { + reasons.push('Acceptance gate failed.'); + } + + const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); + const acceptance: CodeChangeAcceptance = { + schemaVersion: 't2c.code-change-acceptance/v1', + planId: options.plan.id, + planHash: options.plan.planHash, + beforeGraphFingerprint: options.before.graph.fingerprint, + afterGraphFingerprint: options.afterGraph.fingerprint, + beforeDiagnosticIds: [...beforeIds].sort(), + afterDiagnosticIds: afterIds, + clearedDiagnosticIds, + remainingDiagnosticIds, + newBlockingDiagnosticIds, + accepted, + reasons: uniqueSorted(reasons), + evaluatedAt, + generation: deterministicGeneration(evaluatedAt, 't2c/code-change-acceptance'), + }; + assertCodeChangeAcceptance(acceptance, { + plan: options.plan, + before: options.before, + after: { graph: options.afterGraph, diagnostics: afterDiagnostics }, + }); + return acceptance; +} + +/** Evaluate a plan set under one timestamp without applying changes or marking DONE. */ +export function closeCodeChanges(options: CloseCodeChangesOptions): CodeChangeCloseResult { + const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(evaluatedAt))) throw new Error('evaluatedAt must be an ISO date-time'); + assertIntentGraph(options.before.graph); + assertIntentGraph(options.afterGraph); + assertConclusions([], options.before); + const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); + assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); + const planIds = options.plans.map((plan) => plan.id); + if (new Set(planIds).size !== planIds.length) throw new Error('Code change close plans must have unique ids'); + + const acceptances = options.plans.map((plan) => evaluateCodeChangeAcceptance({ + plan, + before: options.before, + afterGraph: options.afterGraph, + afterDiagnostics, + evaluatedAt, + })); + const acceptedCount = acceptances.filter((item) => item.accepted).length; + return { + schemaVersion: 't2c.code-change-close-result/v1', + evaluatedAt, + graphFingerprintBefore: options.before.graph.fingerprint, + graphFingerprintAfter: options.afterGraph.fingerprint, + planCount: options.plans.length, + acceptedCount, + rejectedCount: options.plans.length - acceptedCount, + allAccepted: options.plans.length > 0 && acceptedCount === options.plans.length, + acceptances, + generation: deterministicGeneration(evaluatedAt, 't2c/code-change-close-result'), + }; +} + +function indexProposalsByDiagnostic(proposals: TodoProposal[]): Map { + const index = new Map(); + for (const proposal of proposals) { + for (const diagnosticId of proposal.diagnosticIds) { + const list = index.get(diagnosticId) ?? []; + list.push(proposal); + index.set(diagnosticId, list); + } + } + return index; +} + +function indexConclusionsByDiagnostic(conclusions: Conclusion[]): Map { + const index = new Map(); + for (const conclusion of conclusions) { + for (const diagnosticId of conclusion.diagnosticIds) { + const list = index.get(diagnosticId) ?? []; + list.push(conclusion); + index.set(diagnosticId, list); + } + } + return index; +} + +function collectTarget(records: IntentRecord[], proposals: TodoProposal[]): IntentTarget { + const paths = new Set(); + const symbols = new Set(); + const tickets = new Set(); + const versions = new Set(); + for (const record of records) { + for (const path of record.statement.target.paths) paths.add(path); + for (const symbol of record.statement.target.symbols) symbols.add(symbol); + for (const ticket of record.statement.target.tickets) tickets.add(ticket); + for (const version of record.statement.target.versions) versions.add(version); + } + for (const proposal of proposals) { + for (const path of proposal.target.paths) paths.add(path); + for (const symbol of proposal.target.symbols) symbols.add(symbol); + for (const ticket of proposal.target.tickets) tickets.add(ticket); + for (const version of proposal.target.versions) versions.add(version); + } + return normalizeTarget({ + paths: [...paths].filter(isUsefulCodeChangePath), + symbols: [...symbols], + tickets: [...tickets], + versions: [...versions], + }); +} + +function buildChanges( + target: IntentTarget, + records: IntentRecord[], + diagnostic: Diagnostic, + pathExistsInRepository?: (relativePath: string) => boolean, +): CodeChangeFile[] { + const symbols = uniqueSorted(target.symbols); + // The diagnostic explains why evidence is missing; it is not necessarily an + // implementation instruction. Reusing its generic remediation here produced + // contradictory tickets such as “replace magic number 50” followed by + // “provide a missing function”. The lossless source declaration is the work + // to perform, while the diagnostic remains available in the plan evidence. + const sourceIntents = uniqueSorted(records.map((record) => record.statement.text)); + const rationale = sourceIntents.length + ? `Implement the source intent: ${sourceIntents.join(' | ')}` + : diagnostic.detail || `Address ${diagnostic.code}.`; + + if (target.paths.length) { + const changes: CodeChangeFile[] = []; + for (const declared of uniqueSorted(target.paths)) { + const normalized = declared.replace(/\\/g, '/'); + const exists = pathExistsInRepository?.(normalized); + // A path without a directory is shorthand that never said *where* the + // file belongs. Creating one at the repository root invents a location: + // measured across seven foreign repositories this proposed `__init__.py` + // beside 22 real ones, `pyproject.toml` beside 32, and files named after + // prose fragments such as `it.md`. The diagnostic still reports the gap; + // only the invented instruction is withheld. + if (exists === false && !normalized.includes('/')) continue; + // Documentation routinely plans files that do not exist yet (a target + // repository's `docs/ARCHITECTURE.md`). Telling an executor to modify + // them is an instruction it cannot follow, and `apply-source-patch` + // rejects a create edit whose target already exists, so the two actions + // must not be guessed. + const action: CodeChangeFileAction = exists === false ? 'create' : 'modify'; + changes.push({ path: normalized, action, symbols, rationale }); + } + return changes; + } + + // Without a path the plan cannot safely name a source file. Skip rather than invent. + return []; +} + +function titleFor(diagnostic: Diagnostic, records: IntentRecord[]): string { + const record = records[0]; + const object = record?.statement.object?.trim(); + // `inferObject` removes the verb selected by the action classifier. In a + // compound sentence a later high-precedence verb can win (`verify` before + // `implement`), leaving the original leading imperative inside `object` and + // a broken fragment after the removed verb. The source statement is the + // lossless title whenever that mismatch is visible. + if (object && startsWithImperative(object) && record?.statement.text.trim()) { + return record.statement.text.trim().replace(/[.!?]+$/, ''); + } + if (object) return `Implement ${object}`; + return diagnostic.title.trim() || `Resolve ${diagnostic.code}`; +} + +function startsWithImperative(value: string): boolean { + return /^(?:add|build|change|configure|create|delete|document|fix|implement|preserve|refactor|remove|test|update|validate|verify)\b/i.test(value) + || /^(?:dodać|dodac|naprawić|naprawic|przetestować|przetestowac|usunąć|usunac|utworzyć|utworzyc|wdrożyć|wdrozyc|zmienić|zmienic|zweryfikować|zweryfikowac)\b/i.test(value); +} + +function descriptionFor( + diagnostic: Diagnostic, + records: IntentRecord[], + target: IntentTarget, +): string { + const parts = [ + diagnostic.detail.trim(), + records[0] ? `Source intent: ${records[0].statement.text.trim()}` : '', + target.paths.length ? `Paths: ${target.paths.join(', ')}.` : '', + target.symbols.length ? `Symbols: ${target.symbols.join(', ')}.` : '', + target.tickets.length ? `Tickets: ${target.tickets.join(', ')}.` : '', + ].filter(Boolean); + return parts.join(' '); +} + +function acceptanceCriteriaFor(diagnostic: Diagnostic, target: IntentTarget): string[] { + const criteria = [ + `Re-run todo2code link+diagnose and clear diagnostic ${diagnostic.id} (${diagnostic.code}).`, + 'Do not introduce new blocking diagnostics.', + ]; + if (target.paths.length) { + criteria.push(`Touch only the declared paths: ${uniqueSorted(target.paths).join(', ')}.`); + } + if (target.symbols.length) { + criteria.push(`Provide AST evidence for symbols: ${uniqueSorted(target.symbols).join(', ')}.`); + } + return uniqueSorted(criteria); +} + +function priorityFor(diagnostic: Diagnostic): TodoPriority { + if (diagnostic.severity === 'blocking') return 'P0'; + if (diagnostic.severity === 'review_required') return 'P1'; + if (diagnostic.severity === 'warning') return 'P2'; + return 'P3'; +} + +function confidenceFor(diagnostic: Diagnostic, proposals: TodoProposal[]): number { + if (proposals.length) { + return Math.min(0.92, Math.max(...proposals.map((item) => item.confidence))); + } + if (diagnostic.severity === 'blocking') return 0.88; + if (diagnostic.severity === 'review_required') return 0.8; + return 0.72; +} + +function riskFor(diagnostic: Diagnostic, changes: CodeChangeFile[]): CodeChangePlan['risk'] { + const level = diagnostic.severity === 'blocking' ? 'high' + : diagnostic.severity === 'review_required' ? 'medium' + : 'low'; + const reasons = [ + `Derived from ${diagnostic.severity} diagnostic ${diagnostic.id}.`, + `Touches ${changes.length} declared ${changes.length === 1 ? 'path' : 'paths'}.`, + ]; + return { level, reasons: uniqueSorted(reasons) }; +} + +function rollbackFor(changes: CodeChangeFile[]): string { + return `Revert the proposed changes to ${uniqueSorted(changes.map((item) => item.path)).join(', ')} and re-run todo2code diagnostics.`; +} + +function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { + return { + generator, + generatorVersion: '1', + runtimeVersion: T2C_VERSION, + generatedAt, + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + model: null, + provider: null, + responseId: null, + configurationFingerprint: sha256(stableStringify({ + generator, + generatorVersion: '1', + codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), + })), + reason: null, + }; +} + +function uniqueSorted(values: string[]): string[] { + return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); +} + +export interface CreateCodeChangeReviewOptions { + plans: CodeChangePlan[]; + graphFingerprint: string; + createdAt?: string; +} + +export interface CreatedCodeChangeReview { + markdown: string; + artifact: CodeChangeReviewPatch; +} + +/** + * Render a stable, reviewable Markdown brief for grounded code-change plans. + * + * This is not a source patch and is never applied to the tree. It exists so + * humans and agents share one hash-bound artifact that lists exact paths, + * acceptance criteria, evidence IDs, risk and rollback instructions. + */ +export function createCodeChangeReviewPatch( + options: CreateCodeChangeReviewOptions, +): CreatedCodeChangeReview { + if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { + throw new Error('graphFingerprint must be a SHA-256 hex digest'); + } + assertCodeChangePlansForReview(options.plans, options.graphFingerprint); + const plans = [...options.plans].sort((left, right) => + priorityRank(left.priority) - priorityRank(right.priority) || left.id.localeCompare(right.id)); + const createdAt = options.createdAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); + const markdown = renderCodeChangeReviewMarkdown(plans, options.graphFingerprint); + const artifact: CodeChangeReviewPatch = { + schemaVersion: 't2c.code-change-review/v1', + createdAt, + graphFingerprint: options.graphFingerprint, + planIds: plans.map((plan) => plan.id), + planHashes: plans.map((plan) => plan.planHash), + renderedPatchHash: sha256(markdown), + generation: deterministicGeneration(createdAt, 't2c/code-change-review'), + }; + assertCodeChangeReviewPatch(artifact); + return { markdown, artifact }; +} + +export function renderCodeChangeReviewMarkdown( + plans: CodeChangePlan[], + graphFingerprint: string, +): string { + const lines = [ + '', + '# todo2code proposed code changes', + '', + 'This document is a grounded **review brief**, not an auto-applied source patch.', + 'Implement the listed paths in a normal branch, re-run the pipeline, then', + '`t2c evaluate-code-change`. Acceptance still requires human/CI approval before DONE.', + '', + `Graph fingerprint: \`${graphFingerprint}\``, + '', + ]; + if (!plans.length) { + lines.push('_No grounded code-change plans. Open diagnostics either cleared or lack repository paths._', ''); + return lines.join('\n'); + } + let currentPriority: CodeChangePlan['priority'] | null = null; + for (const plan of plans) { + if (plan.priority !== currentPriority) { + if (currentPriority !== null) lines.push(''); + currentPriority = plan.priority; + lines.push(`## ${plan.priority}`, ''); + } + lines.push(`### ${inline(plan.title)} (\`${plan.id}\`)`, ''); + lines.push(`- Plan hash: \`${plan.planHash}\``); + lines.push(`- Risk: **${plan.risk.level}** — ${plan.risk.reasons.map(inline).join('; ')}`); + lines.push(`- Confidence: ${plan.confidence.toFixed(2)}`); + lines.push(`- Description: ${inline(plan.description)}`); + lines.push('- Changes:'); + for (const change of plan.changes) { + const symbols = change.symbols.length ? ` symbols: ${change.symbols.map((item) => `\`${item}\``).join(', ')}` : ''; + lines.push(` - \`${change.action}\` \`${change.path}\`${symbols}`); + lines.push(` - ${inline(change.rationale)}`); + } + lines.push('- Acceptance criteria:'); + for (const criterion of plan.acceptanceCriteria) lines.push(` - [ ] ${inline(criterion)}`); + lines.push(`- Diagnostics: ${renderIds(plan.evidence.diagnosticIds)}`); + lines.push(`- Evidence records: ${renderIds(plan.evidence.recordIds)}`); + if (plan.evidence.proposalIds.length) lines.push(`- TODO proposals: ${renderIds(plan.evidence.proposalIds)}`); + if (plan.evidence.conclusionIds.length) lines.push(`- Conclusions: ${renderIds(plan.evidence.conclusionIds)}`); + lines.push(`- Rollback: ${inline(plan.rollback)}`); + lines.push(''); + } + lines.push('## After implementation', ''); + lines.push('1. Re-run `t2c pipeline` (or extract + link + diagnose) on the changed tree.'); + lines.push('2. `t2c evaluate-code-change --before-graph … --after-graph … --out acceptance.json`.'); + lines.push('3. Require `accepted=true` and human/CI review before marking work DONE.'); + lines.push(''); + return lines.join('\n'); +} + +export function assertCodeChangeReviewPatch(value: unknown): asserts value is CodeChangeReviewPatch { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change review patch must be an object'); + } + const artifact = value as Record; + const required = [ + 'schemaVersion', 'createdAt', 'graphFingerprint', 'planIds', 'planHashes', + 'renderedPatchHash', 'generation', + ]; + for (const key of required) { + if (!(key in artifact)) throw new Error(`Code change review patch is missing: ${key}`); + } + if (artifact.schemaVersion !== 't2c.code-change-review/v1') { + throw new Error('Unsupported code change review schemaVersion'); + } + if (typeof artifact.createdAt !== 'string' || Number.isNaN(Date.parse(artifact.createdAt))) { + throw new Error('Code change review createdAt must be an ISO date-time'); + } + if (typeof artifact.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.graphFingerprint)) { + throw new Error('Code change review graphFingerprint must be SHA-256'); + } + if (typeof artifact.renderedPatchHash !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.renderedPatchHash)) { + throw new Error('Code change review renderedPatchHash must be SHA-256'); + } + if (!Array.isArray(artifact.planIds) || !artifact.planIds.every((id) => typeof id === 'string' && /^CPLAN-[a-f0-9]{20}$/.test(id))) { + throw new Error('Code change review planIds must be CPLAN ids'); + } + if (!Array.isArray(artifact.planHashes) || !artifact.planHashes.every((hash) => typeof hash === 'string' && /^[a-f0-9]{64}$/.test(hash))) { + throw new Error('Code change review planHashes must be SHA-256 digests'); + } + if (artifact.planIds.length !== artifact.planHashes.length) { + throw new Error('Code change review planIds and planHashes must have equal length'); + } + if (new Set(artifact.planIds as string[]).size !== (artifact.planIds as string[]).length) { + throw new Error('Code change review planIds must be unique'); + } + assertGroundedGenerationMetadata(artifact.generation, 'Code change review generation'); + const generation = artifact.generation as GroundedGenerationMetadata; + if (generation.generatedAt !== artifact.createdAt) { + throw new Error('Code change review generation.generatedAt must match createdAt'); + } + if (generation.generator !== 't2c/code-change-review') { + throw new Error('Code change review generation.generator must be t2c/code-change-review'); + } +} + +function priorityRank(priority: TodoPriority): number { + return ({ P0: 0, P1: 1, P2: 2, P3: 3 } as const)[priority]; +} + +function inline(value: string): string { + return value.replace(/\s+/g, ' ').trim(); +} + +function renderIds(ids: string[]): string { + return ids.length ? ids.map((id) => `\`${id}\``).join(', ') : '_none_'; +} + +export interface CreateCodeChangeSourcePatchOptions { + plan: CodeChangePlan; + /** Optional per-path unified diffs keyed by relative repository path. */ + unifiedDiffs?: Record; + createdAt?: string; +} + +/** + * Build a structured source-edit proposal from one grounded code-change plan. + * + * Deterministic by default: each planned file gets an imperative instruction. + * Callers may attach a unified diff per path; the runtime validates path headers + * and rejects traversal / host paths. Nothing is written to the working tree. + */ +export function createCodeChangeSourcePatch( + options: CreateCodeChangeSourcePatchOptions, +): CodeChangeSourcePatch { + const plan = options.plan; + const graphFingerprint = plan?.evidence?.graphFingerprint; + assertCodeChangePlansForReview( + [plan], + typeof graphFingerprint === 'string' ? graphFingerprint : '', + ); + const createdAt = options.createdAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); + const allowed = new Set(plan.target.paths.map((path) => path.replace(/\\/g, '/'))); + const diffs = options.unifiedDiffs ?? {}; + for (const path of Object.keys(diffs)) { + const normalized = path.replace(/\\/g, '/'); + if (!allowed.has(normalized)) { + throw new Error(`Unified diff path ${normalized} is not declared by plan ${plan.id}`); + } + } + const edits: CodeChangeSourceEdit[] = [...plan.changes] + .map((change) => { + const path = change.path.replace(/\\/g, '/'); + if (!allowed.has(path)) { + throw new Error(`Edit path ${path} is not present in plan target.paths`); + } + const rawDiff = diffs[path]; + const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); + return { + path, + action: change.action, + symbols: uniqueSorted(change.symbols), + instruction: instructionFor(change, plan), + unifiedDiff, + }; + }) + .sort((left, right) => left.path.localeCompare(right.path) || left.action.localeCompare(right.action)); + if (!edits.length) throw new Error(`Plan ${plan.id} has no editable paths`); + + const semantic = { + planId: plan.id, + planHash: plan.planHash, + graphFingerprint: plan.evidence.graphFingerprint, + diagnosticIds: uniqueSorted(plan.evidence.diagnosticIds), + recordIds: uniqueSorted(plan.evidence.recordIds), + edits, + acceptanceCriteria: uniqueSorted(plan.acceptanceCriteria), + }; + const patchHash = createCodeChangeSourcePatchHash(semantic); + const patch: CodeChangeSourcePatch = { + schemaVersion: 't2c.code-change-source-patch/v1', + id: createCodeChangeSourcePatchId(semantic), + patchHash, + status: 'proposed', + createdAt, + ...semantic, + generation: deterministicGeneration(createdAt, 't2c/code-change-source-patch'), + }; + assertCodeChangeSourcePatch(patch, plan); + return patch; +} + +export function createCodeChangeSourcePatchSet(options: { + plans: CodeChangePlan[]; + graphFingerprint: string; + unifiedDiffsByPlanId?: Record>; + generatedAt?: string; +}): CodeChangeSourcePatchSet { + if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { + throw new Error('graphFingerprint must be a SHA-256 hex digest'); + } + assertCodeChangePlansForReview(options.plans, options.graphFingerprint); + const generatedAt = options.generatedAt ?? new Date().toISOString(); + const patches = [...options.plans] + .sort((left, right) => left.id.localeCompare(right.id)) + .map((plan) => createCodeChangeSourcePatch({ + plan, + createdAt: generatedAt, + ...(options.unifiedDiffsByPlanId?.[plan.id] + ? { unifiedDiffs: options.unifiedDiffsByPlanId[plan.id] } + : {}), + })); + const result: CodeChangeSourcePatchSet = { + schemaVersion: 't2c.code-change-source-patch-set/v1', + generatedAt, + graphFingerprint: options.graphFingerprint, + patches, + generation: deterministicGeneration(generatedAt, 't2c/code-change-source-patch-set'), + }; + assertCodeChangeSourcePatchSet(result, options.plans); + return result; +} + +export function assertCodeChangeSourcePatch( + value: unknown, + plan?: CodeChangePlan, +): asserts value is CodeChangeSourcePatch { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change source patch must be an object'); + } + const patch = value as CodeChangeSourcePatch; + exactSourcePatchKeys(patch as unknown as Record, [ + 'schemaVersion', 'id', 'patchHash', 'status', 'createdAt', 'planId', 'planHash', + 'graphFingerprint', 'diagnosticIds', 'recordIds', 'edits', 'acceptanceCriteria', 'generation', + ], 'Source patch'); + if (patch.schemaVersion !== 't2c.code-change-source-patch/v1') { + throw new Error('Unsupported code change source patch schemaVersion'); + } + if (typeof patch.id !== 'string' || !/^SPATCH-[a-f0-9]{20}$/.test(patch.id)) { + throw new Error('Source patch id must match SPATCH-<20 hex>'); + } + if (typeof patch.patchHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.patchHash)) { + throw new Error('Source patch patchHash must be SHA-256'); + } + if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); + if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { + throw new Error('Source patch createdAt must be an ISO date-time'); + } + if (typeof patch.planId !== 'string' || !/^CPLAN-[a-f0-9]{20}$/.test(patch.planId)) { + throw new Error('Source patch planId must match CPLAN-<20 hex>'); + } + if (typeof patch.planHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.planHash)) { + throw new Error('Source patch planHash must be SHA-256'); + } + if (typeof patch.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(patch.graphFingerprint)) { + throw new Error('Source patch graphFingerprint must be SHA-256'); + } + if (!Array.isArray(patch.edits) || patch.edits.length === 0) { + throw new Error('Source patch edits must be a non-empty array'); + } + assertSourcePatchIds(patch.diagnosticIds, /^DIAG-[a-f0-9]{20}$/, 'diagnosticIds'); + assertSourcePatchIds(patch.recordIds, /^INT-[A-Z]+-[a-f0-9]{20}$/, 'recordIds'); + assertSourcePatchStrings(patch.acceptanceCriteria, 'acceptanceCriteria', false); + const paths = new Set(); + for (const edit of patch.edits) { + if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); + exactSourcePatchKeys(edit as unknown as Record, [ + 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', + ], 'Source patch edit'); + const path = edit.path?.trim().replace(/\\/g, '/') ?? ''; + if (!path || path.startsWith('/') || path.split('/').includes('..')) { + throw new Error(`Source patch edit path is not a relative repository path: ${path}`); + } + if (!['create', 'modify', 'delete'].includes(edit.action)) { + throw new Error(`Source patch edit action is unsupported: ${String(edit.action)}`); + } + if (typeof edit.instruction !== 'string' || !edit.instruction.trim()) { + throw new Error('Source patch edit instruction must be non-blank'); + } + assertSourcePatchStrings(edit.symbols, `edits[${path}].symbols`, true); + if (edit.unifiedDiff !== null) { + if (typeof edit.unifiedDiff !== 'string') throw new Error('Source patch unifiedDiff must be string or null'); + normalizeUnifiedDiff(edit.unifiedDiff, path); + } + const key = `${path}::${edit.action}`; + if (paths.has(key)) throw new Error(`Duplicate source patch edit for ${path}`); + paths.add(key); + } + const expectedHash = createCodeChangeSourcePatchHash(patch); + if (patch.patchHash !== expectedHash) { + throw new Error(`Source patch patchHash does not match semantic content: expected ${expectedHash}`); + } + if (patch.id !== createCodeChangeSourcePatchId(patch)) { + throw new Error('Source patch id does not match semantic content'); + } + assertGroundedGenerationMetadata(patch.generation, 'Source patch generation'); + if (patch.generation.generatedAt !== patch.createdAt) { + throw new Error('Source patch generation.generatedAt must match createdAt'); + } + if (patch.generation.generator !== 't2c/code-change-source-patch') { + throw new Error('Source patch generation.generator must be t2c/code-change-source-patch'); + } + if (plan) { + if (patch.planId !== plan.id || patch.planHash !== plan.planHash) { + throw new Error('Source patch is not bound to the supplied plan'); + } + if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { + throw new Error('Source patch graphFingerprint does not match the plan'); + } + const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); + const expectedChanges = new Map(plan.changes.map((item) => [ + item.path.replace(/\\/g, '/'), item.action, + ])); + for (const edit of patch.edits) { + const editPath = edit.path.replace(/\\/g, '/'); + if (!allowed.has(editPath)) { + throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); + } + if (expectedChanges.get(editPath) !== edit.action) { + throw new Error(`Source patch action for ${edit.path} does not match the plan`); + } + } + exactSourcePatchSet(patch.edits.map((item) => item.path.replace(/\\/g, '/')), [...expectedChanges.keys()], 'edit paths'); + exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); + exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); + exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); + } +} + +export function assertCodeChangeSourcePatchSet( + value: unknown, + plans?: CodeChangePlan[], +): asserts value is CodeChangeSourcePatchSet { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change source patch set must be an object'); + } + const set = value as CodeChangeSourcePatchSet; + exactSourcePatchKeys(set as unknown as Record, [ + 'schemaVersion', 'generatedAt', 'graphFingerprint', 'patches', 'generation', + ], 'Source patch set'); + if (set.schemaVersion !== 't2c.code-change-source-patch-set/v1') { + throw new Error('Unsupported code change source patch set schemaVersion'); + } + if (typeof set.generatedAt !== 'string' || Number.isNaN(Date.parse(set.generatedAt))) { + throw new Error('Source patch set generatedAt must be an ISO date-time'); + } + if (typeof set.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(set.graphFingerprint)) { + throw new Error('Source patch set graphFingerprint must be SHA-256'); + } + if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); + const plansById = new Map((plans ?? []).map((plan) => [plan.id, plan])); + const patchIds = new Set(); + for (const patch of set.patches) { + assertCodeChangeSourcePatch(patch, plans ? plansById.get(patch.planId) : undefined); + if (patch.graphFingerprint !== set.graphFingerprint) { + throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); + } + if (patchIds.has(patch.id)) throw new Error(`Duplicate source patch id: ${patch.id}`); + patchIds.add(patch.id); + } + if (plans) exactSourcePatchSet(set.patches.map((patch) => patch.planId), plans.map((plan) => plan.id), 'planIds'); + assertGroundedGenerationMetadata(set.generation, 'Source patch set generation'); + if (set.generation.generatedAt !== set.generatedAt) { + throw new Error('Source patch set generation.generatedAt must match generatedAt'); + } + if (set.generation.generator !== 't2c/code-change-source-patch-set') { + throw new Error('Source patch set generation.generator must be t2c/code-change-source-patch-set'); + } +} + +function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { + const actual = Object.keys(value).sort(); + const wanted = [...expected].sort(); + if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { + throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); + } +} + +function assertSourcePatchIds(value: unknown, pattern: RegExp, name: string): asserts value is string[] { + if (!Array.isArray(value) || value.length === 0 + || value.some((item) => typeof item !== 'string' || !pattern.test(item))) { + throw new Error(`Source patch ${name} must be a non-empty array of valid IDs`); + } + if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); +} + +function assertSourcePatchStrings(value: unknown, name: string, emptyAllowed: boolean): asserts value is string[] { + if (!Array.isArray(value) || (!emptyAllowed && value.length === 0) + || value.some((item) => typeof item !== 'string' || !item.trim())) { + throw new Error(`Source patch ${name} must contain ${emptyAllowed ? 'only ' : ''}non-blank strings`); + } + if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); +} + +function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { + const left = [...new Set(actual)].sort(); + const right = [...new Set(expected)].sort(); + if (left.length !== right.length || left.some((item, index) => item !== right[index])) { + throw new Error(`Source patch ${name} do not match the plan`); + } +} + +function instructionFor(change: CodeChangeFile, plan: CodeChangePlan): string { + const symbols = change.symbols.length + ? ` Focus on symbols: ${change.symbols.join(', ')}.` + : ''; + const criteria = plan.acceptanceCriteria.length + ? ` Acceptance: ${plan.acceptanceCriteria.join(' ')}` + : ''; + return `${change.action} \`${change.path}\`. ${change.rationale.trim()}.${symbols}${criteria}`.replace(/\s+/g, ' ').trim(); +} + +/** + * Validate a single-file unified diff body. + * Accepts optional `--- a/path` / `+++ b/path` headers and rejects foreign paths. + */ +function normalizeUnifiedDiff(diff: string, expectedPath: string): string { + const normalized = diff.replace(/\r\n/g, '\n'); + if (!normalized.trim()) throw new Error(`Unified diff for ${expectedPath} is empty`); + if (normalized.includes('\0')) throw new Error(`Unified diff for ${expectedPath} contains NUL bytes`); + // Lightweight secret heuristic — refuse obvious credential dumps in proposed diffs. + if (/(?:api[_-]?key|secret|password|private[_-]?key)\s*[:=]\s*['"]?[^'"\s]{8,}/i.test(normalized)) { + throw new Error(`Unified diff for ${expectedPath} appears to contain a secret assignment`); + } + const headers = [...normalized.matchAll(/^(?:---|\+\+\+)\s+(?:[ab]\/)?(.+)$/gm)].map((match) => match[1]!.trim()); + for (const header of headers) { + if (header === '/dev/null') continue; + const path = header.replace(/\\/g, '/'); + if (path.startsWith('/') || path.split('/').includes('..')) { + throw new Error(`Unified diff for ${expectedPath} uses a non-repository path header: ${path}`); + } + if (path !== expectedPath && path !== `a/${expectedPath}` && path !== `b/${expectedPath}`) { + // Headers may include timestamps after a tab; strip them. + const bare = path.split('\t')[0] ?? path; + const stripped = bare.replace(/^[ab]\//, ''); + if (stripped !== expectedPath) { + throw new Error(`Unified diff for ${expectedPath} references foreign path: ${path}`); + } + } + } + return normalized; +} + +export interface ApplyCodeChangeSourcePatchOptions { + root: string; + patch: CodeChangeSourcePatch; + approval: CodeChangeSourcePatchApproval; + receiptPath: string; + now?: Date; +} + +export interface ApplyCodeChangeSourcePatchResult { + applied: boolean; + idempotent: boolean; + receipt: CodeChangeSourceApplyReceipt; +} + +/** + * Apply a fully-diffed source patch after explicit hash approval. + * + * Instruction-only edits (null unifiedDiff) are rejected. Paths must stay + * relative and inside `root`. Re-applying with an existing matching receipt is + * idempotent. + */ +export async function applyCodeChangeSourcePatch( + options: ApplyCodeChangeSourcePatchOptions, +): Promise { + assertCodeChangeSourcePatch(options.patch); + if (!options.approval?.actor?.trim()) throw new Error('Explicit source patch approval actor is required'); + if (options.approval.patchHash !== options.patch.patchHash) { + throw new Error('Source patch approval hash does not match the patch'); + } + for (const edit of options.patch.edits) { + if (edit.unifiedDiff === null) { + throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); + } + } + + const root = path.resolve(options.root); + const receiptPath = await assertPathWithinRoot(root, path.resolve(options.receiptPath)); + const lockPath = `${receiptPath}.t2c-apply.lock`; + await ensureDir(path.dirname(receiptPath)); + let lock: Awaited> | null = null; + try { + lock = await fs.open(lockPath, 'wx'); + } catch (error) { + if ((error as NodeJS.ErrnoException).code === 'EEXIST') { + throw new Error('Another source patch apply operation is in progress'); + } + throw error; + } + + try { + if (await pathExists(receiptPath)) { + const existing = await readJson(receiptPath, 1024 * 1024); + await assertExistingSourceReceipt(existing, options.patch, root); + return { applied: false, idempotent: true, receipt: existing }; + } + + const prepared: PreparedSourceEdit[] = []; + for (const edit of options.patch.edits) { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + if (absolute === receiptPath) { + throw new Error(`Source patch target collides with its receipt path: ${relative}`); + } + const exists = await pathExists(absolute); + if (exists && (await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Refusing to apply through a symlink: ${relative}`); + } + if (edit.action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); + if (edit.action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); + if (edit.action === 'modify' && !exists) { + const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(edit.unifiedDiff!) + || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(edit.unifiedDiff!); + if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); + } + const before = exists ? await readText(absolute, 16 * 1024 * 1024) : ''; + const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, relative); + if (edit.action === 'delete' && after !== '') { + throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); + } + prepared.push({ relative, absolute, action: edit.action, before, after, existed: exists }); + } + + const changed: PreparedSourceEdit[] = []; + try { + for (const edit of prepared) { + if (edit.action === 'delete') await fs.unlink(edit.absolute); + else await atomicWriteRaw(edit.absolute, edit.after); + changed.push(edit); + } + const now = (options.now ?? new Date()).toISOString(); + const fileHashesAfter = Object.fromEntries(prepared + .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) + .sort(([left], [right]) => left.localeCompare(right))); + const receipt: CodeChangeSourceApplyReceipt = { + schemaVersion: 't2c.code-change-source-apply-receipt/v1', + patchId: options.patch.id, + patchHash: options.patch.patchHash, + planId: options.patch.planId, + approvedBy: options.approval.actor.trim(), + approvedAt: now, + appliedAt: now, + appliedPaths: prepared.map((edit) => edit.relative).sort(), + fileHashesAfter, + generation: deterministicGeneration(now, 't2c/code-change-source-apply'), + }; + assertSourceApplyReceipt(receipt, options.patch); + // The receipt is part of the transaction: without it a retry could apply + // the same approved patch again. Roll files back if persisting it fails. + await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); + return { applied: true, idempotent: false, receipt }; + } catch (error) { + const rollbackErrors: string[] = []; + for (const edit of [...changed].reverse()) { + try { + if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); + else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { + if (failure.code !== 'ENOENT') throw failure; + }); + } catch (rollbackError) { + rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); + } + } + if (rollbackErrors.length) { + throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); + } + throw error; + } + } finally { + await lock.close(); + await fs.unlink(lockPath).catch(() => undefined); + } +} + +interface PreparedSourceEdit { + relative: string; + absolute: string; + action: CodeChangeFileAction; + before: string; + after: string; + existed: boolean; +} + +async function assertExistingSourceReceipt( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, + root: string, +): Promise { + try { + assertSourceApplyReceipt(receipt, patch); + } catch { + throw new Error('A different or invalid source patch receipt already exists at the receipt path'); + } + for (const edit of patch.edits) { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + const exists = await pathExists(absolute); + if (edit.action === 'delete') { + if (exists) throw new Error(`Applied source patch state changed after receipt: ${relative}`); + continue; + } + if (!exists || (await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Applied source patch state changed after receipt: ${relative}`); + } + const current = await readText(absolute, 16 * 1024 * 1024); + if (receipt.fileHashesAfter[relative] !== sha256(current)) { + throw new Error(`Applied source patch state changed after receipt: ${relative}`); + } + } +} + +function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: CodeChangeSourcePatch): void { + exactSourcePatchKeys(receipt as unknown as Record, [ + 'schemaVersion', 'patchId', 'patchHash', 'planId', 'approvedBy', 'approvedAt', + 'appliedAt', 'appliedPaths', 'fileHashesAfter', 'generation', + ], 'Code change source apply receipt'); + if (receipt.schemaVersion !== 't2c.code-change-source-apply-receipt/v1' + || receipt.patchId !== patch.id || receipt.patchHash !== patch.patchHash || receipt.planId !== patch.planId) { + throw new Error('Code change source apply receipt does not match its patch'); + } + if (!receipt.approvedBy.trim()) throw new Error('Code change source apply receipt approvedBy is required'); + if (!Number.isFinite(Date.parse(receipt.approvedAt)) || !Number.isFinite(Date.parse(receipt.appliedAt))) { + throw new Error('Code change source apply receipt timestamps must be ISO date-times'); + } + const expectedPaths = patch.edits.map((edit) => edit.path).sort(); + exactSourcePatchSet(receipt.appliedPaths, expectedPaths, 'receipt appliedPaths'); + const hashPaths = Object.keys(receipt.fileHashesAfter).sort(); + exactSourcePatchSet(hashPaths, expectedPaths, 'receipt fileHashesAfter paths'); + if (Object.values(receipt.fileHashesAfter).some((value) => !/^[a-f0-9]{64}$/.test(value))) { + throw new Error('Code change source apply receipt file hashes must be SHA-256'); + } + assertGroundedGenerationMetadata(receipt.generation, 'Code change source apply receipt generation'); + if (receipt.generation.generatedAt !== receipt.appliedAt + || receipt.generation.generator !== 't2c/code-change-source-apply') { + throw new Error('Code change source apply receipt generation does not match the apply operation'); + } +} + +async function atomicWriteRaw(target: string, content: string): Promise { + await ensureDir(path.dirname(target)); + const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`; + try { + await fs.writeFile(temporary, content, 'utf8'); + await fs.rename(temporary, target); + } finally { + await fs.unlink(temporary).catch(() => undefined); + } +} + +/** + * Apply a single-file unified diff to a text buffer. + * Supports standard hunks with space/+/− prefixes. Throws on context mismatch. + */ +export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: string): string { + const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); + const baseLines = splitKeep(base); + const diffLines = normalizedDiff.split('\n'); + // Drop trailing empty element only if the original split introduced it + // without a final newline — normalize by working on lines as split. + const hunks: Array<{ oldStart: number; oldCount: number; newCount: number; lines: string[] }> = []; + let current: { oldStart: number; oldCount: number; newCount: number; lines: string[] } | null = null; + for (const line of diffLines) { + if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { + continue; + } + const header = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); + if (header) { + if (current) hunks.push(current); + current = { + oldStart: Number(header[1]), + oldCount: header[2] === undefined ? 1 : Number(header[2]), + newCount: header[4] === undefined ? 1 : Number(header[4]), + lines: [], + }; + continue; + } + if (!current) { + if (line === '') continue; + throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); + } + // Blank lines without a unified-diff prefix separate hunks in some emitters. + if (line === '') continue; + current.lines.push(line); + } + if (current) hunks.push(current); + if (!hunks.length) throw new Error(`Unified diff for ${expectedPath} contains no hunks`); + + let cursor = 0; + const output: string[] = []; + for (const hunk of hunks) { + const oldIndex = Math.max(0, hunk.oldStart - 1); + if (oldIndex < cursor) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); + const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; + const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; + if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { + throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); + } + while (cursor < oldIndex) { + if (cursor >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); + output.push(baseLines[cursor]!); + cursor += 1; + } + for (const line of hunk.lines) { + if (line.startsWith('\\')) continue; // "\ No newline at end of file" + const mark = line[0]; + const body = line.slice(1); + if (mark === ' ') { + if (baseLines[cursor] !== body) { + throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor + 1}`); + } + output.push(baseLines[cursor]!); + cursor += 1; + } else if (mark === '-') { + if (baseLines[cursor] !== body) { + throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor + 1}`); + } + cursor += 1; + } else if (mark === '+') { + output.push(body); + } else if (line === '') { + // empty line inside hunk without prefix is invalid in strict unified diffs + throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); + } else { + throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); + } + } + } + while (cursor < baseLines.length) { + output.push(baseLines[cursor]!); + cursor += 1; + } + // Reconstruct text. Files without a trailing newline end without an empty last segment. + if (base.endsWith('\n') || output.length === 0) return `${output.join('\n')}${output.length ? '\n' : ''}`; + return output.join('\n'); +} + +function splitKeep(text: string): string[] { + if (text === '') return []; + const lines = text.split('\n'); + if (text.endsWith('\n')) lines.pop(); + return lines; +} diff --git a/src/synthesis/code-change-plan/implementation.ts b/src/synthesis/code-change-plan/implementation.ts index b5eabc6..583d8b1 100644 --- a/src/synthesis/code-change-plan/implementation.ts +++ b/src/synthesis/code-change-plan/implementation.ts @@ -1,1310 +1 @@ -import { randomUUID } from 'node:crypto'; -import { existsSync, promises as fs } from 'node:fs'; -import path from 'node:path'; -import { - createCodeChangePlanHash, - createCodeChangePlanId, - createCodeChangeSourcePatchHash, - createCodeChangeSourcePatchId, - sha256, - stableStringify, -} from '../../core/id.js'; -import { ensureDir, pathExists, readJson, readText } from '../../core/io.js'; -import { assertPathWithinRoot } from '../../core/security.js'; -import { - assertCodeChangeAcceptance, - assertCodeChangePlanForAcceptance, - assertCodeChangePlans, - assertCodeChangePlansForReview, - assertConclusions, - assertGroundedGenerationMetadata, - assertIntentGraph, -} from '../../core/schema.js'; -import type { - CodeChangeAcceptance, - CodeChangeCloseResult, - CodeChangeFile, - CodeChangeFileAction, - CodeChangePlan, - CodeChangeReviewPatch, - CodeChangeSourceApplyReceipt, - CodeChangeSourceEdit, - CodeChangeSourcePatch, - CodeChangeSourcePatchApproval, - CodeChangeSourcePatchSet, - Conclusion, - Diagnostic, - DiagnosticReport, - GroundedGenerationMetadata, - IntentGraph, - IntentRecord, - IntentTarget, - TodoPriority, - TodoProposal, -} from '../../core/types.js'; -import { normalizeTarget } from '../../core/target.js'; -import { diagnoseGraph } from '../../graph/diagnostics.js'; -import { T2C_VERSION } from '../../version.js'; -import { isUsefulCodeChangePath } from '../code-change-path.js'; - -export { isUsefulCodeChangePath } from '../code-change-path.js'; - -const IMPLEMENTATION_DIAGNOSTIC_CODES = new Set([ - 'PLANNED_NOT_IMPLEMENTED', - 'CHANGELOG_WITHOUT_IMPLEMENTATION', -]); - -export interface ProposeCodeChangePlansOptions { - graph: IntentGraph; - diagnostics: DiagnosticReport; - conclusions?: Conclusion[]; - proposals?: TodoProposal[]; - generatedAt?: string; - /** Limit how many plans are materialised from open diagnostics. Default 50. */ - maxPlans?: number; - /** - * Repository probe used to tell `create` from `modify`. Injected rather than - * read here so plan synthesis stays pure and deterministic; when omitted the - * plan cannot know and keeps the conservative `modify`. - * See {@link createRepositoryPathProbe}. - */ - pathExists?: (relativePath: string) => boolean; -} - -export interface ProposeCodeChangePlansResult { - schemaVersion: 't2c.code-change-plan-set/v1'; - plans: CodeChangePlan[]; - generatedAt: string; - graphFingerprint: string; - sourceDiagnosticCount: number; - generation: GroundedGenerationMetadata; -} - -export interface EvaluateCodeChangeAcceptanceOptions { - plan: CodeChangePlan; - /** Graph and diagnostics that the plan was grounded on. */ - before: { graph: IntentGraph; diagnostics: DiagnosticReport }; - /** Graph after an attempted implementation (re-extracted and re-linked). */ - afterGraph: IntentGraph; - /** Optional precomputed after diagnostics; derived when omitted. */ - afterDiagnostics?: DiagnosticReport; - evaluatedAt?: string; -} - -export interface CloseCodeChangesOptions { - plans: CodeChangePlan[]; - before: { graph: IntentGraph; diagnostics: DiagnosticReport }; - afterGraph: IntentGraph; - afterDiagnostics?: DiagnosticReport; - evaluatedAt?: string; -} - -/** - * Build grounded code-change plans from open implementation diagnostics. - * - * One plan is produced per diagnostic that can name at least one target path - * (from the diagnostic's records or a matching TODO proposal). The runtime - * never invents file paths and never marks work complete. - */ -export function proposeCodeChangePlans(options: ProposeCodeChangePlansOptions): ProposeCodeChangePlansResult { - assertIntentGraph(options.graph); - assertConclusions([], { graph: options.graph, diagnostics: options.diagnostics }); - const generatedAt = options.generatedAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(generatedAt))) throw new Error('generatedAt must be an ISO date-time'); - const maxPlans = options.maxPlans ?? 50; - if (!Number.isInteger(maxPlans) || maxPlans < 1 || maxPlans > 500) { - throw new Error('maxPlans must be an integer between 1 and 500'); - } - const conclusions = options.conclusions ?? []; - const proposals = options.proposals ?? []; - const recordsById = new Map(options.graph.records.map((record) => [record.id, record])); - const proposalsByDiagnostic = indexProposalsByDiagnostic(proposals); - const conclusionsByDiagnostic = indexConclusionsByDiagnostic(conclusions); - - const candidates = options.diagnostics.diagnostics - .filter((diagnostic) => IMPLEMENTATION_DIAGNOSTIC_CODES.has(diagnostic.code)) - // A released CHANGELOG entry is an audit signal; an open TODO is an - // explicit request for work. With a bounded plan set, sorting only by - // content id allowed historical release notes to consume every slot and - // hide the repository's actual backlog from autonomous executors. - .sort((left, right) => implementationDiagnosticRank(left) - - implementationDiagnosticRank(right) || left.id.localeCompare(right.id)); - - const plans: CodeChangePlan[] = []; - for (const diagnostic of candidates) { - if (plans.length >= maxPlans) break; - const relatedRecords = diagnostic.recordIds - .map((id) => recordsById.get(id)) - .filter((record): record is IntentRecord => Boolean(record)); - if (!relatedRecords.length) continue; - - const matchingProposals = proposalsByDiagnostic.get(diagnostic.id) ?? []; - const matchingConclusions = conclusionsByDiagnostic.get(diagnostic.id) ?? []; - const target = collectTarget(relatedRecords, matchingProposals); - const changes = buildChanges(target, relatedRecords, diagnostic, options.pathExists); - if (!changes.length) continue; - - const generation = deterministicGeneration(generatedAt, 't2c/code-change-plan'); - const evidence = { - graphFingerprint: options.graph.fingerprint, - recordIds: uniqueSorted(relatedRecords.map((record) => record.id)), - diagnosticIds: [diagnostic.id], - conclusionIds: uniqueSorted(matchingConclusions.map((item) => item.id)), - proposalIds: uniqueSorted(matchingProposals.map((item) => item.id)), - }; - const semantic = { - title: titleFor(diagnostic, relatedRecords), - description: descriptionFor(diagnostic, relatedRecords, target), - priority: priorityFor(diagnostic), - target, - acceptanceCriteria: acceptanceCriteriaFor(diagnostic, target), - changes, - risk: riskFor(diagnostic, changes), - rollback: rollbackFor(changes), - evidence, - }; - const planHash = createCodeChangePlanHash(semantic); - const plan: CodeChangePlan = { - schemaVersion: 't2c.code-change-plan/v1', - id: createCodeChangePlanId(semantic), - planHash, - status: 'proposed', - createdAt: generatedAt, - ...semantic, - confidence: confidenceFor(diagnostic, matchingProposals), - generation, - }; - plans.push(plan); - } - - assertCodeChangePlans(plans, { - graph: options.graph, - diagnostics: options.diagnostics, - conclusions, - proposals, - }); - - return { - schemaVersion: 't2c.code-change-plan-set/v1', - plans, - generatedAt, - graphFingerprint: options.graph.fingerprint, - sourceDiagnosticCount: candidates.length, - generation: deterministicGeneration(generatedAt, 't2c/code-change-plan-set'), - }; -} - -/** - * Build the repository probe for {@link ProposeCodeChangePlansOptions.pathExists}. - * - * A path that escapes the analysed root is reported as existing, so an unusual - * value degrades to today's conservative `modify` instead of instructing an - * executor to create a file outside the repository. - */ -export function createRepositoryPathProbe(root: string): (relativePath: string) => boolean { - const base = path.resolve(root); - return (relativePath: string): boolean => { - const absolute = path.resolve(base, relativePath); - if (absolute !== base && !absolute.startsWith(base + path.sep)) return true; - return existsSync(absolute); - }; -} - -function implementationDiagnosticRank(diagnostic: Diagnostic): number { - return diagnostic.code === 'PLANNED_NOT_IMPLEMENTED' ? 0 : 1; -} - -/** - * Re-diagnose an after graph and decide whether the plan's targeted - * diagnostics cleared without introducing new blocking findings. - * - * Diagnostic IDs are content-bound, so a still-open finding on the same - * records keeps the same ID. Cleared findings simply disappear. - */ -export function evaluateCodeChangeAcceptance( - options: EvaluateCodeChangeAcceptanceOptions, -): CodeChangeAcceptance { - assertIntentGraph(options.before.graph); - assertIntentGraph(options.afterGraph); - assertConclusions([], options.before); - assertCodeChangePlanForAcceptance(options.plan, options.before); - - const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph( - options.afterGraph, - options.evaluatedAt ?? new Date().toISOString(), - ); - assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); - - const beforeIds = new Set(options.before.diagnostics.diagnostics.map((item) => item.id)); - const afterById = new Map(afterDiagnostics.diagnostics.map((item) => [item.id, item])); - const afterIds = [...afterById.keys()].sort(); - const targeted = options.plan.evidence.diagnosticIds; - const clearedDiagnosticIds = targeted.filter((id) => !afterById.has(id)).sort(); - const remainingDiagnosticIds = targeted.filter((id) => afterById.has(id)).sort(); - const newBlockingDiagnosticIds = afterDiagnostics.diagnostics - .filter((item) => item.severity === 'blocking' && !beforeIds.has(item.id)) - .map((item) => item.id) - .sort(); - - const reasons: string[] = []; - if (remainingDiagnosticIds.length) { - reasons.push( - `Targeted diagnostics still open: ${remainingDiagnosticIds.join(', ')}.`, - ); - } else { - reasons.push('All targeted diagnostics cleared after re-analysis.'); - } - if (newBlockingDiagnosticIds.length) { - reasons.push( - `New blocking diagnostics appeared: ${newBlockingDiagnosticIds.join(', ')}.`, - ); - } else { - reasons.push('No new blocking diagnostics appeared.'); - } - - const accepted = remainingDiagnosticIds.length === 0 && newBlockingDiagnosticIds.length === 0; - if (accepted) { - reasons.push('Acceptance gate passed; human approval is still required before DONE.'); - } else { - reasons.push('Acceptance gate failed.'); - } - - const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); - const acceptance: CodeChangeAcceptance = { - schemaVersion: 't2c.code-change-acceptance/v1', - planId: options.plan.id, - planHash: options.plan.planHash, - beforeGraphFingerprint: options.before.graph.fingerprint, - afterGraphFingerprint: options.afterGraph.fingerprint, - beforeDiagnosticIds: [...beforeIds].sort(), - afterDiagnosticIds: afterIds, - clearedDiagnosticIds, - remainingDiagnosticIds, - newBlockingDiagnosticIds, - accepted, - reasons: uniqueSorted(reasons), - evaluatedAt, - generation: deterministicGeneration(evaluatedAt, 't2c/code-change-acceptance'), - }; - assertCodeChangeAcceptance(acceptance, { - plan: options.plan, - before: options.before, - after: { graph: options.afterGraph, diagnostics: afterDiagnostics }, - }); - return acceptance; -} - -/** Evaluate a plan set under one timestamp without applying changes or marking DONE. */ -export function closeCodeChanges(options: CloseCodeChangesOptions): CodeChangeCloseResult { - const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(evaluatedAt))) throw new Error('evaluatedAt must be an ISO date-time'); - assertIntentGraph(options.before.graph); - assertIntentGraph(options.afterGraph); - assertConclusions([], options.before); - const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); - assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); - const planIds = options.plans.map((plan) => plan.id); - if (new Set(planIds).size !== planIds.length) throw new Error('Code change close plans must have unique ids'); - - const acceptances = options.plans.map((plan) => evaluateCodeChangeAcceptance({ - plan, - before: options.before, - afterGraph: options.afterGraph, - afterDiagnostics, - evaluatedAt, - })); - const acceptedCount = acceptances.filter((item) => item.accepted).length; - return { - schemaVersion: 't2c.code-change-close-result/v1', - evaluatedAt, - graphFingerprintBefore: options.before.graph.fingerprint, - graphFingerprintAfter: options.afterGraph.fingerprint, - planCount: options.plans.length, - acceptedCount, - rejectedCount: options.plans.length - acceptedCount, - allAccepted: options.plans.length > 0 && acceptedCount === options.plans.length, - acceptances, - generation: deterministicGeneration(evaluatedAt, 't2c/code-change-close-result'), - }; -} - -function indexProposalsByDiagnostic(proposals: TodoProposal[]): Map { - const index = new Map(); - for (const proposal of proposals) { - for (const diagnosticId of proposal.diagnosticIds) { - const list = index.get(diagnosticId) ?? []; - list.push(proposal); - index.set(diagnosticId, list); - } - } - return index; -} - -function indexConclusionsByDiagnostic(conclusions: Conclusion[]): Map { - const index = new Map(); - for (const conclusion of conclusions) { - for (const diagnosticId of conclusion.diagnosticIds) { - const list = index.get(diagnosticId) ?? []; - list.push(conclusion); - index.set(diagnosticId, list); - } - } - return index; -} - -function collectTarget(records: IntentRecord[], proposals: TodoProposal[]): IntentTarget { - const paths = new Set(); - const symbols = new Set(); - const tickets = new Set(); - const versions = new Set(); - for (const record of records) { - for (const path of record.statement.target.paths) paths.add(path); - for (const symbol of record.statement.target.symbols) symbols.add(symbol); - for (const ticket of record.statement.target.tickets) tickets.add(ticket); - for (const version of record.statement.target.versions) versions.add(version); - } - for (const proposal of proposals) { - for (const path of proposal.target.paths) paths.add(path); - for (const symbol of proposal.target.symbols) symbols.add(symbol); - for (const ticket of proposal.target.tickets) tickets.add(ticket); - for (const version of proposal.target.versions) versions.add(version); - } - return normalizeTarget({ - paths: [...paths].filter(isUsefulCodeChangePath), - symbols: [...symbols], - tickets: [...tickets], - versions: [...versions], - }); -} - -function buildChanges( - target: IntentTarget, - records: IntentRecord[], - diagnostic: Diagnostic, - pathExistsInRepository?: (relativePath: string) => boolean, -): CodeChangeFile[] { - const symbols = uniqueSorted(target.symbols); - // The diagnostic explains why evidence is missing; it is not necessarily an - // implementation instruction. Reusing its generic remediation here produced - // contradictory tickets such as “replace magic number 50” followed by - // “provide a missing function”. The lossless source declaration is the work - // to perform, while the diagnostic remains available in the plan evidence. - const sourceIntents = uniqueSorted(records.map((record) => record.statement.text)); - const rationale = sourceIntents.length - ? `Implement the source intent: ${sourceIntents.join(' | ')}` - : diagnostic.detail || `Address ${diagnostic.code}.`; - - if (target.paths.length) { - const changes: CodeChangeFile[] = []; - for (const declared of uniqueSorted(target.paths)) { - const normalized = declared.replace(/\\/g, '/'); - const exists = pathExistsInRepository?.(normalized); - // A path without a directory is shorthand that never said *where* the - // file belongs. Creating one at the repository root invents a location: - // measured across seven foreign repositories this proposed `__init__.py` - // beside 22 real ones, `pyproject.toml` beside 32, and files named after - // prose fragments such as `it.md`. The diagnostic still reports the gap; - // only the invented instruction is withheld. - if (exists === false && !normalized.includes('/')) continue; - // Documentation routinely plans files that do not exist yet (a target - // repository's `docs/ARCHITECTURE.md`). Telling an executor to modify - // them is an instruction it cannot follow, and `apply-source-patch` - // rejects a create edit whose target already exists, so the two actions - // must not be guessed. - const action: CodeChangeFileAction = exists === false ? 'create' : 'modify'; - changes.push({ path: normalized, action, symbols, rationale }); - } - return changes; - } - - // Without a path the plan cannot safely name a source file. Skip rather than invent. - return []; -} - -function titleFor(diagnostic: Diagnostic, records: IntentRecord[]): string { - const record = records[0]; - const object = record?.statement.object?.trim(); - // `inferObject` removes the verb selected by the action classifier. In a - // compound sentence a later high-precedence verb can win (`verify` before - // `implement`), leaving the original leading imperative inside `object` and - // a broken fragment after the removed verb. The source statement is the - // lossless title whenever that mismatch is visible. - if (object && startsWithImperative(object) && record?.statement.text.trim()) { - return record.statement.text.trim().replace(/[.!?]+$/, ''); - } - if (object) return `Implement ${object}`; - return diagnostic.title.trim() || `Resolve ${diagnostic.code}`; -} - -function startsWithImperative(value: string): boolean { - return /^(?:add|build|change|configure|create|delete|document|fix|implement|preserve|refactor|remove|test|update|validate|verify)\b/i.test(value) - || /^(?:dodać|dodac|naprawić|naprawic|przetestować|przetestowac|usunąć|usunac|utworzyć|utworzyc|wdrożyć|wdrozyc|zmienić|zmienic|zweryfikować|zweryfikowac)\b/i.test(value); -} - -function descriptionFor( - diagnostic: Diagnostic, - records: IntentRecord[], - target: IntentTarget, -): string { - const parts = [ - diagnostic.detail.trim(), - records[0] ? `Source intent: ${records[0].statement.text.trim()}` : '', - target.paths.length ? `Paths: ${target.paths.join(', ')}.` : '', - target.symbols.length ? `Symbols: ${target.symbols.join(', ')}.` : '', - target.tickets.length ? `Tickets: ${target.tickets.join(', ')}.` : '', - ].filter(Boolean); - return parts.join(' '); -} - -function acceptanceCriteriaFor(diagnostic: Diagnostic, target: IntentTarget): string[] { - const criteria = [ - `Re-run todo2code link+diagnose and clear diagnostic ${diagnostic.id} (${diagnostic.code}).`, - 'Do not introduce new blocking diagnostics.', - ]; - if (target.paths.length) { - criteria.push(`Touch only the declared paths: ${uniqueSorted(target.paths).join(', ')}.`); - } - if (target.symbols.length) { - criteria.push(`Provide AST evidence for symbols: ${uniqueSorted(target.symbols).join(', ')}.`); - } - return uniqueSorted(criteria); -} - -function priorityFor(diagnostic: Diagnostic): TodoPriority { - if (diagnostic.severity === 'blocking') return 'P0'; - if (diagnostic.severity === 'review_required') return 'P1'; - if (diagnostic.severity === 'warning') return 'P2'; - return 'P3'; -} - -function confidenceFor(diagnostic: Diagnostic, proposals: TodoProposal[]): number { - if (proposals.length) { - return Math.min(0.92, Math.max(...proposals.map((item) => item.confidence))); - } - if (diagnostic.severity === 'blocking') return 0.88; - if (diagnostic.severity === 'review_required') return 0.8; - return 0.72; -} - -function riskFor(diagnostic: Diagnostic, changes: CodeChangeFile[]): CodeChangePlan['risk'] { - const level = diagnostic.severity === 'blocking' ? 'high' - : diagnostic.severity === 'review_required' ? 'medium' - : 'low'; - const reasons = [ - `Derived from ${diagnostic.severity} diagnostic ${diagnostic.id}.`, - `Touches ${changes.length} declared ${changes.length === 1 ? 'path' : 'paths'}.`, - ]; - return { level, reasons: uniqueSorted(reasons) }; -} - -function rollbackFor(changes: CodeChangeFile[]): string { - return `Revert the proposed changes to ${uniqueSorted(changes.map((item) => item.path)).join(', ')} and re-run todo2code diagnostics.`; -} - -function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { - return { - generator, - generatorVersion: '1', - runtimeVersion: T2C_VERSION, - generatedAt, - requestedMode: 'deterministic', - effectiveMode: 'deterministic', - degraded: false, - model: null, - provider: null, - responseId: null, - configurationFingerprint: sha256(stableStringify({ - generator, - generatorVersion: '1', - codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), - })), - reason: null, - }; -} - -function uniqueSorted(values: string[]): string[] { - return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); -} - -export interface CreateCodeChangeReviewOptions { - plans: CodeChangePlan[]; - graphFingerprint: string; - createdAt?: string; -} - -export interface CreatedCodeChangeReview { - markdown: string; - artifact: CodeChangeReviewPatch; -} - -/** - * Render a stable, reviewable Markdown brief for grounded code-change plans. - * - * This is not a source patch and is never applied to the tree. It exists so - * humans and agents share one hash-bound artifact that lists exact paths, - * acceptance criteria, evidence IDs, risk and rollback instructions. - */ -export function createCodeChangeReviewPatch( - options: CreateCodeChangeReviewOptions, -): CreatedCodeChangeReview { - if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { - throw new Error('graphFingerprint must be a SHA-256 hex digest'); - } - assertCodeChangePlansForReview(options.plans, options.graphFingerprint); - const plans = [...options.plans].sort((left, right) => - priorityRank(left.priority) - priorityRank(right.priority) || left.id.localeCompare(right.id)); - const createdAt = options.createdAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); - const markdown = renderCodeChangeReviewMarkdown(plans, options.graphFingerprint); - const artifact: CodeChangeReviewPatch = { - schemaVersion: 't2c.code-change-review/v1', - createdAt, - graphFingerprint: options.graphFingerprint, - planIds: plans.map((plan) => plan.id), - planHashes: plans.map((plan) => plan.planHash), - renderedPatchHash: sha256(markdown), - generation: deterministicGeneration(createdAt, 't2c/code-change-review'), - }; - assertCodeChangeReviewPatch(artifact); - return { markdown, artifact }; -} - -export function renderCodeChangeReviewMarkdown( - plans: CodeChangePlan[], - graphFingerprint: string, -): string { - const lines = [ - '', - '# todo2code proposed code changes', - '', - 'This document is a grounded **review brief**, not an auto-applied source patch.', - 'Implement the listed paths in a normal branch, re-run the pipeline, then', - '`t2c evaluate-code-change`. Acceptance still requires human/CI approval before DONE.', - '', - `Graph fingerprint: \`${graphFingerprint}\``, - '', - ]; - if (!plans.length) { - lines.push('_No grounded code-change plans. Open diagnostics either cleared or lack repository paths._', ''); - return lines.join('\n'); - } - let currentPriority: CodeChangePlan['priority'] | null = null; - for (const plan of plans) { - if (plan.priority !== currentPriority) { - if (currentPriority !== null) lines.push(''); - currentPriority = plan.priority; - lines.push(`## ${plan.priority}`, ''); - } - lines.push(`### ${inline(plan.title)} (\`${plan.id}\`)`, ''); - lines.push(`- Plan hash: \`${plan.planHash}\``); - lines.push(`- Risk: **${plan.risk.level}** — ${plan.risk.reasons.map(inline).join('; ')}`); - lines.push(`- Confidence: ${plan.confidence.toFixed(2)}`); - lines.push(`- Description: ${inline(plan.description)}`); - lines.push('- Changes:'); - for (const change of plan.changes) { - const symbols = change.symbols.length ? ` symbols: ${change.symbols.map((item) => `\`${item}\``).join(', ')}` : ''; - lines.push(` - \`${change.action}\` \`${change.path}\`${symbols}`); - lines.push(` - ${inline(change.rationale)}`); - } - lines.push('- Acceptance criteria:'); - for (const criterion of plan.acceptanceCriteria) lines.push(` - [ ] ${inline(criterion)}`); - lines.push(`- Diagnostics: ${renderIds(plan.evidence.diagnosticIds)}`); - lines.push(`- Evidence records: ${renderIds(plan.evidence.recordIds)}`); - if (plan.evidence.proposalIds.length) lines.push(`- TODO proposals: ${renderIds(plan.evidence.proposalIds)}`); - if (plan.evidence.conclusionIds.length) lines.push(`- Conclusions: ${renderIds(plan.evidence.conclusionIds)}`); - lines.push(`- Rollback: ${inline(plan.rollback)}`); - lines.push(''); - } - lines.push('## After implementation', ''); - lines.push('1. Re-run `t2c pipeline` (or extract + link + diagnose) on the changed tree.'); - lines.push('2. `t2c evaluate-code-change --before-graph … --after-graph … --out acceptance.json`.'); - lines.push('3. Require `accepted=true` and human/CI review before marking work DONE.'); - lines.push(''); - return lines.join('\n'); -} - -export function assertCodeChangeReviewPatch(value: unknown): asserts value is CodeChangeReviewPatch { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change review patch must be an object'); - } - const artifact = value as Record; - const required = [ - 'schemaVersion', 'createdAt', 'graphFingerprint', 'planIds', 'planHashes', - 'renderedPatchHash', 'generation', - ]; - for (const key of required) { - if (!(key in artifact)) throw new Error(`Code change review patch is missing: ${key}`); - } - if (artifact.schemaVersion !== 't2c.code-change-review/v1') { - throw new Error('Unsupported code change review schemaVersion'); - } - if (typeof artifact.createdAt !== 'string' || Number.isNaN(Date.parse(artifact.createdAt))) { - throw new Error('Code change review createdAt must be an ISO date-time'); - } - if (typeof artifact.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.graphFingerprint)) { - throw new Error('Code change review graphFingerprint must be SHA-256'); - } - if (typeof artifact.renderedPatchHash !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.renderedPatchHash)) { - throw new Error('Code change review renderedPatchHash must be SHA-256'); - } - if (!Array.isArray(artifact.planIds) || !artifact.planIds.every((id) => typeof id === 'string' && /^CPLAN-[a-f0-9]{20}$/.test(id))) { - throw new Error('Code change review planIds must be CPLAN ids'); - } - if (!Array.isArray(artifact.planHashes) || !artifact.planHashes.every((hash) => typeof hash === 'string' && /^[a-f0-9]{64}$/.test(hash))) { - throw new Error('Code change review planHashes must be SHA-256 digests'); - } - if (artifact.planIds.length !== artifact.planHashes.length) { - throw new Error('Code change review planIds and planHashes must have equal length'); - } - if (new Set(artifact.planIds as string[]).size !== (artifact.planIds as string[]).length) { - throw new Error('Code change review planIds must be unique'); - } - assertGroundedGenerationMetadata(artifact.generation, 'Code change review generation'); - const generation = artifact.generation as GroundedGenerationMetadata; - if (generation.generatedAt !== artifact.createdAt) { - throw new Error('Code change review generation.generatedAt must match createdAt'); - } - if (generation.generator !== 't2c/code-change-review') { - throw new Error('Code change review generation.generator must be t2c/code-change-review'); - } -} - -function priorityRank(priority: TodoPriority): number { - return ({ P0: 0, P1: 1, P2: 2, P3: 3 } as const)[priority]; -} - -function inline(value: string): string { - return value.replace(/\s+/g, ' ').trim(); -} - -function renderIds(ids: string[]): string { - return ids.length ? ids.map((id) => `\`${id}\``).join(', ') : '_none_'; -} - -export interface CreateCodeChangeSourcePatchOptions { - plan: CodeChangePlan; - /** Optional per-path unified diffs keyed by relative repository path. */ - unifiedDiffs?: Record; - createdAt?: string; -} - -/** - * Build a structured source-edit proposal from one grounded code-change plan. - * - * Deterministic by default: each planned file gets an imperative instruction. - * Callers may attach a unified diff per path; the runtime validates path headers - * and rejects traversal / host paths. Nothing is written to the working tree. - */ -export function createCodeChangeSourcePatch( - options: CreateCodeChangeSourcePatchOptions, -): CodeChangeSourcePatch { - const plan = options.plan; - const graphFingerprint = plan?.evidence?.graphFingerprint; - assertCodeChangePlansForReview( - [plan], - typeof graphFingerprint === 'string' ? graphFingerprint : '', - ); - const createdAt = options.createdAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); - const allowed = new Set(plan.target.paths.map((path) => path.replace(/\\/g, '/'))); - const diffs = options.unifiedDiffs ?? {}; - for (const path of Object.keys(diffs)) { - const normalized = path.replace(/\\/g, '/'); - if (!allowed.has(normalized)) { - throw new Error(`Unified diff path ${normalized} is not declared by plan ${plan.id}`); - } - } - const edits: CodeChangeSourceEdit[] = [...plan.changes] - .map((change) => { - const path = change.path.replace(/\\/g, '/'); - if (!allowed.has(path)) { - throw new Error(`Edit path ${path} is not present in plan target.paths`); - } - const rawDiff = diffs[path]; - const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); - return { - path, - action: change.action, - symbols: uniqueSorted(change.symbols), - instruction: instructionFor(change, plan), - unifiedDiff, - }; - }) - .sort((left, right) => left.path.localeCompare(right.path) || left.action.localeCompare(right.action)); - if (!edits.length) throw new Error(`Plan ${plan.id} has no editable paths`); - - const semantic = { - planId: plan.id, - planHash: plan.planHash, - graphFingerprint: plan.evidence.graphFingerprint, - diagnosticIds: uniqueSorted(plan.evidence.diagnosticIds), - recordIds: uniqueSorted(plan.evidence.recordIds), - edits, - acceptanceCriteria: uniqueSorted(plan.acceptanceCriteria), - }; - const patchHash = createCodeChangeSourcePatchHash(semantic); - const patch: CodeChangeSourcePatch = { - schemaVersion: 't2c.code-change-source-patch/v1', - id: createCodeChangeSourcePatchId(semantic), - patchHash, - status: 'proposed', - createdAt, - ...semantic, - generation: deterministicGeneration(createdAt, 't2c/code-change-source-patch'), - }; - assertCodeChangeSourcePatch(patch, plan); - return patch; -} - -export function createCodeChangeSourcePatchSet(options: { - plans: CodeChangePlan[]; - graphFingerprint: string; - unifiedDiffsByPlanId?: Record>; - generatedAt?: string; -}): CodeChangeSourcePatchSet { - if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { - throw new Error('graphFingerprint must be a SHA-256 hex digest'); - } - assertCodeChangePlansForReview(options.plans, options.graphFingerprint); - const generatedAt = options.generatedAt ?? new Date().toISOString(); - const patches = [...options.plans] - .sort((left, right) => left.id.localeCompare(right.id)) - .map((plan) => createCodeChangeSourcePatch({ - plan, - createdAt: generatedAt, - ...(options.unifiedDiffsByPlanId?.[plan.id] - ? { unifiedDiffs: options.unifiedDiffsByPlanId[plan.id] } - : {}), - })); - const result: CodeChangeSourcePatchSet = { - schemaVersion: 't2c.code-change-source-patch-set/v1', - generatedAt, - graphFingerprint: options.graphFingerprint, - patches, - generation: deterministicGeneration(generatedAt, 't2c/code-change-source-patch-set'), - }; - assertCodeChangeSourcePatchSet(result, options.plans); - return result; -} - -export function assertCodeChangeSourcePatch( - value: unknown, - plan?: CodeChangePlan, -): asserts value is CodeChangeSourcePatch { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change source patch must be an object'); - } - const patch = value as CodeChangeSourcePatch; - exactSourcePatchKeys(patch as unknown as Record, [ - 'schemaVersion', 'id', 'patchHash', 'status', 'createdAt', 'planId', 'planHash', - 'graphFingerprint', 'diagnosticIds', 'recordIds', 'edits', 'acceptanceCriteria', 'generation', - ], 'Source patch'); - if (patch.schemaVersion !== 't2c.code-change-source-patch/v1') { - throw new Error('Unsupported code change source patch schemaVersion'); - } - if (typeof patch.id !== 'string' || !/^SPATCH-[a-f0-9]{20}$/.test(patch.id)) { - throw new Error('Source patch id must match SPATCH-<20 hex>'); - } - if (typeof patch.patchHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.patchHash)) { - throw new Error('Source patch patchHash must be SHA-256'); - } - if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); - if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { - throw new Error('Source patch createdAt must be an ISO date-time'); - } - if (typeof patch.planId !== 'string' || !/^CPLAN-[a-f0-9]{20}$/.test(patch.planId)) { - throw new Error('Source patch planId must match CPLAN-<20 hex>'); - } - if (typeof patch.planHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.planHash)) { - throw new Error('Source patch planHash must be SHA-256'); - } - if (typeof patch.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(patch.graphFingerprint)) { - throw new Error('Source patch graphFingerprint must be SHA-256'); - } - if (!Array.isArray(patch.edits) || patch.edits.length === 0) { - throw new Error('Source patch edits must be a non-empty array'); - } - assertSourcePatchIds(patch.diagnosticIds, /^DIAG-[a-f0-9]{20}$/, 'diagnosticIds'); - assertSourcePatchIds(patch.recordIds, /^INT-[A-Z]+-[a-f0-9]{20}$/, 'recordIds'); - assertSourcePatchStrings(patch.acceptanceCriteria, 'acceptanceCriteria', false); - const paths = new Set(); - for (const edit of patch.edits) { - if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); - exactSourcePatchKeys(edit as unknown as Record, [ - 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', - ], 'Source patch edit'); - const path = edit.path?.trim().replace(/\\/g, '/') ?? ''; - if (!path || path.startsWith('/') || path.split('/').includes('..')) { - throw new Error(`Source patch edit path is not a relative repository path: ${path}`); - } - if (!['create', 'modify', 'delete'].includes(edit.action)) { - throw new Error(`Source patch edit action is unsupported: ${String(edit.action)}`); - } - if (typeof edit.instruction !== 'string' || !edit.instruction.trim()) { - throw new Error('Source patch edit instruction must be non-blank'); - } - assertSourcePatchStrings(edit.symbols, `edits[${path}].symbols`, true); - if (edit.unifiedDiff !== null) { - if (typeof edit.unifiedDiff !== 'string') throw new Error('Source patch unifiedDiff must be string or null'); - normalizeUnifiedDiff(edit.unifiedDiff, path); - } - const key = `${path}::${edit.action}`; - if (paths.has(key)) throw new Error(`Duplicate source patch edit for ${path}`); - paths.add(key); - } - const expectedHash = createCodeChangeSourcePatchHash(patch); - if (patch.patchHash !== expectedHash) { - throw new Error(`Source patch patchHash does not match semantic content: expected ${expectedHash}`); - } - if (patch.id !== createCodeChangeSourcePatchId(patch)) { - throw new Error('Source patch id does not match semantic content'); - } - assertGroundedGenerationMetadata(patch.generation, 'Source patch generation'); - if (patch.generation.generatedAt !== patch.createdAt) { - throw new Error('Source patch generation.generatedAt must match createdAt'); - } - if (patch.generation.generator !== 't2c/code-change-source-patch') { - throw new Error('Source patch generation.generator must be t2c/code-change-source-patch'); - } - if (plan) { - if (patch.planId !== plan.id || patch.planHash !== plan.planHash) { - throw new Error('Source patch is not bound to the supplied plan'); - } - if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { - throw new Error('Source patch graphFingerprint does not match the plan'); - } - const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); - const expectedChanges = new Map(plan.changes.map((item) => [ - item.path.replace(/\\/g, '/'), item.action, - ])); - for (const edit of patch.edits) { - const editPath = edit.path.replace(/\\/g, '/'); - if (!allowed.has(editPath)) { - throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); - } - if (expectedChanges.get(editPath) !== edit.action) { - throw new Error(`Source patch action for ${edit.path} does not match the plan`); - } - } - exactSourcePatchSet(patch.edits.map((item) => item.path.replace(/\\/g, '/')), [...expectedChanges.keys()], 'edit paths'); - exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); - exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); - exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); - } -} - -export function assertCodeChangeSourcePatchSet( - value: unknown, - plans?: CodeChangePlan[], -): asserts value is CodeChangeSourcePatchSet { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change source patch set must be an object'); - } - const set = value as CodeChangeSourcePatchSet; - exactSourcePatchKeys(set as unknown as Record, [ - 'schemaVersion', 'generatedAt', 'graphFingerprint', 'patches', 'generation', - ], 'Source patch set'); - if (set.schemaVersion !== 't2c.code-change-source-patch-set/v1') { - throw new Error('Unsupported code change source patch set schemaVersion'); - } - if (typeof set.generatedAt !== 'string' || Number.isNaN(Date.parse(set.generatedAt))) { - throw new Error('Source patch set generatedAt must be an ISO date-time'); - } - if (typeof set.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(set.graphFingerprint)) { - throw new Error('Source patch set graphFingerprint must be SHA-256'); - } - if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); - const plansById = new Map((plans ?? []).map((plan) => [plan.id, plan])); - const patchIds = new Set(); - for (const patch of set.patches) { - assertCodeChangeSourcePatch(patch, plans ? plansById.get(patch.planId) : undefined); - if (patch.graphFingerprint !== set.graphFingerprint) { - throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); - } - if (patchIds.has(patch.id)) throw new Error(`Duplicate source patch id: ${patch.id}`); - patchIds.add(patch.id); - } - if (plans) exactSourcePatchSet(set.patches.map((patch) => patch.planId), plans.map((plan) => plan.id), 'planIds'); - assertGroundedGenerationMetadata(set.generation, 'Source patch set generation'); - if (set.generation.generatedAt !== set.generatedAt) { - throw new Error('Source patch set generation.generatedAt must match generatedAt'); - } - if (set.generation.generator !== 't2c/code-change-source-patch-set') { - throw new Error('Source patch set generation.generator must be t2c/code-change-source-patch-set'); - } -} - -function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { - const actual = Object.keys(value).sort(); - const wanted = [...expected].sort(); - if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { - throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); - } -} - -function assertSourcePatchIds(value: unknown, pattern: RegExp, name: string): asserts value is string[] { - if (!Array.isArray(value) || value.length === 0 - || value.some((item) => typeof item !== 'string' || !pattern.test(item))) { - throw new Error(`Source patch ${name} must be a non-empty array of valid IDs`); - } - if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); -} - -function assertSourcePatchStrings(value: unknown, name: string, emptyAllowed: boolean): asserts value is string[] { - if (!Array.isArray(value) || (!emptyAllowed && value.length === 0) - || value.some((item) => typeof item !== 'string' || !item.trim())) { - throw new Error(`Source patch ${name} must contain ${emptyAllowed ? 'only ' : ''}non-blank strings`); - } - if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); -} - -function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { - const left = [...new Set(actual)].sort(); - const right = [...new Set(expected)].sort(); - if (left.length !== right.length || left.some((item, index) => item !== right[index])) { - throw new Error(`Source patch ${name} do not match the plan`); - } -} - -function instructionFor(change: CodeChangeFile, plan: CodeChangePlan): string { - const symbols = change.symbols.length - ? ` Focus on symbols: ${change.symbols.join(', ')}.` - : ''; - const criteria = plan.acceptanceCriteria.length - ? ` Acceptance: ${plan.acceptanceCriteria.join(' ')}` - : ''; - return `${change.action} \`${change.path}\`. ${change.rationale.trim()}.${symbols}${criteria}`.replace(/\s+/g, ' ').trim(); -} - -/** - * Validate a single-file unified diff body. - * Accepts optional `--- a/path` / `+++ b/path` headers and rejects foreign paths. - */ -function normalizeUnifiedDiff(diff: string, expectedPath: string): string { - const normalized = diff.replace(/\r\n/g, '\n'); - if (!normalized.trim()) throw new Error(`Unified diff for ${expectedPath} is empty`); - if (normalized.includes('\0')) throw new Error(`Unified diff for ${expectedPath} contains NUL bytes`); - // Lightweight secret heuristic — refuse obvious credential dumps in proposed diffs. - if (/(?:api[_-]?key|secret|password|private[_-]?key)\s*[:=]\s*['"]?[^'"\s]{8,}/i.test(normalized)) { - throw new Error(`Unified diff for ${expectedPath} appears to contain a secret assignment`); - } - const headers = [...normalized.matchAll(/^(?:---|\+\+\+)\s+(?:[ab]\/)?(.+)$/gm)].map((match) => match[1]!.trim()); - for (const header of headers) { - if (header === '/dev/null') continue; - const path = header.replace(/\\/g, '/'); - if (path.startsWith('/') || path.split('/').includes('..')) { - throw new Error(`Unified diff for ${expectedPath} uses a non-repository path header: ${path}`); - } - if (path !== expectedPath && path !== `a/${expectedPath}` && path !== `b/${expectedPath}`) { - // Headers may include timestamps after a tab; strip them. - const bare = path.split('\t')[0] ?? path; - const stripped = bare.replace(/^[ab]\//, ''); - if (stripped !== expectedPath) { - throw new Error(`Unified diff for ${expectedPath} references foreign path: ${path}`); - } - } - } - return normalized; -} - -export interface ApplyCodeChangeSourcePatchOptions { - root: string; - patch: CodeChangeSourcePatch; - approval: CodeChangeSourcePatchApproval; - receiptPath: string; - now?: Date; -} - -export interface ApplyCodeChangeSourcePatchResult { - applied: boolean; - idempotent: boolean; - receipt: CodeChangeSourceApplyReceipt; -} - -/** - * Apply a fully-diffed source patch after explicit hash approval. - * - * Instruction-only edits (null unifiedDiff) are rejected. Paths must stay - * relative and inside `root`. Re-applying with an existing matching receipt is - * idempotent. - */ -export async function applyCodeChangeSourcePatch( - options: ApplyCodeChangeSourcePatchOptions, -): Promise { - assertCodeChangeSourcePatch(options.patch); - if (!options.approval?.actor?.trim()) throw new Error('Explicit source patch approval actor is required'); - if (options.approval.patchHash !== options.patch.patchHash) { - throw new Error('Source patch approval hash does not match the patch'); - } - for (const edit of options.patch.edits) { - if (edit.unifiedDiff === null) { - throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); - } - } - - const root = path.resolve(options.root); - const receiptPath = await assertPathWithinRoot(root, path.resolve(options.receiptPath)); - const lockPath = `${receiptPath}.t2c-apply.lock`; - await ensureDir(path.dirname(receiptPath)); - let lock: Awaited> | null = null; - try { - lock = await fs.open(lockPath, 'wx'); - } catch (error) { - if ((error as NodeJS.ErrnoException).code === 'EEXIST') { - throw new Error('Another source patch apply operation is in progress'); - } - throw error; - } - - try { - if (await pathExists(receiptPath)) { - const existing = await readJson(receiptPath, 1024 * 1024); - await assertExistingSourceReceipt(existing, options.patch, root); - return { applied: false, idempotent: true, receipt: existing }; - } - - const prepared: PreparedSourceEdit[] = []; - for (const edit of options.patch.edits) { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - if (absolute === receiptPath) { - throw new Error(`Source patch target collides with its receipt path: ${relative}`); - } - const exists = await pathExists(absolute); - if (exists && (await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Refusing to apply through a symlink: ${relative}`); - } - if (edit.action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); - if (edit.action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); - if (edit.action === 'modify' && !exists) { - const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(edit.unifiedDiff!) - || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(edit.unifiedDiff!); - if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); - } - const before = exists ? await readText(absolute, 16 * 1024 * 1024) : ''; - const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, relative); - if (edit.action === 'delete' && after !== '') { - throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); - } - prepared.push({ relative, absolute, action: edit.action, before, after, existed: exists }); - } - - const changed: PreparedSourceEdit[] = []; - try { - for (const edit of prepared) { - if (edit.action === 'delete') await fs.unlink(edit.absolute); - else await atomicWriteRaw(edit.absolute, edit.after); - changed.push(edit); - } - const now = (options.now ?? new Date()).toISOString(); - const fileHashesAfter = Object.fromEntries(prepared - .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) - .sort(([left], [right]) => left.localeCompare(right))); - const receipt: CodeChangeSourceApplyReceipt = { - schemaVersion: 't2c.code-change-source-apply-receipt/v1', - patchId: options.patch.id, - patchHash: options.patch.patchHash, - planId: options.patch.planId, - approvedBy: options.approval.actor.trim(), - approvedAt: now, - appliedAt: now, - appliedPaths: prepared.map((edit) => edit.relative).sort(), - fileHashesAfter, - generation: deterministicGeneration(now, 't2c/code-change-source-apply'), - }; - assertSourceApplyReceipt(receipt, options.patch); - // The receipt is part of the transaction: without it a retry could apply - // the same approved patch again. Roll files back if persisting it fails. - await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); - return { applied: true, idempotent: false, receipt }; - } catch (error) { - const rollbackErrors: string[] = []; - for (const edit of [...changed].reverse()) { - try { - if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); - else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { - if (failure.code !== 'ENOENT') throw failure; - }); - } catch (rollbackError) { - rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); - } - } - if (rollbackErrors.length) { - throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); - } - throw error; - } - } finally { - await lock.close(); - await fs.unlink(lockPath).catch(() => undefined); - } -} - -interface PreparedSourceEdit { - relative: string; - absolute: string; - action: CodeChangeFileAction; - before: string; - after: string; - existed: boolean; -} - -async function assertExistingSourceReceipt( - receipt: CodeChangeSourceApplyReceipt, - patch: CodeChangeSourcePatch, - root: string, -): Promise { - try { - assertSourceApplyReceipt(receipt, patch); - } catch { - throw new Error('A different or invalid source patch receipt already exists at the receipt path'); - } - for (const edit of patch.edits) { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - const exists = await pathExists(absolute); - if (edit.action === 'delete') { - if (exists) throw new Error(`Applied source patch state changed after receipt: ${relative}`); - continue; - } - if (!exists || (await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Applied source patch state changed after receipt: ${relative}`); - } - const current = await readText(absolute, 16 * 1024 * 1024); - if (receipt.fileHashesAfter[relative] !== sha256(current)) { - throw new Error(`Applied source patch state changed after receipt: ${relative}`); - } - } -} - -function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: CodeChangeSourcePatch): void { - exactSourcePatchKeys(receipt as unknown as Record, [ - 'schemaVersion', 'patchId', 'patchHash', 'planId', 'approvedBy', 'approvedAt', - 'appliedAt', 'appliedPaths', 'fileHashesAfter', 'generation', - ], 'Code change source apply receipt'); - if (receipt.schemaVersion !== 't2c.code-change-source-apply-receipt/v1' - || receipt.patchId !== patch.id || receipt.patchHash !== patch.patchHash || receipt.planId !== patch.planId) { - throw new Error('Code change source apply receipt does not match its patch'); - } - if (!receipt.approvedBy.trim()) throw new Error('Code change source apply receipt approvedBy is required'); - if (!Number.isFinite(Date.parse(receipt.approvedAt)) || !Number.isFinite(Date.parse(receipt.appliedAt))) { - throw new Error('Code change source apply receipt timestamps must be ISO date-times'); - } - const expectedPaths = patch.edits.map((edit) => edit.path).sort(); - exactSourcePatchSet(receipt.appliedPaths, expectedPaths, 'receipt appliedPaths'); - const hashPaths = Object.keys(receipt.fileHashesAfter).sort(); - exactSourcePatchSet(hashPaths, expectedPaths, 'receipt fileHashesAfter paths'); - if (Object.values(receipt.fileHashesAfter).some((value) => !/^[a-f0-9]{64}$/.test(value))) { - throw new Error('Code change source apply receipt file hashes must be SHA-256'); - } - assertGroundedGenerationMetadata(receipt.generation, 'Code change source apply receipt generation'); - if (receipt.generation.generatedAt !== receipt.appliedAt - || receipt.generation.generator !== 't2c/code-change-source-apply') { - throw new Error('Code change source apply receipt generation does not match the apply operation'); - } -} - -async function atomicWriteRaw(target: string, content: string): Promise { - await ensureDir(path.dirname(target)); - const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`; - try { - await fs.writeFile(temporary, content, 'utf8'); - await fs.rename(temporary, target); - } finally { - await fs.unlink(temporary).catch(() => undefined); - } -} - -/** - * Apply a single-file unified diff to a text buffer. - * Supports standard hunks with space/+/− prefixes. Throws on context mismatch. - */ -export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: string): string { - const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); - const baseLines = splitKeep(base); - const diffLines = normalizedDiff.split('\n'); - // Drop trailing empty element only if the original split introduced it - // without a final newline — normalize by working on lines as split. - const hunks: Array<{ oldStart: number; oldCount: number; newCount: number; lines: string[] }> = []; - let current: { oldStart: number; oldCount: number; newCount: number; lines: string[] } | null = null; - for (const line of diffLines) { - if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { - continue; - } - const header = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); - if (header) { - if (current) hunks.push(current); - current = { - oldStart: Number(header[1]), - oldCount: header[2] === undefined ? 1 : Number(header[2]), - newCount: header[4] === undefined ? 1 : Number(header[4]), - lines: [], - }; - continue; - } - if (!current) { - if (line === '') continue; - throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); - } - // Blank lines without a unified-diff prefix separate hunks in some emitters. - if (line === '') continue; - current.lines.push(line); - } - if (current) hunks.push(current); - if (!hunks.length) throw new Error(`Unified diff for ${expectedPath} contains no hunks`); - - let cursor = 0; - const output: string[] = []; - for (const hunk of hunks) { - const oldIndex = Math.max(0, hunk.oldStart - 1); - if (oldIndex < cursor) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); - const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; - const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; - if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { - throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); - } - while (cursor < oldIndex) { - if (cursor >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); - output.push(baseLines[cursor]!); - cursor += 1; - } - for (const line of hunk.lines) { - if (line.startsWith('\\')) continue; // "\ No newline at end of file" - const mark = line[0]; - const body = line.slice(1); - if (mark === ' ') { - if (baseLines[cursor] !== body) { - throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor + 1}`); - } - output.push(baseLines[cursor]!); - cursor += 1; - } else if (mark === '-') { - if (baseLines[cursor] !== body) { - throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor + 1}`); - } - cursor += 1; - } else if (mark === '+') { - output.push(body); - } else if (line === '') { - // empty line inside hunk without prefix is invalid in strict unified diffs - throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); - } else { - throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); - } - } - } - while (cursor < baseLines.length) { - output.push(baseLines[cursor]!); - cursor += 1; - } - // Reconstruct text. Files without a trailing newline end without an empty last segment. - if (base.endsWith('\n') || output.length === 0) return `${output.join('\n')}${output.length ? '\n' : ''}`; - return output.join('\n'); -} - -function splitKeep(text: string): string[] { - if (text === '') return []; - const lines = text.split('\n'); - if (text.endsWith('\n')) lines.pop(); - return lines; -} +export * from './implementation-helpers.js'; diff --git a/src/tf/classifier.ts b/src/tf/classifier.ts index 46c5f31..8195dbe 100644 --- a/src/tf/classifier.ts +++ b/src/tf/classifier.ts @@ -69,28 +69,67 @@ function vectorize(text: string, vocabulary: Record): number[] { export async function classifyAction(text: string, config: T2CConfig): Promise<{ action: IntentAction; basis: string; confidence: number }> { const fallback = classifyActionHeuristically(text); if (!config.enableTensorFlow || !config.tensorflowModelPath) { - return { action: fallback, basis: 'heuristic_action_dictionary', confidence: fallback === 'unknown' ? 0.45 : 0.78 }; + return buildHeuristicActionResult(fallback); } try { const loaded = await loadClassifier(config); - if (!loaded) return { action: fallback, basis: 'heuristic_action_dictionary', confidence: 0.7 }; - const vector = vectorize(text, loaded.assets.vocabulary); - const input = loaded.tf.tensor2d([vector], [1, vector.length]); - const predictionValue = loaded.model.predict(input); - const prediction = Array.isArray(predictionValue) ? predictionValue[0] : predictionValue; - if (!prediction) throw new Error('TensorFlow model returned no prediction'); - const probabilities = Array.from(await prediction.data()); - prediction.dispose?.(); - let bestIndex = 0; - for (let index = 1; index < probabilities.length; index += 1) { - if ((probabilities[index] ?? 0) > (probabilities[bestIndex] ?? 0)) bestIndex = index; - } - const action = loaded.assets.labels[bestIndex] ?? fallback; - const confidence = Math.max(0, Math.min(1, probabilities[bestIndex] ?? 0)); - return confidence >= 0.55 - ? { action, basis: 'tensorflow_action_classifier', confidence } - : { action: fallback, basis: 'heuristic_fallback_after_tensorflow', confidence: Math.max(0.55, confidence) }; + if (!loaded) return buildHeuristicActionResult(fallback, 0.7); + const probabilities = await classifyWithTensorFlow(text, loaded); + return resolveActionFromTensorflow(probabilities, loaded, fallback); } catch (error) { return { action: fallback, basis: `heuristic_fallback:${error instanceof Error ? error.message : String(error)}`, confidence: 0.6 }; } } + +function buildHeuristicActionResult( + action: IntentAction, + confidence?: number, +): { action: IntentAction; basis: string; confidence: number } { + if (confidence === undefined) { + return { action, basis: 'heuristic_action_dictionary', confidence: action === 'unknown' ? 0.45 : 0.78 }; + } + return { action, basis: 'heuristic_action_dictionary', confidence }; +} + +async function classifyWithTensorFlow( + text: string, + loaded: NonNullable, +): Promise { + const vector = vectorize(text, loaded.assets.vocabulary); + const input = loaded.tf.tensor2d([vector], [1, vector.length]); + const predictionValue = loaded.model.predict(input); + const prediction = Array.isArray(predictionValue) ? predictionValue[0] : predictionValue; + if (!prediction) throw new Error('TensorFlow model returned no prediction'); + const probabilities = Array.from(await prediction.data()); + prediction.dispose?.(); + return probabilities; +} + +function resolveActionFromTensorflow( + probabilities: number[], + loaded: NonNullable, + fallback: IntentAction, +): { action: IntentAction; basis: string; confidence: number } { + const bestIndex = indexOfMaxValue(probabilities); + const action = loaded.assets.labels[bestIndex] ?? fallback; + const confidence = clampProbability(probabilities[bestIndex] ?? 0); + return confidence >= 0.55 + ? { action, basis: 'tensorflow_action_classifier', confidence } + : { + action: fallback, + basis: 'heuristic_fallback_after_tensorflow', + confidence: Math.max(0.55, confidence), + }; +} + +function indexOfMaxValue(values: number[]): number { + let bestIndex = 0; + for (let index = 1; index < values.length; index += 1) { + if ((values[index] ?? 0) > (values[bestIndex] ?? 0)) bestIndex = index; + } + return bestIndex; +} + +function clampProbability(value: number): number { + return Math.max(0, Math.min(1, value)); +} diff --git a/src/web/diff-ui.ts b/src/web/diff-ui.ts index 4ef2c37..2fab6f7 100644 --- a/src/web/diff-ui.ts +++ b/src/web/diff-ui.ts @@ -1,38 +1,132 @@ -export function diffUiHtml(): string { - return ` - - - - - todo2code · Intent Diff - - -
-
Intent Evidence Runtime

Porównanie historii grafów.

Dwa najnowsze runy z .intent/runs są wybierane automatycznie. Zmiana wyboru od razu przelicza deterministyczny diff i dostępny widok SVG.

+function diffUiStyles(): string { + return ':root{color-scheme:dark;font-family:Inter,ui-sans-serif,system-ui,sans-serif;background:#020617;color:#e2e8f0}' + + '*{box-sizing:border-box}' + + 'body{margin:0;background:radial-gradient(circle at 20% 0,#172554 0,transparent 38%),#020617;min-height:100vh}' + + 'main{width:min(1480px,96vw);margin:auto;padding:34px 0 64px}' + + 'header{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:24px}' + + 'h1{font-size:clamp(28px,4vw,52px);margin:0;letter-spacing:-.04em}' + + '.eyebrow{color:#38bdf8;text-transform:uppercase;letter-spacing:.18em;font-size:12px;font-weight:800}' + + '.sub{max-width:720px;color:#94a3b8;line-height:1.6}' + + '.grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}' + + '.panel{background:#0f172acc;border:1px solid #334155;border-radius:16px;padding:18px;box-shadow:0 20px 60px #0005}' + + '.panel h2{margin:0 0 12px;font-size:16px}' + + 'label{display:block;color:#94a3b8;font-size:12px;margin-bottom:7px}' + + 'select{width:100%;border:1px solid #475569;border-radius:10px;background:#020617;color:#e2e8f0;padding:12px;font:13px ui-monospace,monospace}' + + 'select:focus,input:focus,textarea:focus{outline:2px solid #38bdf8;outline-offset:1px}' + + '.run-meta{min-height:34px;margin-top:9px;color:#64748b;font:11px/1.5 ui-monospace,monospace;word-break:break-all}' + + 'details.manual{margin-top:12px;border-top:1px solid #1e293b;padding-top:10px}' + + 'summary{cursor:pointer;color:#94a3b8;font-size:13px}' + + 'textarea{width:100%;min-height:150px;resize:vertical;border:1px solid #334155;border-radius:10px;background:#020617;color:#cbd5e1;padding:12px;font:12px ui-monospace,monospace;margin-top:10px}' + + 'input[type=file],input[type=password],.panel input:not([type=file]){width:100%;margin-top:10px;color:#94a3b8}' + + 'input[type=password],.panel input:not([type=file]){background:#020617;border:1px solid #334155;border-radius:8px;padding:10px;color:#e2e8f0}' + + '.actions{display:flex;align-items:center;gap:12px;margin:18px 0;flex-wrap:wrap}' + + 'button{border:0;border-radius:10px;background:#38bdf8;color:#082f49;font-weight:800;padding:12px 20px;cursor:pointer}' + + '.secondary{background:#1e293b;color:#cbd5e1;border:1px solid #475569}' + + 'button:disabled{opacity:.55;cursor:wait}' + + '.status{color:#94a3b8;font:13px ui-monospace,monospace}' + + '.error{color:#fca5a5;white-space:pre-wrap}' + + '.result{display:none}' + + '.result.visible{display:block}' + + '.metrics{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:16px}' + + '.metric{min-width:130px;background:#111827;border:1px solid #334155;border-radius:10px;padding:12px}' + + '.metric b{display:block;font-size:24px}' + + '.metric span{color:#94a3b8;font-size:12px}' + + '#svg-host{overflow:auto;border-radius:14px;background:#0f172a}' + + '#svg-host svg{display:block;width:100%;height:auto}' + + '.fingerprint{word-break:break-all;color:#64748b;font:11px ui-monospace,monospace;margin-top:12px}' + + '@media(max-width:850px){header{display:block}.grid{grid-template-columns:1fr}}'; +} + +function diffUiRunPanel(side: 'before' | 'after', title: string): string { + return ` +
+

${title}

+ + +
+
+ Ręczne źródło JSON lub ścieżka + + + +
+
`; +} + +function diffUiFiltersPanel(): string { + return ` +
+

Filtry komunikacji

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
`; +} + +function diffUiBodyMarkup(): string { + return ` +
+
+
+
Intent Evidence Runtime
+

Porównanie historii grafów.

+
+

Dwa najnowsze runy z .intent/runs są wybierane automatycznie. Zmiana wyboru od razu przelicza deterministyczny diff i dostępny widok SVG.

+
-

Poprzedni run

Ręczne źródło JSON lub ścieżka
-

Najnowszy run

Ręczne źródło JSON lub ścieżka
+ ${diffUiRunPanel('before', 'Poprzedni run')} + ${diffUiRunPanel('after', 'Najnowszy run')}
-

Filtry komunikacji

-
Bearer token (tylko gdy T2C_A2A_TOKEN jest włączony)
-
Ładowanie historii…
+ ${diffUiFiltersPanel()} +
+ Bearer token (tylko gdy T2C_A2A_TOKEN jest włączony) + +
+
+ + + Ładowanie historii… +

-
-
`; +byId('compare').addEventListener('click',()=>void compareGraphs()); +byId('reload').addEventListener('click',()=>void loadRuns()); +byId('token').addEventListener('change',()=>void loadRuns()); +for(const id of ['participant-filter','role-filter','ticket-filter','severity-filter'])byId(id).addEventListener('change',()=>void loadRuns()); +void loadRuns(); +`; +} + +function diffUiTemplate(): string { + return ` + + + + + + todo2code · Intent Diff + + +${diffUiBodyMarkup()} +${diffUiScriptMarkup()} +`; +} + +export function diffUiHtml(): string { + return diffUiTemplate(); } From 440546e8b04e4576177fc150369b54dd543e0a69 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 10:11:22 +0200 Subject: [PATCH 07/43] refactor: split executeAction handlers --- src/services/actions.ts | 929 ++++++++++++++++++++++------------------ 1 file changed, 508 insertions(+), 421 deletions(-) diff --git a/src/services/actions.ts b/src/services/actions.ts index c225d0b..c89b5b9 100644 --- a/src/services/actions.ts +++ b/src/services/actions.ts @@ -72,440 +72,527 @@ export type T2CAction = export async function executeAction(action: T2CAction, input: Record, config: T2CConfig): Promise { const root = await resolveRoot(input.root, config); switch (action) { - case 'extract_nl': { - const file = await scopedPath(input.file, 'TASK.md', root, config); - const text = typeof input.text === 'string' ? input.text : undefined; - return extractNlIntentAudited( - { root, sourcePath: file, ...(text !== undefined ? { text } : {}) }, - config, - nlModeValue(input.nlMode, config.nlMode), - ); - } + case 'extract_nl': + return executeExtractNlAction(input, root, config); case 'extract_git': - return extractGitIntent({ root, count: numberValue(input.count, config.gitCommitCount, 1, 100) }, config); + return executeExtractGitAction(root, input, config); case 'extract_ast': - return extractAstIntent({ root }, config); + return executeExtractAstAction(root, config); case 'extract_config': - return extractConfigurationIntent(root, config); + return executeExtractConfigAction(root, config); case 'extract_markdown': - return extractMarkdownIntentAudited({ - root, - todoPath: await nullableScopedPath(input.todo, 'TODO.md', root, config), - changelogPath: await nullableScopedPath(input.changelog, 'CHANGELOG.md', root, config), - }, config, llmModeValue(input.markdownMode, config.markdownMode, 'markdownMode')); + return executeExtractMarkdownAction(input, root, config); case 'extract_docs': - return extractDocumentationIntent({ - root, - patterns: stringList(input.patterns, config.documentPatterns), - excludes: stringList(input.excludes, config.documentExcludes), - }, config); + return executeExtractDocsAction(input, root, config); case 'extract_communication': - return extractCommunicationIntentAudited({ + return executeExtractCommunicationAction(input, root, config); + case 'analyze_communication': + return executeAnalyzeCommunicationAction(input, root, config); + case 'link': + return executeLinkAction(input, root, config); + case 'diagnose': + return executeDiagnoseAction(input); + case 'summarize': + return executeSummarizeAction(input, root, config); + case 'propose_todo': + return executeProposeTodoAction(input, root, config); + case 'render_todo': + return executeRenderTodoAction(input, root, config); + case 'apply_todo': + return executeApplyTodoAction(input, root, config); + case 'propose_code_change': + return executeProposeCodeChangeAction(input, root, config); + case 'render_code_change': + return executeRenderCodeChangeAction(input, root, config); + case 'propose_source_patch': + return executeProposeSourcePatchAction(input, root, config); + case 'apply_source_patch': + return executeApplySourcePatchAction(input, root, config); + case 'evaluate_code_change': + return executeEvaluateCodeChangeAction(input, root, config); + case 'close_code_change': + return executeCloseCodeChangeAction(input, root, config); + case 'diff': + return executeDiffAction(input, root, config); + case 'diff_files': + return executeDiffFilesAction(input, root, config); + case 'diff_git': + return executeDiffGitAction(input, root, config); + case 'reality': + return executeRealityAction(input, config); + case 'pipeline': + return executePipelineAction(input, root, config); + case 'compare_workspace': + return executeCompareWorkspaceAction(input, root, config); + } +} + +async function executeExtractNlAction(input: Record, root: string, config: T2CConfig): Promise { + const file = await scopedPath(input.file, 'TASK.md', root, config); + const text = typeof input.text === 'string' ? input.text : undefined; + return extractNlIntentAudited( + { root, sourcePath: file, ...(text !== undefined ? { text } : {}) }, + config, + nlModeValue(input.nlMode, config.nlMode), + ); +} + +function executeExtractGitAction(root: string, input: Record, config: T2CConfig): Promise { + return extractGitIntent({ root, count: numberValue(input.count, config.gitCommitCount, 1, 100) }, config); +} + +function executeExtractAstAction(root: string, config: T2CConfig): Promise { + return extractAstIntent({ root }, config); +} + +function executeExtractConfigAction(root: string, config: T2CConfig): Promise { + return extractConfigurationIntent(root, config); +} + +async function executeExtractMarkdownAction(input: Record, root: string, config: T2CConfig): Promise { + return extractMarkdownIntentAudited({ + root, + todoPath: await nullableScopedPath(input.todo, 'TODO.md', root, config), + changelogPath: await nullableScopedPath(input.changelog, 'CHANGELOG.md', root, config), + }, config, llmModeValue(input.markdownMode, config.markdownMode, 'markdownMode')); +} + +async function executeExtractDocsAction(input: Record, root: string, config: T2CConfig): Promise { + return extractDocumentationIntent({ + root, + patterns: stringList(input.patterns, config.documentPatterns), + excludes: stringList(input.excludes, config.documentExcludes), + }, config); +} + +async function executeExtractCommunicationAction(input: Record, root: string, config: T2CConfig): Promise { + return extractCommunicationIntentAudited({ + root, + projectDir: await scopedPath(input.projectDir, 'project', root, config), + ticket: nullableString(input.ticket, null), + }, config, llmModeValue(input.communicationMode, config.communicationMode, 'communicationMode')); +} + +async function executeAnalyzeCommunicationAction( + input: Record, + root: string, + config: T2CConfig, +): Promise { + let graph: IntentGraph; + const warnings: string[] = []; + let communicationSyntheses: ParticipantCommunicationSynthesis[] = []; + let communicationAudit: PipelineStageAudit | null = null; + if (input.graph !== undefined) { + graph = objectValue(input.graph, 'graph'); + } else { + const [communication, git, ast] = await Promise.all([ + extractCommunicationIntentAudited({ root, projectDir: await scopedPath(input.projectDir, 'project', root, config), ticket: nullableString(input.ticket, null), - }, config, llmModeValue(input.communicationMode, config.communicationMode, 'communicationMode')); - case 'analyze_communication': { - let graph: IntentGraph; - const warnings: string[] = []; - let communicationSyntheses: ParticipantCommunicationSynthesis[] = []; - let communicationAudit: PipelineStageAudit | null = null; - if (input.graph !== undefined) { - graph = objectValue(input.graph, 'graph'); - } else { - const [communication, git, ast] = await Promise.all([ - extractCommunicationIntentAudited({ - root, - projectDir: await scopedPath(input.projectDir, 'project', root, config), - ticket: nullableString(input.ticket, null), - }, config, llmModeValue(input.communicationMode, config.communicationMode, 'communicationMode')), - extractGitIntent({ root, count: numberValue(input.gitCount, config.gitCommitCount, 1, 100) }, config), - booleanValue(input.includeAst, true) ? extractAstIntent({ root }, config) : Promise.resolve({ records: [], warnings: [] }), - ]); - warnings.push(...communication.warnings, ...git.warnings, ...ast.warnings); - communicationSyntheses = communication.participants; - communicationAudit = communication.audit; - graph = linkIntentRecords([...communication.records, ...git.records, ...ast.records]); - } - const analysis = analyzeCommunication(graph, new Date().toISOString(), communicationSyntheses); - return { - analysis, - markdown: renderCommunicationMarkdown(analysis), - warnings: [...new Set(warnings)].sort(), - audit: communicationAudit, - ...(booleanValue(input.includeGraph, false) ? { graph } : {}), - }; - } - case 'link': { - const records = await readRecords(input, root, config); - return linkIntentRecords(records); - } - case 'diagnose': { - const graph = objectValue(input.graph, 'graph'); - return diagnoseGraph(graph); - } - case 'summarize': { - const graph = objectValue(input.graph, 'graph'); - const diagnostics = input.diagnostics - ? objectValue(input.diagnostics, 'diagnostics') - : diagnoseGraph(graph); - return summarizeGraph(graph, diagnostics, config, { - mode: summaryModeValue(input.mode, input.fallback), - }); - } - case 'propose_todo': { - const graph = await readActionObject(input.graph, input.graphPath, 'graph', root, config); - const diagnostics = input.diagnostics !== undefined || input.diagnosticsPath !== undefined - ? await readActionObject(input.diagnostics, input.diagnosticsPath, 'diagnostics', root, config) - : diagnoseGraph(graph); - const result = await synthesizeTodoProposals(graph, diagnostics, config, taskSynthesisMode(input.mode)); - if (input.output !== undefined) { - const output = await scopedPath(input.output, '', root, config); - await writeJson(output, result); - await registerRunArtifacts(root, { taskSynthesis: output }); - } - return result; - } - case 'render_todo': { - const graph = await readActionObject(input.graph, input.graphPath, 'graph', root, config); - const diagnostics = await readActionObject( - input.diagnostics, input.diagnosticsPath, 'diagnostics', root, config, - ); - const synthesis = await readActionObject( - input.synthesis, input.synthesisPath, 'synthesis', root, config, - ); - const todoPath = await scopedPath(input.todo, 'TODO.md', root, config); - const patchPath = await scopedPath(input.patch, 'TODO.patch', root, config); - const auditPath = await scopedPath(input.audit, 'TODO.patch.json', root, config); - const todoContent = await readText(todoPath, config.maxFileBytes); - const rendered = createTodoPatch({ - todoPath: path.relative(root, todoPath).replace(/\\/g, '/'), - todoContent, - graph, - diagnostics, - conclusions: synthesis.conclusions, - proposals: synthesis.proposals, - validation: synthesis.validation, - synthesisAudit: synthesis.audit, - }); - await Promise.all([writeText(patchPath, rendered.markdown), writeJson(auditPath, rendered.artifact)]); - await registerRunArtifacts(root, { todoPatch: patchPath, todoPatchAudit: auditPath }); - return { - schemaVersion: 't2c.todo-render-result/v1', - patchPath: path.relative(root, patchPath).replace(/\\/g, '/'), - auditPath: path.relative(root, auditPath).replace(/\\/g, '/'), - artifact: rendered.artifact, - }; - } - case 'apply_todo': { - const todoPath = await scopedPath(input.todo, 'TODO.md', root, config); - const patchPath = await scopedPath(input.patch, 'TODO.patch', root, config); - const auditPath = await scopedPath(input.audit, 'TODO.patch.json', root, config); - const receiptPath = await scopedPath(input.receipt, 'TODO.patch.receipt.json', root, config); - const result = await applyTodoPatch({ - todoPath, - patchPath, - auditPath, - receiptPath, - approval: { - actor: stringValue(input.actor, ''), - patchHash: stringValue(input.approvalHash, ''), - }, - }); - await registerRunArtifacts(root, { todoApplyReceipt: receiptPath }); - return result; - } - case 'propose_code_change': { - const graph = await readActionObject(input.graph, input.graphPath, 'graph', root, config); - const diagnostics = hasInputValue(input.diagnostics) || hasInputValue(input.diagnosticsPath) - ? await readActionObject(input.diagnostics, input.diagnosticsPath, 'diagnostics', root, config) - : diagnoseGraph(graph); - const conclusions = hasInputValue(input.conclusions) || hasInputValue(input.conclusionsPath) - ? await readActionObject(input.conclusions, input.conclusionsPath, 'conclusions', root, config) - : undefined; - const proposals = hasInputValue(input.proposals) || hasInputValue(input.proposalsPath) - ? await readActionObject(input.proposals, input.proposalsPath, 'proposals', root, config) - : undefined; - const result = proposeCodeChangePlans({ - graph, - diagnostics, - ...(conclusions !== undefined ? { conclusions } : {}), - ...(proposals !== undefined ? { proposals } : {}), - maxPlans: numberValue(input.maxPlans, 50, 1, 500), - pathExists: createRepositoryPathProbe(root), - }); - if (input.output !== undefined) { - const output = await scopedPath(input.output, '', root, config); - await writeJson(output, result); - } - return result; - } - case 'render_code_change': { - const planSet = await readActionObject( - input.plans, input.plansPath, 'plans', root, config, - ); - if (planSet.schemaVersion !== 't2c.code-change-plan-set/v1') { - throw new Error('render_code_change requires a t2c.code-change-plan-set/v1 object'); - } - const review = createCodeChangeReviewPatch({ - plans: planSet.plans, - graphFingerprint: planSet.graphFingerprint, - }); - const patchPath = input.patch !== undefined - ? await scopedPath(input.patch, 'CODE_CHANGE.review.md', root, config) - : null; - const auditPath = input.audit !== undefined - ? await scopedPath(input.audit, 'CODE_CHANGE.review.json', root, config) - : null; - if (patchPath) await writeText(patchPath, review.markdown); - if (auditPath) await writeJson(auditPath, review.artifact); - return { - schemaVersion: 't2c.code-change-render-result/v1', - markdown: review.markdown, - artifact: review.artifact, - ...(patchPath ? { patchPath: path.relative(root, patchPath).replace(/\\/g, '/') } : {}), - ...(auditPath ? { auditPath: path.relative(root, auditPath).replace(/\\/g, '/') } : {}), - }; - } - case 'propose_source_patch': { - // Single plan path or full plan-set path. - if (hasInputValue(input.plan) || hasInputValue(input.planPath)) { - const plan = await readActionObject(input.plan, input.planPath, 'plan', root, config); - const unifiedDiffs = objectMapOfStrings(input.unifiedDiffs); - const patch = createCodeChangeSourcePatch({ - plan, - ...(unifiedDiffs ? { unifiedDiffs } : {}), - }); - if (input.output !== undefined) { - const output = await scopedPath(input.output, '', root, config); - await writeJson(output, patch); - } - return patch; - } - const planSet = await readActionObject( - input.plans, input.plansPath, 'plans', root, config, - ); - if (planSet.schemaVersion !== 't2c.code-change-plan-set/v1') { - throw new Error('propose_source_patch requires a plan or t2c.code-change-plan-set/v1'); - } - const result = createCodeChangeSourcePatchSet({ - plans: planSet.plans, - graphFingerprint: planSet.graphFingerprint, - }); - if (input.output !== undefined) { - const output = await scopedPath(input.output, '', root, config); - await writeJson(output, result); - } - return result; - } - case 'apply_source_patch': { - const patch = await readActionObject(input.patch, input.patchPath, 'patch', root, config); - const receiptPath = await scopedPath(input.receipt, 'CODE_CHANGE.source.receipt.json', root, config); - const result = await applyCodeChangeSourcePatch({ - root, - patch, - approval: { - actor: stringValue(input.actor, ''), - patchHash: stringValue(input.approvalHash, ''), - }, - receiptPath, - }); - return { - ...result, - receiptPath: path.relative(root, receiptPath).replace(/\\/g, '/'), - }; - } - case 'evaluate_code_change': { - const plan = await readActionObject(input.plan, input.planPath, 'plan', root, config); - const beforeGraph = await readActionObject( - input.beforeGraph, input.beforeGraphPath, 'beforeGraph', root, config, - ); - const beforeDiagnostics = hasInputValue(input.beforeDiagnostics) || hasInputValue(input.beforeDiagnosticsPath) - ? await readActionObject( - input.beforeDiagnostics, input.beforeDiagnosticsPath, 'beforeDiagnostics', root, config, - ) - : diagnoseGraph(beforeGraph); - const afterGraph = await readActionObject( - input.afterGraph, input.afterGraphPath, 'afterGraph', root, config, - ); - const afterDiagnostics = hasInputValue(input.afterDiagnostics) || hasInputValue(input.afterDiagnosticsPath) - ? await readActionObject( - input.afterDiagnostics, input.afterDiagnosticsPath, 'afterDiagnostics', root, config, - ) - : undefined; - const result = evaluateCodeChangeAcceptance({ - plan, - before: { graph: beforeGraph, diagnostics: beforeDiagnostics }, - afterGraph, - ...(afterDiagnostics !== undefined ? { afterDiagnostics } : {}), - }); - if (input.output !== undefined) { - const output = await scopedPath(input.output, '', root, config); - await writeJson(output, result); - } - return result; - } - case 'close_code_change': { - // Evaluate one plan or every plan in a set against before/after graphs. - const beforeGraph = await readActionObject( - input.beforeGraph, input.beforeGraphPath, 'beforeGraph', root, config, - ); - const beforeDiagnostics = hasInputValue(input.beforeDiagnostics) || hasInputValue(input.beforeDiagnosticsPath) - ? await readActionObject( - input.beforeDiagnostics, input.beforeDiagnosticsPath, 'beforeDiagnostics', root, config, - ) - : diagnoseGraph(beforeGraph); - const afterGraph = await readActionObject( - input.afterGraph, input.afterGraphPath, 'afterGraph', root, config, - ); - const afterDiagnostics = hasInputValue(input.afterDiagnostics) || hasInputValue(input.afterDiagnosticsPath) - ? await readActionObject( - input.afterDiagnostics, input.afterDiagnosticsPath, 'afterDiagnostics', root, config, - ) - : diagnoseGraph(afterGraph); - - let plans: CodeChangePlan[]; - if (hasInputValue(input.input) || hasInputValue(input.inputPath)) { - const value = await readActionObject( - input.input, input.inputPath, 'input', root, config, - ); - if (value.schemaVersion === 't2c.code-change-plan/v1') plans = [value]; - else if (value.schemaVersion === 't2c.code-change-plan-set/v1') plans = value.plans; - else throw new Error('close_code_change input must be a code-change plan or plan set'); - } else if (hasInputValue(input.plan) || hasInputValue(input.planPath)) { - plans = [await readActionObject(input.plan, input.planPath, 'plan', root, config)]; - } else { - const planSet = await readActionObject( - input.plans, input.plansPath, 'plans', root, config, - ); - if (planSet.schemaVersion !== 't2c.code-change-plan-set/v1') { - throw new Error('close_code_change requires a plan or t2c.code-change-plan-set/v1'); - } - plans = planSet.plans; - } + }, config, llmModeValue(input.communicationMode, config.communicationMode, 'communicationMode')), + extractGitIntent({ root, count: numberValue(input.gitCount, config.gitCommitCount, 1, 100) }, config), + booleanValue(input.includeAst, true) ? extractAstIntent({ root }, config) : Promise.resolve({ records: [], warnings: [] }), + ]); + warnings.push(...communication.warnings, ...git.warnings, ...ast.warnings); + communicationSyntheses = communication.participants; + communicationAudit = communication.audit; + graph = linkIntentRecords([...communication.records, ...git.records, ...ast.records]); + } + const analysis = analyzeCommunication(graph, new Date().toISOString(), communicationSyntheses); + return { + analysis, + markdown: renderCommunicationMarkdown(analysis), + warnings: [...new Set(warnings)].sort(), + audit: communicationAudit, + ...(booleanValue(input.includeGraph, false) ? { graph } : {}), + }; +} - const result = closeCodeChanges({ - plans, - before: { graph: beforeGraph, diagnostics: beforeDiagnostics }, - afterGraph, - afterDiagnostics, - }); - if (input.output !== undefined) { - const output = await scopedPath(input.output, '', root, config); - await writeJson(output, result); - } - return result; - } - case 'diff': { - const beforeInput = await readGraphInput(input.beforeGraph, input.before, 'before', root, config); - const afterInput = await readGraphInput(input.afterGraph, input.after, 'after', root, config); - const before = filterCommunicationGraph(beforeInput, input); - const after = filterCommunicationGraph(afterInput, input); - const diff = diffIntentGraphs(before, after); - const svg = booleanValue(input.includeSvg, true) - ? renderGraphDiffSvg(diff, { maxItems: numberValue(input.maxItems, 18, 1, 100) }) - : undefined; - if (booleanValue(input.compact, false)) { - return { - compact: true, - diff: { - generatedAt: diff.generatedAt, - fingerprint: diff.fingerprint, - beforeFingerprint: diff.beforeFingerprint, - afterFingerprint: diff.afterFingerprint, - summary: diff.summary, - }, - ...(svg === undefined ? {} : { svg }), - }; - } - return { - diff, - ...(svg === undefined ? {} : { svg }), - }; - } - case 'diff_files': { - const beforePath = await scopedPath(input.before, '', root, config); - const afterPath = await scopedPath(input.after, '', root, config); - const [before, after] = await Promise.all([ - readText(beforePath, config.maxFileBytes), - readText(afterPath, config.maxFileBytes), - ]); - const diff = diffText(before, after, { - path: stringValue(input.path, path.relative(root, afterPath)), - beforePath: path.relative(root, beforePath), - afterPath: path.relative(root, afterPath), - context: numberValue(input.context, 3, 0, 100), - }); - return withTextDiffViews([diff], input); - } - case 'diff_git': { - const result = await collectGitDiff({ - root, - revision: stringValue(input.revision, 'HEAD'), - staged: booleanValue(input.staged, false), - context: numberValue(input.context, 3, 0, 100), - maxFiles: numberValue(input.maxFiles, 50, 1, 500), - }); - return { ...withTextDiffViews(result.diffs, input), revision: result.revision, staged: result.staged, warnings: result.warnings }; - } - case 'reality': { - const graph = objectValue(input.graph, 'graph'); - const diagnostics = input.diagnostics - ? objectValue(input.diagnostics, 'diagnostics') - : diagnoseGraph(graph); - const view = buildRealityView(graph, diagnostics); - return { - view, - markdown: renderRealityMarkdown(view), - ...(booleanValue(input.includeSvg, true) - ? { - svg: renderRealitySvg(view, { - maxRows: numberValue(input.maxRows, 30, 1, 500), - gapsOnly: booleanValue(input.gapsOnly, false), - }), - } - : {}), - }; +async function executeLinkAction(input: Record, root: string, config: T2CConfig): Promise { + const records = await readRecords(input, root, config); + return linkIntentRecords(records); +} + +function executeDiagnoseAction(input: Record): unknown { + const graph = objectValue(input.graph, 'graph'); + return diagnoseGraph(graph); +} + +function executeSummarizeAction(input: Record, root: string, config: T2CConfig): unknown { + const graph = objectValue(input.graph, 'graph'); + const diagnostics = input.diagnostics + ? objectValue(input.diagnostics, 'diagnostics') + : diagnoseGraph(graph); + return summarizeGraph(graph, diagnostics, config, { + mode: summaryModeValue(input.mode, input.fallback), + }); +} + +async function executeProposeTodoAction(input: Record, root: string, config: T2CConfig): Promise { + const graph = await readActionObject(input.graph, input.graphPath, 'graph', root, config); + const diagnostics = input.diagnostics !== undefined || input.diagnosticsPath !== undefined + ? await readActionObject(input.diagnostics, input.diagnosticsPath, 'diagnostics', root, config) + : diagnoseGraph(graph); + const result = await synthesizeTodoProposals(graph, diagnostics, config, taskSynthesisMode(input.mode)); + if (input.output !== undefined) { + const output = await scopedPath(input.output, '', root, config); + await writeJson(output, result); + await registerRunArtifacts(root, { taskSynthesis: output }); + } + return result; +} + +async function executeRenderTodoAction(input: Record, root: string, config: T2CConfig): Promise { + const graph = await readActionObject(input.graph, input.graphPath, 'graph', root, config); + const diagnostics = await readActionObject( + input.diagnostics, input.diagnosticsPath, 'diagnostics', root, config, + ); + const synthesis = await readActionObject( + input.synthesis, input.synthesisPath, 'synthesis', root, config, + ); + const todoPath = await scopedPath(input.todo, 'TODO.md', root, config); + const patchPath = await scopedPath(input.patch, 'TODO.patch', root, config); + const auditPath = await scopedPath(input.audit, 'TODO.patch.json', root, config); + const todoContent = await readText(todoPath, config.maxFileBytes); + const rendered = createTodoPatch({ + todoPath: path.relative(root, todoPath).replace(/\\/g, '/'), + todoContent, + graph, + diagnostics, + conclusions: synthesis.conclusions, + proposals: synthesis.proposals, + validation: synthesis.validation, + synthesisAudit: synthesis.audit, + }); + await Promise.all([writeText(patchPath, rendered.markdown), writeJson(auditPath, rendered.artifact)]); + await registerRunArtifacts(root, { todoPatch: patchPath, todoPatchAudit: auditPath }); + return { + schemaVersion: 't2c.todo-render-result/v1', + patchPath: path.relative(root, patchPath).replace(/\\/g, '/'), + auditPath: path.relative(root, auditPath).replace(/\\/g, '/'), + artifact: rendered.artifact, + }; +} + +async function executeApplyTodoAction(input: Record, root: string, config: T2CConfig): Promise { + const todoPath = await scopedPath(input.todo, 'TODO.md', root, config); + const patchPath = await scopedPath(input.patch, 'TODO.patch', root, config); + const auditPath = await scopedPath(input.audit, 'TODO.patch.json', root, config); + const receiptPath = await scopedPath(input.receipt, 'TODO.patch.receipt.json', root, config); + const result = await applyTodoPatch({ + todoPath, + patchPath, + auditPath, + receiptPath, + approval: { + actor: stringValue(input.actor, ''), + patchHash: stringValue(input.approvalHash, ''), + }, + }); + await registerRunArtifacts(root, { todoApplyReceipt: receiptPath }); + return result; +} + +async function executeProposeCodeChangeAction(input: Record, root: string, config: T2CConfig): Promise { + const graph = await readActionObject(input.graph, input.graphPath, 'graph', root, config); + const diagnostics = hasInputValue(input.diagnostics) || hasInputValue(input.diagnosticsPath) + ? await readActionObject(input.diagnostics, input.diagnosticsPath, 'diagnostics', root, config) + : diagnoseGraph(graph); + const conclusions = hasInputValue(input.conclusions) || hasInputValue(input.conclusionsPath) + ? await readActionObject(input.conclusions, input.conclusionsPath, 'conclusions', root, config) + : undefined; + const proposals = hasInputValue(input.proposals) || hasInputValue(input.proposalsPath) + ? await readActionObject(input.proposals, input.proposalsPath, 'proposals', root, config) + : undefined; + const result = proposeCodeChangePlans({ + graph, + diagnostics, + ...(conclusions !== undefined ? { conclusions } : {}), + ...(proposals !== undefined ? { proposals } : {}), + maxPlans: numberValue(input.maxPlans, 50, 1, 500), + pathExists: createRepositoryPathProbe(root), + }); + if (input.output !== undefined) { + const output = await scopedPath(input.output, '', root, config); + await writeJson(output, result); + } + return result; +} + +async function executeRenderCodeChangeAction(input: Record, root: string, config: T2CConfig): Promise { + const planSet = await readActionObject( + input.plans, input.plansPath, 'plans', root, config, + ); + if (planSet.schemaVersion !== 't2c.code-change-plan-set/v1') { + throw new Error('render_code_change requires a t2c.code-change-plan-set/v1 object'); + } + const review = createCodeChangeReviewPatch({ + plans: planSet.plans, + graphFingerprint: planSet.graphFingerprint, + }); + const patchPath = input.patch !== undefined + ? await scopedPath(input.patch, 'CODE_CHANGE.review.md', root, config) + : null; + const auditPath = input.audit !== undefined + ? await scopedPath(input.audit, 'CODE_CHANGE.review.json', root, config) + : null; + if (patchPath) await writeText(patchPath, review.markdown); + if (auditPath) await writeJson(auditPath, review.artifact); + return { + schemaVersion: 't2c.code-change-render-result/v1', + markdown: review.markdown, + artifact: review.artifact, + ...(patchPath ? { patchPath: path.relative(root, patchPath).replace(/\\/g, '/') } : {}), + ...(auditPath ? { auditPath: path.relative(root, auditPath).replace(/\\/g, '/') } : {}), + }; +} + +async function executeProposeSourcePatchAction(input: Record, root: string, config: T2CConfig): Promise { + if (hasInputValue(input.plan) || hasInputValue(input.planPath)) { + const plan = await readActionObject(input.plan, input.planPath, 'plan', root, config); + const unifiedDiffs = objectMapOfStrings(input.unifiedDiffs); + const patch = createCodeChangeSourcePatch({ + plan, + ...(unifiedDiffs ? { unifiedDiffs } : {}), + }); + if (input.output !== undefined) { + const output = await scopedPath(input.output, '', root, config); + await writeJson(output, patch); } - case 'compare_workspace': - return compareWorkspaceIntent({ - root, - baseRef: stringValue(input.base, 'origin/main'), - taskFile: nullableString(input.task, null), - todoFile: nullableString(input.todo, 'TODO.md'), - changelogFile: nullableString(input.changelog, 'CHANGELOG.md'), - documentPatterns: stringList(input.docs, config.documentPatterns), - documentExcludes: stringList(input.docExcludes, config.documentExcludes), - includeDocumentationLlm: booleanValue(input.includeDocsLlm, false), - markdownMode: llmModeValue(input.markdownMode, config.markdownMode, 'markdownMode'), - communicationMode: llmModeValue(input.communicationMode, config.communicationMode, 'communicationMode'), - outputDir: stringValue(input.output, config.outputDir), - gitCommitCount: numberValue(input.gitCount, config.gitCommitCount, 1, 100), - }, config); - case 'pipeline': { - const options: PipelineOptions = { - root, - taskFile: await nullableScopedPath(input.task, null, root, config), - todoFile: await nullableScopedPath(input.todo, 'TODO.md', root, config), - changelogFile: await nullableScopedPath(input.changelog, 'CHANGELOG.md', root, config), - documentPatterns: stringList(input.docs, config.documentPatterns), - includeDocumentationLlm: booleanValue(input.includeDocsLlm, true), - outputDir: await scopedPath(input.output, config.outputDir, root, config), - gitCommitCount: numberValue(input.gitCount, config.gitCommitCount, 1, 100), - allowSummaryFallback: booleanValue(input.summaryFallback, false), - includeSummaryLlm: booleanValue(input.includeSummaryLlm, true), - nlMode: nlModeValue(input.nlMode, config.nlMode), - markdownMode: llmModeValue(input.markdownMode, config.markdownMode, 'markdownMode'), - communicationMode: llmModeValue(input.communicationMode, config.communicationMode, 'communicationMode'), - documentExcludes: stringList(input.docExcludes, config.documentExcludes), - taskSynthesisMode: pipelineTaskMode(input.taskMode), - includeCommunication: booleanValue(input.includeCommunication, true), - projectDirectory: stringValue(input.projectDir, 'project'), - communicationTicket: nullableString(input.communicationTicket, null), - }; - return runPipeline(options, config); + return patch; + } + const planSet = await readActionObject( + input.plans, input.plansPath, 'plans', root, config, + ); + if (planSet.schemaVersion !== 't2c.code-change-plan-set/v1') { + throw new Error('propose_source_patch requires a plan or t2c.code-change-plan-set/v1'); + } + const result = createCodeChangeSourcePatchSet({ + plans: planSet.plans, + graphFingerprint: planSet.graphFingerprint, + }); + if (input.output !== undefined) { + const output = await scopedPath(input.output, '', root, config); + await writeJson(output, result); + } + return result; +} + +async function executeApplySourcePatchAction(input: Record, root: string, config: T2CConfig): Promise { + const patch = await readActionObject(input.patch, input.patchPath, 'patch', root, config); + const receiptPath = await scopedPath(input.receipt, 'CODE_CHANGE.source.receipt.json', root, config); + const result = await applyCodeChangeSourcePatch({ + root, + patch, + approval: { + actor: stringValue(input.actor, ''), + patchHash: stringValue(input.approvalHash, ''), + }, + receiptPath, + }); + return { + ...result, + receiptPath: path.relative(root, receiptPath).replace(/\\/g, '/'), + }; +} + +async function executeEvaluateCodeChangeAction(input: Record, root: string, config: T2CConfig): Promise { + const plan = await readActionObject(input.plan, input.planPath, 'plan', root, config); + const beforeGraph = await readActionObject( + input.beforeGraph, input.beforeGraphPath, 'beforeGraph', root, config, + ); + const beforeDiagnostics = hasInputValue(input.beforeDiagnostics) || hasInputValue(input.beforeDiagnosticsPath) + ? await readActionObject( + input.beforeDiagnostics, input.beforeDiagnosticsPath, 'beforeDiagnostics', root, config, + ) + : diagnoseGraph(beforeGraph); + const afterGraph = await readActionObject( + input.afterGraph, input.afterGraphPath, 'afterGraph', root, config, + ); + const afterDiagnostics = hasInputValue(input.afterDiagnostics) || hasInputValue(input.afterDiagnosticsPath) + ? await readActionObject( + input.afterDiagnostics, input.afterDiagnosticsPath, 'afterDiagnostics', root, config, + ) + : undefined; + const result = evaluateCodeChangeAcceptance({ + plan, + before: { graph: beforeGraph, diagnostics: beforeDiagnostics }, + afterGraph, + ...(afterDiagnostics !== undefined ? { afterDiagnostics } : {}), + }); + if (input.output !== undefined) { + const output = await scopedPath(input.output, '', root, config); + await writeJson(output, result); + } + return result; +} + +async function executeCloseCodeChangeAction(input: Record, root: string, config: T2CConfig): Promise { + const beforeGraph = await readActionObject( + input.beforeGraph, input.beforeGraphPath, 'beforeGraph', root, config, + ); + const beforeDiagnostics = hasInputValue(input.beforeDiagnostics) || hasInputValue(input.beforeDiagnosticsPath) + ? await readActionObject( + input.beforeDiagnostics, input.beforeDiagnosticsPath, 'beforeDiagnostics', root, config, + ) + : diagnoseGraph(beforeGraph); + const afterGraph = await readActionObject( + input.afterGraph, input.afterGraphPath, 'afterGraph', root, config, + ); + const afterDiagnostics = hasInputValue(input.afterDiagnostics) || hasInputValue(input.afterDiagnosticsPath) + ? await readActionObject( + input.afterDiagnostics, input.afterDiagnosticsPath, 'afterDiagnostics', root, config, + ) + : diagnoseGraph(afterGraph); + + let plans: CodeChangePlan[]; + if (hasInputValue(input.input) || hasInputValue(input.inputPath)) { + const value = await readActionObject( + input.input, input.inputPath, 'input', root, config, + ); + if (value.schemaVersion === 't2c.code-change-plan/v1') plans = [value]; + else if (value.schemaVersion === 't2c.code-change-plan-set/v1') plans = value.plans; + else throw new Error('close_code_change input must be a code-change plan or plan set'); + } else if (hasInputValue(input.plan) || hasInputValue(input.planPath)) { + plans = [await readActionObject(input.plan, input.planPath, 'plan', root, config)]; + } else { + const planSet = await readActionObject( + input.plans, input.plansPath, 'plans', root, config, + ); + if (planSet.schemaVersion !== 't2c.code-change-plan-set/v1') { + throw new Error('close_code_change requires a plan or t2c.code-change-plan-set/v1'); } + plans = planSet.plans; + } + + const result = closeCodeChanges({ + plans, + before: { graph: beforeGraph, diagnostics: beforeDiagnostics }, + afterGraph, + afterDiagnostics, + }); + if (input.output !== undefined) { + const output = await scopedPath(input.output, '', root, config); + await writeJson(output, result); } + return result; +} + +async function executeDiffAction(input: Record, root: string, config: T2CConfig): Promise { + const beforeInput = await readGraphInput(input.beforeGraph, input.before, 'before', root, config); + const afterInput = await readGraphInput(input.afterGraph, input.after, 'after', root, config); + const before = filterCommunicationGraph(beforeInput, input); + const after = filterCommunicationGraph(afterInput, input); + const diff = diffIntentGraphs(before, after); + const svg = booleanValue(input.includeSvg, true) + ? renderGraphDiffSvg(diff, { maxItems: numberValue(input.maxItems, 18, 1, 100) }) + : undefined; + if (booleanValue(input.compact, false)) { + return { + compact: true, + diff: { + generatedAt: diff.generatedAt, + fingerprint: diff.fingerprint, + beforeFingerprint: diff.beforeFingerprint, + afterFingerprint: diff.afterFingerprint, + summary: diff.summary, + }, + ...(svg === undefined ? {} : { svg }), + }; + } + return { + diff, + ...(svg === undefined ? {} : { svg }), + }; +} + +async function executeDiffFilesAction(input: Record, root: string, config: T2CConfig): Promise { + const beforePath = await scopedPath(input.before, '', root, config); + const afterPath = await scopedPath(input.after, '', root, config); + const [before, after] = await Promise.all([ + readText(beforePath, config.maxFileBytes), + readText(afterPath, config.maxFileBytes), + ]); + const diff = diffText(before, after, { + path: stringValue(input.path, path.relative(root, afterPath)), + beforePath: path.relative(root, beforePath), + afterPath: path.relative(root, afterPath), + context: numberValue(input.context, 3, 0, 100), + }); + return withTextDiffViews([diff], input); +} + +async function executeDiffGitAction(input: Record, root: string): Promise { + const result = await collectGitDiff({ + root, + revision: stringValue(input.revision, 'HEAD'), + staged: booleanValue(input.staged, false), + context: numberValue(input.context, 3, 0, 100), + maxFiles: numberValue(input.maxFiles, 50, 1, 500), + }); + return { ...withTextDiffViews(result.diffs, input), revision: result.revision, staged: result.staged, warnings: result.warnings }; +} + +function executeRealityAction(input: Record, config: T2CConfig): unknown { + const graph = objectValue(input.graph, 'graph'); + const diagnostics = input.diagnostics + ? objectValue(input.diagnostics, 'diagnostics') + : diagnoseGraph(graph); + const view = buildRealityView(graph, diagnostics); + return { + view, + markdown: renderRealityMarkdown(view), + ...(booleanValue(input.includeSvg, true) + ? { + svg: renderRealitySvg(view, { + maxRows: numberValue(input.maxRows, 30, 1, 500), + gapsOnly: booleanValue(input.gapsOnly, false), + }), + } + : {}), + }; +} + +async function executeCompareWorkspaceAction(input: Record, root: string, config: T2CConfig): Promise { + return compareWorkspaceIntent({ + root, + baseRef: stringValue(input.base, 'origin/main'), + taskFile: nullableString(input.task, null), + todoFile: nullableString(input.todo, 'TODO.md'), + changelogFile: nullableString(input.changelog, 'CHANGELOG.md'), + documentPatterns: stringList(input.docs, config.documentPatterns), + documentExcludes: stringList(input.docExcludes, config.documentExcludes), + includeDocumentationLlm: booleanValue(input.includeDocsLlm, false), + markdownMode: llmModeValue(input.markdownMode, config.markdownMode, 'markdownMode'), + communicationMode: llmModeValue(input.communicationMode, config.communicationMode, 'communicationMode'), + outputDir: stringValue(input.output, config.outputDir), + gitCommitCount: numberValue(input.gitCount, config.gitCommitCount, 1, 100), + }, config); +} + +async function executePipelineAction(input: Record, root: string, config: T2CConfig): Promise { + const options: PipelineOptions = { + root, + taskFile: await nullableScopedPath(input.task, null, root, config), + todoFile: await nullableScopedPath(input.todo, 'TODO.md', root, config), + changelogFile: await nullableScopedPath(input.changelog, 'CHANGELOG.md', root, config), + documentPatterns: stringList(input.docs, config.documentPatterns), + includeDocumentationLlm: booleanValue(input.includeDocsLlm, true), + outputDir: await scopedPath(input.output, config.outputDir, root, config), + gitCommitCount: numberValue(input.gitCount, config.gitCommitCount, 1, 100), + allowSummaryFallback: booleanValue(input.summaryFallback, false), + includeSummaryLlm: booleanValue(input.includeSummaryLlm, true), + nlMode: nlModeValue(input.nlMode, config.nlMode), + markdownMode: llmModeValue(input.markdownMode, config.markdownMode, 'markdownMode'), + communicationMode: llmModeValue(input.communicationMode, config.communicationMode, 'communicationMode'), + documentExcludes: stringList(input.docExcludes, config.documentExcludes), + taskSynthesisMode: pipelineTaskMode(input.taskMode), + includeCommunication: booleanValue(input.includeCommunication, true), + projectDirectory: stringValue(input.projectDir, 'project'), + communicationTicket: nullableString(input.communicationTicket, null), + }; + return runPipeline(options, config); } function filterCommunicationGraph(graph: IntentGraph, input: Record): IntentGraph { From fdf44bddcee2db573bee72fdddd34b0563a94adf Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 10:11:51 +0200 Subject: [PATCH 08/43] refactor: split semantic rerank result assertion --- src/semantic/reranker/result.ts | 144 +++++++++++++++++++++----------- 1 file changed, 96 insertions(+), 48 deletions(-) diff --git a/src/semantic/reranker/result.ts b/src/semantic/reranker/result.ts index fe41aa3..f948b55 100644 --- a/src/semantic/reranker/result.ts +++ b/src/semantic/reranker/result.ts @@ -94,7 +94,31 @@ export function assertSemanticRerankResult( graph: IntentGraph, ): void { assertSemanticCandidateSet(candidateSet, graph); + const { candidates, records } = createCandidateAndRecordIndex(candidateSet, graph); + const seenDecisions = new Set(); + const acceptedDeclarations = new Set(); + assertSemanticRerankHeader(value, candidateSet, graph); + if (value.schemaVersion !== 't2c.semantic-rerank/v1') { + for (const decision of value.decisions) { + const candidate = validateSemanticDecisionCandidate(decision, candidates, seenDecisions); + validateSemanticDecisionDecision(decision); + validateSemanticDecisionEvidence(decision, candidate, records); + validateDecisionEvidenceScope(decision, candidate); + validateSemanticDecisionVerdict(decision, candidate, acceptedDeclarations); + } + + if (seenDecisions.size !== candidates.size) { + throw new Error('Semantic rerank result must decide every bounded candidate'); + } + assertRerankResultHash(value); +} + +function assertSemanticRerankHeader( + value: SemanticRerankResult, + candidateSet: SemanticCandidateSet, + graph: IntentGraph, +): void { if (value.schemaVersion !== 't2c.semantic-rerank/v1') { throw new Error('Unsupported semantic rerank schemaVersion'); } @@ -103,68 +127,92 @@ export function assertSemanticRerankResult( if (value.graphFingerprint !== graph.fingerprint || value.candidateSetHash !== candidateSet.candidateSetHash) { throw new Error('Semantic rerank result does not match its graph or candidate set'); } - validateGeneration(value.generation); +} - const candidates = new Map(candidateSet.candidates.map((candidate) => [candidate.id, candidate])); - const records = new Map(graph.records.map((record) => [record.id, record])); - const seenDecisions = new Set(); - const acceptedDeclarations = new Set(); +function createCandidateAndRecordIndex(candidateSet: SemanticCandidateSet, graph: IntentGraph) { + return { + candidates: new Map(candidateSet.candidates.map((candidate) => [candidate.id, candidate])), + records: new Map(graph.records.map((record) => [record.id, record])), + }; +} - for (const decision of value.decisions) { - if (!/^SDEC-[a-f0-9]{20}$/.test(decision.id)) { - throw new Error(`Invalid semantic decision ID: ${decision.id}`); - } - if (seenDecisions.has(decision.candidateId)) { - throw new Error(`Duplicate decision for candidate ${decision.candidateId}`); - } - seenDecisions.add(decision.candidateId); +function validateSemanticDecisionCandidate( + decision: SemanticRerankDecision, + candidates: Map, + seenDecisions: Set, +): SemanticCandidateSet['candidates'][number] { + if (!/^SDEC-[a-f0-9]{20}$/.test(decision.id)) { + throw new Error(`Invalid semantic decision ID: ${decision.id}`); + } + if (seenDecisions.has(decision.candidateId)) { + throw new Error(`Duplicate decision for candidate ${decision.candidateId}`); + } + seenDecisions.add(decision.candidateId); - const candidate = candidates.get(decision.candidateId); - if (!candidate) { - throw new Error(`Semantic decision cites unknown candidate ${decision.candidateId}`); - } + const candidate = candidates.get(decision.candidateId); + if (!candidate) { + throw new Error(`Semantic decision cites unknown candidate ${decision.candidateId}`); + } + return candidate; +} - roundedConfidence(decision.confidence); - validateVerdictReason(decision); - requiredText(decision.rationale, `Decision ${decision.id} rationale`); +function validateSemanticDecisionDecision(decision: SemanticRerankDecision): void { + roundedConfidence(decision.confidence); + validateVerdictReason(decision); + requiredText(decision.rationale, `Decision ${decision.id} rationale`); +} - const expectedRecords = [candidate.declarationRecordId, candidate.moduleRecordId].sort(); - const citedRecords = [...new Set(decision.citedRecordIds)].sort(); - if (stableStringify(citedRecords) !== stableStringify(expectedRecords)) { - throw new Error(`Decision ${decision.id} must cite exactly both candidate records`); - } +function validateSemanticDecisionEvidence( + decision: SemanticRerankDecision, + candidate: SemanticCandidateSet['candidates'][number], + records: Map, +): void { + const expectedRecords = [candidate.declarationRecordId, candidate.moduleRecordId].sort(); + const citedRecords = [...new Set(decision.citedRecordIds)].sort(); + if (stableStringify(citedRecords) !== stableStringify(expectedRecords)) { + throw new Error(`Decision ${decision.id} must cite exactly both candidate records`); + } - for (const recordId of expectedRecords) { - const citations = decision.evidence.filter((item) => item.recordId === recordId); - if (citations.length === 0) { - throw new Error(`Decision ${decision.id} lacks evidence for ${recordId}`); - } - const record = records.get(recordId); - if (!record) { - throw new Error(`Decision ${decision.id} cites unknown record ${recordId}`); - } - for (const citation of citations) { - assertGroundedQuote(citation, record, decision.id); - } + for (const recordId of expectedRecords) { + const citations = decision.evidence.filter((item) => item.recordId === recordId); + if (citations.length === 0) { + throw new Error(`Decision ${decision.id} lacks evidence for ${recordId}`); } - - if (decision.evidence.some((item) => !expectedRecords.includes(item.recordId))) { - throw new Error(`Decision ${decision.id} evidence escapes its candidate pair`); + const record = records.get(recordId); + if (!record) { + throw new Error(`Decision ${decision.id} cites unknown record ${recordId}`); } - - if (decision.verdict === 'accept') { - if (acceptedDeclarations.has(candidate.declarationRecordId)) { - throw new Error(`Reranker accepted more than one module for ${candidate.declarationRecordId}`); - } - acceptedDeclarations.add(candidate.declarationRecordId); + for (const citation of citations) { + assertGroundedQuote(citation, record, decision.id); } } +} - if (seenDecisions.size !== candidates.size) { - throw new Error('Semantic rerank result must decide every bounded candidate'); +function validateDecisionEvidenceScope( + decision: SemanticRerankDecision, + candidate: SemanticCandidateSet['candidates'][number], +): void { + const expectedRecords = [candidate.declarationRecordId, candidate.moduleRecordId].sort(); + if (decision.evidence.some((item) => !expectedRecords.includes(item.recordId))) { + throw new Error(`Decision ${decision.id} evidence escapes its candidate pair`); } +} + +function validateSemanticDecisionVerdict( + decision: SemanticRerankDecision, + candidate: SemanticCandidateSet['candidates'][number], + acceptedDeclarations: Set, +): void { + if (decision.verdict === 'accept') { + if (acceptedDeclarations.has(candidate.declarationRecordId)) { + throw new Error(`Reranker accepted more than one module for ${candidate.declarationRecordId}`); + } + acceptedDeclarations.add(candidate.declarationRecordId); + } +} +function assertRerankResultHash(value: SemanticRerankResult): void { const expectedHash = sha256(stableStringify({ graphFingerprint: value.graphFingerprint, candidateSetHash: value.candidateSetHash, From bf829435b2cc98e9c42566120fdf18734a6eac3e Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 10:16:14 +0200 Subject: [PATCH 09/43] refactor: split source patch assertions into focused helpers --- .../implementation-helpers.ts | 163 +++++++++++++----- 1 file changed, 122 insertions(+), 41 deletions(-) diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts index b5eabc6..8d6f705 100644 --- a/src/synthesis/code-change-plan/implementation-helpers.ts +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -624,10 +624,14 @@ export function renderCodeChangeReviewMarkdown( } export function assertCodeChangeReviewPatch(value: unknown): asserts value is CodeChangeReviewPatch { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change review patch must be an object'); - } - const artifact = value as Record; + const artifact = assertSourcePatchObject(value, 'Code change review patch must be an object'); + validateReviewPatchKeys(artifact); + assertCodeChangeReviewPatchSchema(artifact); + assertCodeChangeReviewPatchPlanCollections(artifact); + assertCodeChangeReviewPatchGeneration(artifact); +} + +function validateReviewPatchKeys(artifact: Record): void { const required = [ 'schemaVersion', 'createdAt', 'graphFingerprint', 'planIds', 'planHashes', 'renderedPatchHash', 'generation', @@ -635,6 +639,9 @@ export function assertCodeChangeReviewPatch(value: unknown): asserts value is Co for (const key of required) { if (!(key in artifact)) throw new Error(`Code change review patch is missing: ${key}`); } +} + +function assertCodeChangeReviewPatchSchema(artifact: Record): void { if (artifact.schemaVersion !== 't2c.code-change-review/v1') { throw new Error('Unsupported code change review schemaVersion'); } @@ -653,12 +660,18 @@ export function assertCodeChangeReviewPatch(value: unknown): asserts value is Co if (!Array.isArray(artifact.planHashes) || !artifact.planHashes.every((hash) => typeof hash === 'string' && /^[a-f0-9]{64}$/.test(hash))) { throw new Error('Code change review planHashes must be SHA-256 digests'); } +} + +function assertCodeChangeReviewPatchPlanCollections(artifact: Record): void { if (artifact.planIds.length !== artifact.planHashes.length) { throw new Error('Code change review planIds and planHashes must have equal length'); } if (new Set(artifact.planIds as string[]).size !== (artifact.planIds as string[]).length) { throw new Error('Code change review planIds must be unique'); } +} + +function assertCodeChangeReviewPatchGeneration(artifact: Record): void { assertGroundedGenerationMetadata(artifact.generation, 'Code change review generation'); const generation = artifact.generation as GroundedGenerationMetadata; if (generation.generatedAt !== artifact.createdAt) { @@ -791,6 +804,18 @@ export function assertCodeChangeSourcePatch( value: unknown, plan?: CodeChangePlan, ): asserts value is CodeChangeSourcePatch { + const patch = assertCodeChangeSourcePatchObject(value, plan); + validateSourcePatchSchema(patch); + validateSourcePatchIdentifiers(patch); + const editPaths = validateSourcePatchEdits(patch); + validateSourcePatchHashAndId(patch); + validateSourcePatchGeneration(patch); + if (plan) { + validateSourcePatchAgainstPlan(patch, plan, editPaths); + } +} + +function assertCodeChangeSourcePatchObject(value: unknown, plan?: CodeChangePlan): CodeChangeSourcePatch { if (!value || typeof value !== 'object' || Array.isArray(value)) { throw new Error('Code change source patch must be an object'); } @@ -799,19 +824,34 @@ export function assertCodeChangeSourcePatch( 'schemaVersion', 'id', 'patchHash', 'status', 'createdAt', 'planId', 'planHash', 'graphFingerprint', 'diagnosticIds', 'recordIds', 'edits', 'acceptanceCriteria', 'generation', ], 'Source patch'); + if (plan !== undefined && typeof patch.planId === 'string' && patch.id) { + if (patch.planId !== plan.id) { + throw new Error('Source patch is not bound to the supplied plan'); + } + } + return patch; +} + +function validateSourcePatchSchema(patch: CodeChangeSourcePatch): void { if (patch.schemaVersion !== 't2c.code-change-source-patch/v1') { throw new Error('Unsupported code change source patch schemaVersion'); } + if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { + throw new Error('Source patch createdAt must be an ISO date-time'); + } + if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); + if (!Array.isArray(patch.edits) || patch.edits.length === 0) { + throw new Error('Source patch edits must be a non-empty array'); + } +} + +function validateSourcePatchIdentifiers(patch: CodeChangeSourcePatch): void { if (typeof patch.id !== 'string' || !/^SPATCH-[a-f0-9]{20}$/.test(patch.id)) { throw new Error('Source patch id must match SPATCH-<20 hex>'); } if (typeof patch.patchHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.patchHash)) { throw new Error('Source patch patchHash must be SHA-256'); } - if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); - if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { - throw new Error('Source patch createdAt must be an ISO date-time'); - } if (typeof patch.planId !== 'string' || !/^CPLAN-[a-f0-9]{20}$/.test(patch.planId)) { throw new Error('Source patch planId must match CPLAN-<20 hex>'); } @@ -821,21 +861,21 @@ export function assertCodeChangeSourcePatch( if (typeof patch.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(patch.graphFingerprint)) { throw new Error('Source patch graphFingerprint must be SHA-256'); } - if (!Array.isArray(patch.edits) || patch.edits.length === 0) { - throw new Error('Source patch edits must be a non-empty array'); - } assertSourcePatchIds(patch.diagnosticIds, /^DIAG-[a-f0-9]{20}$/, 'diagnosticIds'); assertSourcePatchIds(patch.recordIds, /^INT-[A-Z]+-[a-f0-9]{20}$/, 'recordIds'); assertSourcePatchStrings(patch.acceptanceCriteria, 'acceptanceCriteria', false); +} + +function validateSourcePatchEdits(patch: CodeChangeSourcePatch): Set { const paths = new Set(); for (const edit of patch.edits) { if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); exactSourcePatchKeys(edit as unknown as Record, [ 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', ], 'Source patch edit'); - const path = edit.path?.trim().replace(/\\/g, '/') ?? ''; - if (!path || path.startsWith('/') || path.split('/').includes('..')) { - throw new Error(`Source patch edit path is not a relative repository path: ${path}`); + const normalizedPath = edit.path?.trim().replace(/\\/g, '/') ?? ''; + if (!normalizedPath || normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..')) { + throw new Error(`Source patch edit path is not a relative repository path: ${normalizedPath}`); } if (!['create', 'modify', 'delete'].includes(edit.action)) { throw new Error(`Source patch edit action is unsupported: ${String(edit.action)}`); @@ -843,15 +883,19 @@ export function assertCodeChangeSourcePatch( if (typeof edit.instruction !== 'string' || !edit.instruction.trim()) { throw new Error('Source patch edit instruction must be non-blank'); } - assertSourcePatchStrings(edit.symbols, `edits[${path}].symbols`, true); + assertSourcePatchStrings(edit.symbols, `edits[${normalizedPath}].symbols`, true); if (edit.unifiedDiff !== null) { if (typeof edit.unifiedDiff !== 'string') throw new Error('Source patch unifiedDiff must be string or null'); - normalizeUnifiedDiff(edit.unifiedDiff, path); + normalizeUnifiedDiff(edit.unifiedDiff, normalizedPath); } - const key = `${path}::${edit.action}`; - if (paths.has(key)) throw new Error(`Duplicate source patch edit for ${path}`); + const key = `${normalizedPath}::${edit.action}`; + if (paths.has(key)) throw new Error(`Duplicate source patch edit for ${normalizedPath}`); paths.add(key); } + return paths; +} + +function validateSourcePatchHashAndId(patch: CodeChangeSourcePatch): void { const expectedHash = createCodeChangeSourcePatchHash(patch); if (patch.patchHash !== expectedHash) { throw new Error(`Source patch patchHash does not match semantic content: expected ${expectedHash}`); @@ -859,6 +903,9 @@ export function assertCodeChangeSourcePatch( if (patch.id !== createCodeChangeSourcePatchId(patch)) { throw new Error('Source patch id does not match semantic content'); } +} + +function validateSourcePatchGeneration(patch: CodeChangeSourcePatch): void { assertGroundedGenerationMetadata(patch.generation, 'Source patch generation'); if (patch.generation.generatedAt !== patch.createdAt) { throw new Error('Source patch generation.generatedAt must match createdAt'); @@ -866,37 +913,60 @@ export function assertCodeChangeSourcePatch( if (patch.generation.generator !== 't2c/code-change-source-patch') { throw new Error('Source patch generation.generator must be t2c/code-change-source-patch'); } - if (plan) { - if (patch.planId !== plan.id || patch.planHash !== plan.planHash) { - throw new Error('Source patch is not bound to the supplied plan'); - } - if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { - throw new Error('Source patch graphFingerprint does not match the plan'); +} + +function validateSourcePatchAgainstPlan( + patch: CodeChangeSourcePatch, + plan: CodeChangePlan, + editPaths: Set, +): void { + if (patch.planHash !== plan.planHash) { + throw new Error('Source patch is not bound to the supplied plan'); + } + if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { + throw new Error('Source patch graphFingerprint does not match the plan'); + } + const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); + const expectedChanges = new Map(plan.changes.map((item) => [ + item.path.replace(/\\/g, '/'), item.action, + ])); + for (const edit of patch.edits) { + const editPath = edit.path.replace(/\\/g, '/'); + if (!allowed.has(editPath)) { + throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); } - const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); - const expectedChanges = new Map(plan.changes.map((item) => [ - item.path.replace(/\\/g, '/'), item.action, - ])); - for (const edit of patch.edits) { - const editPath = edit.path.replace(/\\/g, '/'); - if (!allowed.has(editPath)) { - throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); - } - if (expectedChanges.get(editPath) !== edit.action) { - throw new Error(`Source patch action for ${edit.path} does not match the plan`); - } + if (expectedChanges.get(editPath) !== edit.action) { + throw new Error(`Source patch action for ${edit.path} does not match the plan`); } - exactSourcePatchSet(patch.edits.map((item) => item.path.replace(/\\/g, '/')), [...expectedChanges.keys()], 'edit paths'); - exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); - exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); - exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); } + exactSourcePatchSet( + [...editPaths].map((item) => item.split('::')[0]), + [...expectedChanges.keys()], + 'edit paths', + ); + exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); + exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); + exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); } export function assertCodeChangeSourcePatchSet( value: unknown, plans?: CodeChangePlan[], ): asserts value is CodeChangeSourcePatchSet { + const set = assertSourcePatchSetObject(value); + validateSourcePatchSetSchema(set); + validateSourcePatchSetPatches(set, plans); + validateSourcePatchSetGeneration(set); +} + +function assertSourcePatchObject(value: unknown, objectLabel: string): Record { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error(objectLabel); + } + return value as Record; +} + +function assertSourcePatchSetObject(value: unknown): CodeChangeSourcePatchSet { if (!value || typeof value !== 'object' || Array.isArray(value)) { throw new Error('Code change source patch set must be an object'); } @@ -904,6 +974,10 @@ export function assertCodeChangeSourcePatchSet( exactSourcePatchKeys(set as unknown as Record, [ 'schemaVersion', 'generatedAt', 'graphFingerprint', 'patches', 'generation', ], 'Source patch set'); + return set; +} + +function validateSourcePatchSetSchema(set: CodeChangeSourcePatchSet): void { if (set.schemaVersion !== 't2c.code-change-source-patch-set/v1') { throw new Error('Unsupported code change source patch set schemaVersion'); } @@ -914,10 +988,14 @@ export function assertCodeChangeSourcePatchSet( throw new Error('Source patch set graphFingerprint must be SHA-256'); } if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); +} + +function validateSourcePatchSetPatches(set: CodeChangeSourcePatchSet, plans?: CodeChangePlan[]): void { const plansById = new Map((plans ?? []).map((plan) => [plan.id, plan])); const patchIds = new Set(); for (const patch of set.patches) { - assertCodeChangeSourcePatch(patch, plans ? plansById.get(patch.planId) : undefined); + const expectedPlan = plans ? plansById.get(patch.planId) : undefined; + assertCodeChangeSourcePatch(patch, expectedPlan); if (patch.graphFingerprint !== set.graphFingerprint) { throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); } @@ -925,6 +1003,9 @@ export function assertCodeChangeSourcePatchSet( patchIds.add(patch.id); } if (plans) exactSourcePatchSet(set.patches.map((patch) => patch.planId), plans.map((plan) => plan.id), 'planIds'); +} + +function validateSourcePatchSetGeneration(set: CodeChangeSourcePatchSet): void { assertGroundedGenerationMetadata(set.generation, 'Source patch set generation'); if (set.generation.generatedAt !== set.generatedAt) { throw new Error('Source patch set generation.generatedAt must match generatedAt'); From 054e1242d6259dea96bdb8b5465d93a564573b88 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 10:43:17 +0200 Subject: [PATCH 10/43] refactor: split plannable path checks into focused helpers --- src/synthesis/code-change-path.ts | 104 +++++++++++++++++++----------- 1 file changed, 66 insertions(+), 38 deletions(-) diff --git a/src/synthesis/code-change-path.ts b/src/synthesis/code-change-path.ts index f5a3444..b0eb1ff 100644 --- a/src/synthesis/code-change-path.ts +++ b/src/synthesis/code-change-path.ts @@ -135,35 +135,70 @@ const EXTENSIONLESS_SOURCE_BASENAMES = new Set([ 'vagrantfile', ]); +/** Exported for unit tests and koru/ticket2dsl usefulness checks. */ +export function isUsefulCodeChangePath(value: string): boolean { + return isPlannablePath(value); +} + function isPlannablePath(value: string): boolean { - const normalized = value.trim().replace(/\\/g, '/'); - if ( - !normalized - || normalized.startsWith('/') - || normalized.endsWith('/') - || /^[a-z][a-z\d+.-]*:/i.test(normalized) - ) return false; - const segments = normalized.split('/').filter(Boolean); - if (!segments.length || segments.includes('.') || segments.includes('..')) return false; - // A home-relative or variable-expanded location is not in the repository. A - // release note describing runtime state at `~/.urirun-host/mesh.json` would - // otherwise plan a literal `~` directory inside the analysed tree. - if (/^[~$%]/.test(segments[0] ?? '') || segments.includes('~')) return false; + const normalized = normalizePlannablePath(value); + if (!isCandidatePathSyntax(normalized)) return false; + + const segments = splitPathSegments(normalized); + if (isInvalidSegmentShape(segments)) return false; const lowerSegments = segments.map((segment) => segment.toLowerCase()); - // Shell/glob wildcards are never concrete implementation targets. - if (/[*?[\]{}]/.test(normalized)) return false; + if (!isConcretePath(segments, lowerSegments)) return false; + if (hasShellPattern(normalized)) return false; + if (isDisallowedSegment(lowerSegments)) return false; + + const basename = segments[segments.length - 1] ?? ''; + return isPlannableBasename(lowerSegments, basename); +} - for (const segment of lowerSegments) { - if (NON_SOURCE_DIR_SEGMENTS.has(segment)) return false; - if (segment === '.intent' || segment.startsWith('.intent-')) return false; - if (segment.endsWith('.egg-info') || segment.endsWith('.dist-info')) return false; +function normalizePlannablePath(value: string): string { + return value.trim().replace(/\\/g, '/'); +} + +function isCandidatePathSyntax(normalized: string): boolean { + return Boolean(normalized) + && !normalized.startsWith('/') + && !normalized.endsWith('/') + && !/^[a-z][a-z\d+.-]*:/i.test(normalized); +} + +function splitPathSegments(normalized: string): string[] { + return normalized.split('/').filter(Boolean); +} + +function isInvalidSegmentShape(segments: string[]): boolean { + return !segments.length || segments.includes('.') || segments.includes('..'); +} + +function isConcretePath(segments: string[], lowerSegments: string[]): boolean { + if (segments.length === 0) return false; + if (/^[~$%]/.test(segments[0] ?? '')) return false; + if (segments.includes('~')) return false; + return lowerSegments.every((segment) => segment !== ''); +} + +function hasShellPattern(normalized: string): boolean { + return /[*?[\]{}]/.test(normalized); +} + +function isDisallowedSegment(segments: string[]): boolean { + for (const segment of segments) { + if (NON_SOURCE_DIR_SEGMENTS.has(segment)) return true; + if (segment === '.intent' || segment.startsWith('.intent-')) return true; + if (segment.endsWith('.egg-info') || segment.endsWith('.dist-info')) return true; } + return false; +} - const basename = segments[segments.length - 1] ?? ''; +function isPlannableBasename(lowerSegments: string[], basename: string): boolean { const lowerBasename = basename.toLowerCase(); if (!basename) return false; if (T2C_ARTIFACT_BASENAMES.has(lowerBasename)) return false; - if (segments.length === 1 && lowerBasename === 'prompt.txt') return false; + if (lowerSegments.length === 1 && lowerBasename === 'prompt.txt') return false; if (!basename.includes('.') && !EXTENSIONLESS_SOURCE_BASENAMES.has(lowerBasename)) return false; const dot = basename.lastIndexOf('.'); @@ -172,8 +207,13 @@ function isPlannablePath(value: string): boolean { if (BINARY_EXTENSIONS.has(ext)) return false; } - // Generated code2llm / analysis dumps under project/ (or nested batch dirs) - // that are not primary product source. + if (isGeneratedArtifactPath(lowerSegments, lowerBasename)) return false; + if (lowerBasename.includes('code2llm_incremental')) return false; + + return true; +} + +function isGeneratedArtifactPath(lowerSegments: string[], lowerBasename: string): boolean { if ( lowerSegments[0] === 'project' && (GENERATED_ANALYSIS_BASENAMES.has(lowerBasename) @@ -184,21 +224,9 @@ function isPlannablePath(value: string): boolean { || lowerBasename === 'prompt.txt' || lowerBasename === 'readme.md') ) { - return false; + return true; } - // Local tool state / cache under the project root. - if (lowerSegments[0] === '.koru' || lowerSegments[0] === '.code2llm_cache') { - return false; - } - if (lowerBasename.includes('code2llm_incremental')) { - return false; - } - - return true; -} - -/** Exported for unit tests and koru/ticket2dsl usefulness checks. */ -export function isUsefulCodeChangePath(value: string): boolean { - return isPlannablePath(value); + return lowerSegments[0] === '.koru' || lowerSegments[0] === '.code2llm_cache'; } + From 1fd4141d2cab457fb39642fe26da1c5cf47dfda7 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 10:54:15 +0200 Subject: [PATCH 11/43] refactor: route actions through typed handler map --- src/services/actions.ts | 97 ++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 59 deletions(-) diff --git a/src/services/actions.ts b/src/services/actions.ts index c89b5b9..e3ba04e 100644 --- a/src/services/actions.ts +++ b/src/services/actions.ts @@ -69,62 +69,41 @@ export type T2CAction = | 'evaluate_code_change' | 'close_code_change'; +type ActionInputHandler = (input: Record, root: string, config: T2CConfig) => unknown | Promise; + +const ACTION_HANDLERS: Record = { + extract_nl: executeExtractNlAction, + extract_git: executeExtractGitAction, + extract_ast: executeExtractAstAction, + extract_config: executeExtractConfigAction, + extract_markdown: executeExtractMarkdownAction, + extract_docs: executeExtractDocsAction, + extract_communication: executeExtractCommunicationAction, + analyze_communication: executeAnalyzeCommunicationAction, + link: executeLinkAction, + diagnose: executeDiagnoseAction, + summarize: executeSummarizeAction, + diff: executeDiffAction, + diff_files: executeDiffFilesAction, + diff_git: executeDiffGitAction, + reality: executeRealityAction, + pipeline: executePipelineAction, + compare_workspace: executeCompareWorkspaceAction, + propose_todo: executeProposeTodoAction, + render_todo: executeRenderTodoAction, + apply_todo: executeApplyTodoAction, + propose_code_change: executeProposeCodeChangeAction, + render_code_change: executeRenderCodeChangeAction, + propose_source_patch: executeProposeSourcePatchAction, + apply_source_patch: executeApplySourcePatchAction, + evaluate_code_change: executeEvaluateCodeChangeAction, + close_code_change: executeCloseCodeChangeAction, +}; + export async function executeAction(action: T2CAction, input: Record, config: T2CConfig): Promise { const root = await resolveRoot(input.root, config); - switch (action) { - case 'extract_nl': - return executeExtractNlAction(input, root, config); - case 'extract_git': - return executeExtractGitAction(root, input, config); - case 'extract_ast': - return executeExtractAstAction(root, config); - case 'extract_config': - return executeExtractConfigAction(root, config); - case 'extract_markdown': - return executeExtractMarkdownAction(input, root, config); - case 'extract_docs': - return executeExtractDocsAction(input, root, config); - case 'extract_communication': - return executeExtractCommunicationAction(input, root, config); - case 'analyze_communication': - return executeAnalyzeCommunicationAction(input, root, config); - case 'link': - return executeLinkAction(input, root, config); - case 'diagnose': - return executeDiagnoseAction(input); - case 'summarize': - return executeSummarizeAction(input, root, config); - case 'propose_todo': - return executeProposeTodoAction(input, root, config); - case 'render_todo': - return executeRenderTodoAction(input, root, config); - case 'apply_todo': - return executeApplyTodoAction(input, root, config); - case 'propose_code_change': - return executeProposeCodeChangeAction(input, root, config); - case 'render_code_change': - return executeRenderCodeChangeAction(input, root, config); - case 'propose_source_patch': - return executeProposeSourcePatchAction(input, root, config); - case 'apply_source_patch': - return executeApplySourcePatchAction(input, root, config); - case 'evaluate_code_change': - return executeEvaluateCodeChangeAction(input, root, config); - case 'close_code_change': - return executeCloseCodeChangeAction(input, root, config); - case 'diff': - return executeDiffAction(input, root, config); - case 'diff_files': - return executeDiffFilesAction(input, root, config); - case 'diff_git': - return executeDiffGitAction(input, root, config); - case 'reality': - return executeRealityAction(input, config); - case 'pipeline': - return executePipelineAction(input, root, config); - case 'compare_workspace': - return executeCompareWorkspaceAction(input, root, config); - } + const handler = ACTION_HANDLERS[action]; + return handler(input, root, config); } async function executeExtractNlAction(input: Record, root: string, config: T2CConfig): Promise { @@ -137,15 +116,15 @@ async function executeExtractNlAction(input: Record, root: stri ); } -function executeExtractGitAction(root: string, input: Record, config: T2CConfig): Promise { +function executeExtractGitAction(input: Record, root: string, config: T2CConfig): Promise { return extractGitIntent({ root, count: numberValue(input.count, config.gitCommitCount, 1, 100) }, config); } -function executeExtractAstAction(root: string, config: T2CConfig): Promise { +function executeExtractAstAction(_input: Record, root: string, config: T2CConfig): Promise { return extractAstIntent({ root }, config); } -function executeExtractConfigAction(root: string, config: T2CConfig): Promise { +function executeExtractConfigAction(_input: Record, root: string, config: T2CConfig): Promise { return extractConfigurationIntent(root, config); } @@ -523,7 +502,7 @@ async function executeDiffFilesAction(input: Record, root: stri return withTextDiffViews([diff], input); } -async function executeDiffGitAction(input: Record, root: string): Promise { +async function executeDiffGitAction(input: Record, root: string, _config: T2CConfig): Promise { const result = await collectGitDiff({ root, revision: stringValue(input.revision, 'HEAD'), @@ -534,7 +513,7 @@ async function executeDiffGitAction(input: Record, root: string return { ...withTextDiffViews(result.diffs, input), revision: result.revision, staged: result.staged, warnings: result.warnings }; } -function executeRealityAction(input: Record, config: T2CConfig): unknown { +function executeRealityAction(_input: Record, _root: string, config: T2CConfig): unknown { const graph = objectValue(input.graph, 'graph'); const diagnostics = input.diagnostics ? objectValue(input.diagnostics, 'diagnostics') From f118807fbe403b8769fb2061e5a62ccd977210be Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 10:54:43 +0200 Subject: [PATCH 12/43] refactor: split proposeCodeChangePlans into focused helpers --- .../implementation-helpers.ts | 178 +++++++++++------- 1 file changed, 114 insertions(+), 64 deletions(-) diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts index 8d6f705..d93ba23 100644 --- a/src/synthesis/code-change-plan/implementation-helpers.ts +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -109,79 +109,23 @@ export interface CloseCodeChangesOptions { export function proposeCodeChangePlans(options: ProposeCodeChangePlansOptions): ProposeCodeChangePlansResult { assertIntentGraph(options.graph); assertConclusions([], { graph: options.graph, diagnostics: options.diagnostics }); - const generatedAt = options.generatedAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(generatedAt))) throw new Error('generatedAt must be an ISO date-time'); - const maxPlans = options.maxPlans ?? 50; - if (!Number.isInteger(maxPlans) || maxPlans < 1 || maxPlans > 500) { - throw new Error('maxPlans must be an integer between 1 and 500'); - } - const conclusions = options.conclusions ?? []; - const proposals = options.proposals ?? []; - const recordsById = new Map(options.graph.records.map((record) => [record.id, record])); - const proposalsByDiagnostic = indexProposalsByDiagnostic(proposals); - const conclusionsByDiagnostic = indexConclusionsByDiagnostic(conclusions); - - const candidates = options.diagnostics.diagnostics - .filter((diagnostic) => IMPLEMENTATION_DIAGNOSTIC_CODES.has(diagnostic.code)) - // A released CHANGELOG entry is an audit signal; an open TODO is an - // explicit request for work. With a bounded plan set, sorting only by - // content id allowed historical release notes to consume every slot and - // hide the repository's actual backlog from autonomous executors. - .sort((left, right) => implementationDiagnosticRank(left) - - implementationDiagnosticRank(right) || left.id.localeCompare(right.id)); + const generatedAt = parseIsoDateTime(options.generatedAt); + const maxPlans = parseMaxPlans(options.maxPlans); + const context = buildPlanContext(options); + const candidates = collectImplementationDiagnostics(options.diagnostics); const plans: CodeChangePlan[] = []; for (const diagnostic of candidates) { if (plans.length >= maxPlans) break; - const relatedRecords = diagnostic.recordIds - .map((id) => recordsById.get(id)) - .filter((record): record is IntentRecord => Boolean(record)); - if (!relatedRecords.length) continue; - - const matchingProposals = proposalsByDiagnostic.get(diagnostic.id) ?? []; - const matchingConclusions = conclusionsByDiagnostic.get(diagnostic.id) ?? []; - const target = collectTarget(relatedRecords, matchingProposals); - const changes = buildChanges(target, relatedRecords, diagnostic, options.pathExists); - if (!changes.length) continue; - - const generation = deterministicGeneration(generatedAt, 't2c/code-change-plan'); - const evidence = { - graphFingerprint: options.graph.fingerprint, - recordIds: uniqueSorted(relatedRecords.map((record) => record.id)), - diagnosticIds: [diagnostic.id], - conclusionIds: uniqueSorted(matchingConclusions.map((item) => item.id)), - proposalIds: uniqueSorted(matchingProposals.map((item) => item.id)), - }; - const semantic = { - title: titleFor(diagnostic, relatedRecords), - description: descriptionFor(diagnostic, relatedRecords, target), - priority: priorityFor(diagnostic), - target, - acceptanceCriteria: acceptanceCriteriaFor(diagnostic, target), - changes, - risk: riskFor(diagnostic, changes), - rollback: rollbackFor(changes), - evidence, - }; - const planHash = createCodeChangePlanHash(semantic); - const plan: CodeChangePlan = { - schemaVersion: 't2c.code-change-plan/v1', - id: createCodeChangePlanId(semantic), - planHash, - status: 'proposed', - createdAt: generatedAt, - ...semantic, - confidence: confidenceFor(diagnostic, matchingProposals), - generation, - }; - plans.push(plan); + const plan = createPlanForDiagnostic(diagnostic, context, generatedAt); + if (plan) plans.push(plan); } assertCodeChangePlans(plans, { graph: options.graph, diagnostics: options.diagnostics, - conclusions, - proposals, + conclusions: context.conclusions, + proposals: context.proposals, }); return { @@ -194,6 +138,112 @@ export function proposeCodeChangePlans(options: ProposeCodeChangePlansOptions): }; } +function parseIsoDateTime(value?: string): string { + const generatedAt = value ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(generatedAt))) { + throw new Error('generatedAt must be an ISO date-time'); + } + return generatedAt; +} + +function parseMaxPlans(value: number | undefined): number { + const maxPlans = value ?? 50; + if (!Number.isInteger(maxPlans) || maxPlans < 1 || maxPlans > 500) { + throw new Error('maxPlans must be an integer between 1 and 500'); + } + return maxPlans; +} + +interface PlanContext { + graph: IntentGraph; + recordsById: Map; + proposalsByDiagnostic: Map; + conclusionsByDiagnostic: Map; + conclusions: Conclusion[]; + proposals: TodoProposal[]; + pathExists?: (relativePath: string) => boolean; +} + +function buildPlanContext(options: ProposeCodeChangePlansOptions): PlanContext { + const conclusions = options.conclusions ?? []; + const proposals = options.proposals ?? []; + return { + graph: options.graph, + recordsById: new Map(options.graph.records.map((record) => [record.id, record])), + proposalsByDiagnostic: indexProposalsByDiagnostic(proposals), + conclusionsByDiagnostic: indexConclusionsByDiagnostic(conclusions), + conclusions, + proposals, + pathExists: options.pathExists, + }; +} + +function collectImplementationDiagnostics(report: DiagnosticReport): Diagnostic[] { + return report.diagnostics + .filter((diagnostic) => IMPLEMENTATION_DIAGNOSTIC_CODES.has(diagnostic.code)) + // A released CHANGELOG entry is an audit signal; an open TODO is an + // explicit request for work. With a bounded plan set, sorting only by + // content id allowed historical release notes to consume every slot and + // hide the repository's actual backlog from autonomous executors. + .sort((left, right) => implementationDiagnosticRank(left) + - implementationDiagnosticRank(right) || left.id.localeCompare(right.id)); +} + +function findRelatedRecords( + diagnostic: Diagnostic, + recordsById: Map, +): IntentRecord[] { + return diagnostic.recordIds + .map((id) => recordsById.get(id)) + .filter((record): record is IntentRecord => Boolean(record)); +} + +function createPlanForDiagnostic( + diagnostic: Diagnostic, + context: PlanContext, + generatedAt: string, +): CodeChangePlan | null { + const relatedRecords = findRelatedRecords(diagnostic, context.recordsById); + if (!relatedRecords.length) return null; + + const matchingProposals = context.proposalsByDiagnostic.get(diagnostic.id) ?? []; + const matchingConclusions = context.conclusionsByDiagnostic.get(diagnostic.id) ?? []; + const target = collectTarget(relatedRecords, matchingProposals); + const changes = buildChanges(target, relatedRecords, diagnostic, context.pathExists); + if (!changes.length) return null; + + const generation = deterministicGeneration(generatedAt, 't2c/code-change-plan'); + const evidence = { + graphFingerprint: context.graph.fingerprint, + recordIds: uniqueSorted(relatedRecords.map((record) => record.id)), + diagnosticIds: [diagnostic.id], + conclusionIds: uniqueSorted(matchingConclusions.map((item) => item.id)), + proposalIds: uniqueSorted(matchingProposals.map((item) => item.id)), + }; + const semantic = { + title: titleFor(diagnostic, relatedRecords), + description: descriptionFor(diagnostic, relatedRecords, target), + priority: priorityFor(diagnostic), + target, + acceptanceCriteria: acceptanceCriteriaFor(diagnostic, target), + changes, + risk: riskFor(diagnostic, changes), + rollback: rollbackFor(changes), + evidence, + }; + const planHash = createCodeChangePlanHash(semantic); + return { + schemaVersion: 't2c.code-change-plan/v1', + id: createCodeChangePlanId(semantic), + planHash, + status: 'proposed', + createdAt: generatedAt, + ...semantic, + confidence: confidenceFor(diagnostic, matchingProposals), + generation, + }; +} + /** * Build the repository probe for {@link ProposeCodeChangePlansOptions.pathExists}. * From fc5f055331ad9cee46bf591ebb0262303330f191 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 11:07:58 +0200 Subject: [PATCH 13/43] refactor: split source patch set validation helpers --- .../implementation-helpers.ts | 420 ++++++++++++------ 1 file changed, 288 insertions(+), 132 deletions(-) diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts index d93ba23..85dfbd2 100644 --- a/src/synthesis/code-change-plan/implementation-helpers.ts +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -1004,11 +1004,25 @@ export function assertCodeChangeSourcePatchSet( plans?: CodeChangePlan[], ): asserts value is CodeChangeSourcePatchSet { const set = assertSourcePatchSetObject(value); + const context = createSourcePatchSetValidationContext(plans); validateSourcePatchSetSchema(set); - validateSourcePatchSetPatches(set, plans); + validateSourcePatchSetPatches(set, context); validateSourcePatchSetGeneration(set); } +interface SourcePatchSetValidationContext { + plansById: Map; + expectedPlanIds: string[] | null; +} + +function createSourcePatchSetValidationContext(plans?: CodeChangePlan[]): SourcePatchSetValidationContext { + const expectedPlanIds = plans?.map((plan) => plan.id) ?? null; + return { + plansById: new Map((plans ?? []).map((plan) => [plan.id, plan])), + expectedPlanIds, + }; +} + function assertSourcePatchObject(value: unknown, objectLabel: string): Record { if (!value || typeof value !== 'object' || Array.isArray(value)) { throw new Error(objectLabel); @@ -1040,19 +1054,52 @@ function validateSourcePatchSetSchema(set: CodeChangeSourcePatchSet): void { if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); } -function validateSourcePatchSetPatches(set: CodeChangeSourcePatchSet, plans?: CodeChangePlan[]): void { - const plansById = new Map((plans ?? []).map((plan) => [plan.id, plan])); +function validateSourcePatchSetPatches( + set: CodeChangeSourcePatchSet, + context: SourcePatchSetValidationContext, +): void { const patchIds = new Set(); for (const patch of set.patches) { - const expectedPlan = plans ? plansById.get(patch.planId) : undefined; - assertCodeChangeSourcePatch(patch, expectedPlan); - if (patch.graphFingerprint !== set.graphFingerprint) { - throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); - } - if (patchIds.has(patch.id)) throw new Error(`Duplicate source patch id: ${patch.id}`); - patchIds.add(patch.id); + validateSetPatchAndTrackDuplicates(set, patch, context, patchIds); + } + validateSetPatchesPlanCoverage(set, context.expectedPlanIds); +} + +function validateSetPatchAndTrackDuplicates( + set: CodeChangeSourcePatchSet, + patch: CodeChangeSourcePatch, + context: SourcePatchSetValidationContext, + patchIds: Set, +): void { + const expectedPlan = context.plansById.get(patch.planId); + assertCodeChangeSourcePatch(patch, expectedPlan); + validateSetPatchGraphFingerprint(set, patch); + assertUniqueSetPatchId(patchIds, patch.id); + patchIds.add(patch.id); +} + +function validateSetPatchGraphFingerprint( + set: CodeChangeSourcePatchSet, + patch: CodeChangeSourcePatch, +): void { + if (patch.graphFingerprint !== set.graphFingerprint) { + throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); } - if (plans) exactSourcePatchSet(set.patches.map((patch) => patch.planId), plans.map((plan) => plan.id), 'planIds'); +} + +function assertUniqueSetPatchId( + patchIds: Set, + patchId: string, +): void { + if (patchIds.has(patchId)) throw new Error(`Duplicate source patch id: ${patchId}`); +} + +function validateSetPatchesPlanCoverage( + set: CodeChangeSourcePatchSet, + expectedPlanIds: string[] | null, +): void { + if (!expectedPlanIds) return; + exactSourcePatchSet(set.patches.map((patch) => patch.planId), expectedPlanIds, 'planIds'); } function validateSourcePatchSetGeneration(set: CodeChangeSourcePatchSet): void { @@ -1152,6 +1199,19 @@ export interface ApplyCodeChangeSourcePatchResult { receipt: CodeChangeSourceApplyReceipt; } +interface NormalizedApplyCodeChangeSourcePatchRequest { + root: string; + patch: CodeChangeSourcePatch; + approval: CodeChangeSourcePatchApproval; + receiptPath: string; + now?: Date; +} + +interface SourcePatchApplyLock { + path: string; + lock: Awaited>; +} + /** * Apply a fully-diffed source patch after explicit hash approval. * @@ -1162,6 +1222,31 @@ export interface ApplyCodeChangeSourcePatchResult { export async function applyCodeChangeSourcePatch( options: ApplyCodeChangeSourcePatchOptions, ): Promise { + const request = assertPatchApplicationRequest(options); + const root = path.resolve(request.root); + const receiptPath = await assertPathWithinRoot(root, path.resolve(request.receiptPath)); + await ensureDir(path.dirname(receiptPath)); + const lock = await acquireApplyLock(receiptPath); + try { + if (await pathExists(receiptPath)) { + const existing = await readJson(receiptPath, 1024 * 1024); + await assertExistingSourceReceipt(existing, request.patch, root); + return { applied: false, idempotent: true, receipt: existing }; + } + + const prepared = await prepareSourceEdits(request.patch, root, receiptPath); + const now = (request.now ?? new Date()).toISOString(); + const receipt = await applyPreparedEdits(prepared, request.patch, request.approval.actor.trim(), now, receiptPath); + return { applied: true, idempotent: false, receipt }; + } finally { + await lock.lock.close(); + await fs.unlink(lock.path).catch(() => undefined); + } +} + +function assertPatchApplicationRequest( + options: ApplyCodeChangeSourcePatchOptions, +): NormalizedApplyCodeChangeSourcePatchRequest { assertCodeChangeSourcePatch(options.patch); if (!options.approval?.actor?.trim()) throw new Error('Explicit source patch approval actor is required'); if (options.approval.patchHash !== options.patch.patchHash) { @@ -1172,103 +1257,135 @@ export async function applyCodeChangeSourcePatch( throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); } } + return { + root: options.root, + patch: options.patch, + approval: options.approval, + receiptPath: options.receiptPath, + now: options.now, + }; +} - const root = path.resolve(options.root); - const receiptPath = await assertPathWithinRoot(root, path.resolve(options.receiptPath)); +async function acquireApplyLock(receiptPath: string): Promise { const lockPath = `${receiptPath}.t2c-apply.lock`; - await ensureDir(path.dirname(receiptPath)); - let lock: Awaited> | null = null; try { - lock = await fs.open(lockPath, 'wx'); + const lock = await fs.open(lockPath, 'wx'); + return { path: lockPath, lock }; } catch (error) { if ((error as NodeJS.ErrnoException).code === 'EEXIST') { throw new Error('Another source patch apply operation is in progress'); } throw error; } +} - try { - if (await pathExists(receiptPath)) { - const existing = await readJson(receiptPath, 1024 * 1024); - await assertExistingSourceReceipt(existing, options.patch, root); - return { applied: false, idempotent: true, receipt: existing }; +async function prepareSourceEdits( + patch: CodeChangeSourcePatch, + root: string, + receiptPath: string, +): Promise { + const prepared: PreparedSourceEdit[] = []; + for (const edit of patch.edits) { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + if (absolute === receiptPath) { + throw new Error(`Source patch target collides with its receipt path: ${relative}`); } + const exists = await pathExists(absolute); + if (exists && (await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Refusing to apply through a symlink: ${relative}`); + } + validatePatchTargetForEdit(edit.action, relative, exists, edit.unifiedDiff!); + const before = exists ? await readText(absolute, 16 * 1024 * 1024) : ''; + const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, relative); + if (edit.action === 'delete' && after !== '') { + throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); + } + prepared.push({ relative, absolute, action: edit.action, before, after, existed: exists }); + } + return prepared; +} - const prepared: PreparedSourceEdit[] = []; - for (const edit of options.patch.edits) { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - if (absolute === receiptPath) { - throw new Error(`Source patch target collides with its receipt path: ${relative}`); - } - const exists = await pathExists(absolute); - if (exists && (await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Refusing to apply through a symlink: ${relative}`); - } - if (edit.action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); - if (edit.action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); - if (edit.action === 'modify' && !exists) { - const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(edit.unifiedDiff!) - || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(edit.unifiedDiff!); - if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); - } - const before = exists ? await readText(absolute, 16 * 1024 * 1024) : ''; - const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, relative); - if (edit.action === 'delete' && after !== '') { - throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); - } - prepared.push({ relative, absolute, action: edit.action, before, after, existed: exists }); +function validatePatchTargetForEdit( + action: CodeChangeFileAction, + relative: string, + exists: boolean, + unifiedDiff: string, +): void { + if (action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); + if (action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); + if (action === 'modify' && !exists) { + const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(unifiedDiff) + || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(unifiedDiff); + if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); + } +} + +async function applyPreparedEdits( + prepared: PreparedSourceEdit[], + patch: CodeChangeSourcePatch, + approvedBy: string, + now: string, + receiptPath: string, +): Promise { + const changed: PreparedSourceEdit[] = []; + try { + for (const edit of prepared) { + if (edit.action === 'delete') await fs.unlink(edit.absolute); + else await atomicWriteRaw(edit.absolute, edit.after); + changed.push(edit); } + const receipt = buildPatchApplyReceipt(prepared, patch, approvedBy, now); + assertSourceApplyReceipt(receipt, patch); + // The receipt is part of the transaction: without it a retry could apply + // the same approved patch again. Roll files back if persisting it fails. + await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); + return receipt; + } catch (error) { + const rollbackErrors = await rollbackPreparedEdits(changed); + if (rollbackErrors.length) { + throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); + } + throw error; + } +} + +function buildPatchApplyReceipt( + prepared: PreparedSourceEdit[], + patch: CodeChangeSourcePatch, + approvedBy: string, + now: string, +): CodeChangeSourceApplyReceipt { + const fileHashesAfter = Object.fromEntries(prepared + .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) + .sort(([left], [right]) => left.localeCompare(right))); + return { + schemaVersion: 't2c.code-change-source-apply-receipt/v1', + patchId: patch.id, + patchHash: patch.patchHash, + planId: patch.planId, + approvedBy, + approvedAt: now, + appliedAt: now, + appliedPaths: prepared.map((edit) => edit.relative).sort(), + fileHashesAfter, + generation: deterministicGeneration(now, 't2c/code-change-source-apply'), + }; +} - const changed: PreparedSourceEdit[] = []; +async function rollbackPreparedEdits(changes: PreparedSourceEdit[]): Promise { + const rollbackErrors: string[] = []; + for (const edit of [...changes].reverse()) { try { - for (const edit of prepared) { - if (edit.action === 'delete') await fs.unlink(edit.absolute); - else await atomicWriteRaw(edit.absolute, edit.after); - changed.push(edit); - } - const now = (options.now ?? new Date()).toISOString(); - const fileHashesAfter = Object.fromEntries(prepared - .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) - .sort(([left], [right]) => left.localeCompare(right))); - const receipt: CodeChangeSourceApplyReceipt = { - schemaVersion: 't2c.code-change-source-apply-receipt/v1', - patchId: options.patch.id, - patchHash: options.patch.patchHash, - planId: options.patch.planId, - approvedBy: options.approval.actor.trim(), - approvedAt: now, - appliedAt: now, - appliedPaths: prepared.map((edit) => edit.relative).sort(), - fileHashesAfter, - generation: deterministicGeneration(now, 't2c/code-change-source-apply'), - }; - assertSourceApplyReceipt(receipt, options.patch); - // The receipt is part of the transaction: without it a retry could apply - // the same approved patch again. Roll files back if persisting it fails. - await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); - return { applied: true, idempotent: false, receipt }; - } catch (error) { - const rollbackErrors: string[] = []; - for (const edit of [...changed].reverse()) { - try { - if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); - else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { - if (failure.code !== 'ENOENT') throw failure; - }); - } catch (rollbackError) { - rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); - } - } - if (rollbackErrors.length) { - throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); - } - throw error; + if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); + else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { + if (failure.code !== 'ENOENT') throw failure; + }); + } catch (rollbackError) { + rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); } - } finally { - await lock.close(); - await fs.unlink(lockPath).catch(() => undefined); } + return rollbackErrors; } interface PreparedSourceEdit { @@ -1351,13 +1468,28 @@ async function atomicWriteRaw(target: string, content: string): Promise { * Supports standard hunks with space/+/− prefixes. Throws on context mismatch. */ export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: string): string { - const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); const baseLines = splitKeep(base); + const hunks = parseUnifiedDiffIntoHunks(diff, expectedPath); + const output = applyUnifiedDiffHunks(baseLines, expectedPath, hunks); + // Reconstruct text. Files without a trailing newline end without an empty last segment. + if (base.endsWith('\n') || output.length === 0) return `${output.join('\n')}${output.length ? '\n' : ''}`; + return output.join('\n'); +} + +interface ParsedUnifiedDiffHunk { + oldStart: number; + oldCount: number; + newCount: number; + lines: string[]; +} + +function parseUnifiedDiffIntoHunks(diff: string, expectedPath: string): ParsedUnifiedDiffHunk[] { + const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); const diffLines = normalizedDiff.split('\n'); // Drop trailing empty element only if the original split introduced it // without a final newline — normalize by working on lines as split. - const hunks: Array<{ oldStart: number; oldCount: number; newCount: number; lines: string[] }> = []; - let current: { oldStart: number; oldCount: number; newCount: number; lines: string[] } | null = null; + const hunks: ParsedUnifiedDiffHunk[] = []; + let current: ParsedUnifiedDiffHunk | null = null; for (const line of diffLines) { if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { continue; @@ -1383,54 +1515,78 @@ export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: } if (current) hunks.push(current); if (!hunks.length) throw new Error(`Unified diff for ${expectedPath} contains no hunks`); + return hunks; +} - let cursor = 0; +interface UnifiedDiffCursor { + position: number; +} + +function applyUnifiedDiffHunks( + baseLines: string[], + expectedPath: string, + hunks: ParsedUnifiedDiffHunk[], +): string[] { + const cursor: UnifiedDiffCursor = { position: 0 }; const output: string[] = []; for (const hunk of hunks) { const oldIndex = Math.max(0, hunk.oldStart - 1); - if (oldIndex < cursor) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); - const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; - const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; - if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { - throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); - } - while (cursor < oldIndex) { - if (cursor >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); - output.push(baseLines[cursor]!); - cursor += 1; + if (oldIndex < cursor.position) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); + validateHunkCounts(expectedPath, hunk); + + while (cursor.position < oldIndex) { + if (cursor.position >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); + output.push(baseLines[cursor.position]!); + cursor.position += 1; } for (const line of hunk.lines) { if (line.startsWith('\\')) continue; // "\ No newline at end of file" - const mark = line[0]; - const body = line.slice(1); - if (mark === ' ') { - if (baseLines[cursor] !== body) { - throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor + 1}`); - } - output.push(baseLines[cursor]!); - cursor += 1; - } else if (mark === '-') { - if (baseLines[cursor] !== body) { - throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor + 1}`); - } - cursor += 1; - } else if (mark === '+') { - output.push(body); - } else if (line === '') { - // empty line inside hunk without prefix is invalid in strict unified diffs - throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); - } else { - throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); - } + applyUnifiedDiffLine(expectedPath, line, cursor, baseLines, output); } } - while (cursor < baseLines.length) { - output.push(baseLines[cursor]!); - cursor += 1; + while (cursor.position < baseLines.length) { + output.push(baseLines[cursor.position]!); + cursor.position += 1; + } + return output; +} + +function validateHunkCounts(expectedPath: string, hunk: ParsedUnifiedDiffHunk): void { + const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; + const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; + if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { + throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); + } +} + +function applyUnifiedDiffLine( + expectedPath: string, + line: string, + cursor: UnifiedDiffCursor, + baseLines: string[], + output: string[], +): void { + const mark = line[0]; + const body = line.slice(1); + if (mark === ' ') { + if (baseLines[cursor.position] !== body) { + throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor.position + 1}`); + } + output.push(baseLines[cursor.position]!); + cursor.position += 1; + } else if (mark === '-') { + if (baseLines[cursor.position] !== body) { + throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor.position + 1}`); + } + cursor.position += 1; + } else if (mark === '+') { + output.push(body); + } else if (line === '') { + // empty line inside hunk without prefix is invalid in strict unified diffs + throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); + } else { + throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); } - // Reconstruct text. Files without a trailing newline end without an empty last segment. - if (base.endsWith('\n') || output.length === 0) return `${output.join('\n')}${output.length ? '\n' : ''}`; - return output.join('\n'); } function splitKeep(text: string): string[] { From bd72a63132d072ded8b5f536fa890890b2e8e12f Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 11:08:25 +0200 Subject: [PATCH 14/43] refactor: split code-change source patch builders --- .../implementation-helpers.ts | 180 ++++++++++++------ 1 file changed, 126 insertions(+), 54 deletions(-) diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts index 85dfbd2..054daa6 100644 --- a/src/synthesis/code-change-plan/implementation-helpers.ts +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -761,7 +761,32 @@ export interface CreateCodeChangeSourcePatchOptions { export function createCodeChangeSourcePatch( options: CreateCodeChangeSourcePatchOptions, ): CodeChangeSourcePatch { - const plan = options.plan; + const context = buildSourcePatchContext(options); + const edits = buildSourcePatchEdits(context); + const semantic = buildSourcePatchSemantic(context, edits); + const patchHash = createCodeChangeSourcePatchHash(semantic); + const patch: CodeChangeSourcePatch = { + schemaVersion: 't2c.code-change-source-patch/v1', + id: createCodeChangeSourcePatchId(semantic), + patchHash, + status: 'proposed', + createdAt: context.createdAt, + ...semantic, + generation: deterministicGeneration(context.createdAt, 't2c/code-change-source-patch'), + }; + assertCodeChangeSourcePatch(patch, context.plan); + return patch; +} + +interface SourcePatchCreationContext { + plan: CodeChangePlan; + createdAt: string; + allowedPaths: Set; + diffs: Record; +} + +function buildSourcePatchContext(options: CreateCodeChangeSourcePatchOptions): SourcePatchCreationContext { + const { plan, unifiedDiffs = {} } = options; const graphFingerprint = plan?.evidence?.graphFingerprint; assertCodeChangePlansForReview( [plan], @@ -769,54 +794,68 @@ export function createCodeChangeSourcePatch( ); const createdAt = options.createdAt ?? new Date().toISOString(); if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); - const allowed = new Set(plan.target.paths.map((path) => path.replace(/\\/g, '/'))); - const diffs = options.unifiedDiffs ?? {}; - for (const path of Object.keys(diffs)) { - const normalized = path.replace(/\\/g, '/'); - if (!allowed.has(normalized)) { - throw new Error(`Unified diff path ${normalized} is not declared by plan ${plan.id}`); + const allowedPaths = collectPlanTargetPaths(plan.target.paths); + validateUnifiedDiffsBelongToPlan(plan.id, unifiedDiffs, allowedPaths); + return { plan, createdAt, allowedPaths, diffs: unifiedDiffs }; +} + +function collectPlanTargetPaths(paths: string[]): Set { + return new Set(paths.map((item) => item.replace(/\\/g, '/'))); +} + +function validateUnifiedDiffsBelongToPlan( + planId: string, + diffs: Record, + allowedPaths: Set, +): void { + for (const diffPath of Object.keys(diffs)) { + const normalizedPath = diffPath.replace(/\\/g, '/'); + if (!allowedPaths.has(normalizedPath)) { + throw new Error(`Unified diff path ${normalizedPath} is not declared by plan ${planId}`); } } - const edits: CodeChangeSourceEdit[] = [...plan.changes] - .map((change) => { - const path = change.path.replace(/\\/g, '/'); - if (!allowed.has(path)) { - throw new Error(`Edit path ${path} is not present in plan target.paths`); - } - const rawDiff = diffs[path]; - const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); - return { - path, - action: change.action, - symbols: uniqueSorted(change.symbols), - instruction: instructionFor(change, plan), - unifiedDiff, - }; - }) +} + +function buildSourcePatchEdits(context: SourcePatchCreationContext): CodeChangeSourceEdit[] { + const edits: CodeChangeSourceEdit[] = context.plan.changes + .map((change) => buildSourcePatchEdit(context, change)) .sort((left, right) => left.path.localeCompare(right.path) || left.action.localeCompare(right.action)); - if (!edits.length) throw new Error(`Plan ${plan.id} has no editable paths`); + if (!edits.length) throw new Error(`Plan ${context.plan.id} has no editable paths`); + return edits; +} - const semantic = { - planId: plan.id, - planHash: plan.planHash, - graphFingerprint: plan.evidence.graphFingerprint, - diagnosticIds: uniqueSorted(plan.evidence.diagnosticIds), - recordIds: uniqueSorted(plan.evidence.recordIds), - edits, - acceptanceCriteria: uniqueSorted(plan.acceptanceCriteria), +function buildSourcePatchEdit( + context: SourcePatchCreationContext, + change: CodeChangeFile, +): CodeChangeSourceEdit { + const path = change.path.replace(/\\/g, '/'); + if (!context.allowedPaths.has(path)) { + throw new Error(`Edit path ${path} is not present in plan target.paths`); + } + const rawDiff = context.diffs[path]; + const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); + return { + path, + action: change.action, + symbols: uniqueSorted(change.symbols), + instruction: instructionFor(change, context.plan), + unifiedDiff, }; - const patchHash = createCodeChangeSourcePatchHash(semantic); - const patch: CodeChangeSourcePatch = { - schemaVersion: 't2c.code-change-source-patch/v1', - id: createCodeChangeSourcePatchId(semantic), - patchHash, - status: 'proposed', - createdAt, - ...semantic, - generation: deterministicGeneration(createdAt, 't2c/code-change-source-patch'), +} + +function buildSourcePatchSemantic( + context: SourcePatchCreationContext, + edits: CodeChangeSourceEdit[], +): Omit { + return { + planId: context.plan.id, + planHash: context.plan.planHash, + graphFingerprint: context.plan.evidence.graphFingerprint, + diagnosticIds: uniqueSorted(context.plan.evidence.diagnosticIds), + recordIds: uniqueSorted(context.plan.evidence.recordIds), + edits, + acceptanceCriteria: uniqueSorted(context.plan.acceptanceCriteria), }; - assertCodeChangeSourcePatch(patch, plan); - return patch; } export function createCodeChangeSourcePatchSet(options: { @@ -825,29 +864,62 @@ export function createCodeChangeSourcePatchSet(options: { unifiedDiffsByPlanId?: Record>; generatedAt?: string; }): CodeChangeSourcePatchSet { + const context = normalizePatchSetOptions(options); + const patches = buildPatchesForSet(context); + const result = buildSourcePatchSet(context, patches); + assertCodeChangeSourcePatchSet(result, options.plans); + return result; +} + +interface SourcePatchSetBuildContext { + plans: CodeChangePlan[]; + graphFingerprint: string; + generatedAt: string; + unifiedDiffsByPlanId: Record>; +} + +function normalizePatchSetOptions( + options: { + plans: CodeChangePlan[]; + graphFingerprint: string; + unifiedDiffsByPlanId?: Record>; + generatedAt?: string; + }, +): SourcePatchSetBuildContext { if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { throw new Error('graphFingerprint must be a SHA-256 hex digest'); } assertCodeChangePlansForReview(options.plans, options.graphFingerprint); const generatedAt = options.generatedAt ?? new Date().toISOString(); - const patches = [...options.plans] + return { + plans: options.plans, + graphFingerprint: options.graphFingerprint, + generatedAt, + unifiedDiffsByPlanId: options.unifiedDiffsByPlanId ?? {}, + }; +} + +function buildPatchesForSet(context: SourcePatchSetBuildContext): CodeChangeSourcePatch[] { + return [...context.plans] .sort((left, right) => left.id.localeCompare(right.id)) .map((plan) => createCodeChangeSourcePatch({ plan, - createdAt: generatedAt, - ...(options.unifiedDiffsByPlanId?.[plan.id] - ? { unifiedDiffs: options.unifiedDiffsByPlanId[plan.id] } - : {}), + createdAt: context.generatedAt, + ...(context.unifiedDiffsByPlanId[plan.id] ? { unifiedDiffs: context.unifiedDiffsByPlanId[plan.id] } : {}), })); - const result: CodeChangeSourcePatchSet = { +} + +function buildSourcePatchSet( + context: SourcePatchSetBuildContext, + patches: CodeChangeSourcePatch[], +): CodeChangeSourcePatchSet { + return { schemaVersion: 't2c.code-change-source-patch-set/v1', - generatedAt, - graphFingerprint: options.graphFingerprint, + generatedAt: context.generatedAt, + graphFingerprint: context.graphFingerprint, patches, - generation: deterministicGeneration(generatedAt, 't2c/code-change-source-patch-set'), + generation: deterministicGeneration(context.generatedAt, 't2c/code-change-source-patch-set'), }; - assertCodeChangeSourcePatchSet(result, options.plans); - return result; } export function assertCodeChangeSourcePatch( From 3487b0f026d5515a4cc1c76ed18c5891d6703e56 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 11:11:24 +0200 Subject: [PATCH 15/43] refactor: split source patch edit and plan binding validation --- .../implementation-helpers.ts | 118 +++++++++++++----- 1 file changed, 86 insertions(+), 32 deletions(-) diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts index 054daa6..29f558b 100644 --- a/src/synthesis/code-change-plan/implementation-helpers.ts +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -991,32 +991,65 @@ function validateSourcePatchIdentifiers(patch: CodeChangeSourcePatch): void { function validateSourcePatchEdits(patch: CodeChangeSourcePatch): Set { const paths = new Set(); for (const edit of patch.edits) { - if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); - exactSourcePatchKeys(edit as unknown as Record, [ - 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', - ], 'Source patch edit'); - const normalizedPath = edit.path?.trim().replace(/\\/g, '/') ?? ''; - if (!normalizedPath || normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..')) { - throw new Error(`Source patch edit path is not a relative repository path: ${normalizedPath}`); - } - if (!['create', 'modify', 'delete'].includes(edit.action)) { - throw new Error(`Source patch edit action is unsupported: ${String(edit.action)}`); - } - if (typeof edit.instruction !== 'string' || !edit.instruction.trim()) { - throw new Error('Source patch edit instruction must be non-blank'); - } - assertSourcePatchStrings(edit.symbols, `edits[${normalizedPath}].symbols`, true); - if (edit.unifiedDiff !== null) { - if (typeof edit.unifiedDiff !== 'string') throw new Error('Source patch unifiedDiff must be string or null'); - normalizeUnifiedDiff(edit.unifiedDiff, normalizedPath); - } - const key = `${normalizedPath}::${edit.action}`; - if (paths.has(key)) throw new Error(`Duplicate source patch edit for ${normalizedPath}`); - paths.add(key); + const editContext = validateSourcePatchEdit(edit, paths); + paths.add(editContext.pathActionKey); } return paths; } +interface SourcePatchEditValidationContext { + pathActionKey: string; +} + +function validateSourcePatchEdit( + edit: CodeChangeSourceEdit, + seen: Set, +): SourcePatchEditValidationContext { + if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); + exactSourcePatchKeys(edit as unknown as Record, [ + 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', + ], 'Source patch edit'); + + const normalizedPath = normalizeSourcePatchEditPath(edit.path); + ensureSourcePatchEditAction(edit.action); + ensureSourcePatchEditInstruction(edit.instruction); + assertSourcePatchStrings(edit.symbols, `edits[${normalizedPath}].symbols`, true); + validateSourcePatchEditDiff(edit.unifiedDiff, normalizedPath); + + const pathActionKey = `${normalizedPath}::${edit.action}`; + if (seen.has(pathActionKey)) throw new Error(`Duplicate source patch edit for ${normalizedPath}`); + return { pathActionKey }; +} + +function normalizeSourcePatchEditPath(pathValue: unknown): string { + const normalizedPath = (typeof pathValue === 'string' ? pathValue.trim() : '').replace(/\\/g, '/'); + if (!normalizedPath || normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..')) { + throw new Error(`Source patch edit path is not a relative repository path: ${normalizedPath}`); + } + return normalizedPath; +} + +function ensureSourcePatchEditAction(action: unknown): void { + if (!['create', 'modify', 'delete'].includes(action as string) || typeof action !== 'string') { + throw new Error(`Source patch edit action is unsupported: ${String(action)}`); + } +} + +function ensureSourcePatchEditInstruction(instruction: unknown): void { + if (typeof instruction !== 'string' || !instruction.trim()) { + throw new Error('Source patch edit instruction must be non-blank'); + } +} + +function validateSourcePatchEditDiff( + unifiedDiff: string | null, + normalizedPath: string, +): void { + if (unifiedDiff === null) return; + if (typeof unifiedDiff !== 'string') throw new Error('Source patch unifiedDiff must be string or null'); + normalizeUnifiedDiff(unifiedDiff, normalizedPath); +} + function validateSourcePatchHashAndId(patch: CodeChangeSourcePatch): void { const expectedHash = createCodeChangeSourcePatchHash(patch); if (patch.patchHash !== expectedHash) { @@ -1042,16 +1075,31 @@ function validateSourcePatchAgainstPlan( plan: CodeChangePlan, editPaths: Set, ): void { - if (patch.planHash !== plan.planHash) { - throw new Error('Source patch is not bound to the supplied plan'); - } + assertSourcePatchPlanBinding(patch, plan); + const expectedChanges = collectExpectedPlanChanges(plan); + validateSourcePatchEditsAgainstPlan(patch, plan, expectedChanges); + validateSourcePatchEvidence(patch, plan, expectedChanges, editPaths); +} + +function assertSourcePatchPlanBinding(patch: CodeChangeSourcePatch, plan: CodeChangePlan): void { + if (patch.planHash !== plan.planHash) throw new Error('Source patch is not bound to the supplied plan'); if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { throw new Error('Source patch graphFingerprint does not match the plan'); } - const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); - const expectedChanges = new Map(plan.changes.map((item) => [ +} + +function collectExpectedPlanChanges(plan: CodeChangePlan): Map { + return new Map(plan.changes.map((item) => [ item.path.replace(/\\/g, '/'), item.action, ])); +} + +function validateSourcePatchEditsAgainstPlan( + patch: CodeChangeSourcePatch, + plan: CodeChangePlan, + expectedChanges: Map, +): void { + const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); for (const edit of patch.edits) { const editPath = edit.path.replace(/\\/g, '/'); if (!allowed.has(editPath)) { @@ -1061,11 +1109,17 @@ function validateSourcePatchAgainstPlan( throw new Error(`Source patch action for ${edit.path} does not match the plan`); } } - exactSourcePatchSet( - [...editPaths].map((item) => item.split('::')[0]), - [...expectedChanges.keys()], - 'edit paths', - ); +} + +function validateSourcePatchEvidence( + patch: CodeChangeSourcePatch, + plan: CodeChangePlan, + expectedChangePaths: Map, + editPaths: Set, +): void { + const actualEditPaths = [...editPaths].map((item) => item.split('::')[0]); + const expectedPaths = [...expectedChangePaths.keys()]; + exactSourcePatchSet(actualEditPaths, expectedPaths, 'edit paths'); exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); From a7b4e1dd4d1da5ab09b1be7804ade458e134ed1a Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 11:40:29 +0200 Subject: [PATCH 16/43] refactor: split implementation-helpers plan acceptance and apply paths --- .../implementation-helpers.ts | 1006 +++++++++++++---- 1 file changed, 761 insertions(+), 245 deletions(-) diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts index 29f558b..4626ce3 100644 --- a/src/synthesis/code-change-plan/implementation-helpers.ts +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -114,26 +114,43 @@ export function proposeCodeChangePlans(options: ProposeCodeChangePlansOptions): const context = buildPlanContext(options); const candidates = collectImplementationDiagnostics(options.diagnostics); - const plans: CodeChangePlan[] = []; - for (const diagnostic of candidates) { - if (plans.length >= maxPlans) break; - const plan = createPlanForDiagnostic(diagnostic, context, generatedAt); - if (plan) plans.push(plan); - } - + const plans = buildPlansForCandidates(candidates, context, generatedAt, maxPlans); assertCodeChangePlans(plans, { graph: options.graph, diagnostics: options.diagnostics, conclusions: context.conclusions, proposals: context.proposals, }); + return buildPlanSetResult(options.graph.fingerprint, generatedAt, candidates.length, plans); +} + +function buildPlansForCandidates( + candidates: Diagnostic[], + context: PlanContext, + generatedAt: string, + maxPlans: number, +): CodeChangePlan[] { + const plans: CodeChangePlan[] = []; + for (const diagnostic of candidates) { + if (plans.length >= maxPlans) break; + const plan = createPlanForDiagnostic(diagnostic, context, generatedAt); + if (plan) plans.push(plan); + } + return plans; +} +function buildPlanSetResult( + graphFingerprint: string, + generatedAt: string, + sourceDiagnosticCount: number, + plans: CodeChangePlan[], +): ProposeCodeChangePlansResult { return { schemaVersion: 't2c.code-change-plan-set/v1', plans, generatedAt, - graphFingerprint: options.graph.fingerprint, - sourceDiagnosticCount: candidates.length, + graphFingerprint, + sourceDiagnosticCount, generation: deterministicGeneration(generatedAt, 't2c/code-change-plan-set'), }; } @@ -212,15 +229,61 @@ function createPlanForDiagnostic( const changes = buildChanges(target, relatedRecords, diagnostic, context.pathExists); if (!changes.length) return null; - const generation = deterministicGeneration(generatedAt, 't2c/code-change-plan'); - const evidence = { - graphFingerprint: context.graph.fingerprint, + const evidence = buildPlanEvidence(context.graph.fingerprint, diagnostic.id, relatedRecords, matchingConclusions, matchingProposals); + const confidence = confidenceForDiagnostic(diagnostic, matchingProposals); + const semantic = buildPlanSemantic(diagnostic, relatedRecords, target, changes, evidence); + return buildPlanResult(generatedAt, confidence, semantic); +} + +function confidenceForDiagnostic( + diagnostic: Diagnostic, + matchingProposals: TodoProposal[], +): number { + return confidenceFor(diagnostic, matchingProposals); +} + +interface CodeChangePlanSemanticDraft { + title: string; + description: string; + priority: TodoPriority; + target: IntentTarget; + acceptanceCriteria: string[]; + changes: CodeChangeFile[]; + risk: CodeChangePlan['risk']; + rollback: string; + evidence: { + graphFingerprint: string; + recordIds: string[]; + diagnosticIds: string[]; + conclusionIds: string[]; + proposalIds: string[]; + }; +} + +function buildPlanEvidence( + graphFingerprint: string, + diagnosticId: string, + relatedRecords: IntentRecord[], + matchingConclusions: Conclusion[], + matchingProposals: TodoProposal[], +): CodeChangePlanSemanticDraft['evidence'] { + return { + graphFingerprint, recordIds: uniqueSorted(relatedRecords.map((record) => record.id)), - diagnosticIds: [diagnostic.id], + diagnosticIds: [diagnosticId], conclusionIds: uniqueSorted(matchingConclusions.map((item) => item.id)), proposalIds: uniqueSorted(matchingProposals.map((item) => item.id)), }; - const semantic = { +} + +function buildPlanSemantic( + diagnostic: Diagnostic, + relatedRecords: IntentRecord[], + target: IntentTarget, + changes: CodeChangeFile[], + evidence: CodeChangePlanSemanticDraft['evidence'], +): CodeChangePlanSemanticDraft { + return { title: titleFor(diagnostic, relatedRecords), description: descriptionFor(diagnostic, relatedRecords, target), priority: priorityFor(diagnostic), @@ -231,16 +294,22 @@ function createPlanForDiagnostic( rollback: rollbackFor(changes), evidence, }; - const planHash = createCodeChangePlanHash(semantic); +} + +function buildPlanResult( + generatedAt: string, + confidence: number, + semantic: CodeChangePlanSemanticDraft, +): CodeChangePlan { return { schemaVersion: 't2c.code-change-plan/v1', id: createCodeChangePlanId(semantic), - planHash, + planHash: createCodeChangePlanHash(semantic), status: 'proposed', createdAt: generatedAt, + confidence, + generation: deterministicGeneration(generatedAt, 't2c/code-change-plan'), ...semantic, - confidence: confidenceFor(diagnostic, matchingProposals), - generation, }; } @@ -271,6 +340,7 @@ function implementationDiagnosticRank(diagnostic: Diagnostic): number { * Diagnostic IDs are content-bound, so a still-open finding on the same * records keeps the same ID. Cleared findings simply disappear. */ + export function evaluateCodeChangeAcceptance( options: EvaluateCodeChangeAcceptanceOptions, ): CodeChangeAcceptance { @@ -279,73 +349,128 @@ export function evaluateCodeChangeAcceptance( assertConclusions([], options.before); assertCodeChangePlanForAcceptance(options.plan, options.before); - const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph( - options.afterGraph, - options.evaluatedAt ?? new Date().toISOString(), - ); + const context = buildAcceptanceContext(options); + const reasons = buildAcceptanceReasons(context.remainingDiagnosticIds, context.newBlockingDiagnosticIds); + const accepted = isAcceptancePassed(context); + appendAcceptanceGateReason(reasons, accepted); + + const acceptance = buildAcceptanceResult(options, context, reasons, accepted); + assertCodeChangeAcceptance(acceptance, { + plan: options.plan, + before: options.before, + after: { graph: options.afterGraph, diagnostics: context.afterDiagnostics }, + }); + return acceptance; +} + +interface AcceptanceContext { + afterDiagnostics: DiagnosticReport; + beforeDiagnosticIds: Set; + afterDiagnosticIds: string[]; + clearedDiagnosticIds: string[]; + remainingDiagnosticIds: string[]; + newBlockingDiagnosticIds: string[]; + evaluatedAt: string; +} + +function buildAcceptanceContext(options: EvaluateCodeChangeAcceptanceOptions): AcceptanceContext { + const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); + const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); - const beforeIds = new Set(options.before.diagnostics.diagnostics.map((item) => item.id)); + const beforeDiagnosticIds = new Set(options.before.diagnostics.diagnostics.map((item) => item.id)); const afterById = new Map(afterDiagnostics.diagnostics.map((item) => [item.id, item])); - const afterIds = [...afterById.keys()].sort(); - const targeted = options.plan.evidence.diagnosticIds; - const clearedDiagnosticIds = targeted.filter((id) => !afterById.has(id)).sort(); - const remainingDiagnosticIds = targeted.filter((id) => afterById.has(id)).sort(); - const newBlockingDiagnosticIds = afterDiagnostics.diagnostics - .filter((item) => item.severity === 'blocking' && !beforeIds.has(item.id)) - .map((item) => item.id) - .sort(); + const afterDiagnosticIds = [...afterById.keys()].sort(); + const targetedDiagnosticIds = options.plan.evidence.diagnosticIds; + + return { + afterDiagnostics, + beforeDiagnosticIds, + afterDiagnosticIds, + clearedDiagnosticIds: targetedDiagnosticIds.filter((id) => !afterById.has(id)).sort(), + remainingDiagnosticIds: targetedDiagnosticIds.filter((id) => afterById.has(id)).sort(), + newBlockingDiagnosticIds: afterDiagnostics.diagnostics + .filter((item) => item.severity === 'blocking' && !beforeDiagnosticIds.has(item.id)) + .map((item) => item.id) + .sort(), + evaluatedAt, + }; +} +function buildAcceptanceReasons( + remainingDiagnosticIds: string[], + newBlockingDiagnosticIds: string[], +): string[] { const reasons: string[] = []; if (remainingDiagnosticIds.length) { - reasons.push( - `Targeted diagnostics still open: ${remainingDiagnosticIds.join(', ')}.`, - ); + reasons.push(`Targeted diagnostics still open: ${remainingDiagnosticIds.join(', ')}.`); } else { reasons.push('All targeted diagnostics cleared after re-analysis.'); } if (newBlockingDiagnosticIds.length) { - reasons.push( - `New blocking diagnostics appeared: ${newBlockingDiagnosticIds.join(', ')}.`, - ); + reasons.push(`New blocking diagnostics appeared: ${newBlockingDiagnosticIds.join(', ')}.`); } else { reasons.push('No new blocking diagnostics appeared.'); } + return reasons; +} - const accepted = remainingDiagnosticIds.length === 0 && newBlockingDiagnosticIds.length === 0; +function isAcceptancePassed(context: AcceptanceContext): boolean { + return context.remainingDiagnosticIds.length === 0 && context.newBlockingDiagnosticIds.length === 0; +} + +function appendAcceptanceGateReason(reasons: string[], accepted: boolean): void { if (accepted) { reasons.push('Acceptance gate passed; human approval is still required before DONE.'); } else { reasons.push('Acceptance gate failed.'); } +} - const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); - const acceptance: CodeChangeAcceptance = { +function buildAcceptanceResult( + options: EvaluateCodeChangeAcceptanceOptions, + context: AcceptanceContext, + reasons: string[], + accepted: boolean, +): CodeChangeAcceptance { + return { schemaVersion: 't2c.code-change-acceptance/v1', planId: options.plan.id, planHash: options.plan.planHash, beforeGraphFingerprint: options.before.graph.fingerprint, afterGraphFingerprint: options.afterGraph.fingerprint, - beforeDiagnosticIds: [...beforeIds].sort(), - afterDiagnosticIds: afterIds, - clearedDiagnosticIds, - remainingDiagnosticIds, - newBlockingDiagnosticIds, + beforeDiagnosticIds: [...context.beforeDiagnosticIds].sort(), + afterDiagnosticIds: context.afterDiagnosticIds, + clearedDiagnosticIds: context.clearedDiagnosticIds, + remainingDiagnosticIds: context.remainingDiagnosticIds, + newBlockingDiagnosticIds: context.newBlockingDiagnosticIds, accepted, reasons: uniqueSorted(reasons), - evaluatedAt, - generation: deterministicGeneration(evaluatedAt, 't2c/code-change-acceptance'), + evaluatedAt: context.evaluatedAt, + generation: deterministicGeneration(context.evaluatedAt, 't2c/code-change-acceptance'), }; - assertCodeChangeAcceptance(acceptance, { - plan: options.plan, - before: options.before, - after: { graph: options.afterGraph, diagnostics: afterDiagnostics }, - }); - return acceptance; } /** Evaluate a plan set under one timestamp without applying changes or marking DONE. */ export function closeCodeChanges(options: CloseCodeChangesOptions): CodeChangeCloseResult { + const context = buildCloseCodeChangeContext(options); + const acceptances = options.plans.map((plan) => evaluateCodeChangeAcceptance({ + plan, + before: options.before, + afterGraph: options.afterGraph, + afterDiagnostics: context.afterDiagnostics, + evaluatedAt: context.evaluatedAt, + })); + const acceptedCount = acceptances.filter((item) => item.accepted).length; + return buildCloseResult(options, context.evaluatedAt, acceptances, acceptedCount); +} + +interface CloseCodeChangeContext { + evaluatedAt: string; + afterDiagnostics: DiagnosticReport; +} + +function buildCloseCodeChangeContext(options: CloseCodeChangesOptions): CloseCodeChangeContext { const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); if (Number.isNaN(Date.parse(evaluatedAt))) throw new Error('evaluatedAt must be an ISO date-time'); assertIntentGraph(options.before.graph); @@ -353,17 +478,23 @@ export function closeCodeChanges(options: CloseCodeChangesOptions): CodeChangeCl assertConclusions([], options.before); const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); - const planIds = options.plans.map((plan) => plan.id); - if (new Set(planIds).size !== planIds.length) throw new Error('Code change close plans must have unique ids'); + ensureClosePlanIdsAreUnique(options.plans); + return { evaluatedAt, afterDiagnostics }; +} - const acceptances = options.plans.map((plan) => evaluateCodeChangeAcceptance({ - plan, - before: options.before, - afterGraph: options.afterGraph, - afterDiagnostics, - evaluatedAt, - })); - const acceptedCount = acceptances.filter((item) => item.accepted).length; +function ensureClosePlanIdsAreUnique(plans: CodeChangePlan[]): void { + const planIds = plans.map((plan) => plan.id); + if (new Set(planIds).size !== planIds.length) { + throw new Error('Code change close plans must have unique ids'); + } +} + +function buildCloseResult( + options: CloseCodeChangesOptions, + evaluatedAt: string, + acceptances: CodeChangeAcceptance[], + acceptedCount: number, +): CodeChangeCloseResult { return { schemaVersion: 't2c.code-change-close-result/v1', evaluatedAt, @@ -377,7 +508,6 @@ export function closeCodeChanges(options: CloseCodeChangesOptions): CodeChangeCl generation: deterministicGeneration(evaluatedAt, 't2c/code-change-close-result'), }; } - function indexProposalsByDiagnostic(proposals: TodoProposal[]): Map { const index = new Map(); for (const proposal of proposals) { @@ -403,27 +533,60 @@ function indexConclusionsByDiagnostic(conclusions: Conclusion[]): Map; + symbols: Set; + tickets: Set; + versions: Set; +} { const paths = new Set(); const symbols = new Set(); const tickets = new Set(); const versions = new Set(); - for (const record of records) { - for (const path of record.statement.target.paths) paths.add(path); - for (const symbol of record.statement.target.symbols) symbols.add(symbol); - for (const ticket of record.statement.target.tickets) tickets.add(ticket); - for (const version of record.statement.target.versions) versions.add(version); + for (const source of records) { + addTargetEntries(source.statement.target, paths, symbols, tickets, versions); } for (const proposal of proposals) { - for (const path of proposal.target.paths) paths.add(path); - for (const symbol of proposal.target.symbols) symbols.add(symbol); - for (const ticket of proposal.target.tickets) tickets.add(ticket); - for (const version of proposal.target.versions) versions.add(version); + addTargetEntries(proposal.target, paths, symbols, tickets, versions); } + return { paths, symbols, tickets, versions }; +} + +function addTargetEntries( + target: IntentTarget, + paths: Set, + symbols: Set, + tickets: Set, + versions: Set, +): void { + for (const value of target.paths) paths.add(value); + for (const value of target.symbols) symbols.add(value); + for (const value of target.tickets) tickets.add(value); + for (const value of target.versions) versions.add(value); +} + +function finalizeTarget(target: { + paths: Set; + symbols: Set; + tickets: Set; + versions: Set; +}): IntentTarget { + const paths = [...target.paths].filter(isUsefulCodeChangePath); + const symbols = [...target.symbols]; + const tickets = [...target.tickets]; + const versions = [...target.versions]; return normalizeTarget({ - paths: [...paths].filter(isUsefulCodeChangePath), - symbols: [...symbols], - tickets: [...tickets], - versions: [...versions], + paths, + symbols, + tickets, + versions, }); } @@ -597,32 +760,69 @@ export interface CreatedCodeChangeReview { export function createCodeChangeReviewPatch( options: CreateCodeChangeReviewOptions, ): CreatedCodeChangeReview { + const context = buildCodeChangeReviewContext(options); + const markdown = buildCodeChangeReviewMarkdown(context); + const artifact = buildCodeChangeReviewArtifact(context, markdown); + assertCodeChangeReviewPatch(artifact); + return { markdown, artifact }; +} + +interface CodeChangeReviewContext { + plans: CodeChangePlan[]; + graphFingerprint: string; + createdAt: string; +} + +function buildCodeChangeReviewContext(options: CreateCodeChangeReviewOptions): CodeChangeReviewContext { if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { throw new Error('graphFingerprint must be a SHA-256 hex digest'); } - assertCodeChangePlansForReview(options.plans, options.graphFingerprint); - const plans = [...options.plans].sort((left, right) => - priorityRank(left.priority) - priorityRank(right.priority) || left.id.localeCompare(right.id)); const createdAt = options.createdAt ?? new Date().toISOString(); if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); - const markdown = renderCodeChangeReviewMarkdown(plans, options.graphFingerprint); - const artifact: CodeChangeReviewPatch = { - schemaVersion: 't2c.code-change-review/v1', - createdAt, + assertCodeChangePlansForReview(options.plans, options.graphFingerprint); + return { + plans: sortCodeChangeReviewPlans(options.plans), graphFingerprint: options.graphFingerprint, - planIds: plans.map((plan) => plan.id), - planHashes: plans.map((plan) => plan.planHash), + createdAt, + }; +} + +function sortCodeChangeReviewPlans(plans: CodeChangePlan[]): CodeChangePlan[] { + return [...plans].sort((left, right) => + priorityRank(left.priority) - priorityRank(right.priority) || left.id.localeCompare(right.id)); +} + +function buildCodeChangeReviewMarkdown(context: CodeChangeReviewContext): string { + return renderCodeChangeReviewMarkdown(context.plans, context.graphFingerprint); +} + +function buildCodeChangeReviewArtifact( + context: CodeChangeReviewContext, + markdown: string, +): CodeChangeReviewPatch { + return { + schemaVersion: 't2c.code-change-review/v1', + createdAt: context.createdAt, + graphFingerprint: context.graphFingerprint, + planIds: context.plans.map((plan) => plan.id), + planHashes: context.plans.map((plan) => plan.planHash), renderedPatchHash: sha256(markdown), - generation: deterministicGeneration(createdAt, 't2c/code-change-review'), + generation: deterministicGeneration(context.createdAt, 't2c/code-change-review'), }; - assertCodeChangeReviewPatch(artifact); - return { markdown, artifact }; } export function renderCodeChangeReviewMarkdown( plans: CodeChangePlan[], graphFingerprint: string, ): string { + const lines = buildCodeChangeReviewMarkdownLines(plans, graphFingerprint); + return lines.join('\n'); +} + +function buildCodeChangeReviewMarkdownLines( + plans: CodeChangePlan[], + graphFingerprint: string, +): string[] { const lines = [ '', '# todo2code proposed code changes', @@ -636,41 +836,60 @@ export function renderCodeChangeReviewMarkdown( ]; if (!plans.length) { lines.push('_No grounded code-change plans. Open diagnostics either cleared or lack repository paths._', ''); - return lines.join('\n'); + return lines; } let currentPriority: CodeChangePlan['priority'] | null = null; for (const plan of plans) { - if (plan.priority !== currentPriority) { - if (currentPriority !== null) lines.push(''); - currentPriority = plan.priority; - lines.push(`## ${plan.priority}`, ''); - } - lines.push(`### ${inline(plan.title)} (\`${plan.id}\`)`, ''); - lines.push(`- Plan hash: \`${plan.planHash}\``); - lines.push(`- Risk: **${plan.risk.level}** — ${plan.risk.reasons.map(inline).join('; ')}`); - lines.push(`- Confidence: ${plan.confidence.toFixed(2)}`); - lines.push(`- Description: ${inline(plan.description)}`); - lines.push('- Changes:'); - for (const change of plan.changes) { - const symbols = change.symbols.length ? ` symbols: ${change.symbols.map((item) => `\`${item}\``).join(', ')}` : ''; - lines.push(` - \`${change.action}\` \`${change.path}\`${symbols}`); - lines.push(` - ${inline(change.rationale)}`); - } - lines.push('- Acceptance criteria:'); - for (const criterion of plan.acceptanceCriteria) lines.push(` - [ ] ${inline(criterion)}`); - lines.push(`- Diagnostics: ${renderIds(plan.evidence.diagnosticIds)}`); - lines.push(`- Evidence records: ${renderIds(plan.evidence.recordIds)}`); - if (plan.evidence.proposalIds.length) lines.push(`- TODO proposals: ${renderIds(plan.evidence.proposalIds)}`); - if (plan.evidence.conclusionIds.length) lines.push(`- Conclusions: ${renderIds(plan.evidence.conclusionIds)}`); - lines.push(`- Rollback: ${inline(plan.rollback)}`); - lines.push(''); + currentPriority = appendPriorityHeader(lines, currentPriority, plan); + appendPlanDetails(lines, plan); } + appendAfterImplementationSection(lines); + return lines; +} + +function appendPriorityHeader( + lines: string[], + currentPriority: CodeChangePlan['priority'] | null, + plan: CodeChangePlan, +): CodeChangePlan['priority'] { + if (plan.priority === currentPriority) return currentPriority; + if (currentPriority !== null) lines.push(''); + lines.push(`## ${plan.priority}`, ''); + return plan.priority; +} + +function appendPlanDetails(lines: string[], plan: CodeChangePlan): void { + lines.push(`### ${inline(plan.title)} (\`${plan.id}\`)`, ''); + lines.push(`- Plan hash: \`${plan.planHash}\``); + lines.push(`- Risk: **${plan.risk.level}** — ${plan.risk.reasons.map(inline).join('; ')}`); + lines.push(`- Confidence: ${plan.confidence.toFixed(2)}`); + lines.push(`- Description: ${inline(plan.description)}`); + appendPlanChanges(lines, plan); + lines.push('- Acceptance criteria:'); + for (const criterion of plan.acceptanceCriteria) lines.push(` - [ ] ${inline(criterion)}`); + lines.push(`- Diagnostics: ${renderIds(plan.evidence.diagnosticIds)}`); + lines.push(`- Evidence records: ${renderIds(plan.evidence.recordIds)}`); + if (plan.evidence.proposalIds.length) lines.push(`- TODO proposals: ${renderIds(plan.evidence.proposalIds)}`); + if (plan.evidence.conclusionIds.length) lines.push(`- Conclusions: ${renderIds(plan.evidence.conclusionIds)}`); + lines.push(`- Rollback: ${inline(plan.rollback)}`); + lines.push(''); +} + +function appendPlanChanges(lines: string[], plan: CodeChangePlan): void { + lines.push('- Changes:'); + for (const change of plan.changes) { + const symbols = change.symbols.length ? ` symbols: ${change.symbols.map((item) => `\`${item}\``).join(', ')}` : ''; + lines.push(` - \`${change.action}\` \`${change.path}\`${symbols}`); + lines.push(` - ${inline(change.rationale)}`); + } +} + +function appendAfterImplementationSection(lines: string[]): void { lines.push('## After implementation', ''); lines.push('1. Re-run `t2c pipeline` (or extract + link + diagnose) on the changed tree.'); lines.push('2. `t2c evaluate-code-change --before-graph … --after-graph … --out acceptance.json`.'); lines.push('3. Require `accepted=true` and human/CI review before marking work DONE.'); lines.push(''); - return lines.join('\n'); } export function assertCodeChangeReviewPatch(value: unknown): asserts value is CodeChangeReviewPatch { @@ -692,9 +911,18 @@ function validateReviewPatchKeys(artifact: Record): void { } function assertCodeChangeReviewPatchSchema(artifact: Record): void { + assertReviewPatchSchemaVersion(artifact); + assertReviewPatchDateFields(artifact); + assertReviewPatchIds(artifact); +} + +function assertReviewPatchSchemaVersion(artifact: Record): void { if (artifact.schemaVersion !== 't2c.code-change-review/v1') { throw new Error('Unsupported code change review schemaVersion'); } +} + +function assertReviewPatchDateFields(artifact: Record): void { if (typeof artifact.createdAt !== 'string' || Number.isNaN(Date.parse(artifact.createdAt))) { throw new Error('Code change review createdAt must be an ISO date-time'); } @@ -704,6 +932,9 @@ function assertCodeChangeReviewPatchSchema(artifact: Record): v if (typeof artifact.renderedPatchHash !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.renderedPatchHash)) { throw new Error('Code change review renderedPatchHash must be SHA-256'); } +} + +function assertReviewPatchIds(artifact: Record): void { if (!Array.isArray(artifact.planIds) || !artifact.planIds.every((id) => typeof id === 'string' && /^CPLAN-[a-f0-9]{20}$/.test(id))) { throw new Error('Code change review planIds must be CPLAN ids'); } @@ -989,8 +1220,12 @@ function validateSourcePatchIdentifiers(patch: CodeChangeSourcePatch): void { } function validateSourcePatchEdits(patch: CodeChangeSourcePatch): Set { + return collectSourcePatchEditPathActions(patch.edits); +} + +function collectSourcePatchEditPathActions(edits: CodeChangeSourceEdit[]): Set { const paths = new Set(); - for (const edit of patch.edits) { + for (const edit of edits) { const editContext = validateSourcePatchEdit(edit, paths); paths.add(editContext.pathActionKey); } @@ -1005,20 +1240,65 @@ function validateSourcePatchEdit( edit: CodeChangeSourceEdit, seen: Set, ): SourcePatchEditValidationContext { + const normalizedEdit = assertSourcePatchEditObject(edit); + const normalizedPath = normalizeSourcePatchEditPath(normalizedEdit.path); + validateSourcePatchEditBody(normalizedEdit, normalizedPath); + validateSourcePatchEditDiff(normalizedEdit.unifiedDiff, normalizedPath); + assertUniqueSourcePatchEditPathAction(seen, normalizedPath, normalizedEdit.action); + const pathActionKey = `${normalizedPath}::${normalizedEdit.action}`; + return { pathActionKey }; +} + +function assertSourcePatchEditObject(edit: CodeChangeSourceEdit | unknown): { + path: unknown; + action: unknown; + symbols: unknown; + instruction: unknown; + unifiedDiff: string | null; +} { if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); exactSourcePatchKeys(edit as unknown as Record, [ 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', ], 'Source patch edit'); + return edit as { + path: unknown; + action: unknown; + symbols: unknown; + instruction: unknown; + unifiedDiff: string | null; + }; +} - const normalizedPath = normalizeSourcePatchEditPath(edit.path); +function validateSourcePatchEditBody( + edit: { + path: unknown; + action: unknown; + symbols: unknown; + instruction: unknown; + unifiedDiff: string | null; + }, + normalizedPath: string, +): void { ensureSourcePatchEditAction(edit.action); ensureSourcePatchEditInstruction(edit.instruction); assertSourcePatchStrings(edit.symbols, `edits[${normalizedPath}].symbols`, true); - validateSourcePatchEditDiff(edit.unifiedDiff, normalizedPath); +} + +function validateSourcePatchEditDiff(unifiedDiff: string | null, normalizedPath: string): void { + if (unifiedDiff === null) return; + if (typeof unifiedDiff !== 'string') { + throw new Error(`Source patch unifiedDiff for ${normalizedPath} must be string or null`); + } + normalizeUnifiedDiff(unifiedDiff, normalizedPath); +} - const pathActionKey = `${normalizedPath}::${edit.action}`; +function assertUniqueSourcePatchEditPathAction( + seen: Set, + normalizedPath: string, + action: unknown, +): void { + const pathActionKey = `${normalizedPath}::${action}`; if (seen.has(pathActionKey)) throw new Error(`Duplicate source patch edit for ${normalizedPath}`); - return { pathActionKey }; } function normalizeSourcePatchEditPath(pathValue: unknown): string { @@ -1041,15 +1321,6 @@ function ensureSourcePatchEditInstruction(instruction: unknown): void { } } -function validateSourcePatchEditDiff( - unifiedDiff: string | null, - normalizedPath: string, -): void { - if (unifiedDiff === null) return; - if (typeof unifiedDiff !== 'string') throw new Error('Source patch unifiedDiff must be string or null'); - normalizeUnifiedDiff(unifiedDiff, normalizedPath); -} - function validateSourcePatchHashAndId(patch: CodeChangeSourcePatch): void { const expectedHash = createCodeChangeSourcePatchHash(patch); if (patch.patchHash !== expectedHash) { @@ -1285,30 +1556,74 @@ function instructionFor(change: CodeChangeFile, plan: CodeChangePlan): string { * Accepts optional `--- a/path` / `+++ b/path` headers and rejects foreign paths. */ function normalizeUnifiedDiff(diff: string, expectedPath: string): string { + const normalized = normalizeUnifiedDiffText(diff, expectedPath); + validateUnifiedDiffBody(normalized, expectedPath); + validateUnifiedDiffPathHeaders(normalized, expectedPath); + return normalized; +} + +function normalizeUnifiedDiffText(diff: string, expectedPath: string): string { const normalized = diff.replace(/\r\n/g, '\n'); if (!normalized.trim()) throw new Error(`Unified diff for ${expectedPath} is empty`); if (normalized.includes('\0')) throw new Error(`Unified diff for ${expectedPath} contains NUL bytes`); - // Lightweight secret heuristic — refuse obvious credential dumps in proposed diffs. - if (/(?:api[_-]?key|secret|password|private[_-]?key)\s*[:=]\s*['"]?[^'"\s]{8,}/i.test(normalized)) { + return normalized; +} + +function validateUnifiedDiffBody(diff: string, expectedPath: string): void { + if (/(?:api[_-]?key|secret|password|private[_-]?key)\s*[:=]\s*['"]?[^'"\s]{8,}/i.test(diff)) { throw new Error(`Unified diff for ${expectedPath} appears to contain a secret assignment`); } - const headers = [...normalized.matchAll(/^(?:---|\+\+\+)\s+(?:[ab]\/)?(.+)$/gm)].map((match) => match[1]!.trim()); - for (const header of headers) { - if (header === '/dev/null') continue; - const path = header.replace(/\\/g, '/'); - if (path.startsWith('/') || path.split('/').includes('..')) { - throw new Error(`Unified diff for ${expectedPath} uses a non-repository path header: ${path}`); - } - if (path !== expectedPath && path !== `a/${expectedPath}` && path !== `b/${expectedPath}`) { - // Headers may include timestamps after a tab; strip them. - const bare = path.split('\t')[0] ?? path; - const stripped = bare.replace(/^[ab]\//, ''); - if (stripped !== expectedPath) { - throw new Error(`Unified diff for ${expectedPath} references foreign path: ${path}`); - } +} + +function validateUnifiedDiffPathHeaders(diff: string, expectedPath: string): void { + for (const header of extractUnifiedDiffHeaders(diff)) { + validateUnifiedDiffHeaderPath(header, expectedPath); + } +} + +function extractUnifiedDiffHeaders(diff: string): string[] { + return [...diff.matchAll(/^(?:---|\+\+\+)\s+(?:[ab]\/)?(.+)$/gm)].map((match) => match[1]!.trim()); +} + +function validateUnifiedDiffHeaderPath(header: string, expectedPath: string): void { + if (header === '/dev/null') return; + const normalizedPath = normalizeUnifiedDiffHeaderPath(header); + assertUnifiedDiffHeaderPathSafety(normalizedPath, expectedPath); +} + +function normalizeUnifiedDiffHeaderPath(header: string): string { + return header.replace(/\\/g, '/').trim(); +} + +function assertUnifiedDiffHeaderPathSafety(normalizedPath: string, expectedPath: string): void { + if (isUnifiedDiffTraversalHeader(normalizedPath)) { + throw new Error(`Unified diff for ${expectedPath} uses a non-repository path header: ${normalizedPath}`); + } + if (!matchesUnifiedDiffExpectedHeader(normalizedPath, expectedPath)) { + const bare = normalizedHeaderPathCandidate(normalizedPath); + const stripped = stripLeadingDiffPrefix(bare); + if (stripped !== expectedPath) { + throw new Error(`Unified diff for ${expectedPath} references foreign path: ${normalizedPath}`); } } - return normalized; +} + +function isUnifiedDiffTraversalHeader(normalizedPath: string): boolean { + return normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..'); +} + +function matchesUnifiedDiffExpectedHeader(normalizedPath: string, expectedPath: string): boolean { + return normalizedPath === expectedPath + || normalizedPath === `a/${expectedPath}` + || normalizedPath === `b/${expectedPath}`; +} + +function normalizedHeaderPathCandidate(normalizedPath: string): string { + return normalizedPath.split('\t')[0] ?? normalizedPath; +} + +function stripLeadingDiffPrefix(pathValue: string): string { + return pathValue.replace(/^[ab]\//, ''); } export interface ApplyCodeChangeSourcePatchOptions { @@ -1354,11 +1669,8 @@ export async function applyCodeChangeSourcePatch( await ensureDir(path.dirname(receiptPath)); const lock = await acquireApplyLock(receiptPath); try { - if (await pathExists(receiptPath)) { - const existing = await readJson(receiptPath, 1024 * 1024); - await assertExistingSourceReceipt(existing, request.patch, root); - return { applied: false, idempotent: true, receipt: existing }; - } + const idempotentResult = await readExistingReceipt(receiptPath, request.patch, root); + if (idempotentResult) return idempotentResult; const prepared = await prepareSourceEdits(request.patch, root, receiptPath); const now = (request.now ?? new Date()).toISOString(); @@ -1370,19 +1682,24 @@ export async function applyCodeChangeSourcePatch( } } +async function readExistingReceipt( + receiptPath: string, + patch: CodeChangeSourcePatch, + root: string, +): Promise { + if (!(await pathExists(receiptPath))) return null; + const existing = await readJson(receiptPath, 1024 * 1024); + await assertExistingSourceReceipt(existing, patch, root); + return { applied: false, idempotent: true, receipt: existing }; +} + function assertPatchApplicationRequest( options: ApplyCodeChangeSourcePatchOptions, ): NormalizedApplyCodeChangeSourcePatchRequest { - assertCodeChangeSourcePatch(options.patch); - if (!options.approval?.actor?.trim()) throw new Error('Explicit source patch approval actor is required'); - if (options.approval.patchHash !== options.patch.patchHash) { - throw new Error('Source patch approval hash does not match the patch'); - } - for (const edit of options.patch.edits) { - if (edit.unifiedDiff === null) { - throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); - } - } + const patch = assertCodeChangeSourcePatchAndActorAndEdits(options.patch, options.approval); + assertPatchApprovalActor(options.approval); + assertPatchApprovalHash(options.patch, options.approval); + assertPatchEditsContainDiffs(patch); return { root: options.root, patch: options.patch, @@ -1392,6 +1709,41 @@ function assertPatchApplicationRequest( }; } +function assertCodeChangeSourcePatchAndActorAndEdits( + patch: CodeChangeSourcePatch, + approval: CodeChangeSourcePatchApproval, +): CodeChangeSourcePatch { + assertCodeChangeSourcePatch(patch); + if (!approval) { + throw new Error('Source patch approval object is required'); + } + return patch; +} + +function assertPatchApprovalActor(approval: CodeChangeSourcePatchApproval): string { + if (!approval.actor?.trim()) { + throw new Error('Explicit source patch approval actor is required'); + } + return approval.actor.trim(); +} + +function assertPatchApprovalHash( + patch: CodeChangeSourcePatch, + approval: CodeChangeSourcePatchApproval, +): void { + if (approval.patchHash !== patch.patchHash) { + throw new Error('Source patch approval hash does not match the patch'); + } +} + +function assertPatchEditsContainDiffs(patch: CodeChangeSourcePatch): void { + for (const edit of patch.edits) { + if (edit.unifiedDiff === null) { + throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); + } + } +} + async function acquireApplyLock(receiptPath: string): Promise { const lockPath = `${receiptPath}.t2c-apply.lock`; try { @@ -1412,26 +1764,59 @@ async function prepareSourceEdits( ): Promise { const prepared: PreparedSourceEdit[] = []; for (const edit of patch.edits) { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - if (absolute === receiptPath) { - throw new Error(`Source patch target collides with its receipt path: ${relative}`); - } - const exists = await pathExists(absolute); - if (exists && (await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Refusing to apply through a symlink: ${relative}`); - } - validatePatchTargetForEdit(edit.action, relative, exists, edit.unifiedDiff!); - const before = exists ? await readText(absolute, 16 * 1024 * 1024) : ''; - const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, relative); - if (edit.action === 'delete' && after !== '') { - throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); - } - prepared.push({ relative, absolute, action: edit.action, before, after, existed: exists }); + const target = await prepareSourceEditTarget(edit, root, receiptPath); + const before = target.existed ? await readText(target.absolute, 16 * 1024 * 1024) : ''; + const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, target.relative); + assertDeleteEditClearsAll(target.relative, edit.action, after); + prepared.push({ + ...target, + action: edit.action, + before, + after, + }); } return prepared; } +interface SourcePatchEditTarget { + relative: string; + absolute: string; + existed: boolean; +} + +async function prepareSourceEditTarget( + edit: CodeChangeSourceEdit, + root: string, + receiptPath: string, +): Promise { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + if (absolute === receiptPath) { + throw new Error(`Source patch target collides with its receipt path: ${relative}`); + } + const existed = await pathExists(absolute); + await assertSourcePatchTargetNotSymlink(absolute, existed, relative); + validatePatchTargetForEdit(edit.action, relative, existed, edit.unifiedDiff!); + return { relative, absolute, existed }; +} + +async function assertSourcePatchTargetNotSymlink( + absolute: string, + existed: boolean, + relative: string, +): Promise { + if (!existed) return; + if ((await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Refusing to apply through a symlink: ${relative}`); + } +} + +function assertDeleteEditClearsAll(relative: string, action: CodeChangeFileAction, after: string): void { + if (action === 'delete' && after !== '') { + throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); + } +} + function validatePatchTargetForEdit( action: CodeChangeFileAction, relative: string, @@ -1456,11 +1841,7 @@ async function applyPreparedEdits( ): Promise { const changed: PreparedSourceEdit[] = []; try { - for (const edit of prepared) { - if (edit.action === 'delete') await fs.unlink(edit.absolute); - else await atomicWriteRaw(edit.absolute, edit.after); - changed.push(edit); - } + await writePreparedEdits(prepared, changed); const receipt = buildPatchApplyReceipt(prepared, patch, approvedBy, now); assertSourceApplyReceipt(receipt, patch); // The receipt is part of the transaction: without it a retry could apply @@ -1476,6 +1857,14 @@ async function applyPreparedEdits( } } +async function writePreparedEdits(prepared: PreparedSourceEdit[], changed: PreparedSourceEdit[]): Promise { + for (const edit of prepared) { + if (edit.action === 'delete') await fs.unlink(edit.absolute); + else await atomicWriteRaw(edit.absolute, edit.after); + changed.push(edit); + } +} + function buildPatchApplyReceipt( prepared: PreparedSourceEdit[], patch: CodeChangeSourcePatch, @@ -1552,18 +1941,43 @@ async function assertExistingSourceReceipt( } function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: CodeChangeSourcePatch): void { + validateSourceApplyReceiptShape(receipt); + validateSourceApplyReceiptIdentity(receipt, patch); + validateSourceApplyReceiptTimestamps(receipt); + validateSourceApplyReceiptPathHashes(receipt, patch); + validateSourceApplyReceiptGeneration(receipt); +} + +function validateSourceApplyReceiptShape(receipt: CodeChangeSourceApplyReceipt): void { exactSourcePatchKeys(receipt as unknown as Record, [ 'schemaVersion', 'patchId', 'patchHash', 'planId', 'approvedBy', 'approvedAt', 'appliedAt', 'appliedPaths', 'fileHashesAfter', 'generation', ], 'Code change source apply receipt'); +} + +function validateSourceApplyReceiptIdentity( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, +): void { if (receipt.schemaVersion !== 't2c.code-change-source-apply-receipt/v1' - || receipt.patchId !== patch.id || receipt.patchHash !== patch.patchHash || receipt.planId !== patch.planId) { + || receipt.patchId !== patch.id + || receipt.patchHash !== patch.patchHash + || receipt.planId !== patch.planId) { throw new Error('Code change source apply receipt does not match its patch'); } +} + +function validateSourceApplyReceiptTimestamps(receipt: CodeChangeSourceApplyReceipt): void { if (!receipt.approvedBy.trim()) throw new Error('Code change source apply receipt approvedBy is required'); if (!Number.isFinite(Date.parse(receipt.approvedAt)) || !Number.isFinite(Date.parse(receipt.appliedAt))) { throw new Error('Code change source apply receipt timestamps must be ISO date-times'); } +} + +function validateSourceApplyReceiptPathHashes( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, +): void { const expectedPaths = patch.edits.map((edit) => edit.path).sort(); exactSourcePatchSet(receipt.appliedPaths, expectedPaths, 'receipt appliedPaths'); const hashPaths = Object.keys(receipt.fileHashesAfter).sort(); @@ -1571,6 +1985,9 @@ function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: if (Object.values(receipt.fileHashesAfter).some((value) => !/^[a-f0-9]{64}$/.test(value))) { throw new Error('Code change source apply receipt file hashes must be SHA-256'); } +} + +function validateSourceApplyReceiptGeneration(receipt: CodeChangeSourceApplyReceipt): void { assertGroundedGenerationMetadata(receipt.generation, 'Code change source apply receipt generation'); if (receipt.generation.generatedAt !== receipt.appliedAt || receipt.generation.generator !== 't2c/code-change-source-apply') { @@ -1598,8 +2015,12 @@ export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: const hunks = parseUnifiedDiffIntoHunks(diff, expectedPath); const output = applyUnifiedDiffHunks(baseLines, expectedPath, hunks); // Reconstruct text. Files without a trailing newline end without an empty last segment. - if (base.endsWith('\n') || output.length === 0) return `${output.join('\n')}${output.length ? '\n' : ''}`; - return output.join('\n'); + return joinAppliedText(base.endsWith('\n'), output); +} + +function joinAppliedText(baseEndsWithNewline: boolean, lines: string[]): string { + if (baseEndsWithNewline || lines.length === 0) return `${lines.join('\n')}${lines.length ? '\n' : ''}`; + return lines.join('\n'); } interface ParsedUnifiedDiffHunk { @@ -1611,37 +2032,78 @@ interface ParsedUnifiedDiffHunk { function parseUnifiedDiffIntoHunks(diff: string, expectedPath: string): ParsedUnifiedDiffHunk[] { const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); - const diffLines = normalizedDiff.split('\n'); - // Drop trailing empty element only if the original split introduced it - // without a final newline — normalize by working on lines as split. - const hunks: ParsedUnifiedDiffHunk[] = []; - let current: ParsedUnifiedDiffHunk | null = null; - for (const line of diffLines) { - if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { - continue; - } - const header = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); - if (header) { - if (current) hunks.push(current); - current = { - oldStart: Number(header[1]), - oldCount: header[2] === undefined ? 1 : Number(header[2]), - newCount: header[4] === undefined ? 1 : Number(header[4]), - lines: [], - }; - continue; - } - if (!current) { - if (line === '') continue; - throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); + const context = createEmptyUnifiedDiffContext(); + for (const line of parseUnifiedDiffLines(normalizedDiff)) { + applyUnifiedDiffLineToContext(context, line, expectedPath); + } + return finalizeUnifiedDiffContext(context, expectedPath); +} + +interface UnifiedDiffParsingContext { + current: ParsedUnifiedDiffHunk | null; + hunks: ParsedUnifiedDiffHunk[]; +} + +function createEmptyUnifiedDiffContext(): UnifiedDiffParsingContext { + return { current: null, hunks: [] }; +} + +function parseUnifiedDiffLines(diff: string): string[] { + return diff.split('\n'); +} + +function finalizeUnifiedDiffContext( + context: UnifiedDiffParsingContext, + expectedPath: string, +): ParsedUnifiedDiffHunk[] { + if (context.current) { + context.hunks.push(context.current); + context.current = null; + } + if (!context.hunks.length) { + throw new Error(`Unified diff for ${expectedPath} contains no hunks`); + } + return context.hunks; +} + +function applyUnifiedDiffLineToContext( + context: UnifiedDiffParsingContext, + line: string, + expectedPath: string, +): void { + const header = parseUnifiedDiffHeader(line); + if (header) { + if (context.current) { + context.hunks.push(context.current); } - // Blank lines without a unified-diff prefix separate hunks in some emitters. - if (line === '') continue; - current.lines.push(line); + context.current = header; + return; + } + if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { + return; + } + if (!context.current) { + if (line === '') return; + throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); } - if (current) hunks.push(current); - if (!hunks.length) throw new Error(`Unified diff for ${expectedPath} contains no hunks`); - return hunks; + // Blank lines without a unified-diff prefix separate hunks in some emitters. + if (line === '') return; + context.current.lines.push(line); +} + +function parseUnifiedDiffHeader(line: string): ParsedUnifiedDiffHunk | null { + const match = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); + if (!match) return null; + return buildParsedUnifiedDiffHunk(match); +} + +function buildParsedUnifiedDiffHunk(match: RegExpMatchArray): ParsedUnifiedDiffHunk { + return { + oldStart: Number(match[1]), + oldCount: match[2] === undefined ? 1 : Number(match[2]), + newCount: match[4] === undefined ? 1 : Number(match[4]), + lines: [], + }; } interface UnifiedDiffCursor { @@ -1656,25 +2118,52 @@ function applyUnifiedDiffHunks( const cursor: UnifiedDiffCursor = { position: 0 }; const output: string[] = []; for (const hunk of hunks) { - const oldIndex = Math.max(0, hunk.oldStart - 1); - if (oldIndex < cursor.position) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); - validateHunkCounts(expectedPath, hunk); - - while (cursor.position < oldIndex) { - if (cursor.position >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); - output.push(baseLines[cursor.position]!); - cursor.position += 1; - } - for (const line of hunk.lines) { - if (line.startsWith('\\')) continue; // "\ No newline at end of file" - applyUnifiedDiffLine(expectedPath, line, cursor, baseLines, output); - } + applyUnifiedDiffHunk(baseLines, expectedPath, cursor, output, hunk); } + appendRemainingBaseLines(baseLines, cursor, output); + return output; +} + +function applyUnifiedDiffHunk( + baseLines: string[], + expectedPath: string, + cursor: UnifiedDiffCursor, + output: string[], + hunk: ParsedUnifiedDiffHunk, +): void { + const oldIndex = Math.max(0, hunk.oldStart - 1); + if (oldIndex < cursor.position) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); + validateHunkCounts(expectedPath, hunk); + copyBaseLinesToCursor(baseLines, expectedPath, cursor, output, oldIndex); + for (const line of hunk.lines) { + if (line.startsWith('\\')) continue; // "\ No newline at end of file" + applyUnifiedDiffLine(expectedPath, line, cursor, baseLines, output); + } +} + +function copyBaseLinesToCursor( + baseLines: string[], + expectedPath: string, + cursor: UnifiedDiffCursor, + output: string[], + targetIndex: number, +): void { + while (cursor.position < targetIndex) { + if (cursor.position >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); + output.push(baseLines[cursor.position]!); + cursor.position += 1; + } +} + +function appendRemainingBaseLines( + baseLines: string[], + cursor: UnifiedDiffCursor, + output: string[], +): void { while (cursor.position < baseLines.length) { output.push(baseLines[cursor.position]!); cursor.position += 1; } - return output; } function validateHunkCounts(expectedPath: string, hunk: ParsedUnifiedDiffHunk): void { @@ -1694,25 +2183,52 @@ function applyUnifiedDiffLine( ): void { const mark = line[0]; const body = line.slice(1); - if (mark === ' ') { - if (baseLines[cursor.position] !== body) { - throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor.position + 1}`); - } - output.push(baseLines[cursor.position]!); - cursor.position += 1; - } else if (mark === '-') { - if (baseLines[cursor.position] !== body) { - throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor.position + 1}`); - } - cursor.position += 1; - } else if (mark === '+') { - output.push(body); - } else if (line === '') { - // empty line inside hunk without prefix is invalid in strict unified diffs + if (line === '') { throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); - } else { - throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); } + if (mark === ' ') { + applyUnifiedDiffContextLine(expectedPath, body, cursor, baseLines, output); + return; + } + if (mark === '-') { + applyUnifiedDiffDeletionLine(expectedPath, body, cursor, baseLines); + return; + } + if (mark === '+') { + applyUnifiedDiffAdditionLine(body, output); + return; + } + throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); +} + +function applyUnifiedDiffContextLine( + expectedPath: string, + body: string, + cursor: UnifiedDiffCursor, + baseLines: string[], + output: string[], +): void { + if (baseLines[cursor.position] !== body) { + throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor.position + 1}`); + } + output.push(baseLines[cursor.position]!); + cursor.position += 1; +} + +function applyUnifiedDiffDeletionLine( + expectedPath: string, + body: string, + cursor: UnifiedDiffCursor, + baseLines: string[], +): void { + if (baseLines[cursor.position] !== body) { + throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor.position + 1}`); + } + cursor.position += 1; +} + +function applyUnifiedDiffAdditionLine(body: string, output: string[]): void { + output.push(body); } function splitKeep(text: string): string[] { From fc28040dd5fdbd05046b52932bca56060940f3dc Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 11:53:33 +0200 Subject: [PATCH 17/43] fix: restore todo patch contracts and reranker schema guard --- README.md | 6 +- project/README.md | 6 +- project/analysis.toon.yaml | 80 +- project/calls.mmd | 677 ++--- project/calls.png | Bin 100449 -> 95312 bytes project/calls.toon.yaml | 42 +- project/calls.yaml | 4804 ++++++++++++++++--------------- project/compact_flow.mmd | 2 +- project/compact_flow.png | Bin 37242 -> 37210 bytes project/context.md | 186 +- project/evolution.toon.yaml | 54 +- project/flow.mmd | 2 +- project/flow.png | Bin 14246 -> 14232 bytes project/index.html | 2 +- project/map.toon.yaml | 1968 +++++++------ project/mermaid.export | 236 +- project/planfile-tickets.yaml | 1270 ++------ project/project.toon.yaml | 42 +- project/prompt.txt | 2 +- src/core/types/code-change.ts | 29 + src/semantic/reranker/result.ts | 1 - 21 files changed, 4500 insertions(+), 4909 deletions(-) diff --git a/README.md b/README.md index b6364fd..bfd8d48 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ ## AI Cost Tracking ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.2-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green) -![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.00-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-44.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) +![AI Cost](https://img.shields.io/badge/AI%20Cost-$6.35-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-47.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) -- 🤖 **LLM usage:** $3.9955 (119 commits) -- 👤 **Human dev:** ~$4463 (44.6h @ $100/h, 30min dedup) +- 🤖 **LLM usage:** $6.3511 (124 commits) +- 👤 **Human dev:** ~$4759 (47.6h @ $100/h, 30min dedup) Generated on 2026-08-04 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next) diff --git a/project/README.md b/project/README.md index f04a395..f3a447a 100644 --- a/project/README.md +++ b/project/README.md @@ -333,8 +333,8 @@ code2llm ./ -f yaml --separate-orphans **Generated by**: `code2llm ./ -f all --readme` **Analysis Date**: 2026-08-04 -**Total Functions**: 3683 -**Total Classes**: 373 -**Modules**: 251 +**Total Functions**: 3900 +**Total Classes**: 390 +**Modules**: 252 For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm diff --git a/project/analysis.toon.yaml b/project/analysis.toon.yaml index 4f9eb57..d5d7919 100644 --- a/project/analysis.toon.yaml +++ b/project/analysis.toon.yaml @@ -1,34 +1,35 @@ -# code2llm | 251f 39151L | typescript:143,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 -# generated in 0.26s -# CC̅=3.6 | critical:90/3683 | dups:0 | cycles:0 +# code2llm | 252f 41875L | typescript:144,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 +# generated in 0.28s +# CC̅=3.3 | critical:64/3900 | dups:0 | cycles:0 HEALTH[20]: 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10 + 🔴 GOD src/synthesis/code-change-plan/implementation-helpers.ts = 2239L, 25 classes, 270m, max CC=13 🟡 CC handleRequest CC=16 (limit:15) - 🟡 CC buildLocalWarnings CC=18 (limit:15) - 🟡 CC executeAction CC=83 (limit:15) - 🟡 CC root CC=83 (limit:15) - 🟡 CC normalized CC=30 (limit:15) - 🟡 CC inferObject CC=34 (limit:15) - 🟡 CC walkFiles CC=15 (limit:15) - 🟡 CC diffUiHtml CC=52 (limit:15) + 🟡 CC generationMetadata CC=17 (limit:15) + 🟡 CC diffUiScriptMarkup CC=46 (limit:15) 🟡 CC compareGraphs CC=15 (limit:15) - 🟡 CC rerankSemanticCandidates CC=25 (limit:15) - 🟡 CC assertSemanticRerankResult CC=21 (limit:15) - 🟡 CC records CC=16 (limit:15) - 🟡 CC seenDecisions CC=16 (limit:15) - 🟡 CC acceptedDeclarations CC=16 (limit:15) - 🟡 CC assertSemanticCandidateSet CC=27 (limit:15) - 🟡 CC NON_SOURCE_DIR_SEGMENTS CC=38 (limit:15) - 🟡 CC BINARY_EXTENSIONS CC=38 (limit:15) - 🟡 CC GENERATED_ANALYSIS_BASENAMES CC=38 (limit:15) - 🟡 CC T2C_ARTIFACT_BASENAMES CC=38 (limit:15) + 🟡 CC assertSemanticRerankResult CC=29 (limit:15) + 🟡 CC timeout CC=26 (limit:15) + 🟡 CC request CC=31 (limit:15) + 🟡 CC parseCommand CC=63 (limit:15) + 🟡 CC runListItem CC=18 (limit:15) + 🟡 CC myers CC=19 (limit:15) + 🟡 CC n CC=15 (limit:15) + 🟡 CC m CC=15 (limit:15) + 🟡 CC max CC=15 (limit:15) + 🟡 CC offset CC=15 (limit:15) + 🟡 CC y CC=15 (limit:15) + 🟡 CC backtrack CC=18 (limit:15) + 🟡 CC x CC=15 (limit:15) + 🟡 CC buildRealityView CC=26 (limit:15) -REFACTOR[2]: +REFACTOR[3]: 1. split src/graph/linker.ts (god module) - 2. split 19 high-CC methods (CC>15) + 2. split src/synthesis/code-change-plan/implementation-helpers.ts (god module) + 3. split 18 high-CC methods (CC>15) -PIPELINES[2061]: +PIPELINES[2067]: [1] Src [main]: main → arguments PURITY: 100% pure [2] Src [new]: new @@ -141,15 +142,16 @@ LAYERS: │ !! ast_extract 221L 1C 18m CC=16 ←0 │ requirements.txt 1L 0C 0m CC=0.0 ←0 │ - src/ CC̄=3.8 ←in:0 →out:0 + src/ CC̄=3.4 ←in:0 →out:0 + │ !! implementation-helpers.ts 2239L 25C 270m CC=13 ←3 │ !! cli.ts 935L 1C 124m CC=13 ←0 - │ !! actions.ts 737L 1C 79m CC=83 ←0 + │ !! actions.ts 803L 1C 106m CC=13 ←0 │ !! reality.ts 619L 3C 74m CC=26 ←0 │ !! run.ts 617L 1C 65m CC=56 ←0 │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0 │ !! analyzer.ts 542L 3C 72m CC=48 ←0 │ !! linker.ts 537L 4C 81m CC=10 ←3 - │ !! text.ts 517L 0C 57m CC=34 ←0 + │ !! text.ts 530L 0C 61m CC=14 ←0 │ diagnostics.ts 459L 1C 58m CC=11 ←0 │ git.ts 397L 6C 57m CC=11 ←0 │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0 @@ -158,6 +160,7 @@ LAYERS: │ docs-deterministic.ts 369L 3C 43m CC=11 ←0 │ !! gold-cases.ts 366L 4C 42m CC=18 ←0 │ implementation-helpers.ts 357L 5C 33m CC=10 ←0 + │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0 │ workspace.ts 342L 3C 54m CC=12 ←0 │ !! openrouter.ts 338L 7C 39m CC=31 ←0 │ summarizer.ts 333L 5C 27m CC=10 ←0 @@ -167,47 +170,47 @@ LAYERS: │ code-change.ts 322L 0C 35m CC=11 ←0 │ communication-helpers.ts 320L 3C 45m CC=14 ←0 │ contract-check.ts 317L 6C 39m CC=14 ←2 + │ !! result.ts 312L 0C 23m CC=29 ←0 │ runtime-cycle.ts 306L 1C 35m CC=9 ←0 │ intent.ts 306L 4C 36m CC=12 ←0 - │ !! communication-file-helpers.ts 296L 2C 39m CC=18 ←0 + │ reranker-llm.ts 291L 2C 35m CC=9 ←0 │ intake-service.ts 291L 2C 48m CC=13 ←0 │ !! validation.ts 281L 0C 47m CC=84 ←0 │ !! intake-contract.ts 273L 7C 30m CC=18 ←0 │ docs-llm.ts 269L 1C 28m CC=12 ←0 │ typescript.ts 266L 1C 26m CC=8 ←0 │ tasks-llm.ts 266L 4C 22m CC=11 ←0 - │ !! result.ts 264L 0C 16m CC=21 ←0 │ mcp.ts 261L 2C 38m CC=9 ←0 │ intent.ts 258L 15C 0m CC=0.0 ←0 │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0 │ text-render.ts 251L 2C 33m CC=13 ←0 + │ candidate.ts 250L 1C 19m CC=8 ←0 │ !! watcher.ts 243L 4C 37m CC=19 ←0 - │ !! text.ts 239L 1C 48m CC=19 ←2 │ utils.ts 239L 0C 42m CC=8 ←0 + │ !! text.ts 239L 1C 48m CC=19 ←2 │ diff.ts 235L 1C 38m CC=11 ←0 + │ code-change-path.ts 232L 0C 23m CC=11 ←0 │ env.ts 231L 1C 20m CC=13 ←0 │ !! a2a-history.ts 226L 3C 37m CC=18 ←0 │ code-change.ts 221L 16C 0m CC=0.0 ←0 │ structured-schema.ts 218L 5C 25m CC=10 ←0 │ model-comparison.ts 218L 4C 21m CC=12 ←0 + │ io.ts 211L 2C 30m CC=11 ←0 │ conclusions.ts 210L 0C 21m CC=9 ←0 - │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0 │ configuration.ts 208L 1C 38m CC=10 ←0 │ implementation.ts 208L 4C 21m CC=12 ←0 - │ !! code-change-path.ts 204L 0C 14m CC=38 ←0 │ ignore.ts 200L 3C 23m CC=10 ←0 - │ !! candidate.ts 200L 0C 13m CC=27 ←0 │ !! a2a-message.ts 197L 0C 35m CC=63 ←1 │ docs-record.ts 193L 0C 34m CC=14 ←0 │ !! record.ts 183L 2C 13m CC=17 ←0 │ a2a-card.ts 181L 0C 7m CC=3 ←0 - │ !! io.ts 177L 1C 32m CC=15 ←0 │ markdown-llm.ts 175L 2C 11m CC=9 ←0 │ pipeline.ts 173L 7C 0m CC=0.0 ←0 │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0 │ typescript.ts 172L 6C 16m CC=2 ←0 │ ast.ts 167L 2C 15m CC=12 ←0 │ id.ts 167L 0C 16m CC=5 ←0 + │ !! diff-ui.ts 167L 0C 15m CC=46 ←0 │ a2a-types.ts 164L 9C 14m CC=10 ←0 │ nl-llm.ts 163L 2C 19m CC=10 ←0 │ !! git.ts 161L 3C 21m CC=22 ←0 @@ -216,8 +219,8 @@ LAYERS: │ intake_cli 156L 0C 6m CC=10 ←0 │ types.ts 155L 8C 0m CC=0.0 ←0 │ docs-chunks.ts 147L 0C 29m CC=8 ←0 - │ !! identity.ts 146L 3C 22m CC=30 ←0 │ symbol-resolution.ts 146L 3C 22m CC=10 ←0 + │ !! identity.ts 146L 3C 22m CC=30 ←0 │ content-cache.ts 139L 4C 12m CC=5 ←0 │ classifier.ts 135L 4C 32m CC=6 ←0 │ gold-extraction.ts 127L 0C 13m CC=5 ←0 @@ -249,7 +252,6 @@ LAYERS: │ index.ts 53L 0C 0m CC=0.0 ←0 │ gold-metrics.ts 50L 1C 11m CC=4 ←0 │ external.ts 48L 1C 5m CC=9 ←0 - │ !! diff-ui.ts 48L 0C 9m CC=52 ←0 │ diagnostics.ts 45L 2C 0m CC=0.0 ←0 │ gold-cli.ts 44L 0C 10m CC=12 ←0 │ docs-schema.ts 43L 0C 5m CC=1 ←0 @@ -282,8 +284,8 @@ LAYERS: │ index.ts 4L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 - │ !! implementation.ts 1L 10C 127m CC=47 ←3 │ index.ts 1L 0C 0m CC=0.0 ←0 + │ implementation.ts 1L 0C 0m CC=0.0 ←0 │ llm.ts 1L 0C 0m CC=0.0 ←0 │ scripts/ CC̄=3.4 ←in:0 →out:0 @@ -421,11 +423,11 @@ COUPLING: java ←2 ── examples.frontend ←1 ── CYCLES: none - HUB: src.diff/ (fan-in=6) - HUB: src.synthesis/ (fan-in=5) HUB: src.live/ (fan-in=7) - SMELL: scripts.research/ fan-out=11 → split needed + HUB: src.synthesis/ (fan-in=5) + HUB: src.diff/ (fan-in=6) SMELL: sdk.python/ fan-out=8 → split needed + SMELL: scripts.research/ fan-out=11 → split needed EXTERNAL: validation: run `vallm batch .` → validation.toon diff --git a/project/calls.mmd b/project/calls.mmd index a001c05..97d3219 100644 --- a/project/calls.mmd +++ b/project/calls.mmd @@ -1,35 +1,35 @@ flowchart LR %% generated in 0.04s subgraph examples__backend - examples__backend__src__server__createBackend["createBackend"] - examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] + examples__backend__src__validation__record["record"] examples__backend__src__validation__action["action"] + examples__backend__src__server__offset["offset"] examples__backend__src__validation__object["object"] + examples__backend__src__server__startBackend["startBackend"] examples__backend__src__server__readBody["readBody"] - examples__backend__src__server__sendJson["sendJson"] - examples__backend__src__server__offset["offset"] - examples__backend__src__validation__invalid["invalid"] - examples__backend__src__server__validation["validation"] examples__backend__src__validation__validateEventPayload["validateEventPayload"] + examples__backend__src__server__createBackend["createBackend"] + examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] + examples__backend__src__validation__invalid["invalid"] examples__backend__src__server__size["size"] - examples__backend__src__server__startBackend["startBackend"] - examples__backend__src__server__server["server"] + examples__backend__src__server__validation["validation"] examples__backend__src__server__event["event"] - examples__backend__src__server__store["store"] - examples__backend__src__server__handleRequest["handleRequest"] - examples__backend__src__validation__record["record"] + examples__backend__src__server__sendJson["sendJson"] examples__backend__src__server__limit["limit"] + examples__backend__src__server__handleRequest["handleRequest"] examples__backend__src__validation__agent["agent"] + examples__backend__src__server__store["store"] + examples__backend__src__server__server["server"] end subgraph examples__frontend + examples__frontend__src__app__reload["reload"] examples__frontend__src__app__state["state"] - examples__frontend__src__render__toRows["toRows"] + examples__frontend__src__render__classifyEvent["classifyEvent"] + examples__frontend__src__app__mountPanel["mountPanel"] examples__frontend__src__render__headerRow["headerRow"] - examples__frontend__src__app__reload["reload"] examples__frontend__src__app__createState["createState"] - examples__frontend__src__render__classifyEvent["classifyEvent"] + examples__frontend__src__render__toRows["toRows"] examples__frontend__src__render__renderTable["renderTable"] - examples__frontend__src__app__mountPanel["mountPanel"] examples__frontend__src__app__refresh["refresh"] end subgraph examples__src @@ -37,383 +37,384 @@ flowchart LR examples__src__runtime__executeContract["executeContract"] end subgraph java__JavaAstExtract + java__JavaAstExtract__JavaAstExtract__main["main"] java__JavaAstExtract__JavaAstExtract__try["try"] - java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] + java__JavaAstExtract__JavaAstExtract__json["json"] + java__JavaAstExtract__JavaAstExtract__add["add"] java__JavaAstExtract__JavaAstExtract__collect["collect"] java__JavaAstExtract__JavaAstExtract__emit["emit"] - java__JavaAstExtract__JavaAstExtract__add["add"] java__JavaAstExtract__JavaAstExtract__map["map"] - java__JavaAstExtract__JavaAstExtract__json["json"] java__JavaAstExtract__JavaAstExtract__slash["slash"] - java__JavaAstExtract__JavaAstExtract__main["main"] + java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] java__JavaAstExtract__JavaAstExtract__escape["escape"] end subgraph rust_ast__src - rust_ast__src__main__visit_item_struct["visit_item_struct"] + rust_ast__src__main__slash["slash"] + rust_ast__src__main__visit_item_static["visit_item_static"] rust_ast__src__main__visit_item_fn["visit_item_fn"] - rust_ast__src__main__visit_item_use["visit_item_use"] - rust_ast__src__main__visit_item_trait["visit_item_trait"] - rust_ast__src__main__collect_files["collect_files"] - rust_ast__src__main__arguments["arguments"] rust_ast__src__main__main["main"] - rust_ast__src__main__visit_expr_call["visit_expr_call"] + rust_ast__src__main__visit_item_type["visit_item_type"] + rust_ast__src__main__visit_item_use["visit_item_use"] rust_ast__src__main__qualified["qualified"] - rust_ast__src__main__modifiers["modifiers"] rust_ast__src__main__excerpt["excerpt"] - rust_ast__src__main__visit_item_mod["visit_item_mod"] - rust_ast__src__main__visit_item_type["visit_item_type"] - rust_ast__src__main__visit_item_const["visit_item_const"] - rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] + rust_ast__src__main__arguments["arguments"] rust_ast__src__main__visit_item_enum["visit_item_enum"] - rust_ast__src__main__slash["slash"] - rust_ast__src__main__visit_item_static["visit_item_static"] + rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] + rust_ast__src__main__visit_item_const["visit_item_const"] rust_ast__src__main__add["add"] rust_ast__src__main__type_item["type_item"] - rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] + rust_ast__src__main__visit_item_struct["visit_item_struct"] + rust_ast__src__main__modifiers["modifiers"] + rust_ast__src__main__visit_expr_call["visit_expr_call"] + rust_ast__src__main__visit_item_trait["visit_item_trait"] + rust_ast__src__main__visit_item_mod["visit_item_mod"] + rust_ast__src__main__collect_files["collect_files"] + rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] end subgraph src__cli - src__cli__handleExtractDocs["handleExtractDocs"] - src__cli__absolute["absolute"] - src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] - src__cli__stamp["stamp"] - src__cli__diagnostics["diagnostics"] - src__cli__svg["svg"] src__cli__taskFile["taskFile"] - src__cli__diff["diff"] - src__cli__handleReality["handleReality"] + src__cli__handleCloseCodeChange["handleCloseCodeChange"] + src__cli__handleExtractAst["handleExtractAst"] src__cli__invokedPath["invokedPath"] - src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] + src__cli__emitJson["emitJson"] src__cli__optionNumber["optionNumber"] - src__cli__optionBoolean["optionBoolean"] - src__cli__controller["controller"] - src__cli__result["result"] - src__cli__handleCloseCodeChange["handleCloseCodeChange"] - src__cli__buildDiffPayload["buildDiffPayload"] - src__cli__execFileAsync["execFileAsync"] - src__cli__command["command"] - src__cli__handleCompareWorkspace["handleCompareWorkspace"] - src__cli__handleApplySourcePatch["handleApplySourcePatch"] - src__cli__parseDiffMode["parseDiffMode"] - src__cli__handleExtractNl["handleExtractNl"] - src__cli__diagnosticsPath["diagnosticsPath"] - src__cli__optionNlMode["optionNlMode"] - src__cli__pipeline["pipeline"] - src__cli__optionTaskMode["optionTaskMode"] - src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] - src__cli__handleRenderCodeChange["handleRenderCodeChange"] - src__cli__commandHandlers["commandHandlers"] - src__cli__resolveMainCommand["resolveMainCommand"] - src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] - src__cli__handleRenderTodo["handleRenderTodo"] + src__cli__doctor["doctor"] + src__cli__emitExtraction["emitExtraction"] + src__cli__handleWatch["handleWatch"] + src__cli__handleProposeCodeChange["handleProposeCodeChange"] + src__cli__handleCommunication["handleCommunication"] src__cli__buildPipelineOptions["buildPipelineOptions"] - src__cli__reportPipelineDegradation["reportPipelineDegradation"] + src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] + src__cli__handleExtractConfig["handleExtractConfig"] + src__cli__resolvePipelineRoot["resolvePipelineRoot"] + src__cli__handleExtractDocs["handleExtractDocs"] + src__cli__parseDiffMode["parseDiffMode"] + src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] + src__cli__buildFileDiff["buildFileDiff"] + src__cli__handleCompareWorkspace["handleCompareWorkspace"] + src__cli__handleApplyTodo["handleApplyTodo"] + src__cli__command["command"] + src__cli__handleExtractGit["handleExtractGit"] + src__cli__printHelp["printHelp"] + src__cli__diff["diff"] src__cli__optionString["optionString"] - src__cli__handleExtract["handleExtract"] - src__cli__context["context"] - src__cli__handleSummarize["handleSummarize"] src__cli__buildGitDiff["buildGitDiff"] - src__cli__handleLink["handleLink"] + src__cli__handler["handler"] + src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] + src__cli__optionBoolean["optionBoolean"] + src__cli__buildDiffPayload["buildDiffPayload"] + src__cli__stop["stop"] + src__cli__handleSummarize["handleSummarize"] + src__cli__pipeline["pipeline"] + src__cli__optionSummaryMode["optionSummaryMode"] + src__cli__isPlanSet["isPlanSet"] + src__cli__handleExtractMarkdown["handleExtractMarkdown"] src__cli__optionLlmMode["optionLlmMode"] - src__cli__handleWatch["handleWatch"] + src__cli__parsed["parsed"] src__cli__handleProposeSourcePatch["handleProposeSourcePatch"] + src__cli__result["result"] + src__cli__optionNullableString["optionNullableString"] + src__cli__absolute["absolute"] src__cli__handleIntake["handleIntake"] - src__cli__handleExtractMarkdown["handleExtractMarkdown"] - src__cli__handleProposeCodeChange["handleProposeCodeChange"] - src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] - src__cli__resolvePipelineRoot["resolvePipelineRoot"] - src__cli__initProject["initProject"] - src__cli__handleApplyTodo["handleApplyTodo"] + src__cli__handleProposeTodo["handleProposeTodo"] + src__cli__context["context"] + src__cli__diagnosticsPath["diagnosticsPath"] + src__cli__handleDiagnose["handleDiagnose"] + src__cli__view["view"] + src__cli__handleExtract["handleExtract"] + src__cli__resolveMainCommand["resolveMainCommand"] + src__cli__handleExtractCommunication["handleExtractCommunication"] src__cli__file["file"] - src__cli__formatWatchEvent["formatWatchEvent"] - src__cli__handleExtractAst["handleExtractAst"] + src__cli__stamp["stamp"] + src__cli__handleRenderTodo["handleRenderTodo"] + src__cli__parseArgs["parseArgs"] src__cli__handleExtractRuntime["handleExtractRuntime"] src__cli__handlePipeline["handlePipeline"] - src__cli__handleExtractConfig["handleExtractConfig"] + src__cli__optionNlMode["optionNlMode"] + src__cli__commandHandlers["commandHandlers"] + src__cli__handleRenderCodeChange["handleRenderCodeChange"] + src__cli__reportPipelineDegradation["reportPipelineDegradation"] + src__cli__handleReality["handleReality"] + src__cli__execFileAsync["execFileAsync"] + src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] + src__cli__svg["svg"] src__cli__main["main"] - src__cli__isPlanSet["isPlanSet"] - src__cli__emitExtraction["emitExtraction"] - src__cli__emitJson["emitJson"] - src__cli__root["root"] - src__cli__printHelp["printHelp"] - src__cli__handler["handler"] - src__cli__parsed["parsed"] - src__cli__stop["stop"] - src__cli__doctor["doctor"] - src__cli__buildFileDiff["buildFileDiff"] - src__cli__handleExtractCommunication["handleExtractCommunication"] src__cli__optionList["optionList"] - src__cli__handleProposeTodo["handleProposeTodo"] - src__cli__parseArgs["parseArgs"] - src__cli__handleDiagnose["handleDiagnose"] - src__cli__handleExtractGit["handleExtractGit"] - src__cli__handleDiff["handleDiff"] + src__cli__diagnostics["diagnostics"] src__cli__handleGraphDiff["handleGraphDiff"] - src__cli__optionSummaryMode["optionSummaryMode"] - src__cli__view["view"] - src__cli__handleCommunication["handleCommunication"] - src__cli__optionNullableString["optionNullableString"] + src__cli__handleApplySourcePatch["handleApplySourcePatch"] + src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] + src__cli__root["root"] + src__cli__handleExtractNl["handleExtractNl"] + src__cli__controller["controller"] + src__cli__initProject["initProject"] + src__cli__handleDiff["handleDiff"] + src__cli__formatWatchEvent["formatWatchEvent"] + src__cli__handleLink["handleLink"] + src__cli__optionTaskMode["optionTaskMode"] end subgraph src__extractors - src__extractors__todo__classified["classified"] - src__extractors__runtime_cycle__violationRecord["violationRecord"] - src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] - src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] - src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] src__extractors__runtime_cycle__factsMetadata["factsMetadata"] - src__extractors__git__result["result"] - src__extractors__nl__absolute["absolute"] - src__extractors__runtime_cycle__tags["tags"] - src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] - src__extractors__configuration__configurationFormat["configurationFormat"] - src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] - src__extractors__docs_record__isPlaceholder["isPlaceholder"] - src__extractors__docs_record__modality["modality"] - src__extractors__docs_record__fallback["fallback"] - src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] - src__extractors__docs_chunks__flush["flush"] - src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] - src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__git__readChangedFiles["readChangedFiles"] - src__extractors__todo__body["body"] - src__extractors__markdown_paths__headingScopes["headingScopes"] - src__extractors__todo__extractExplicitId["extractExplicitId"] - src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"] - src__extractors__docs_chunks__splitLongSection["splitLongSection"] - src__extractors__docs_deterministic__heading["heading"] - src__extractors__nl_llm_helpers__NlAttemptError__action["action"] - src__extractors__todo__inferOwner["inferOwner"] - src__extractors__configuration__parsed["parsed"] src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"] - src__extractors__ast__typescript__scriptKind["scriptKind"] - src__extractors__docs_deterministic__resolver["resolver"] - src__extractors__nl_llm__NlLlmRequiredError__client["client"] - src__extractors__docs_deterministic__match["match"] - src__extractors__runtime_cycle__label["label"] - src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] - src__extractors__ast__records__adapterRecords["adapterRecords"] - src__extractors__communication_helpers__flush["flush"] - src__extractors__git__mapWithConcurrency["mapWithConcurrency"] - src__extractors__ast__records__capabilities["capabilities"] - src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] - src__extractors__docs_chunks__index["index"] - src__extractors__runtime_cycle__text["text"] - src__extractors__docs_record__resolveModality["resolveModality"] - src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] + src__extractors__git__finishDiscovery["finishDiscovery"] + src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] src__extractors__ast__records__end["end"] - src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] - src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__markdown_paths__headingDirectories["headingDirectories"] - src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] - src__extractors__ast__typescript__context["context"] - src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] - src__extractors__docs_record__anchorToSource["anchorToSource"] - src__extractors__communication_helpers__communicationSegments["communicationSegments"] - src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] - src__extractors__runtime_cycle__parseCycle["parseCycle"] - src__extractors__docs_chunks__needles["needles"] - src__extractors__git__count["count"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] - src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] - src__extractors__docs_deterministic__action["action"] - src__extractors__markdown_paths__index["index"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] - src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] - src__extractors__todo__resolvedPaths["resolvedPaths"] - src__extractors__nl__action["action"] - src__extractors__docs_record__target["target"] - src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] - src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] - src__extractors__configuration__match["match"] + src__extractors__docs_record__action["action"] + src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] + src__extractors__communication_file_helpers__inferred["inferred"] + src__extractors__git__readStats["readStats"] + src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] + src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] + src__extractors__configuration__entries["entries"] src__extractors__docs_schema__documentRecord["documentRecord"] - src__extractors__markdown_paths__state["state"] - src__extractors__docs_record__resolveAction["resolveAction"] - src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] - src__extractors__communication_helpers__unquote["unquote"] - src__extractors__communication_helpers__match["match"] - src__extractors__configuration__tomlEntries["tomlEntries"] - src__extractors__git__state["state"] - src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] - src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] - src__extractors__git__gitMarkerState["gitMarkerState"] - src__extractors__configuration__entry["entry"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] - src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] - src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] - src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] - src__extractors__changelog__extractChangelog["extractChangelog"] - src__extractors__configuration__relative["relative"] - src__extractors__git__isGitWorkTree["isGitWorkTree"] + src__extractors__communication_helpers__fileParts["fileParts"] + src__extractors__runtime_cycle__probeRecord["probeRecord"] + src__extractors__todo__raw["raw"] + src__extractors__ast__records__start["start"] src__extractors__git__runGit["runGit"] - src__extractors__docs_chunks__worker["worker"] - src__extractors__changelog__changelogAction["changelogAction"] - src__extractors__communication_helpers__basename["basename"] + src__extractors__docs_record__linesFromChunk["linesFromChunk"] + src__extractors__changelog__relative["relative"] + src__extractors__configuration__files["files"] + src__extractors__communication_helpers__raw["raw"] + src__extractors__docs_chunks__item["item"] + src__extractors__markdown_paths__basenames["basenames"] + src__extractors__changelog__extractChangelog["extractChangelog"] + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"] + src__extractors__communication_helpers__heading["heading"] + src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] + src__extractors__docs_record__resolveTarget["resolveTarget"] + src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"] + src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] + src__extractors__runtime_cycle__text["text"] + src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] + src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] + src__extractors__docs_record__fallback["fallback"] + src__extractors__configuration__entry["entry"] + src__extractors__nl__action["action"] + src__extractors__nl__extractNlIntent["extractNlIntent"] + src__extractors__docs_chunks__markdownSections["markdownSections"] src__extractors__todo__action["action"] - src__extractors__git__readStats["readStats"] - src__extractors__docs_record__resolveObject["resolveObject"] - src__extractors__communication_helpers__item["item"] - src__extractors__docs_deterministic__targetsOf["targetsOf"] + src__extractors__communication_helpers__listValue["listValue"] + src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] + src__extractors__docs_record__resolveAction["resolveAction"] + src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] + src__extractors__runtime_cycle__label["label"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] + src__extractors__communication_helpers__normalize["normalize"] src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] - src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"] - src__extractors__docs_schema__strings["strings"] - src__extractors__configuration__pair["pair"] - src__extractors__git__execFileAsync["execFileAsync"] - src__extractors__docs_record__statementText["statementText"] - src__extractors__configuration__configurationRecords["configurationRecords"] - src__extractors__docs_chunks__chunkPriority["chunkPriority"] - src__extractors__git__discoverGitRepositories["discoverGitRepositories"] - src__extractors__git__root["root"] - src__extractors__nl__body["body"] - src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] - src__extractors__ast__typescript__recordModuleFact["recordModuleFact"] - src__extractors__docs_chunks__sectionText["sectionText"] - src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] - src__extractors__configuration__findKeyLine["findKeyLine"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] + src__extractors__docs_record__target["target"] + src__extractors__communication_helpers__inferIdentity["inferIdentity"] + src__extractors__ast__external__execFileAsync["execFileAsync"] + src__extractors__communication_helpers__normalizeType["normalizeType"] src__extractors__docs_deterministic__convertDocument["convertDocument"] - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__configuration__lines["lines"] - src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] + src__extractors__configuration__parsed["parsed"] + src__extractors__changelog__body["body"] + src__extractors__ast__isIntentRecords["isIntentRecords"] + src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] + src__extractors__runtime_cycle__violationRecord["violationRecord"] + src__extractors__communication_helpers__communicationSegments["communicationSegments"] + src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] + src__extractors__git__result["result"] + src__extractors__communication_helpers__sameStrings["sameStrings"] + src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] + src__extractors__communication_helpers__unquote["unquote"] + src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] + src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] + src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] - src__extractors__docs_deterministic__readParagraph["readParagraph"] - src__extractors__todo__raw["raw"] - src__extractors__ast__records__moduleRecords["moduleRecords"] - src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] - src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] - src__extractors__configuration__heading["heading"] - src__extractors__git__finishDiscovery["finishDiscovery"] - src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] src__extractors__git__readCommits["readCommits"] - src__extractors__communication_helpers__heading["heading"] - src__extractors__todo__heading["heading"] - src__extractors__communication_file_helpers__envelope["envelope"] - src__extractors__docs_schema__target["target"] - src__extractors__ast__external__execFileAsync["execFileAsync"] - src__extractors__runtime_cycle__proposalAction["proposalAction"] - src__extractors__configuration__fileAggregate["fileAggregate"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] - src__extractors__nl__object["object"] - src__extractors__docs_schema__documentResponseContract["documentResponseContract"] - src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] - src__extractors__todo__checked["checked"] - src__extractors__todo__block["block"] - src__extractors__docs_record__clampLine["clampLine"] - src__extractors__configuration__dockerEntries["dockerEntries"] - src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] src__extractors__git__createDiscoveryState["createDiscoveryState"] - src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] - src__extractors__docs_record__linesFromChunk["linesFromChunk"] - src__extractors__docs_deterministic__root["root"] + src__extractors__ast__records__moduleRecords["moduleRecords"] + src__extractors__markdown_paths__headingDirectories["headingDirectories"] + src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] + src__extractors__docs_chunks__worker["worker"] + src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__runtime_cycle__results["results"] + src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] + src__extractors__communication_helpers__flush["flush"] src__extractors__todo__text["text"] - src__extractors__docs_record__action["action"] - src__extractors__docs_deterministic__statementRecord["statementRecord"] - src__extractors__nl__detectMissingFields["detectMissingFields"] - src__extractors__communication_helpers__fileParts["fileParts"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] - src__extractors__ast__isIntentRecords["isIntentRecords"] - src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] - src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] - src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"] - src__extractors__changelog__relative["relative"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] + src__extractors__configuration__relative["relative"] + src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] + src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] + src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] + src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] + src__extractors__communication_helpers__item["item"] + src__extractors__todo__classified["classified"] + src__extractors__docs_chunks__workerCount["workerCount"] + src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] + src__extractors__todo__extractExplicitId["extractExplicitId"] + src__extractors__docs_deterministic__primePathMapper["primePathMapper"] + src__extractors__configuration__lines["lines"] + src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__todo__extractTodo["extractTodo"] + src__extractors__runtime_cycle__tags["tags"] + src__extractors__ast__typescript__context["context"] + src__extractors__ast__isExtractionResult["isExtractionResult"] src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] - src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"] - src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"] - src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] - src__extractors__ast__records__start["start"] - src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] - src__extractors__nl__missing["missing"] + src__extractors__docs_record__keywordOverlap["keywordOverlap"] + src__extractors__markdown_paths__index["index"] + src__extractors__configuration__configurationFormat["configurationFormat"] + src__extractors__docs_chunks__splitLongSection["splitLongSection"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__docs_deterministic__heading["heading"] + src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] + src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] src__extractors__runtime_cycle__watched["watched"] - src__extractors__todo__lines["lines"] - src__extractors__communication_helpers__normalizeType["normalizeType"] - src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] + src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] + src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"] + src__extractors__configuration__pair["pair"] + src__extractors__communication_helpers__basename["basename"] + src__extractors__nl__object["object"] + src__extractors__docs_record__allowedAction["allowedAction"] + src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] + src__extractors__docs_record__modality["modality"] + src__extractors__todo__resolvedPaths["resolvedPaths"] + src__extractors__docs_record__isPlaceholder["isPlaceholder"] + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] + src__extractors__docs_schema__strings["strings"] + src__extractors__configuration__match["match"] + src__extractors__git__isGitWorkTree["isGitWorkTree"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] + src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] + src__extractors__docs_deterministic__root["root"] + src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] + src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] + src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] + src__extractors__communication_helpers__nestedRole["nestedRole"] + src__extractors__todo__task["task"] + src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] + src__extractors__nl__classified["classified"] + src__extractors__docs_chunks__chunkPriority["chunkPriority"] + src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] + src__extractors__docs_record__clampLine["clampLine"] + src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] + src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] + src__extractors__docs_record__anchorToSource["anchorToSource"] + src__extractors__ast__records__moduleTopicText["moduleTopicText"] + src__extractors__todo__checked["checked"] src__extractors__nl__sourcePath["sourcePath"] - src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] - src__extractors__docs_chunks__markdownSections["markdownSections"] - src__extractors__communication_helpers__listValue["listValue"] - src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] - src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] - src__extractors__configuration__line["line"] + src__extractors__docs_record__hasTarget["hasTarget"] + src__extractors__docs_schema__documentResponseContract["documentResponseContract"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] + src__extractors__configuration__heading["heading"] + src__extractors__git__execFileAsync["execFileAsync"] + src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] + src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] + src__extractors__docs_record__resolveModality["resolveModality"] + src__extractors__ast__typescript__scriptKind["scriptKind"] + src__extractors__docs_chunks__sectionText["sectionText"] + src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] + src__extractors__configuration__isConfigurationPath["isConfigurationPath"] src__extractors__ast__external__result["result"] - src__extractors__nl__classified["classified"] - src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] + src__extractors__todo__inferOwner["inferOwner"] + src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] + src__extractors__docs_chunks__sectionLines["sectionLines"] + src__extractors__runtime_cycle__jsonScalar["jsonScalar"] + src__extractors__nl__confidence["confidence"] + src__extractors__docs_deterministic__readParagraph["readParagraph"] + src__extractors__runtime_cycle__parseCycle["parseCycle"] + src__extractors__changelog__lines["lines"] + src__extractors__todo__lines["lines"] + src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"] src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] - src__extractors__communication_helpers__nestedRole["nestedRole"] + src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] + src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] + src__extractors__runtime_cycle__proposalAction["proposalAction"] + src__extractors__nl__detectMissingFields["detectMissingFields"] + src__extractors__configuration__findKeyLine["findKeyLine"] src__extractors__configuration__jsonEntries["jsonEntries"] - src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] - src__extractors__git__extractGitIntent["extractGitIntent"] - src__extractors__nl__confidence["confidence"] - src__extractors__communication_helpers__normalize["normalize"] - src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] - src__extractors__configuration__bounded["bounded"] - src__extractors__ast__typescript__handleNode["handleNode"] - src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] - src__extractors__docs_record__keywordOverlap["keywordOverlap"] - src__extractors__docs_chunks__item["item"] - src__extractors__communication_helpers__sameStrings["sameStrings"] - src__extractors__communication_helpers__raw["raw"] - src__extractors__communication_helpers__inferIdentity["inferIdentity"] - src__extractors__configuration__isConfigurationPath["isConfigurationPath"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] - src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] - src__extractors__runtime_cycle__results["results"] - src__extractors__changelog__body["body"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] - src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] - src__extractors__nl__extractNlIntent["extractNlIntent"] - src__extractors__markdown_paths__basenames["basenames"] - src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] - src__extractors__todo__match["match"] - src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] - src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] - src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] - src__extractors__docs_deterministic__marker["marker"] + src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] + src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] + src__extractors__git__mapWithConcurrency["mapWithConcurrency"] + src__extractors__nl__body["body"] src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] - src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] + src__extractors__todo__body["body"] src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] - src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] - src__extractors__runtime_cycle__jsonScalar["jsonScalar"] - src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] - src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] - src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] - src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] - src__extractors__changelog__lines["lines"] - src__extractors__configuration__uniqueEntries["uniqueEntries"] - src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] + src__extractors__configuration__configurationRecords["configurationRecords"] + src__extractors__docs_record__statementText["statementText"] + src__extractors__nl__inferActor["inferActor"] + src__extractors__git__state["state"] + src__extractors__nl__absolute["absolute"] + src__extractors__configuration__fileAggregate["fileAggregate"] + src__extractors__configuration__line["line"] + src__extractors__ast__records__adapterRecords["adapterRecords"] + src__extractors__git__gitMarkerState["gitMarkerState"] + src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] + src__extractors__todo__block["block"] + src__extractors__ast__records__capabilities["capabilities"] src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"] - src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] - src__extractors__todo__relative["relative"] - src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] - src__extractors__docs_record__hasTarget["hasTarget"] - src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"] - src__extractors__configuration__files["files"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] + src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] src__extractors__runtime_cycle__driftRecord["driftRecord"] - src__extractors__runtime_cycle__proposalRecord["proposalRecord"] - src__extractors__todo__task["task"] - src__extractors__ast__records__moduleTopicText["moduleTopicText"] - src__extractors__runtime_cycle__probeRecord["probeRecord"] - src__extractors__configuration__entries["entries"] - src__extractors__docs_chunks__sectionLines["sectionLines"] - src__extractors__docs_chunks__workerCount["workerCount"] - src__extractors__todo__extractTodo["extractTodo"] - src__extractors__docs_deterministic__primePathMapper["primePathMapper"] - src__extractors__nl__inferActor["inferActor"] - src__extractors__docs_record__allowedAction["allowedAction"] + src__extractors__configuration__dockerEntries["dockerEntries"] + src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"] + src__extractors__nl__missing["missing"] src__extractors__runtime_cycle__boundedArray["boundedArray"] - src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] - src__extractors__communication_file_helpers__inferred["inferred"] - src__extractors__ast__isExtractionResult["isExtractionResult"] + src__extractors__markdown_paths__headingScopes["headingScopes"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] + src__extractors__configuration__bounded["bounded"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] + src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] + src__extractors__todo__relative["relative"] + src__extractors__communication_helpers__match["match"] + src__extractors__docs_deterministic__statementRecord["statementRecord"] + src__extractors__nl_llm__NlLlmRequiredError__client["client"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] + src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"] + src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] + src__extractors__configuration__uniqueEntries["uniqueEntries"] + src__extractors__git__count["count"] + src__extractors__docs_chunks__flush["flush"] + src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"] + src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] + src__extractors__docs_deterministic__action["action"] + src__extractors__todo__heading["heading"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] + src__extractors__docs_deterministic__targetsOf["targetsOf"] + src__extractors__docs_deterministic__marker["marker"] + src__extractors__git__root["root"] + src__extractors__docs_record__resolveObject["resolveObject"] src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] - src__extractors__docs_record__allowedModality["allowedModality"] - src__extractors__docs_record__resolveTarget["resolveTarget"] + src__extractors__configuration__tomlEntries["tomlEntries"] + src__extractors__docs_chunks__index["index"] + src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] + src__extractors__changelog__changelogAction["changelogAction"] src__extractors__git__extractChangedSymbols["extractChangedSymbols"] - src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] + src__extractors__runtime_cycle__proposalRecord["proposalRecord"] + src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] + src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"] + src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] + src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] + src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] + src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] + src__extractors__git__extractGitIntent["extractGitIntent"] + src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"] + src__extractors__docs_schema__target["target"] + src__extractors__communication_file_helpers__envelope["envelope"] + src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] + src__extractors__docs_record__allowedModality["allowedModality"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] + src__extractors__git__readChangedFiles["readChangedFiles"] + src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] + src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] + src__extractors__nl_llm_helpers__NlAttemptError__action["action"] + src__extractors__docs_chunks__needles["needles"] + src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] + src__extractors__todo__match["match"] + src__extractors__docs_deterministic__match["match"] + src__extractors__markdown_paths__state["state"] + src__extractors__docs_deterministic__resolver["resolver"] + src__extractors__git__discoverGitRepositories["discoverGitRepositories"] + src__extractors__ast__typescript__recordModuleFact["recordModuleFact"] + src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -882,6 +883,11 @@ flowchart LR src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText @@ -910,8 +916,3 @@ flowchart LR src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind - src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode - src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration - src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration - src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration - src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration diff --git a/project/calls.png b/project/calls.png index 211a7055ff53e09eea88299439549c1ef8f85eb5..63fcfd52a6fccc2258371dd9dd88fe98c0483b9d 100644 GIT binary patch literal 95312 zcmZs?b984=3YQua0w5E78In6R2>?o|(TE}68t zAVF4|wz~Gqg1+Be2WwX|r%z)eZI>R5AoADO2&ghL8af)d^6LaKNdy&5;W(nW(7k|v zFx2G!;9%3#;O@)p?1qPjo93FIrpC!1^X}=&@!FCaA8!k9i-(W%s)@Y(sIW_czg-FS58b%KsebG*H~a=W~i`{U?8j zv2&UCW9Nf#>Rr5tUUQAJ8(=2JXclJc;B&K&%;@w#KaNRf!(Q}DQKYr=48{L{*mhzr zT%hBKV!V1n{$I8LMH&w@lWKDXWdCc%3<$5?$QhR|`-3ALgBQ6Oo+dd26caN^0KWgW z>cp}CzYP7ygxcV=fd?6(aOFjq%$XeS3Q9Mu*rYr3(7}Y!z(cLq7IJBy@?pK{A;1~FjXd)(kn%I6iR_4}^e`g9_q~(O+zgnh7h3SeF0_E&<6Ws(2iGk*st|#q~k$hh?Mg6B|Vk{B#2Iu~d zC_(QXWY1vSdEG(c3f=5;TtQ;MR|*)NZ`#8@lbJ3^*<8FYoAniMq7_-OqF@vHD$fKW zV0zpIe-dm9H7TjfHzf)#Yz}d-`Qj~(ppghiwh)m+Z77nILC-YAavgDrXGpsKXV|V( z{;ze9u%gXSBzn;kJ!j8Ylq|4B3aCGLlWT_y1|HpGO=I~EHVAo$mqh=%1*MA4_-$|r z3Io|hpF>~Ukn!7#Iw>+#WWZliD`wf*G%FWaFhPKGActDS& z*(%=%C`&Mf<sj$rMaV3X3%sZ)_j{wM@Zu`%gFNK~=7FN3*Ov zP-fiyO~?NgvG!MG8uj0AD2_h{3I}$nqme7uQigc_yrt9mlccDy;D9E?+@bmz85rts zc6h0$97d^8uiLPdq(Y$FOC;=rU!NnH;Y5QlrW zVKb1vYS*?$n;39c{N>N+*xA4KPvwt{guy1<>FOex{Yht+m0t=e%Kjw-)xaU`KEwFY zb{<9Hy=*mDCZhjO%|ICYDQEcRJ$aHOF-u8n z30$j+eZBgMmYTF~mJ)d;-hMCD8}hm-uG? zTEZCRlW=~3AnyG>WzQZSgHsl|-*;~|h)2-#-u$o7fn)99Tr)qnZcHPom>BZ!Hd2gE z7tqny>}(U2O8t{>r(kI^Gl$6db_KwSBB*arOiO&ucZMSDb+FoGh<7`QxpSU$r=9&A<`mwEg zJ`UaN>3N3qr%?tS7w;JnA@M3Qzq}rUoO$ReOv+q03L-=Kg?rSIRG5i-(yfyNId{ir z-zZ;XR$!t=N&T%&sq11#y2<=^&_5#oDYUQ{`GxKFk9F6-^j;lGupG2reue%*eSz<8aXy)2e=7|zPwDuWtgE>LUl4SWMX{zVnpm5B>eY} zphAk?d<1%WjXSG4^l1zxkY#O*c~Jp}vWEIU-b(z>HyFLW%&nF6rfH)IU+EKo55=@c z$!}uQuE$vkqQvZsjaSG&|06+SEJ56@W#+EDm2SmepCadMlf&1xH}1igHp%e#W-1=_ z41Zld{a`Jt*rZC3??nFZ12IHtHYVd)ZyRfPTH^NgQy5}mejhmV^Lj&=EA7fKQwSl$Gm;*oL2eX<-bg$kxW zm57-=(}09SV_Jg(&}@}m&RakJpyEi+w|atp@xYknZxy&R<~?ot4fzW_V4(<{Gw3cS6U!JMsw;W7lLaj%xoDxbRW_}Q4`sK|DdA30eamq~qh`g912;~iP9tJY zLbT_1Q^uHt#5hKhevYno-_HfB)yuea0FnOI?TdF0i=!u2JBPsUMWYr|QXaq0o6b&^ z22OSLupHp!Pkd3vpuAJ)Su*_5TfIK^VJf>TocsDWvA0-E(jzfbSaX4>|LzzxNf;lNLX8|pMJTXjHP zhwq(o>Z`0bKYe*{;Kw2M=(u`@5GW{I|EnvxhYK&aKC4bJG8|A?cfd8wnb9aKthvzX zF@RL3$B20sy>{N7mb3YU^^HbVTFsm-RH)Y)JhJ~B5}9v z4PicjEeiK9ifKI04IW0+v^y2C%Rv;p7|V5vO+6Hb(v0tKCqx1%g~TsIrSvf8ZK8|_ z#qffRJ8E3yg~BQ&@%~y)U|4)>z=JL0)gp&9Ux~mAw!y5EG5r9~e**jpxmLy#hqp+6 z{|f!Hm2jnRBse(jMEP~b@Eb0iUEpFJl^e-!B{K{qVm2Rg&oK%=^1e!oA^<~;^?IcL zFnYYjX$!teKy;Q-^PGgavWF2QI$kYS*53g7jz zR`-fZ&@QM+gG!Zp4ZN%{h=_^ltXtDL%fukn+AG&}7i%U~>(`ri;r|+T>7Nc!WQDHAS-3$gpzkwJlC< zfilrHv0X?WB%CnYCZe4ok2zA!D{U?;qzJg^gwV&E?CCb|mBNe~MLXmR1dmn3i%O^5)e;@d4MrcjsSN=a0|x-0!Df*?UuxAvVL z4uwJFgZ+-iAd{n#!5w{zz}-LnkFHM73=3)B0~pDF#H2&7UO}OpgCE6}ecmKy1jfp3 zpb!NCa^Mb(cMHv`N5l`I&Z01HNpZIg`~&_eKEFuyNxz>O*a67|2LWsf79D7kCOcp!pGnxlo#EETVvOWd))VW)Xc~90so~x*+4$Vz;HXu|yGYjBl;CT4w+DO&fU$UOVn&I% z;!8g5a!tgC8B{LQ&JBkJl7vpqeUke10XRs&Dvc_v*(Iz42r|4TCxZqsI{Z6{QIi1RzT(#ir$C6dI<4AOI4m!LqC3A2 zilArEd_?M>^1wfk94x%J^JdafqM+UpjluSrI0IdYd_g?4s8V6VSlBX?lCYG#jV6M& zg!;&1TvNN?SyE-#pcG!kBobAMj3iJ${jm=zlr2lDM{Uv&ELj zDPY$4Gtvp$w?;-DgFsn_|7m!Y_XcIpCqSjT($a)&&x0_)vw6Yc`v1WKXg^nM;;h(m zrNn}+P5V@u;L)hF?2xC^63UuPP$BYUH-w?ZIbN9Dcx~m+A$CT&rE}hj3PCGRq+pX~{PF<1ZY5r31b4Q40b zEEdUs1=|t~!kN{xeT3$|NHb57VFiVDdwO*wlBC|Z#12ErBrF+9&pH!jI}yB+jMS%8Jkf1L-I)WdSmWfdwhB4JXiHl(~(+G$ApL&-gB+b z^ZTpf6Yb|%?b!6@9b8k8R}rwH6o;5hVfxRusoV}n0DfRydiJY)@Al(ziG=^oIPw}w z?R1Kq-d*0ZObe9}qIoqJr3z0hk-^}_0{&)#_|<(+W(sAV{UT}aj5J}VbAK3YXi__* zCo!q18KoU8I_`xQEt7#^Bg+fWAxUO@8;IJaLd8YE#og&%H~=+R&_^o`j0ZPO*rK(EY^)YNX3GB~a4`7b!Vazo-eQwTGjlAnjD}%A2>aWC%VpXOl{>(MvF_veEGj@;KRk+P5n^HQP_D*|kkTaV zXn~N&yaoBVC8?=SH1}HoIvBv|Lb1q9AcqA|V>4ReJ2#aG7<3|50D_)ox{1eQ`G|CI+h9r0)Ea$;?aS5$amJ0Af&_xcS#xp514Y zM6QB>&`I$E|Fm|9re)%BIBOe6{&`d24f6In*@2Rj+`=SA1nbM0S`FnhT$YICIqw#V zt6gj}mn=mK^nN$e>u>IpWGziHK2>W%&Zx3osON(9^@^152`TzVzBO|RMk+g}!KZM} z?g#oGZ{`JaTI}-0Wbp92>=Xre(t5ercGUbI-Pv<~H&b_SC4%pL-k%mvd@^lmG{-pI zd0n@?w-o{J0WWkHv%GyDBaHqZJ-1)%x*R`hkoJ1^{ArH8TXjM(;UW9pR~m@??oAO_Ca~`hA|~1F8@o ze%Bf}9nvsQ@#j+Z=by=j?oLC1;p^bF5<21g{8ra(<0(1P-PLWtpMpQ%w|#D}s%>@U zoz(pQk<>9UaF}K?b4!w{$-g*{2BKB)uxXJnK^K;ejKv92VuhF8c1SRz&=)HAH}^0g zH?&uPRI8XuAj;K?wy+2{Bvkq6k)B(OtHW!_hFR&bS#Uxv<_84z`naSHqIfr;7p?;9*ca_(aSHCvub2# z&+A0bF%G)^5YZwaQgdD%yaP~Xgvpm9@HZ`OJ+dt?ZGEOt2^gRS4z~{M~M& zl1QxcgVJozLwtkOpN|6-BnG&+Swxl)>h!DGh#Rp!c=o3Ea`@%Z+Hh|rUL^#~q%BZm z9MG|HgPIAvS|&pA%FWt0o-t&Era`#AjTukqwy}u{eCc~!Q|z!eI<<^2Zf@Cr@DNQ= zYGJv$wbSqFEEntN$SV{4wEsRhW@)uPIV<+uz7JFJ7RyTSvttkG27UcJ-KG?5n()Tk zOxGWUks=QjpiaF)O6q$Yw~Q-=krxm3J`U~tq2qbk=2O_sIx${WCj6RC$@w24^GXCi zFyi}Q@x5DJ=<_qkIf`B9`M1s&2{<_dRmeGxEtR03O}$ecPh^(20ikE`$@avBM=7S{ z2PUWesQ$Fg0%>-=7BC4)OsIr)fCiVbgJMpwCK$9kVp*%7Emiz6O>=gdaX8xg*(l_E zez3=`4%98kgjG!q&5Dv@KQiSpIKs%-DazN@*H*YY$~-W*V#O90LanJl<5BZD(Qt`% z#pv4b;#)V?mLw&~|4_tWzf@UX=JU@)WwCAW{1@!jKJF-7{`d&7iMajoRF0Oa15S*N zx@en40quDhca$p_ z?v#3}V)B|yippeE&33^pPS>QT*$9-JZbq$UoNEyc$DWMw*Vj#g?{Q!6$NJJs>Y@!* zQHJv+x|Nf0fOS>wCa20yCA7bCQfN6|M)gA&P32C;uJ2MlsieX0eZ)T02VvyFh(RU| z2x`I^Z>{`aD3KH5SsXZ{@k)zQVz%I8_K|vgNCdIs(79g0uJ}v$gR5>k!u@A?!`=!o zW4~`l8$yxtQ^_^5EVz_kTD7c@1Ag#X4u1{jkCK8@?aA)z#Nk4e1@!5$NR9;#F5mW>%L8 z)sfArK2ao)itI44r`N^(RbXW%V^XGt(USdx4?9V;3FZFsJuQQf+wlzLU{D-WPI|Ho z!rTXMS-{f4oj~!b9&~36b*gE*^1XQfZpY&nq)v3xi&sVkPE8HAf(a6j5jF$P>ZD6> zTG^5^T37nenlRy~k{VKi?Xl`ho|a~_tqL1KBvl$s$9}dgCZ=YTJcFC$=ov!QNRBG_ zZ2s01nk{W8Qcmd66qy2ToeQFe+^y9wu`hl4Lb_)M+_xe8=@oCNUhrAXcJF9ywyou zb9I%+>}(##y?%dXeSLjPR+K?-Y)SbDSpokBu*9a3lvRiqG8`INy}#h+&hP zWe>ufC#t7UJ5pwvQ<-ni((05#X88y2&*%ybI(6IXpZSbo&-yMa@EKtCD+h?uV|_2z zDd%2uXRb>2>}Y+ZmvJTr_AvvEByXm@&pPTd;%3EbE*sGoaiR6SpBiKIZ^s7#0q0Xe zfK67~iG+mv0|oH$U)B$IV|hZ=_gOxEn0JqF-}hSjm;N!i0GO(Ki>N7!LBQc0$~ zZT#Fca~$`@ysgE4M@(cDDc7}3l(12)hS+b&q>^bTH8IS>KrkuB_B;EoT?gUw2cS=v zL5AHdMxL840Dft!BsppqL)UwVb4})k^kXwW|X+K@_d*bps zoA2LC_+a?4G)61!xg?kgAe_XUut>!;(Lq~ewqwK2Hr$7xirq5A|CA9_Z-MS4ghdvB!TmzU*RkV@`j0-jd?b-|g% zcI|-_toBfYJcR-;k)Yrw{tz|ORl2n8-GdSAKcBVh%=>%@b*-4Yw!3tHSG_GWanckn z7yB8`Js4)aiJ}GtvY*`IkrD&aC&PSBLLqHQMs9`*l6>dW#W?oB_{q;TDj+b(n4!#O zoNEVOoF1RxK6t)3Rg(O}mhtDxe9FXXU_pW<(afIy5E*WkV~`q{MX){9|RN}c+| zr)qCWdOOb3ZW-a9Dp)I%5g_~Yio?Hg6R3)KbbmA%^vXd)LKKkL)cA(}x;Ut;b-n0N zt`bkF@UcnjM%dUP)TMW`rtYzvBdZwu{S~I^low6)05tDI-S3@|GO)*6G#0aZ@N4*j z6ihS8k?q!jd}-l){X8AVx`e*#y|9k5Np_u)lE+mx$YmMhDw~G5R5Rd8cKA1bt`-cd zQy;Xn7} zW7#sEIMFs7x?1IPls-Ky{g+`N=C3fRQ4XUN&#}B$R}p{qDC#2EUjoY^UuJuYX<}h% zou_7-SI)uPNWKE?GuXQ`_ntJ^S_f`}+*RsU&vAYaHLXP{pAjKn;jar%6KU1$*oovU zC*lW<+O?7-{SLO1RzTKH+1c*T?17l!w zAUCT!;qv^jLgAvt0$9v`(ybX3*0F7?QbX0P^6+|qvvR=s*tlf?;QwF&Y*!Lx^wQO)Q5#BdWBAAsnK2d+^)DR#=%Q`!&`oK{N|1S)Jvci`h8^|=wD1zXVuyXfZ3;Tr zR+UQD^D-&anXVpKy}1S}9JG43(;(C5L*tpTM;NWp{qe0b14A>yccrt{v=Y}7S#ctw zjaLLVJ?B*)`}KtipZ*Of4xBjh9P*}10UW}(jy@wM+*z?V3gUxBU?>OkpuBZDOhe_+ z=P(QIR#8`UCaQiugbg0a`n;NC`>_D^CsnAv{ z{J9<8)h@744@C_ym%Rr(Jzrf^^*ceIG=N~G85K#cXW??8lFb#(P-gqqn_bANFY8P4*sOAI$P ztcEjV4i?lxkZS3#n{Kp6?PSw4LBte{-l=+9Z0=c1WjmZ+x6Ec|w0(Ihx4T#{{48wN z<7r>Yc3@@+VIqj1IjMEwJ#IWEs}q^&z|QN#P76eU!An$QwI_K*;V_sv*u8RFj&N?a z&@1)%9z|adp>)K%3U-xXK7!>%pjy8YjveyfY>Qh3HzQ_F_e92igTKb_{SDmoDy^qS zD983>UwpCer*<&}>U6+n8M4mH>xk^u4Nxnwx zqCF;wO%k2QZgP)FktBz)t8=_@fT-jy9jw+rlgPsq@>Uh9J>#D%|%A6ob0*3OAvtc zL2KbB%;avJlP$I?mtca83O)|;e!U`|8Jxu~EggQ={>uBfr8)EC8ezyTxYJKaBtF5C=H_FZ;$Fzs41^ffqt_lAC{uZjCv(SWV$Qp(B^dMI z8Q9OWo&ZChLJMai==`e&8WE2I{!2#gpB96z1Y+NVN+@<7&ZpxPc9~q)% zjeGY1KVd+a1qftq;5(7*8LZ)Ws}QnX~9MW9njg})nSa-fYO0okYq$|Ww& zgEFJgz!WDVIVQx_>mY9UDF-MPIitnvpEwoJQs>4nl8FXfmV0{eJa(KnN0iXh>+*I0 zt7#C0&I-J*lRpSDb0Z_bY_(cJjW`fV&0Nl|{6X;A=~^wEX_S>9;gK%xl;h5SJr?L>$}WHK75aUpkoe6j;)%NHJY=1iZTbkiI4fxAle~aY zNDzmRaHnOo^YlBsqAkstI%Q(TX2yyQESmOqLzfay$!@qPvF}s1vNNhTL zbBQG)C$S5BnPUkS&!Vl0djel68Wq0zR?PPclO`bNw?nk9+*rZ7TpdW@LY)qE!M6PuI_AHofd>DLOEyN?8y9PEo76V zj7&(x_1d{i?<{8WF;GqFR;w<%Cz^(ykq56RhFMaPWVt-dNKrG@!eQBlnj^!dM8Gk9 zcbYAe|0VAjnb$I$3xWfFj<-YpOKUo6D59^8v<)=;EkHt+EIQx#Sh8?I@t*?|HhY<} zwSY|K%$+N6MB0TK?t)-U$Z87n0dS@{BpzGS2QF6|u_gF*$9|n)fq4GEs-xx&zEq5; zP!M3jXBLjjpHxElegoDHpBOxy19F71;zdeEmd#V`o)STq_~n$$zrdl+k?Gd^Le4&I zxTZ_;PWo1?H;Gwza0u~tL=4^k3Y%hJVgI!+aQdHT>^^<;{mJP!T7c@Tyo4t2 z&>8uWhdR$M+Y(EvSs>*%2}+=&dM%{}qQ>F;yfpT@g53P-qfg=6Va(r4zjrB|{dI0K zr(KrZPK`@5G)X%NFEmsHMDW;*Baq2@P<%FDUJB9gAA!9hBA-|_gK^V5B?@~a%maj8 zgWy8HmX=KU*QlJG5DGoaMGxE&v*4}!2SP9RLV4F$zo0F@QF+e!@n6a>XG3K{6nBi} z2nadncd8Z^g!g>d_XA9VHTQBkpoqJt!swNgThS6P$8Z075x*aI_l~#Vb@*d^Rk>#6 zUx?111;Q^1CxDA1bf0nJ#1Yg6f~=oL5Sl(sTFZL;tPG)EHNl~vlH{K~M1lLi=s(iiC&=V|6w|Brp^uKY^R;!2tX$ z8fKF9jDuSExW3TjN>JkLHx5I+fzpugpJn6ykiedP$5zG7lP`Fh|k63 zE;?Q4MR$a`&)jvG3kY5y$p@|AMLfep);;dU0l!w<4H8$e)s?0wLz1`v$YG&dEakrT z^tXr@S|ZB_-qVD!>xitJ8}M4b;8L3+Ogg7$up(D%lpj&+Yh2sHbh%LPA)*V;20x^K zXViW#nlQ`>g-tb$P14a1oO(eES;iT^vBe6*x=oC5GFn7${PkQ>uY zSuwPhF=@q&wyd=GZdD6o-p}yeXWY9Fiz4%WmKcJc(9QXe6jOCs&~-sEMpE|FZl19* znfOVDfb8Q?!sD!VSXe6^4(p9Hqn^uN0e9`hVN`LAHHj|U4LArn&Od}s(RUxh`{QEO zu5hJthCgSX-_4LZHIR(wgKvdQu^lbj+I?!ue2ogM|xR>xATFX>{Z!I<&{d!f% z_MfY+hsZy}2kOZ`g#ZIuWog>lzw?x1^QfvP04N`wo+{+|XNL)dr>DvMz^ciIW2X!~ zu7Z84={10)(ZJ^Lj{SXjdH$jo=SmYnZdXl*zK89b;`NKPc$7QWu4h?1&C>+4ZQS!B zw-+T_0FdMfM1C$ShWU12$0itHrsFP$TQ!8yM)l>@k~~XOb;g_pET_53;k*-HktG5V zyW(iG+#-1IRf4VuCjo6k+#|%o2YA3?bUCERx1YUEKU0eb{gH+vC!`on6u{xMKp00e zVL!~bNFj0vHx?fQ1PUeS0bP$DP9!eYz&D-Ls#0TMXsOKDMA9lP7!CVavHL*C6kWKk zgljHO>%bEUg1xc$fnt5_-n!#pqk~I|F2+sn9rDS~hHF!nd|0PRXEw$h`XQtZ0a z_VB4G935@Y48BS`FV4$BO1NFo2EAW#$$^_fBs!DBqPAqCM1Dm%&)5NJj0mf^d=L*E zZQ$~$hO6WpahD>@#w*XA$GK>;l08GC>lw>vNrWSBLT5IxTUcl_Pau@*cCLV#?*R7f z@ES8#5))H%S4@J;Y5%?fe&xp;^6>jmQK!DNk!q1B&5)41Jj46P!-Nq9_-upmV1nM?BmTr)e~<>R?;$ejlqec zDFXJQvnNMu-bgoCzP3$3jyFEAZ2JU$)-H1yl&b!s1rVje~PFN|zOnh}@ zox=gHMQPK5k?d8}qO2g3jAGD z{{W4`1F0)hwd+=_YG|H8KKmB=h8jSIGmrOE%#JQw_54_WpceOxk2A5MtkN*iA`*V~ zdA`;*yZ7M9?ckIyS>4A4}b(L9E8%l{X*%tY!T zwsARw5<2T09vl{#Xq&N5j^=vg+Gm|EW#h5<5yXIetKKSwiis zk&3Y4t!v59nldv+5ppy6|ME*%>RQq2fk&+RQu~C#3|>}Z z-{`p1784sbd_YheZ-=vd_i3EJV^pj#3pT-vvEyLG#=_unbq|ZGd&O=}E^gQ7c4$UJ zG`&TZv5!25o=H`?^?;|Je+yM{(ulC*T4m04>cfn4HKn^ZQz@w=@9_9>iFmdJ#MFyh*}4A_uLnBrl{9PC8vy z-e!2n%UpM3Z;Z*b>YC_)O;o=R*{%`0Uv+M-!e6F9 zb2X>+-Ho%4PO$4BiRaQEbrwjn{i)x6vXqGHYBRT0%`q`7J_J7|5t)G!ix?rIp_eut z{zkx{0q#1eor}`S!t$1<_lTPQ^un1fEj6a*t@8qUHr5Mf3{ykoqa2-jU89Fn-{soy z&r?KXObj^Hu+VoP+~??y$H?P_Z`*lB*{fD*Q;Qyq7^rtiJ-BFaJ(+1C;|fPSeHy8$ zKwVN~RGFK$<|aU_y-vI$KK4~cGC?p@RHC^`A=ZE~`RYDJkqwko$GeDla=)+-Jr_Y! z5z{s(u#ZBX@Akr)t0}C63`$N|mY&ahZ3$O||3QsDGg=b$dL`xU?np`r1zmd1!k3_` zG)z>$%lWn}Lr(m#MD%TpYj2OHGYaM#%jBi_m{Vz(-+654mk8N6M#DQXmIuyI$!d{?P$Gb!Cp-l zt>}FjQ5EmFR_D)7R=U7_lhB4s0Kd$NR=lT~kSfcpyS$eM=wWp|a(@g8B&^AO+SYxW zEdI%n@x=Vz-)f{$-0OKp$6X@r51~)ufvZej-e6)lp zuxwXno^v1BkgcoZpolN0v8Jv~-}>CUw~CSlK?as&z~)A-ryk z8Eq_-_Q!(x7W$Rt*XuhzIx*IZEPanMt=eYq9Xe;vYh#y9Y>Xw`WKHv5hEC-#L+4CG zq}fzc6YMek{~>lXs%HWZ>NLm?X4EO`+n3i;BwzxB6fkJ4AM24&{`kZIcvA`u5b714qp4&j@HL$T(I5Cx< zwV;8fpXx&TfLm<>w9pii!axZIlomKAdkfXpjf00(JFOJV) z9I7ViWRZ<*7URgsq?O}6(x7Ty6AC`}NMeT4?(A8eJAj;Gqku$K6Y zGhsin&$yIf0n;eChnlcMV;h3v#c{CUlwx7{tA>9TQ@4S&DZ)9w$KsIK1q1f;dO8zL zpwFLeQ2#`Q1WDTn5AfwpDBXRWTMv@r18F(Bt)8B_pp#;^7WE7sUJ4lHQ6 zw_-z2%(MxS73KX9I34+O+3Q1q!QVNuk1Shy!NymN>$9dhFK_}2z4p)OBa`4 zqH(}#z&weWF{_IUAd(&nv=oR0p90;OmlV8@D&B{?Cd_di-=F?}zOyi2zc_y0=v=x2 zxM0_S{1DhtN>}3(V)aD1MlkCO=y&O-B=Uti_gJZjG*uayLBElf z@06!PY1CkpW{D-clN?;G7ICj7vuAXw)ao^GixOGVee;P5SyOfw3mjTwYcY?V*$Wt_ z<+jVIm}j*ta{Ia=aIULtS`io#96lze{E2Y#hJThMxB7ldw=1^Gw%fM~;3Nf=A+vX)#{a93SXvKbNN3sEE-6i0%Ak>6Lc=&FWE4$RW*j|pWHIv7oEPF z{7Llo5(Akrrp2T>Q6MfjKurvNOd1MeeK5Ez7NT9x&+Kt=y|mL!08qL*vHVZ~YiES1 z68nILrwGSC*w%KK*wNZmdIZ=f<3_1sB{jn%VW86;Fr?^D=}hPR(}OUesQLyANFStt zTU2q=;5b!;bmv6EaIFH2PAt+_;Y7`;W9?3w3a28mBPk*#@hfHX+P_dLg{HT&-xt}e zj4;SmPA@k~)}ou`9!>yt8~Gb%;c?Rj{w`B}uaO~;ijjz;q!v{>ZQ|#XcZo(#%x025 z@FPNOEN1sE&c@Talq61E|J_)`VTU_!NNU|equk24k#Ah48)z{kworo9P%u9mg{KEN zSaZi?;6S{WC@U(2U@m;&2A&{10S36k3jctGR)1DE!@8d1wBfmwd?&v5JKe>`n*`U0 zN@IbXR7L*{Cxt}1O6LjW>usERQgO!iELuLDQb=7 zK(fL~IJ+=V<^xE?9y-jBk z^&VZGkr9r@?rsQEPd)!|U4BFtM1Tm5HHY0@IN^z|rDjj9lJkrlA_IYKL+N4c9FGr=~ z`y!)FK(0jE$sV`;YR~%lBQ>ibpkq&5#kUD8Ff5SHWCX_}S=-Ek?3i`n`#( zt=H=kf3{iC=OthWHPbvJ%Qi0oaL%{W9UB50vnwzcvsfB7GS!2vm91xf-WT23>m-Cn zo97sam~!i!g|U~?EG){(ozBkQ-qGTPK&a~wYoUYa-+*n1A);h80^h=84q3Qa;ZI*I zh5W$#=~b5Mf9<)C$wA?|GhKsdC`p;_s2phg=!Mw@V>>0S&W@LtB;9X8XPn~ z@jG~lJr;LIE;j^VnsG>CID{z4X!d*Ed*l-$FCBFAb>$s>xF&vj zO{2M~>4b9!#IRPGN*FI91ZeaD0ObAU((Fbu)G~)QOs~W5$*obnQN>xyqw7RZRR-vURv>d=9x}`j*N_@)9S&3Nb z`tJ3PVb9|N*BlKY4tT9FyZ~(k5;5!wznelv&U;^AAQK#1g5+*;j|M_gwn1DgY~Xx@ zZrKa8eNKrga3)-%SBzFKc(E|MXtA(!kCw(5O9fgT#tjzdZCna&TncYNpk zm6N?qIAF2UO?8a8f#Dq1{m+0%wH&)vcKPnRAo~O zdo~hF;)4Z+zKIzP+Z1Wi_|;Zr4h>7f(H+>Nc>yTLhZIX~4-o=(YGxI0Pzwrk972E( zzaCr!E}VWH@ld44U}%G4dZp-V=u1d41h)}FDFi)u>+Zvk2&?KPJcB`x@+HODo3KHG zqP88U;JL=2;EpmJ29+AWPX9=9gEHJl-%n+ZAuu^3nbRW^6a&asJ3!%KW zgE(&QUYSuOgK?WH!Pk*-rs(HHlx=RF#5hnBa>^slBro|}A$=iLczS|PffZeMtw&M} z0{&1XOfAw$?+mVQmm508#=rk=be!+9P^A;fGsDw(_}mg({cnq1&F13lyr;}ulg+u;O|Y5^HSr|@h0DjZVk?d^5C+snU>BQ3ltTf)Zr9vzbm?;yzsc?WU}h{%$Psothh zM}t50^p-`(k~0NBp;?u-6`N9>N{6@6E#(HAyW?`sr9``y3eINrT4Wp~_u3&JP)#Xn$H<@&YDJ;fN$J*28lEUVD)8@tE{LvW4 z)F=#;^j&NKULt`ZWd=={u*K!nuGpK^z;tFNee{?#N3KjMu_#ysOpg7r!K+%T2#%7M zJ6iQkxEER*O7ahL_Ir3fvT%#GW z7zitUp#DnfOzQrs$) z;MxBN%Rn^0J_2=v@;LHq;YOiQgvUvxM&M@183XR>)T#NAkpw&l*lppDm%`MVQ$qs~ zwdJ8n*DwmhqXAn6e`qqMQw13hfPZknkT;-lj#N-iCX)x<6zT+O8{R>qVU}-=eCDu< z>e|Z6I&^ioG+HEy!OKeMZUbZ+)Oj=-!~;;BLZu%RO?)DF*l;)i503hlr9GHjBy7=V zuR&GAD?>Y`7fC(p3rU0a^llv#)bV1m1Xlr)4+u*%tXpHhfGjT#la?=!$Ku-r_PQBa z3)dq%0j6y@2twSpqC#fEr6AwzH7W zmL8BzJM~T+KyQ~lrV;YT^Qsl0{gJ7gI4z`80*^&2GEXj%*K2X2vO86F7rPKhJ|X2s zvj;Z~Gr8qYAj={ZM}+#IwCPm81fTE~I4YpxU>w0u48xkAUj~5|jfO$)_0*@Kd~~M( zp^9!I&}b=hW=uk$aG>X*(Zf_c77OFbj_?Ov0Oc@;n85oh8l)Dr-X!2$-3o5fjzntYVYZ|WP(_;J7bDg-`}M(^WlLG#r!0hccI|O zSDuT9!4dbDcUlD!FSowDTuk)m+R#_TFM;Rkj(rWg^cW^vT;fdYbhFRwY&J%)DCpuN& zAZZAf6^1`R*gE9~O7-Yy0>(IU&H?p;E`69X8dUc{z!wgO;_*oL!C=dx<5$~SaR!*S z2KCreMn_}l(7aWE&J1Rjv9Tl#a6BWx{pWI}<>fRORX_F-K7|^Z z7pP?khF~8Un$UuWrXE6U$qxlPSxc=n1oe5QO!AFntAO@eD3qyTs)c4l>>bSa9l8lJ zTb4~=2a=Ioa6tPf+E=MP)^J*-i#}jx8kIBBsuuf3=$y-Zp;YX^pO>0b1i{JAnZa}X zJLO)k$kTflcm1=$f{+ehsA-%@Qsc)CjiVmTJ#0L(Oq3cwzoS24WMn56)*@5QqIAxl z#ve>fev}Z4S!B)@c-QQ`W1qEpv_p?&0^GEkT821+<~WNf_h68T!xxi@eKyhwHk^n2 z|2#k{E-$a`-#<-UaIm}z+WaTYBiN={RScg?8olF%=_eSwhzmO|Fv71?Duc4ZCf?Nd zM@D-(TB&rslNK425;&exdpZVtQEtYZoTFbq@_$GZZfxYCn}KKmz6U*wFeDU;qLiMD z(OOJ$fv5tRg<}=m(9%*G?46);0b|6XusM>(*n$gfY!pB#KpX! zg;lt1ct*T8yerT+;p*@pAV`7f^c%oR-j2|$)qs1eX0rv%$(haOVSolUl!lDR7>(yM zUI~U0npF*-a08D&ejK{``1mN^03L&ncI?>f*w_fz9Puj5^C*`qg2o9W3TVv0#=*0| zA3CSQ)j8J9xDvFl`S~>=GGiV0>j0K{KWjF@L9T59Htq)*-hhKrK>v=^e6BpTn`9FFgz`zPSVVlP1 z84=PO8@U4qrulF;Dl-evi$NyS$nOg;%{&bE`Fs&74J2p3v62~{K-e?a2mC~;l}TwP z0AVLiNm#B+CaAGK$vFqTD;%%TFRGKYTWTXbvm87?6L#f&`eyMdw>E4eFRiNP>Qzn%AS7uG{^){z%U^MG=Fj-z+o7* zzJiTgKsO6eQP3xVI(Y3Cb%itHF!KseC2EYJ*E;dgol{VV(Q3%o6zC-$QUV>^UY%1&HmHvH7Ihy6MXIv#y1ddu_$82wDFEF#EeMmm>|)- zNi4>$JA9m{>&RIH$_k7B!<;>)9R~M<#SKla^i#k|Ig7`_4K&%C*@whI+6BK~+USdie%ecUN-%*nD;q@>ypGlR%B&AR& zfemEH;~R|@4yov5kCqHvjt-_erBV$#4%kLu5`h*ox)?zVvt&VAf}f(%km*=wwHZ37 z;gUKkPOdRr4~#$5WBXj2dXFAG33UthBQPE!9ZoK4bSM0@3_kpR-O8 zH-Tj`V@{JSfR9R7)2Pd`i9qw9?calTU3lrcP)fMy2c65Jq1%^E;MG)Q3a#Ks%?d)$ zd52Wo$;W!)C#Gel+4wL~pHVt(Bxr^-{}Zhhg{){!a|7BY`UKFS%7eNwi#=uD16*Ke zhlykkD7?tps$bpQ+!ENUFV@Mj&V`!r5`#CWvRsU)gK1_0VMoZ5XJ+ zpPgNX;oKtaWVD-u*%5d$Fi@f@gZ2e@`9{1$rJhP9L5<+8Y{+Q=7YHo_*&|egK!Yil z>-+XiVxq_sC+5(8>N6mNb_)m4)IF-DV|g$P0tYSVoCglf3^wP13bU|~9vzLt$;BdE z&RFsX^)}RX&_@{8Uc%M#EDg_4snN=SEt|U3ne%Xm=>cvPOvCViP=Xcb;U7k7fZ;fu z-WVB)fr-be^ET{(a$>O%?1Uco^wTFVyX+EPY{4-L3oCFp7zlXgiVhIEr%o+^A{dE; z;T1rQL(Kqzw`s|6pU02SUUJD^c)w7eiA0RQPv9xx(RhP6)DnH^Rj4Hzt)kI6jEW5g zKYMbP@H*z^mXpaCix)=W#hXy!wH1pMu$O`P9vTpo20ub8rAhXT!2>K}&=TOe$aaC+ zGZY9sK%r2n*K3zwerWg0J1Y`bTV7tH^`OueZZ!4BA3ye^Kl=UT0s%KN*~Tr(1h72# z#>58R5e8bp+nJggbG_+ZbR(0=gN2>CH3VsRv1z-ZOO2L5bbt&2Nrn6$%6#f(o7umA zafrJ0#wZ5CSv=C@>K7i&qyCQKo~P;w5WG+b_NEr(%A=>KRL@kP3{a3^;V zH!~5p>g3MA7LP=SJ2dW~A;zMvjkwP<_Xl@zZUCwg{O#GZ%?^TI3uqb!`D3l(EMc~D z%NOcgL$fk}Scby3WrZ~I&{}yoJ9)#Hk(xXM!1ot43bi*pHR z=kxO`l-eh3pcFdkI#|Lt!5%Uzayk8kZ4aHh4anhPOqC@ejbMFvd@w=q7B{RMKFI-# zDnVg_a)eLo$Cd{pCZ#8KWrY##^)GU<8shE|#Vaf8peLWXKEtO&r|WPV!WZ)*G#YGq z7m;6?0%P*9GTG~}jM11!r}Mev%oDuXQ>W$+9^5<3!C+IGpI?RR~j18=DZ(ter*?iD#52YvCl7dn6^i+cTBfH&9miA4X`er;o#kL zcpo^&SKh3LiFt7k%4%IlcNUY?qokk_R)|CZst*`V#0tcvxX|U6dAe|XmFXFSp)CB} zo;tO7wtY&r4U>@7ZFzv0QPi4Epu{kz751!6H@)Q*k%-enKRxg9D#D-q$*11-wqJCV_NRaP z+1I`9C;W;xKBBRmnI+;?CnXGCT$~!#4>EKjOS2M zG%uVn9D?N~7&K@<&`|SfMF}~FUeMw0yz{=-yyg{xpoQaY{wF8|RH)y3$KQYOL%#*p z0-EScUh-V_>t{am@2`IK|0jD%IMyaRgx~$`f125se8nq%5M;r>{_9s?`O24yVmlPm zHa!s@b7ci+BoR~LB@&U*(L`=l353PlZ@=q>FTBMNE1q^k&91F&(DiuDdZXUx3I+v| zAppYb*UGB zANi3N^*CS9BXN~Kiy5b^SC7*J6>~>GLjnTw!g2=TQ+h%l_bQ(M{_i_~=!b4If40}a z`l9X&^msLbs14un>=_1}F1lQ98Rj%Zy4FY3tl4ZEN1&hqcCr8f5CBO;K~z#Etb{sB zt(AR3#N71UoVK?upi$G4<1NwCIf7hl^bcu&o!1)tQ+w$9`Ov0|uAwDKSkE zT$!3mk>LQx!=&giBr-mRqh3$8D=apExmp z;J`FLRRc>0G<%S%WOpO8qV`(qz5l-Z z9(~rcuB7Qe?GQ*L-r7=u9!U*G^nS-LFQ;=kFnok@B}MdHVX9O&9Hp(!d0^1QZ7Thm zO1Q-(PB)!eSfn5!7}t(oQ0Q=X9{7^=MZp)aJ)lFM>8=5X@a$JbgKK+709tFeV#Y&l z>7i)L>pxSo^4bFN2RG3?AAR&_DwW*SA;}}Pf}0uEV9=x%%$8+JHX9Oi%%t%Lyf>RM zUT#_&4&Zx4P03)p7j(%dSw1(o#Ii&JUZw2DFg^Y3p{?rKwCq#N<^hwqP_)xc z_}cR_E3*U z4Mz1%FV_?NJ1v*1#bT*iZHRQyKIZPg)=}H>ah&(x*Lo+3arpbAu~lS&K|B#Ca7)fJ z*Cj4%vB07+wuGKdYj$?={`(*Qu^)S>@x|WE7#P86`LiP0G&5?8IYqGmO%~S(&&Y-D z$;>y)S|Fpd1lqYVfYz&|R*_laPq@AR`JcOg;0M01b40HiXw*oxB!OD{;SYc6t#AFs z?qWamp}%_L8-F$s@Ne1?z}E4=1CQNw(>0C~94(&>1khUG4qx&T^9~)dVlajrBL??+ z=B&>a8$x59)p|u5MlWJgN*1bOZJW)z&+Tolxpi9uSehj(y+_-g4NuF1Xbs3+-O7We zj8;P!nQZcRDDDE@-SMVizLUuqGg-FBF^CTjhlJdr<{7KbnW$* zzSDyUW${~Dwy0shXPPB(QgqQnScAY|L7Bc z{@>8+`W4k~6jGDf?){~lr>XVzHR$&uwuiOlgvV!FY*T2jB~q0kPp7N#)oQf{uzJ7t zYw!E#zyFpJhFNZd5M!Xe{i~nkA3Xjz{SAX+2Ux%+1(}eO~dl>Es-*#ll#`6N6@LOMvi?XrN zsl7^bd};xo9mbkcPV)E;br(`CEqj&aZYLdnkF_|TW_jjz+;W8;Dd0Q#;w|43(W3D> zUOcSLEX_^&Lq68JxD6i0PWEX0{zgq6pP21Q_`xGLwVCey-Q{elcevPX09n1bxC*?Q zV?R)IFlzKmoG{T@UJ_jRMzO*^%)A z`?`^i5GhG`DXM0YV`2I1itDLNyI+Jydo`pgNxe8$%n zwiLS8pr1YL96o726y2s_f;q0Sum)6LK}~(fJO21%AN`y!u!ZH3=1)EN$04G_k*Kivuh#UGwQr; zohZK3JmI&xyvM=T_k={2qsa#Qy0S3l4fIy0`@gtGlMM3gQ|qO%sSNv?TMuaB7#Rp% z&5n!}$nM6#NnGDL!8YUd%%4XSBoKb-m3=}$H1DvTNv1fV&Gl9W#~i{cGyeiqmrorARsG7N4F&2vigUT*XKw_m)ajv1jvxB;QWqM5iXl0PY)t5<^ zX_C(_Xl}zswKySqQCsfaL13c#t-Jp3b=O^OC4$C`(1sDl%5Ey+vNMcB#RxDXy*qV> zvabWZE7%ksK=>6)`#e%lt;47jtU zbmE%9msnqU{F`_E$ID;-V&W#ax)K1@951KOjJ!`x(Q&%$ntUS^uS z15Bzr2JzvMUK)}7sFyg@sz$5fO(th|knroLitnsJbr+)N>uXeMlY3UlMFDheggJPr zR8AzK{Z>?QKr^x&*Jn>wC#G-gf0WTIh4!K^SYSC$xsgum8L&vK=mmSC0%qhC1a5Ie z2Z6^s)35``)?uH{^t6_XGppR+Fd= z{m^aK_MLd&`JbO}Bo(4Y{GM`ImBys>Q%h=UY@Z@GoATH#R~~d6-^|WFc>L&Ei6q0m ze7funsCDn*!>LMsV{y5Xy5Z&<_xGQ7n<;?@0yIGwWkCcuLcVqcR_cb{dJ<-bfJ@iw zji36dmyu@i&hI^{R~xNniv$v$*18%?`ihydkV*t1S6njs?Qh@Dy0)qMilWvG9oQGV z`<_R2y_i=$K97>Etg6R4Vzyp+rD0E7Z&dO z>irAL@TSHTef-K>k8CCLrQdI44}*=Vsnj>W`M0Z!jqg18kf*p_mtzNx-1y=b-~8jR zyn3qwizATC4S1oMmB&slSJm2TiFkafps1yK{D598_`G$|@4xcMEz8SmjDn?W!x$9o zXkzr}gWoh3C~V~Ot?~VdMy8cYdeT`k78mllnh+7R8*aY!UGMr;s7e}i=-cIUu89tt^i{8V^9MipR&0pPs*;FhzH#Tb%S6E*8b~D+Pvq*$ zMqu8=*5c-~>j?H`x`pj(to-Z|HFDL^-^xV6xu%~m8yX;=>J-6xfYm+RLhs&^n&BZ=e<4;Q^&2otd|O2Piy%b zk3OiWO446kN>}~S@$tC0k%NBQj3i`rqoxKTQ{&fMzK^)LZ~?PFc=g@;p^f!ilMg`$ zoh^HKVXBJL_uujGY~Jf7@#&HJ+#*rDC0z{r$8USi)kBn^og0$`$_HH26gwa>qs^Rj zzV(xByIBkQwB>sr`Bu8UXIfoYmq+7bvDB8ex~c@D&B}6Hibh6LwYjIOfpAC(3zFB@ z5{WD+O8wxax2_$ZSAqgtjTN0OP?*pZ|2nQKfD7Z{0xEPGZ@6+d8ZFX}rNW+jk3U)~ z>)uwSxSq|*qlo~m@MA}_a$;mW>hbzRQe*yfadawl*`en@@x*ZuDsTxFz|EX+;j3RB zJA6=j=;?+0{E2pI{Hi0jcq%LUVuocNqhkczsz`H;2uvkGG3fJo-}=^HCaSXV)MF=~ zxPL7;6<3s`w0L|;^G1@-eclW1yZ!dDNsqORfquoMmw)4PpKA*BT4>)j*WWPel`)>r zE@MSLw~6B`=UH!?OY|G@cLeYX(z8!|_kkzk6Jn(vpP4>*+1?PSJsA5A8&H!g_kQK! zb~scnwk2))suv$lIK96?_jo8%B~@rEHDPSruPImGaO2oHiEd$a9#U5;Z6#`q9XS<9 z%ev@|C^ubmbDZo9K;6Cf$wfgfw@AWMT5RYcIpFato>nW6U!IK}+S|;mdAy`h_9b!0|-^4Ptm4{IB9)Sz9Mq!KrJ)dwG0 z_U@gT4tmP}^Nnv(@dCP>e)-|&C*-;NPd-&?DqblO^;YzW>z)XPOYx2 zk;(m1IqPkE*7EtbCP?G{g9o3#{?vW*%a0hkG+hP!c{l%Te)ZvEV|i&^3yqD(bmJ*% z^AD#t98iu7*N=hq>tC2e|gM4CEu!?;`_o|0uw zG*-=d{Cjs4T3(GbeKBwD_*{GHV6wViuGggSh;F@oDKQmk&n}fCQ^}dheco~=ee!fJ zF&33UT@}>zQsmZ~_GU6U_FDCpRIAJ$fBKOk+;(j>F9&@s&-FJwKUA;Onk_s;ZD~St z?9o#XWLD>zs@D_tmzO{=Mv8Tx;uoUf!1_r;?p=4}mawN>YZXw~!X>=o=%e4eV?(Hx z(n3UOOqDqPC}&pPik1VzpEg}b$ z+?8Uz6&{aDksGht2dXI{?3R?dcrsI1wk9)+W1(t&ky3)Z2|vA{MywJKxT4G};2Z&Sca} zgjCGCzCNGM#71Mf2jE7@B=Tc6&{5j9Rs>?>Y z`sf{xr7Kc0s%JBzKcdvtYj3{QSwMFAq2u?jt!a^PEmM*s;iO;I>)CWQJRZ!iw~|xh z>Qj~YrThH(dH6Y$2+RJ|fh#ZXGLPK%ox41q{OY=z-1GaJl79dI5CBO;K~(G;F5SXv zVdeQJzCD-sm)0)7^#^C10}9Mi?`xhqw%GEF@0pNQT~xG@i5sr$@*2AR^Z%$%MWvFU zHkIpN^n$Ve*5_t<`SFJz%G6|86}(AFBaO^rSrJ;qFTwQv`WtRx?{sBl?UGCO?tU*W zVkH74+lB6oTF_BG@KFw6D#7hP`?G)i%{RSg_2?b<9V-Tdx~3$fS}g-JbiY=utKOtX zuSTzX*7djFe)qGVeXZXgqn(k4c1cWzyp>{^gr(%( z+rIDet+_;(SC4)7p@)fo((kR*T6$1!E^R22@n$}!1r$+^M@Pmk+Z)s8=9ZZnj7D?9 zt?Xsl${kBwn;Xdf@+Uf=TVX&f$0mG!?Q8d3b>um4d-p%|M2Q3=W13zSr1JV&Bc?>9 zL_o`wm8&nm!B2#jz3hc_LBRm78m^lw&M++tbL$z*v>9g9l(gJ~cbrmV`ns_K35)`A zRUiR>R4%NhuYb-Df^iRK7J?NrD~ir!p1cqAIRJLp#gh-6+{k%=A%QVWDoGPFfwkic zb?B+3=E(Io9}I%R&ru-e{E@kYb4&?a>ex6&7Ge+Ibw^HZM5I=^Ej0A0anIsXS=5N< z))&4cSZ{!(W(P%OIeYB>ic}FIEdZD3S_M8`I zo_h4ME90D~!2nzlMjwo7 zt@_nUsITa0)pEh;GAhB=TII%~snwz!8@aaMS-H%5sd^tCkExT`;=T0tbhfTIA#ANw z!@ht^r(#$Y%LyLzT|GKsb3|QVc}nu9dELUps7O1P1Dj}yr57^3)=F0dBAr=LrFhyG z$lx^Dsy&Ah8Ry;tm|U3!88$2CtS`)n|c-GRCif?+Smgw*y79T278FvqaO-_?MPe9XEFD*zDoM`*7RQ zDIEE7b(0ZCx=y$Ab{gAbebtzml8Ibvee6M#YBrZ9rZLEzW7o=xpyfM54J}JF8NDN~L!*LCbKFQd==fCJDhQA`%nx8uMZx~$%Dmx|qP2XM| zIV2&uXaCLoDW{I#-E60kV#LK&A zTC6sY!z>Gp2p)1s3H9h5&D!ya>9gwtMUeR2B49UgCu=W!{)py7MA zxE4%5uF=dBP3nKvqN_^+IS2cjniaGG1FjKkYBV1GhhO&Qk+CgUJ?{L*myVven`Xr^ zoUu~L1FwGVn+Kor*h3F}=_{YazJ{N0F5D{I-uJ)YXKsA%EqK@?58iwKL;q{_k941Z>ve2YAas2+`=l}l6WB0&gq6+uJFMH#GLzi?t#eXfVJV4AIq~CPIPaeAL z2-!LoXXiiv#XqIl`3zw)GjY{RUiQlF!|u5K^Xu8CXtpuq>#eu^?99G>ny`ep5q@VG7eGo+u=N8a)bpoc6lQ%ra{d;x2Fp$QBLLDy z>S)Q804v_l`3#*Fat5$2_a3~(%rpGv2s1`>)WcXnG zGX@`X89x!X86hOtU2hzfv%a2(o1q+o7KsFdQO)D&F|Vr>U>NQ@8}Iib5DqSlsR&?O zp`J%=+_s`6+O?7&-Z;|$4D+Q}XtnB`s$m4oQEmn}Ie}7!hKYnZHQ*SJ@QNummK#+e zm2|zqM}09O4U`RQ`fc)*gffWK?5lN*+Zuri)>|R3Hvq&6%dL-PqU#py55?d`w1^dB z!3;*_yw}k<)9H<|u_S%D?e+CsEEXCW_w()3TGqSGCxwSwf(8Je)>;c5D`yBM4B73e zJ~uYY+ySqi-CJ$%1{BuKTTf10bN9OcT{@`KH-UqXf1d zEaSs4#V&K|?_REtp5>tpL$lVN#dh14jYuG$k)hi=*>8P51hpYzqCBJF(#-yCgVt*p zPiI_9%s}&i(&(SDkYpgBfI+-g5?d{qO%<4O%(8-D-!V9Ksn~8ealaL#!y8~bh9}Z7 zLg{QlagG!;-GT&r2tQwSj6-zo0y~ACyc(f|A9VB4(PYoFip5H?SOz_k-wDJXv@B{# zH)cmh2l2|dG^w?EyjaYFX!UT?3|SZ>WXfB7MaNIN_&sER->Uly)ms*EgdIm-+oXO+M zMb~mV?u*p7#B?#iV&SlAQ3giRB4bRd73~p9xM9``MYRa*g=mRHBKgZ8cz9w)@5-rV zIro?Wpy+LbpcRhMCj$D}SoLobhgczSMeEh;*fbcGh_OnR1S7O5)}eh?t95ujXyMRe zL2R}g3N(2umyxlyaUcQ&svZdV;6l(Tpa$Ru;p%jObm$bKFW9KnO1WIwTy<58g+dWH z-mxHVQ_Dch4~3LOB8K?`&Ky=BG(&TWS+8jhvd8@}t!ZN;r|OwdH~_;R+$q%o=!n-g zmtJ6+m1c#lv3G>gs4)7#0j-)}mIGF%Yx5POUl(3kFiE?P&c+vx9$oZMZ7n+o`Wg&7 zR1?F1SJh&jO;Vq}eL|IIb4`1n&t$UE4Ho+&d}0%VpT79T|9QhN{ub#je{3=-_f z@ZLbWTXa4PI}<96Or?^gjJ`1ng#2T%7#hu4l!MW`Hwts`0i)RVPPkm0(7 zN;S0=qLt9t3EGY*qV__yeJv(QKGgZy0!a9iKh&fz&U|zAvKM9p*6T8x0ox`Wf{iF) zc;hM~(kcaba4)0o@D%!mSSONDOz$~wItM_v9@?nPl`^q;uoQx9CAL-#`q3tds^R^u zu5OHs#2gN+;dtvDhH&%%Fm~{mg+eKnN`_+aT04>1Z2C~C)ZqCsebzSS_&w2eEeTq9 zsZ@n#6$~o<=F8nE=b__BpteCPg%ch1$!6v7j4-sZ3}B&{3a#C7b$Gd8M!;kG*(Ds$ z3$GO@J)CAT@b`dgJVUW;^*G8Cn5(NkW3_#U^$F^yT&}^Sl^InW&FmtCPKvpXF#(2- zOeP1$F1Dw44cN~bfPNi;0qPtyw{DA>qvf*`p?BnRMb^|E{nr87mFm#r;3{ysB9DOj z#~+Z%1;>X2GvG%bK6@1O^SLS ziqbNIHlM!~ zl@@zO)3&ub0M1`THtEwiLJ@ZQ{eG~GP8 zHGF6;R#`ec;Rn{6e7>}iZpP!I&=}bMwY40mWc;LKFdwly(cQDa+#QccdFdL6fcAcY z5t$bdE&#&sLILR0V1cDffS(5N%H5>P>S_iQYfvwsdZ7b@CJ`87of6PUDwQf2bKyj^ zLBOcsHI{KRx5YCE)SaJS85xPgZLF_nLGq4|5Av$kdnCv2P!VVaMx&}_eX!*eX0!?) zZ^WC4*(z(+0W74$W+Ubd$^zOMXkZ_6nCj%~V7W9c%}JTA%*Fr!5CBO;K~zNta2osA zLbU@Ij{zW!f&NFhqB2;eyj~9yc&G-UDS>pHuyE!tQmeP=-o-Q_dNUozE>=bCbktGi z=2i|Im_qL-xGT_BVL!YG!JZP05T{KXPiL9mDW7Ee^Fld{`2!^h|8~{14M?x$<+Z(g zr?}+x+Wh=-A^`({#Or((%cUXhw78hwyLW=6OcCsfCa|tJj>_1k`kBf;(f184>9~eA zWy($M6EBC&1v(vkWz`5b#@yn%pGc$GU@U($6_;lx)WZ(-cqIG`6IdvKG5)kzc?TE4 z(ye45I=8kkqXrR_0@1-bghV?wC$x&fLtrLey3+_-;#)h@?5*Z4P^+A1MdTn@dI1k^ zTdzsHcv9T#G-hX)puamf29N{LoIp6U@G_Q=1m7<(f}k*gc^ZtibaZH-=cW};Y*0b? zt_3cIvL$KFS3|ueL^hp+Pv{z8I0MTX%&el(2w1=wEqC(dJP?!6YK60q9l~Pf+MHvD zNm}qp|DcV7Q4BdJV#Q~}y;vj!%UQ4UqQIgaaRy6h`&ZFn0tYO#(WB(=L}MGxTf&`K zSHz5AGBz+67kWA!VwyP0;Hup?c?ROa7@uh$N1*|OwPB9eOm2W)w{02jjhQ)~$X0p5 zwOTD*!X&+LhL0VyGx}Nsjb>${!%A>0xXlh0%`Bi!YM;^h0+-ESu<`wax-icYu>q03 zn$8|15-g4iUn}f~`Zp;kx*wtM1aGv5RlLCu7Oethhe5|xLm-+Xi8!99dX+4X-9y?O8`}C#2%6iXwb&G2~9r_Xycj9GKwdfW=W18E%hh z5%kd*H$xkfl}8<}hOLX!ILx%Pv>_Se9kAMz@@FBT8a+#}Ua6^l(Zz#hD}}7_iQFEh zL%^UkI10oLv|BLKK-Zzk&5UM7^(f{Hr&FD_PLr&vmd>oei-5X?XDpX1(Cm}RSTq{8 zvPGE|F6PSx0ty&VY7FuN-3z1hHY5_rSoni7;e|#bAt(W4i}lw+H#oF0L1P2?j9f3& z2zpe|{JrRV-a?OW_y@;O)eCirPPRtPBDwAQq4_&@3XldEkX(LFdFIGKgD)m*HTKcP8Nwy}b{JH>u3@AFi~-EpXGPP~7>i;h zpD%7~*?3aV^;Il+x6*<&3^poP}NNmAm-Y|Of=&3`8_7Y1uga2V#3;Gt# z*VoAxq1h8h@atDu902YyU9IuvESGb`tPC%K`X7OT%pjbsyTvsZ&(@mZa1Uq{!vwR; z`3o5f82f?hz&8TOWb(8xgt+(8;q9Omoj$!dI-1~}UwQ(17VU-&RAG5DItzZaY>_6w zOaOBLP(a}-Xxj5rN^WqfUbug-PNKpJUzvL>n*V4FilNbB+#dB)+oZsA56%YN@xNo! z1IsVZXk8dig!($OX;OB!t#=ZlcDP0sfW;Fw0J^TH>5tDkg_U#Ipj0nzlL2-FR=w~C z?FZ!ig1QXm82AJvlhKipBxU9tE)*RRy`?*ZtApVQ zCia(KehEy5(Py?;1Pj;HnS>5gmJ1C@ZJOUtr2Y0amR)G>Gtsu~7gxU>-h;+JvKh=D>OXG}YCJ;@O z)7p->*6q%@ET=I?7CJ{dd`FZgP?03INFa$-5%UXXiL7^aG=b}$Jh=ee4E)irMg-X0 z+%i-W`u|d9!U$rcVqZne1+`il3@g}o;18rRE;fwQCz_cV<741qRT_WhrM#?0O->DH z2H|iBSp?dfV5F!+&A?8=h2pW4LC8JeV2aidT%Q%iB`OIl@C&I3dZbBySn7&E*%6*M z?J#+8&l?*BU>{Sd1Z`|)fSuTJLP80EsRD5wFY`pu7x)*A55{8E;zHZOK|g`15h`eHby4d zQx_Qbwz|3wvT@IziEWP*@CcxOL?U7AgKciDP=}2Sng`6ri$%EY3IHpaj^;)e<}#}@ z-VU`g+lrMIRd0T^ye|m0QbRqW{s%Nggp33~6pGI5EGIKnqS{z~t7Rlag(eCoqMk$j z7@!Fm{1%o#-D%l?f}I)zjtMpoY;8DZP&sCL5Muk$&E)*;y?dvv+#wQE^{t1{DbXvm z?Q0veTnHFe$XxqzMN+J41oKbAr43Q^5ks>wI9F79S+If?#%K89QNgHFe!7hzr0~2f z&JR8Itj=g0PX`OLC1Q_Ya*suU^ID2%`FZet0lNt_cq7ZQH6mN?GL9?=9Y-{B#()L@ zdL}g{HsI>manNJzELk~EoS1{*ezz&Bgf@N<<5n^QW4SdXIK5UDgSM3g4nE;UU@f6$ zj*9D!OrkL)E*_5rgTuyiz^y{99y+wI`zPoXP#Q?2$;mN?6EHMRbS=X12I?x-I{QbAAEapiseB1{DP|8B-6ph@XHLc`1I=Z%+f$L9IZmCLr*vIkQ3F;@sEq;1W8i?Psj-W% zuHdq zIH+?3p6LKDiX!i1#F0a$Iz=ZN9<)u6a|pW<=6Dtj?YC&xz^N%3uuh*|y6URK4%KsM zX%*gfG8y02jS$9G^86+9_k<<~4HB5+iAA{L7b@H*eLOqesn z0B7;U5>i2ED`ycK-6ul(I(2H1PRnI$5U-jRX^ zX(1O_uT&c2d_~R-DnFae(>x^Dj0LL=8->E_z{#z(1fv9+6|D** zmKsCZphpj|{cUXI;f7JnvdjTsT&5w9Dy1|CT1?=@24FE6h_g-%V44=-eBDqv%v2PO|%JM`$D1LDHM3K-DgHL*RYGh=O_*EtPJ zGYoudYgw9sGXgpcNT*FlSQwF^8gY~XjSGY)+zCe`c`Q@3fT|jDz|8nag{q8?Oc`aB zy7Xz(l?S5?6^|9vPByQQdOlwQsRFM6&c#?IxPaqbz^y+0^ent(kmT?qun zNDPCXX)DmN^Ma8P<~xoqsT*OhZJHp2<%CdC=YbnQrw3?tpxs%tB@3jsIZU8Wo;5c? zw=)TP?(hmBTx)eTgIX3kjh!215}tHlwbe=5CBO;K~yzt3)$ix zw7FC2x|8J?!_Cpf2fMRn8tym(4u5H&U_m#4mIN(f@Nyn_pC?Z)?B74l9|kQGx)`Q4 z1K9|}3bYg&J>0OuZVX3Bw29Lhjn7iQO(#zL3Wq^y$U|cvM_olcPhn?_Z(#FEi;7@L zq|M1Gf3R*#BCTOFXG59C!@}7K#~cd6PzyW@{GPLspn`cb;OZopGLboN;kYB1VNZrS zipdoir6G#8z~ye4e0~9M1T+(vXzblPA#FW+Shup~pde+Azc{=yPbo94IyLVgm&}f2 z>K4CX4YK%Kk)?)5(bQB5x)K>0&`B{5mSYA4`sdnO2JVfy6tID{-;8F{+r!bY-R3P| z8YA$S5lpbsR&%qMj^8#@0xef*Vbf{O7VlHV3bn4_@i?Lj!d1RN1i6M(yg17P%Y>HSbX3p`;kH4wfLh%>LH5?$VeM1H9*Waaly5M=qSqRm6QQAxB^9S` zxEHfCcTWtCV>^C)Ztvd7!ImztT7ZRZ7iL^ILqN^U%#6E)-#LRz_?-vvs*jak(p22( zWM0KoEp(P^{y_6bVfGs#WFP>HU?dX8Tt>s2#eeY^-|@cpy#-IfwSU&vb1)XtU@{Xw z_jAAX$xnU|CJ*GyK!*g??v60z&|pBcWn1g0{LT zpuzm(KYro#>D70=>-A)ZfHR6Wyy0D+{p=rK1PUTl5j3#B{L2rZfvMjUf!$|qZR2nL z=HK4?-nYQl&wu_aPd<72o$q`DY~OLm-BVLjKpsS+;eP57bX#C1Frx@sgsCanwDXe9 z@VU=@`RLKP=RWsYptr-!7Vgtn($%oH2G4NOvY-9g-~7wJeE;wZ8!*6Vc;dwT*S>b= zZ~VqKe)DOTY?H~T(3%B0-Y>;eLq@9_1f3|1k8=^y6fJb`l%o8 zKKL`A`R5nC=vH{q7)d#}`OVF(0A>EzV^99*kNz)cHb3(-Z*Df*fA@EP0`t{>`IrBm zn_GSNyWjBi(=#L-y$frK|!T*C- zdHCTcp~1jd-_Je*)%Dn8Pe1(d6R&#Jk6@F4tGwz}Z~lwFct1{_Z@>N9mtTGvD1pEk z4DSUD#lGe>Z~fG#{$Qv4CzhAf<#LVMpnYKM9uNiumjR`|uC`;B%k<{O5l6yAOWo zL!Wxjd)_oQHUf?3Lm&Fg+FJUhFMWX^=y0F#>`)rz1%VLqqH`5I#XH{d$M1aSukfO> z8^Z@@}Fk}Rt7v2aoyuq3V&e|{=71UC-S_6>+R+wRQ zJe=hr5e04Keee7Dpa1#qk|97@qIn=(w=sI2IY4Oq&ENbHxnRM(f0#2Fb1Abz0GlSi zWTj3)S5XX*wWi4uRoi5ii^6dgTz3ZywIEXNyYKNI{n795zLWd!fA}x{;$J}vfeG9MaU(?PqHjxo?Ch?fhKiO`S=wyp7OMZe37PPMMphmfbw70a&LPdY(XWsHRfAgUsY2dfK<$WLg;M;%|BU^{oS&QAw4a2zy zX_y?I$!&+`2GX@yEPwdJpZ@*df9vp9WN!MFkA;ej9CQYaE(DHA5iq~V4o2HU`E>b! z3S8yOU%um4fA!VmEP!*<)HKaWDmyl4ltL##8neo>&dau+ft2203?TfVQT^gCzVomD z`VR+}aQgJp+wWdvFsIXRbM=vlKnQ}9uBRCGm7XSYgu!5>-&N)UJ>Fbyo73W?qh`B5y+UUr4e zxhb9AfMF7SmljV3`GXN!TOS!s`-8kwzs={UOL=W0jc4~+GqY%V%#or)=3N{d-kIR& z(NmXQc7RapEnRLQzjyC6jGbWYK74o|>~B=b`q~(4#twMBl@YF^EuU71v`H*ZyQPg! zt;s&a6tc0A$F(TxRg&p{73*5Hk+A~%I-u(fhT<>8M{DdW^aYiS^ivd|PQoFH?>mT| zqN5+SR7;NAb70{_#N)FW(ZZojINn)f`NWC2OD@?v_>|!xitX{K_3r)i$77Oz3yzA2 zU@#j^^mXHKNG;%*}1WiCc4#^ZUw)RGEEUIu#IPb5V4)sZY+NCF^SS3fai? z7S0F|dx_+#60!_@EwVTZLU;(#VVB+@&=yX0q&H0FC#KWv*!4xy(#IVIwCe4dgX>I6 zRf|GCKgO1pcZ^o6bCMZ~mFbH&rlIz;1$pcin)YEgr9ojxyv@+tZYWA2KGNwmizmaP*BO55^Hq{5qlJT{ z0txe_FMRL&zyIg@6^J@2_TQf3jtqoDv&)OdWJ{Qv{m%YF5tjN7iDYCrn7!;gnrwOsRUSTH`9Hq+*`NK{m!kn? z(|Uv1;z$4dcmL1-`9+uwVLR-ensoyvYk&XGfB4fs{lmzE7S@7^)M3(Dv|F%NJ~rU@ zl@h56J9p_+P>{FgaOOZHoDRhdVKFziJU*V>o_TcJXw=C1YD$#MULX){Vy3TrcBqI9 zgWrqKTTYJkRttL^>?CZth%orps|iUotw$yr0ss_Vw^GI{qy0FF zgmdG-y)x_5J;P>|aLAAW0OQQ>{LV*T{gb~wv;T6o6Qvm=htl&ASuvSWe1oOpb?wg%m8Xq^;RPJe^8V1`C3*G3RuJTNf zEZ0Z5zU;s-HV{c_r6&4PKVG>uGTyO2^X);BnyHB_`)RPP((f-PM$2TU(bFF8^H!5% zMSjmVtifzXaE2H__zkk(Nj~v`$L}ep(_$i4N|*hKNW$+`MW56v6-i5$QpsrQiUUJU zUqP;Y`@jC7F*zY@=+R`fT3q$U4?OqkBm6P`kf*wmesJ#S+G2V9@D0};vb{)OP%5UM zy5pft*hhqzrf2JVc(OA8a6NSJCAYo6aXFvV{`TG9&aSU}VlX`(jp$`DEM9WOi^IB2 zf=hn&>vugUYZ*~V2vY3E8?JZWw%C5)dw1j;nm0J%Q`ZmQ_~I}T?9U}U@Qu&qWnZJB zB*p@*ocg>MJdZy>35%6X`a6#tl>;Fo*Z$f~&@%hJ3YzV1|l&9A8hTE52_M*T1z^8uZ z=Uzd1Iglt-RrJ)#wQ@<1P6oUUzm!|dMrM*hwNcgr@yXPI zgOj%AVRZ0~{QVC-(u^HE7+QE@xuw>%U|4Bp=5x)!#GV5;UD<=Kko~^9Z~sbgI#nxH zYHA~yNY+bvt>w{S&?FlR<;0jTTQyem8kw1%zT#lYe&or}kkpx*k?cY06t0f|>xndwJ)oLOXD5ZqTY@r-@@ylP<`!@W(N5A)t z4KEQbfsjay$iNv((N;FCjK$Qdd~hE&fE#N<}=Z3?9K^;@}`yYGo&W(CK zn1Is*x7=_k|EoXfsa4Y7`S!P#N(wAErE zvj5rFU1GCU`2yaBQxBdlXw72o=I8y8^Xj7dt?zu(E487Pa9B}lRXsAI*3@WNJaWx# z#35rn>I08Izz;)V-K)2jm&%g|QX83id?x8#J-u|@%U&6GUa0-RV-MBSOV#B5=Uroy z?Mg@#Yt_5&eHf^>lgBHOLwn+F|B+H7_|TMrsvx0U%>j;v-8W%V7sOD;V!unV*L`NSvQx4Ptg z`n#WBkPeQK%xbA7%8|I5UDL-#qjF2Dmg^P81GdXrWa@d>?eYA=FT8>k0*!g;=mSr0 z2=&ZUwO}e9O@u^!0c^yNz4Aqs zOywJoJtbF#@K{7|6-(=7DKsMs8#Qsn2ZBxj<9l%C$PJ?s&`ZP8nbD+Qsp((8=h1jL zmra8XIT8(&S5N0jAeIO#M6T6p;fT+F-Lsq`v9NIJj$?VDv?TcjB9F$CN~N%@k$}`v zsL)AS*D=!ySt=Wns5|K!>zWh{1i-Z%Y$TgSW;+OzIS2}+DJ6Sl32rz7Wn!!Nz z_+o1^>RZ>PNOENQ%E+kw2ISSb6U+HRv7(Y@MGr@$!u%>p#bq(vSYPu@r{bUs26Jxxtlq;5U3&(E-N`ycz>mshfdR%q{NQ1%K9UDAtnDc}nT<)>#ig8TOFz47YH$dIou8sgI^RjajP z5h%dwkNn8%|Lvc?ao^WJw^|khNd@oZ;d>rgPCxPEKmM|wt6^;$$QNRE0k9ms>u0sb_P7r0J4JZ>x2p zL=|7PWy~!6{@{K0J@&#EJ_q%7vdaKMb@AAvC##v-sy;G3MQZ74vA9$q)6-(59zQsJ z@bD!OyAYOF4MpyF-NC)JxTo>z{up{DBYr27d{dnmzH**FiP3 zx|lcMX{hDQ>~gvtzie+bUu^At!Ht(;lxHXuG#nx$!CJ2L(CkUIC92hmpH$LW(6bDk zhs3YCZjYna$V-oW@BW3;T3~<5m&><;AwgG?F}0W_vQRIU8oC0Sfvm2nB&d6Wil?RO z&6?V-6xuP+b8dVwlL>T{qx0a_EsM49-Se2{FJv~tFMNSbKH~uWt#5t18Sv{l;RP?g zrDq97dw%kPyPiDi@rV4;8GmiQ9K2-AUoI{#ONU-?+Yy_w*cX)3Cmwioxh1q!xwe{< z6S0V{W~(Jt*>~Ah&pKq2k;X{+6b!r7Mm~S!wjVj*b&9N|Q%I~h7JbEI%QWr-ezEZUr3K4j((Mo|_ zf6evjbcW9I6ifwdt!^M;x>t|qe9oGI1z$h<-3Mp$a@0qgVr4xmj7Ef_7LWQ{nxSt; zg>w1ETc1ZR7KrB~7rMm@vam(MNW{(;JJHC&`IVNV@w_0qT*Ew+B}_&;KT?ml-Rl*pGR%MtI*m7FbZfMU({18wPmfYD#2*8vfP%U5wO72D)mxBPLLKT zpL$-Nxaqn>&ar0w^wFpCEvdGYsd*G7xew+(Q%;fi;61mO)ba}4?5JE+z5W1c37~A{ zJjti`q-j!KhEDDj4s9x76q5+Vi z^+Q+O=BP24Yk&1C-yRwBs&YWA7KqX=%lr2=PcPIv1GM9bO3O#@I<+K~%A-eKc8y&l z^##58`THL|SrL4K77pm8k|0JDy;@g^6jv@k^z5jjzyt#i{`kj#cj;v7?r;59Junv3 zU}h>8OC%cJSY7jY!$DuPMM{F&RIY!~3!Z%7@hh(xg;$5GCKEOM_-`mY3F~&{)D-7s4?wsjV&M+k!3! zl2I=a;@)~*u4hj86EWSBRAfCs$~irC!!_6ZzrXs2AOG=}TM1@myXAKK>qnk1fS8gM zX>snv{PI#=_oy4?;ApH?Dl6e~rm<&6&Yw5U3=}|qM&bzRrUV+?osz#HM;u9>5aM)jI^2! zSt~8pr*C_~zVyA1XCyfuAcb0sc%qXtQgOK&o;=bm7Esjt{Hy6wJSo+i(P%&q>glKJ z2W~x3`Q8(?YY#_`A5UiswfJ;cZAK@ad+kjQ6P)B1pE&w0W4QW4o{~5@m6*8cS$pgS zN~QG^_n%m;)PvuDi_Hq>4~d2B!neQn^-}nl|bYKD8w+~ zF>+s&LXr3p?$<&vI?tx}*>y!1do$jRsy043%SZTC>-&XXgS*!=AC7gL!58PIlu&1) z1*%fef0~c*ORwzn*-htOae?<=UYeiu2YvR3s!#4&VPA_muqRHFK9GflNTO5P^1_5~ z$dC&)gAoQaAWzF>lA_!(ckAlLh@EZDWU_)F0?7p1>nkzQ>vW(1MKP$Hf@z)`seLw} z8wJI2^y-v z+}!e!BL_gs0ZUV}dAQ$I5Ne||Hrer-$*u==acglW2%){k`$QMAUR577RMgA$sl6+X zoy+s%zTwlFwQ{`g38?IXG}8a}))T3|4j`*bqq5)TWybebnu~R9|9)H7PA`v2zHMf8 zuUDE=dzQNQuPlst16z(7^pKTUvfl64rMXFes3Wyn^)l~ml+XCv!UWk8)D7OfC9@h6 zEOFFoXd@$Ye1u=Iyw4*Ii0~spg%iRpl1}gSDVtB#9MT&E+Ujygde_S8^xg$_a5*nF z+It-(fJJ+JYJrdNt2OsA&8JzdPRw*z^Fr3A>XT#$)JjjwN{LPK)yCz4@FtC9b@98B zzlvvY&cZfdQI=l__rt$deLNi7M>f5mawVEL-Q{lFNpr-P$qxsMvolI~n-PAs60Lu$ zuyS5#wD*xS#^5f@qq{rzg*CP!)>q=9*O}u;Z)JHOG=|J-RFJn23=I-5k~o3p6{zZB zR%+=pWGkpw8WYot^?DO?h*gWeM5=2p(OyrccEHmOI&Z16Z+j7bwNh((-y-{3%6Xca zZT#v|oTQdER8@$2dieOoQr^>S@7eUQ9T16j_&jsG%jBl2wWEP;q$5Pyv4u$lZ7ng{ z8JE|VlOCVbCDSpImJ32d-A9IiEG$M69inR(owix6@Xoc_Cz;r^{j2qo!_m8YYSxWLr8c=|m3=L2cvaG0L3NG`J*H7xg3mLH{=6qo z&L221bB>w*kYR9pb_lUdIx0wg2S>+E^6=Ze=Pcj|a^hOZ9U9_*s5r??wNi*o=b3sZZR+1GAmSQ3__i3a=H z&-eh%Dd0QJNBHq`?VfN9(Al-1?%`}o4$-}u5C^6)@JX|wsL8E@#b9Znmjc!W#}Ke3 z%Thl$qwq)$`Wa{vc zCD+T_H zD>j;C;Ej4Kx7!d4-SBzlLpGwsCd$-Cd2DjM-?_usK$^8GpK!~ec()rxKDz)fE1I>+ z1eYi%zu{|>zE-$y9%M(5Nh^ZnoPsqf8{zm0E*}7mx?ZnKCd9HZ8= ztbaz6&0?_zR&~snERoSr$Z0r$%7wAV>-F$PD6sif%6Y6dTw;{vTn>)eYSZt72Nd~Z z{M@7xtkSYnfEvJMOED%oIHq-#P@}cc!u9ZCBeqKj@Sx3(xMznULiYRdc`I78?x-bb zJ>9FPM3bgT1+#ujo`%}YvlqmEWf&PrJpJ@6h>}n!AW6o-qzi$NxNB!A7c@$x%FXx_|xFF|L)m-5mO!N)4(9SHuVO*|% z5%a>c9t3^jz`^krUE&@Z30*m|)@rJ1BS_u-%r&%et!zH?Ml@k-KOV8wY;I2KcOy2U z@?S+k(;A&}bYrpZw%6Nf+wsvJ!p`S|PSGI4A!0Z1NuFk_|DDH1TBJW@sirkmz5@nR z_O9JEHG)&xO|@TvxTbW!3016*Im_##^4H7+({t5Q*DYhASj8f$lA zu8A4NYKq`n1?LYH?4MrqcKZTy?eM6Eps@Lh+rau^hdy
NLhcG9` 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 funcs"] src__graph["src.graph
225 funcs"] src__live["src.live
60 funcs"] - src__synthesis["src.synthesis
292 funcs"] + src__synthesis["src.synthesis
444 funcs"] scripts__research ==>|7| src__live python__ast_extract ==>|4| src__diff sdk__python ==>|4| src__synthesis diff --git a/project/compact_flow.png b/project/compact_flow.png index 9b23ee509d033da3ed736ccd38bfff5e107b825c..8fcc98da80932057e1bbe49054289cf0b075a95e 100644 GIT binary patch literal 37210 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

vuYmBQYG8n55i3p> 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%0Ay^c1D&m}-W9Xzk5hJ4*>#X&s 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 resolveRoot - └─> scopedPath - └─> stringValue +main [sdk.python.examples.basic] ``` -### Flow 2: root +### Flow 2: runPipeline ``` -root [src.services.actions] - └─> scopedPath - └─> stringValue +runPipeline [src.pipeline.run] ``` -### Flow 3: main +### Flow 3: compareWorkspaceIntent ``` -main [sdk.python.examples.basic] +compareWorkspaceIntent [src.comparison.workspace] + └─> git + └─> execFileAsync ``` -### Flow 4: runPipeline +### Flow 4: analyzeCommunication ``` -runPipeline [src.pipeline.run] +analyzeCommunication [src.communication.analyzer] ``` -### Flow 5: diffUiHtml +### Flow 5: parseCommand ``` -diffUiHtml [src.web.diff-ui] +parseCommand [src.interfaces.a2a-message] ``` -### Flow 6: compareWorkspaceIntent +### Flow 6: assertOperationPlan ``` -compareWorkspaceIntent [src.comparison.workspace] - └─> git - └─> execFileAsync +assertOperationPlan [src.operations.validation] + └─> objectValue + └─> exactKeys ``` -### Flow 7: applyCodeChangeSourcePatch +### Flow 7: temporaryParent ``` -applyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation] - └─> assertCodeChangeSourcePatch +temporaryParent [src.comparison.workspace] + └─> git + └─> execFileAsync ``` -### Flow 8: analyzeCommunication +### Flow 8: baseWorktree ``` -analyzeCommunication [src.communication.analyzer] +baseWorktree [src.comparison.workspace] + └─> git + └─> execFileAsync ``` -### Flow 9: proposeCodeChangePlans +### Flow 9: extractTodo ``` -proposeCodeChangePlans [src.synthesis.code-change-plan.implementation] +extractTodo [src.extractors.todo] ``` -### Flow 10: parseCommand +### Flow 10: makefile ``` -parseCommand [src.interfaces.a2a-message] +makefile [scripts.verify-env-contract] ``` ## Key Classes @@ -286,6 +286,10 @@ parseCommand [src.interfaces.a2a-message] - **Methods**: 44 - **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base +### src.semantic.reranker-llm.SemanticRerankerRequiredError +- **Methods**: 43 +- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response + ### src.llm.structured-schema.StructuredResponseError - **Methods**: 37 - **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number @@ -306,10 +310,6 @@ Example: - **Methods**: 29 - **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results -### src.semantic.reranker-llm.SemanticRerankerRequiredError -- **Methods**: 29 -- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response - ### src.extractors.nl-llm-helpers.NlAttemptError - **Methods**: 28 - **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit @@ -448,25 +448,19 @@ Key functions that process and transform data: Functions exposed as public API (no underscore prefix): -- `src.services.actions.executeAction` - 65 calls -- `src.services.actions.root` - 64 calls - `sdk.python.examples.basic.main` - 62 calls - `src.pipeline.run.runPipeline` - 56 calls - `scripts.research.rank-intent-graph-embeddings.main` - 43 calls -- `src.web.diff-ui.diffUiHtml` - 42 calls - `src.comparison.workspace.compareWorkspaceIntent` - 40 calls +- `src.semantic.reranker.result.assertSemanticRerankResult` - 37 calls - `sdk.rust.src.client.parse_http_response` - 37 calls -- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls +- `src.web.diff-ui.diffUiScriptMarkup` - 36 calls - `src.communication.analyzer.analyzeCommunication` - 35 calls -- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls - `src.interfaces.a2a-message.parseCommand` - 33 calls - `sdk.rust.examples.basic.run` - 33 calls -- `src.core.text.inferObject` - 31 calls - `scripts.research.evaluate-embedding-pairs.main` - 30 calls -- `src.core.text.normalized` - 29 calls - `src.interfaces.intake_cli.main` - 29 calls - `src.operations.validation.assertOperationPlan` - 28 calls -- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls - `src.comparison.workspace.temporaryParent` - 25 calls - `src.comparison.workspace.baseWorktree` - 25 calls - `sdk.go.examples.basic.main.run` - 25 calls @@ -479,7 +473,6 @@ Functions exposed as public API (no underscore prefix): - `scripts.live-model-comparison.main` - 22 calls - `rust-ast.src.main.main` - 21 calls - `src.extractors.git.extractRepositoryGitIntent` - 21 calls -- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls - `python.ast_extract.iter_python_files` - 21 calls - `sdk.typescript.examples.basic.baseUrl` - 21 calls - `sdk.typescript.examples.basic.token` - 21 calls @@ -488,6 +481,13 @@ Functions exposed as public API (no underscore prefix): - `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls - `rust-ast.src.main.collect_files` - 20 calls - `src.extractors.nl.extractNlIntent` - 20 calls +- `src.extractors.ast.extractAstIntent` - 20 calls +- `src.extractors.todo.body` - 20 calls +- `src.extractors.todo.relative` - 20 calls +- `src.extractors.todo.lines` - 20 calls +- `src.synthesis.todo-patch.createTodoPatch` - 20 calls +- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls +- `src.llm.openrouter.OpenRouterClient.request` - 20 calls ## System Interactions @@ -495,16 +495,6 @@ How components interact: ```mermaid graph TD - executeAction --> resolveRoot - executeAction --> scopedPath - executeAction --> extractNlIntentAudit - executeAction --> nlModeValue - executeAction --> extractGitIntent - root --> scopedPath - root --> extractNlIntentAudit - root --> nlModeValue - root --> extractGitIntent - root --> numberValue main --> get main --> T2CClient main --> print @@ -517,14 +507,24 @@ graph TD main --> read_bytes main --> loads main --> sorted - diffUiHtml --> gradient - diffUiHtml --> min - diffUiHtml --> clamp - diffUiHtml --> not - diffUiHtml --> media compareWorkspaceInte --> resolve compareWorkspaceInte --> git compareWorkspaceInte --> trim + compareWorkspaceInte --> relative + compareWorkspaceInte --> startsWith + analyzeCommunication --> assertIntentGraph + analyzeCommunication --> filter + analyzeCommunication --> validateSyntheses + analyzeCommunication --> evidenceNeighbors + analyzeCommunication --> participantOf + parseCommand --> find + parseCommand --> from + parseCommand --> decodeIntakeEnvelope + parseCommand --> isRecord + parseCommand --> commandFromData + main --> list + main --> monotonic + main --> SentenceTransformer ``` ## Reverse Engineering Guidelines diff --git a/project/evolution.toon.yaml b/project/evolution.toon.yaml index a424d60..fb6fd17 100644 --- a/project/evolution.toon.yaml +++ b/project/evolution.toon.yaml @@ -1,58 +1,58 @@ -# code2llm/evolution | 3374 func | 137f | 2026-08-04 +# code2llm/evolution | 3591 func | 137f | 2026-08-04 # generated in 0.01s NEXT[10] (ranked by impact): - [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts - WHY: 1310L, 10 classes, max CC=47 - EFFORT: ~4h IMPACT: 61570 + [1] !! SPLIT src/synthesis/code-change-plan/implementation-helpers.ts + WHY: 2239L, 25 classes, max CC=13 + EFFORT: ~4h IMPACT: 29107 [2] !! SPLIT src/cli.ts WHY: 935L, 1 classes, max CC=13 EFFORT: ~4h IMPACT: 12155 - [3] !! SPLIT-FUNC executeAction CC=83 fan=65 - WHY: CC=83 exceeds 15 - EFFORT: ~1h IMPACT: 5395 - - [4] !! SPLIT-FUNC root CC=83 fan=64 - WHY: CC=83 exceeds 15 - EFFORT: ~1h IMPACT: 5312 - - [5] !! SPLIT-FUNC runPipeline CC=56 fan=56 + [3] !! SPLIT-FUNC runPipeline CC=56 fan=56 WHY: CC=56 exceeds 15 EFFORT: ~1h IMPACT: 3136 - [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28 + [4] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28 WHY: CC=84 exceeds 15 EFFORT: ~1h IMPACT: 2352 - [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42 - WHY: CC=52 exceeds 15 - EFFORT: ~1h IMPACT: 2184 - - [8] !! SPLIT-FUNC parseCommand CC=63 fan=33 + [5] !! SPLIT-FUNC parseCommand CC=63 fan=33 WHY: CC=63 exceeds 15 EFFORT: ~1h IMPACT: 2079 - [9] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 + [6] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 WHY: CC=48 exceeds 15 EFFORT: ~1h IMPACT: 1680 - [10] !! SPLIT-FUNC applyCodeChangeSourcePatch CC=41 fan=35 - WHY: CC=41 exceeds 15 - EFFORT: ~1h IMPACT: 1435 + [7] !! SPLIT-FUNC diffUiScriptMarkup CC=46 fan=36 + WHY: CC=46 exceeds 15 + EFFORT: ~1h IMPACT: 1656 + + [8] !! SPLIT-FUNC assertSemanticRerankResult CC=29 fan=37 + WHY: CC=29 exceeds 15 + EFFORT: ~1h IMPACT: 1073 + + [9] !! SPLIT-FUNC parseFile CC=38 fan=19 + WHY: CC=38 exceeds 15 + EFFORT: ~1h IMPACT: 722 + + [10] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37 + WHY: CC=18 exceeds 15 + EFFORT: ~1h IMPACT: 666 RISKS[3]: ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths - ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths + ⚠ Splitting src/synthesis/code-change-plan/implementation-helpers.ts may break 270 import paths ⚠ Splitting src/cli.ts may break 124 import paths METRICS-TARGET: - CC̄: 3.7 → ≤2.6 + CC̄: 3.3 → ≤2.3 max-CC: 84 → ≤20 god-modules: 13 → 0 - high-CC(≥15): 79 → ≤39 + high-CC(≥15): 53 → ≤26 hub-types: 0 → ≤0 PATTERNS (language parser shared logic): @@ -80,4 +80,4 @@ PATTERNS (language parser shared logic): - Standardized FunctionInfo/ClassInfo models HISTORY: - prev CC̄=3.7 → now CC̄=3.7 + prev CC̄=3.7 → now CC̄=3.3 diff --git a/project/flow.mmd b/project/flow.mmd index 1f1894b..d336658 100644 --- a/project/flow.mmd +++ b/project/flow.mmd @@ -39,7 +39,7 @@ flowchart TD rust_ast__src__main__visit_item_static["visit_item_static"] rust_ast__src__main__visit_item_fn["visit_item_fn"] rust_ast__src__main__visit_item_impl["visit_item_impl"] - ...["+2378 more"] + ...["+2419 more"] end subgraph Exporters diff --git a/project/flow.png b/project/flow.png index cfe954a0877de7cade2053824c4b3e45d6f729b5..72776ee7372ea775657f239c5356d042b2f54c20 100644 GIT binary patch literal 14232 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 _(p8yy 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 literal 14246 zcma)jWn3N0vTuxF3Be(_ySo$IJwR}0;S0Bg1b25^xLa_C;O_43ZVMLrvd`W7+;`r) zA8vij`BLlosDJ|o~Dym|BHvy`N$@|!pCihu4I;okize@gFIzIlWE zMoLuZyKDN%>gVq&>g`k)8Bq?tWJ>R(k%Nhp1j@c47LiZS)w1T`SGi#Gu<$JLEbSkx zSe)aWx|ceatGCSIKF;AZU58$aSE@8EIXfQAWH)rx_Abj?@hZ_OLW_PPIu{@OOaxKAdWT7dG$rvD%!w#)yYXWZ#a_#eIg zRET8{o|AN6*Ts!8B-vo!{?nYUgdVc3B)#k2GperFhKK)5_1CcfBBT-1=NvJ?s9;I4 zbqV1P?`bJ1nh>&&|1G(A`koUwM?AJSDkCoiCH}YEr$G0cXBfRh`2W)L@A4a*AB^Ci zn!fB_Y2n=|EuDwc@QZitGVw%sjcx_o*XrzCaY^^o9r5u`K1r`pcI@I_8~G z;r{eFE#W2R@WXg`DHo zzOuDy?`;;EFfb16Z4Z%O}n$#BZ*2-&50a6wz{tVu|+DFGsjgqAn5clQs`l&!9ncM3&)b@1$*UL=3FAa`*+2WDpEOm@rtHX@45!s&m*9&Y-B91g1O5>OE12Ywpk^C!N% zKzCcpwOryKVZX371)b54Wl^CEFQ7UwIGSNB9vd+5KD1+Hjz6PH;{>R^LzMLUxcupy zk+o1|WasQ_bFq=>nVaOyzKDQ!+5l2i6l&^ zH*S8f`;^+=CeZ$%GsDdqrGZo|d4gA%$VMnsY5FJ8J3Au|EkUSy)sG%(zjlz_#rQe` zQ}!FVA)_mw*Jr$W`G$g>3Q0U1Vj-TQOnUOyezbJ=P9mvF24)#knTb!P%vu7gblm1!wBt{OOz4kbQlSRWO1!5*)v;@9Lmyts`N&6)VjDA@C&oF;V7 zey`_lR_1ttTn9FVxMM*wCg~OHsnWvP?E4bhU*N{@c8Ae=sb(&q?}x8Xg403;FLTgL z9a%aE1=j2NqQ0$se}WgI9BJfs(E9?tuX&Gh&1C|7W^dlrs&bV#GX@^>_iv57z)+h7 zrfoL)juUEwB}i=E#iF_L8TMM>ZWUbNvjK%RS}3CcT2-l*M{rZ^5pqP>Kk6;|cAuh) z#^1n@@dJh6GT&ZsvKpE99UYUaml4E^kuu!OAMR;Z8S}uJTwSvJ1*a`}Uwnk^eHzr$ z!~W@61oc%wHatsmiX4)kLQ$H_r;*=ZGDpaO#wmh--j~(V zS5GvYM0_`k@Wu3m1Wbb+FKSz|3!#{S=(skr-Hf%}KMLT3?~XpswSF_qp+4oSdp)RG zocQj%(CH=7%3`Io_nszw`YTB`n=})z@mLuQ*sofJ69q7}i0VU!hVTDW*hZQT^U@9{l@`B;L5yUnJ#+M}v*v8Dg3}O|V_TRyZgsJvn_9O*Y zW5P8twReK|TlD{HPov-YI6(S? z>oozxw-*)Cfk@eih;sem*wAg^8JvLV!mt%G*`u%AxrQgS@(l5h>QQND8bUW-SAG#i zM9ot`AK$E$*?_SHRI^ki?U>DYCW~Ink*bqL5p-jpr-(f%`60wz>A9c0T<)E)@ET3l zHobzq$1j8Sn8!0oS(6{B;en$@T^O5G8*0XeGJY5Jx!7}a6@me|3B%CuT_>>qXW{I0 zAx$sg*yWVX;LzRZu)ehZ`_9lzB{`GNBj4<*eA%x9U%4%0n!q^u^MV6E(mrq-g@+!@ zeK%kB6x_8k2fUndm_^}FV@r7E+r=05nVR#sHI_Vgc3|>5jmW72Qo}`FPtIoWcy$4I zrwO@&7)&Z!g55)r;Z6Xyau-e7&|$67+_ou>C6#TFa5dl>tWFHauE8cVkH#varz`&rGb`5&%#Oq?S0(HMkqPKd+K1RZ) z1AbMK*=xQMNwvX6fZ4V<`1*4qgPOZ61Nz7vtEA;2%R5VLNadii*!~QQWUg89P-y52 zXBfL3HrNOlV(E3M})#DGdXu2ti& zMlAYib}4SYWhWt-`@DBbDXVc++SzD9#y`U(JglD|9;Vd1{4mUvXVC^z+wnJF&4`9g@nAnLgNIfyGT6NCCByD0vXRlrZ1R&nq_ z+dA&0?hl_{Eo$0GO&hLX#<Myzcn?4j*LfjPdgX+NJZ!;K4X~9Y@>zP057g5_u^P zpf3-0sYE!$o`r2r41%=2^V7iB#yAQIkizl1lK{y)&V_aJtRAU_>uY3Y$>%$I{|{6G zC?KVyqF->%WY=Y$GsQeD#KITabb^{g$4$Z>I277wA;#%RPwQ02lByV5H)l$eXEstrjA>KMJ zcErGC3PViER$_z8?(is&ijanCK!;uXc}0cOFA?a&UkX7~c|cM|$*Osk6{le33*q!5 zA->X1FY8FA@moUyMsj$Nm{7xNtzM5mBiV&y?A-C`>h%;|@fsr>se6vt)$ zP{AGjxCeh(k@2NamZGhKcBh} zqw0`=wf*G!xJ-`*_`vSmr{e~<(yhg_i+xL~?iy&w@%QK)OM_PZ&th%71M4Z0^NLoe zEm)hfLhb2$XCahJMFKAJBGe&Wg{}|~-<{$W`QU4kD+D!;z;Anw@1)FdNSID%Qi#2v&u2%V$cg#>nWhfC6Oq{FH(0WHE}^H zmguFRn{CN|({7JCqjLV3bXCMVY>il^8xv{D6?@tP4vX{|<4Wh;_~SO9iGvsq<#4Qc z*gDAeZQ>~&wLIkVnf1?^up1{Gv*Dmtq9mVJExRUv=~r-H<>0A#(ftpTLNfDJ1y&21 zx)6tM&63gXHjp22-fbT2irBO(92{~QS}dzfvM}c(Rr@dr-J6tZ`Y)pm1-N{ zh~~P47X=Ix7fbnBT;y1?(xmJwqy3)C#!mlX6aP+R)n6cW)4aQFp1O1V*<@RdKTbb1 zu|rk2*F;I`Xg}c=c5R-#Z(Fj;B3Br6@jin}_c?60eC#0xI6j^p=9{~<;WHptXXexT zPb>fwoBC>7!Wj7kc(ymOzm5@{$%b+tgT;0+tjBxO#w^)yl`ge7>B3N;N&FHiCtemR z1SNv};Od%vwkR%IXQ%i%RUk~&QUgRCrHUJ-(pqhcgt2F3wX zx%$PV;GXbPg=C|mT^uz~<8YxDfb^?Q1pHtws}(>iJq;dXe%V#5u@W%&CAp)7`J7QJ zSBa4))rJdxlr)O99t^SIx_4(LAPgW;)e4(IMMuZX*pqbnzVT3PA$0BiG>VLCen>`E z)tH|#uvo*(h(cITtj1T?0n{zvhkTVzAhis4k3$IH$$;dwlxGewr9)-avN%*Nw&#K0 zX2EA2G^>hdk;@)16;xcmTBvlkw1wQ(tNAJWp$t8zGOFPDN}X~toTc!AAM5$C3p6qd zYj+1xnCm4e4dz<)*{zKNFU+g!9gbqd4|RjqCMRjbtZKmFVe!t+6N?n$p^j{qyji>z z?V2{7gh@Oi;X@ewI$UREi`#iqp<8 zg0UaWS5u#j`r$Q?8H)37YouMCO0nwjdFId);_LZV?*}PQL=7LuvTi5luJ|Pu#veM- zt|Ec0A(uDazl_W#8K+ZUrl%QaPD&R8a^fnWeXtPr;g21STVpBI<+G^{RDz_%B_$7$ zt-&ebr~Jwh=x)m{l@W##%dKR?Ac>V;y~?S!LM5x`sMRr_gp>$8P)C=)#30Mnbq|I_ zV3Yv+`Lof%lY`0(_jvqv;nwyVS-nO;ZGWVNoM{HJ9XSF?SjCZFH#?Pbn^(e(4=C0j zH3N6iacLUN9SB5r8t>WLPUt-Yw}3rknao0Ev>fhiRA7oranfoN6Tc(3=Vmxg6%#T^yuif`oT!RZB> zNv2P~a$X{(07~>7YFKO)I11Pa^@Fza z#HK!;=5N9l(hTdZ8BXiZA-n`spHDpbmV;O*rw-pa6n-?%O{pXI<-Zj6`~d*=+{yWL_PR_d*<7Pku%BT-dII}am_sP&;rWaPFr}!T)5tciL zx~YU?-V7m(XheMBSb{-8zW!0IEi)%{-|qQLdt-t~2^e+@!veo&HIxLc!tZ#bKP`-S zvrL@}NTvaov5BpZ>N^~IefBO*-p};U3xBRz-Y?GHyw+5Nbs)SnE0{<#3^AUvWNwm8h&GAe}XJ^jHud+(RVcIR(yh z2fO(K(D-h%kVQYx_q3L^LC{9yXN5c$Hq1I*mHgTzf8i|h189bDDTUgG`yZ*fL)zu( znR&}%o-h!+l;icq%HAA*nTvhnK=4Y^>Fq(_O`XHwtSn1FilWe0h`Wrx4_Xw2Z=v*q ziiOXP2$+1$!Z}ygtL5S$@p!&LVJ0cFDqkZyM5Ko(l()ub&vKqDhGTakD0qP=XST-*R!al6-HXkL4gVL1@ZUSx6E3444`RUTP&K(fz z8+e1CIKC`7A|9Sk8FFWSm3HST0=A?}(OF5#AK#)EjxY05&-C$`NSsz==i!<#qSE!a zN&c3Jxh8dWl;CwM$r$_yK~u*Q{UF!{gzIeso_!5GA+7#QxL*k&gB}UE@WYzd0ZS}@ zj)Oc7Xxm7;CJ30G@R`u*INkYs=UG=%D5%bB{cZGL9GMugnGJ|C6k^VFy*oE?AEx)O zY-5`T9JN@FCKnYB6mRf4E`4ug(Eof9@|MqFfn$U@xX6rt_|0vhy5$I~tLW)XXXNQt z(P{O`veLWA{(zL!HAxMvkinS;{vA!jvY0&d2s<*O| zt{2#o@>n&4!E9b?)3u^3yScppJmB>-+0TNGDw;~~&t_!pB`?i$U1)3L9>@Z+_5s#K ztx}l|sIchtO6)h6jew8FI9CaJc4-kgfCD{Z++vKCsw?KK&>`RmEow}Ou+u|qZ8~(JEO{o}(X?*%)oex8nJm(YKf$yd2e6nTe_Z-QJwcqJWDYo@ zvNZ}wNnpD3lTlfaJO*B?eRsZy^$L*lbD znXITYZ`5w{Jf@K!P~rQyOG1 z$+n+)H$lQVZA?a*=8shJ`y(wiV;a1W(>^>+1#CuEG=CgcqIFzSE9HIix;gm5q9|9B z-8LJY%q%#9OP|Ep!Yg*6_V}aG_=gDE)rxP9)7Pz10DA-JDh$e?J%`P5p7<=gP+RO0 zF5hjJ)wn>d77A+rK5(_3C)74yx^)e!Xm&|DqV*u6jTd3Mr*jyusJ(>P{Mr)aa;_X! zsWwZAdAgt;zv$FnZ{+%M;x1wYJ~q6Igo0026_6$;tNBCq#$ISj)p}bUFpg^J(oxky zrG?ppFEI^+Wvyi$ca#8&W zoooC#SduJ<$lhyC`ot1wXmxnv6p>wx>-8)Q1n7oQy6@vgNi(XtI_QH+kz|tU)H3GR zl&E6Hh@^*?V=JY}>M(9G_sznhEAQ1)mlfShx}3g7j4J9Fs6LyX&pizsm8AKRN@Sv3 zE39zt9@IU?F1YA{%M^?>A-jBH=m-=cU9-b%qdk6iJ*%w+I33*LQLEQ#XDQfMa+Il$ z$-7V6OyMQsrJ%v zW>W&LR_K>Qefhzmt(k_gyAS7s*qfZj%~QO;1^i`p%@t50kV+PO<~as*y87nO+=TrSnqhfe!;bge1*LP*GE^{A=dE;{yn&vJr|xp< z;$CO(G^BCnRM+RI6D8cxHhvjR74*GA#p(X zzSNUkOy|@ayOft>I`wyXh%nuAJSlM-o(Gp^FDFg!!Zl3rdcgUI^}07(sB|XLJl5v(| z)@C*adf|72!vN8Kj`Y;7e3&Tw5SsUk31lABh;80so=2v~Zqg1;!uBJJ| zyYsVOh;5CWI6Ak;ttuO&+zV=PlyF#@{4q>V7<`bfpII5%5HEzi`Qnt`_iuaGiJa2S z_JNX{83Kg0FoOO#JcsNuA0908z{1ocwvO{JEj*op)yd2Qm~FGh)cFS_qr}`lCcnq zwck$Ve7RS9P2*oC>*aea6m)IO5->2)iEcU5rN^@EGGx3s1HjJi7s9-*7vWYIaY z;z*YVX=GCvVQ0mlTOm1N#H&uLh+rS>h_Dqo$-X!KU5DWiw^P%2I^}@6!-i5xUMYD( zY+Vbg-L%`@Teme!kO^Ro_Xf7s=t<&Si5rG-pLTIE?^5~mVYxF|KZbJsYC@td(*LjV=uZCktA;X)Y13 z78rEY-qZ3JpmK*h06A8A6j#g14_35!JD8eJ;zKJ@Ozg%fb%y=84yBOdo{CJQ#bKqU%s>0EU4EgV_Y3VjpN|>8%3NZ# z)3k?-`Ft&&ac`a}C=96o0*6_MZQk_G~0)k5viV-ov}w`hp!_3^{&W17=W53*-Bn zC|7@`*+fs_o%5w|40WQ8&nIf6%;f9goOIME9JHIub`&FY5aLR>sBty544x~mc;PzY z1K6b#II~&Hu}@K)5W6l5a&a=*80|I_%9@HkFZku`N~0X#wjdGObAgC6&w=@nv)Kf5 zw{Bcd(QI4uqoq^cBq^=o^)lhUqiWXeNHpNnvgYtBbt3bzfwIE+w~p0v@lIb}K}$(P zGO(n6T=HQG_le#bjUifqOM8`r^C%V=PqG$Fr?gWpTqwP)W}`Ff^sQ2I{^#gr;jBU!Rh0^s|Y3uBy zePCYo$>`=RL_#c7%)ir02t2!TkzbLbn{X1L@9F)KVKjQaRegy>r6?>XghDDFyWvor zP%5Rs0bf#K)O9Fuv79k#UgFbo++$!Su-R}X{+CGV=z^w^61p^#Y4(|o^^3jOJ*lc(I zg|eN}3bX2u);r;;)gTw+da`j?kg!HPc>NJgDi-xsDZy;MRS%;E!k*t~V1YEwdfh;} z)7%~P96DURcawuZ2E>fXLq8c1bj{15who(el(*DrmLfi?;F&I2sV2?cl{|D4kK4DD<*ae@FDggo!B(#RzkSf+JxPJX%}t#Ca}_d9LASr2CW35o;H{-4^k_lQ>mDt z+^qL*h|k76f_-Dd^8L!l3M*lIJln%dQ4jPp`)$5S-xpX-AHryz*VRovVg?9sUhA~n z+_EEx!7KBgU@=>*$JM?N-0C%$t*H1+3a_*H8bzOVCZjcaXb-ilg!RPu>IqUuUlzMm zK-G}ox*AUDJ1_#?;)Vj`Um!Jicfqh`duZyxgMGYaA~Za!kpz07ztFQt-0<^V^+!Y~Ew%pi?rrx3_ERA-XxpdIJp)RlUWuw=Rn9 z&grUmc&KN*uMD9}(eGBS9~dEF2mRc?h%fDZIh=kM< zr8*wS^EjIoL9L?x9^ErL!^^2weXZROtmS)(x6>O3Nu}o79AxFiwcZRhOay6e z@$l57N~AC~Ho8BDl|vlbTIt8KUk#7nqgL}OZ6M7vHr#({u@ARDjVkTcDmmrv)TBZl zbhuJ3cNGtZOGy@#^4pt08O4`9X&RPJFJgMhzWJ4J=8$c_AgZ_JWwFXS2#|4}|MNF) z?o2rXY7m=jyp<~=F%Xe9S3rC7SmLm@5T5I&>l2TW{jlE{{1Txb^i zTDy%9qFgTBi*d4&#NS}k;nuukMDHWDDuL)4FFg0s86z?`x;)$6-q7b4fRJB0@8k}2kTG{;|)#^|nVf46KzDac7A>k|Yz0!Ro= zoY{xTs_!$*no!6@U*l+5ia=v><=~=5dYCytGR6o}&yT%kr;vB5Clj90&6%3dj0!*2 z2^1DX=BCN>$3ihAhB9uQ?-t3vdp-pd4_S1v2J^X?2qbm3a`8!JsBBggar)lz+qZA= zVm*DVh)-%2Y~KQ9E?qhH9d?gV=``s^m`4AG?CM1x4-F_SXwrtQ^MU$fAFgmOl_-W& z+%q)uqjRFkMu*K@O!5+-ht>&ubs)XDB>edo$K1+CtYQb*vqsO&!_DRGn2-a%>CwgZ z`F(mDtI>t_1}gkIFyFn>ZYFIhkf&QArgr9PZGDHgUQ)5p<@y(l!mimDCLn{#&iQ&9 zjvR_C9a^2|#d*Gc+FLP=sfq7bAIE7!_P>Dc3}TK4my;qf)T@hGC>&I;P|maBaBuf~ z^i(BK#i7pVY{f?l4M-;fgw#@+9WwcRs#km5drS>x>gkt5?>T!(Nm|x;)mFlr!=rAX zV@v`0B?-H*daJl0JiB5-PtxPzs@JQab{o&svx(zMRzLv4-5A!xnruhHus{^IZ4F4v9FXyv$A9g(a#RGK z!#&W@hmMR5bDheE!z^0&YpVoHfQgWrO3f5f8%xWcv_-^yK)(})b7vABwYe`2dvzL> zGYSUOX{V>-Kko|?lhEx;N7aVO>Db4KF`v}<52>cj=AWN>_3HPr)}K@VkZP^FyJaC$ z>qx{>v)erLb5_OM&9JA#yOH1bSJI#jdEcTdNXf1_<@b;P7TEl<7DvX%*=Ju+4T`FC zPvK51F1WdkFhMmJpNvHDV_{G#)7C-Sg6ZhXo2Ca03R$S_dG6z)D`HoBQm-7 z(#^B7!bUaHo)Rgq_xE=;fe|O*%f#aonUp3M@kQ{wUQ};{zq^|e6x5$W^?55II+&?0 zHOAQMlLG?SakZ1;icqQ?(L*Iy-FQFkvl#+BfEjefc@DlOxckzPfiie75`8%I;1QF5 zd+#$}7fN=!H+pEO6G2sd4%+CPLL!q^&}R}$ZQwzptVL1(uc)IX=M*OKEt zTR@-Esrl{N66S94{bcl|iE~SVqh8%^Wb45OpTQ$Gkj?(8-f8)$`2MWljuPQ>m8$h~ z27n}0S*N-~Sz=@8b17!_QS4SMhc-Y`7H^#Lfqby{{fmRsW4S_T%KJRL%gd{gSp`6C z%NGw0YYohvTLp8|7jcL;{bv*MpxT0>Idyh7#+RP^OW4ssc@pa=Z9^NH=}-r~FasQ3 z5qetw8#NPN<j4cEpamkGivx zcFWxhOqLe-N(*c zIwSJWq5ceRFs;(hz8<2pk9Ho})Ttyq=0At+UeH3`LR(zVde9lZNK?W?I!Y-@19_nb zHflUl27SYfdgs&DLIsmy|MF8!yKF}$E(a!3czi4 zb&G`e%-QSyU21?`GtAL}`uklTm_UUc3XRvxoXm&3h$CzOH)Y$VC)4wBH`ak|y2@v~ z$NddGVBhAw=)?R-k&lL&&SIE0qwqr};b*qRIEvaqHq3SRyR&7>Glqz5M+FxbUTc=I zDEVYXwbs?|s@YDSqXlG2brw2Hu7!_x%M&B%=~Jb8w2F?Z@#%@cRo1>s5v|j5lhQ`r zG5eRei=ACG9wD>iic&81)x#&8ZmRr0zMOkZEKCZ>^(T7~pH|JG4eM+RkR!&8))E^t zVNO%`S-k$!)BxM9rs@_KT2CG)-t6sB1x9Jp8VN)W<4;oLLb@A5XeE%DlI|=bxt|(z zT$$sgW%d2UA8F^^T2c^`E)4@a`q>y^{szT+pG#g;spN^Yl4(4H4gO_NbpnU8qA z-4{$rX!U6AuYcQ}zRHy&wOU1cEmRo4&Q~M(<_#?8Ul@T3b(e}Cqqp@xfhD#k&UjmU zN1Uro<48m{3>g>{CQS-gxW|!6M>Dw}$3=BoW^V6O%_Z?y>gF8j#?u1R&!e8Dd3?E7 z)#{wr3Do%lMLl(&`=TG|=1VvKh?AMfo!A2VQsJx6g?TDcF@~0_&3Xb}aQK<9vAC;* zxT7^0ASGTSx24^d9UHWX6c>~risD_vsH1-E%GL^~c64;rPpstiSe!`gJe!8&DevEh z?+jCgu>|5M7+uymMUXkt`D>wf9JiKY=G}$QMzRsw@6^mw5M4W8vk5u7#5V?tsJ+&! z?NHx0l&>319TN=hIxhe0me+gmfNZ5-*1oGz`>vf?1u#CA4L%!c6FY1mU-6PZ>~jgm z>={krG{Q`y$S+rGu)>%>t}X-&@e5m)Use@9FipCq&FU9ng(#Dd^m$6MrY$ zDU5Jl2lZW)#ql6g$5nSk&jXy(8?ja@!HC$t4<%?#G=;g-m-73f4S+c=H$>)#ZIlMy zdqu}nClEajqex+{Gf#WEiG85x_Wh;Oiq(v3@0x9g5d>ZhC)tN$KD*J1>y#joc;f=Vx7}%}M4)!22)m$$Y4YIIR$yTr4g6N1#t8PrKed{Ji%;Kt4h=M!GKb*u@8CZlRngR7#~A{k?zu zA^g(DipJ;vHx)M-HT~>@wCv9R=57mdlp-L2KK+88J*yL|FGpuF4EG=wdea@5pTx(uqhOmK-@%-i}3l% zu;SZ8QC7pD(Hj#s{F~7|DZr8xb}iRlA0O9|E8D4!X4{LEsJ|%5*K?h~JU@;V#1SI& zX5&r1s^H^=d`@oU#whL@*QsAYZGnLAb??C}#@%N?sg0(WH@lei;qR^0FiLEcM;xID}VbSWfa)F2%MA5BNf{kvUkLgpZ4-z z|D92e-R(&K54z>I`4 z{%?&${{Iv7>l5bxV50DO$KHs>%H-u&;oHBURsSNm4^2Analysis Results // Initialize mermaid mermaid.initialize({ startOnLoad: false, theme: 'dark' }); - const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "98.1KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.4KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3683 \n**Total Classes**: 373 \n**Modules**: 251 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "34.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 143, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3683\n- **Total Classes**: 373\n- **Modules**: 251\n- **Entry Points**: 2620\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.synthesis.code-change-plan.implementation\n- **Functions**: 148\n- **Classes**: 10\n- **File**: `implementation.ts`\n\n### src.services.actions\n- **Functions**: 118\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.graph.linker\n- **Functions**: 85\n- **Classes**: 4\n- **File**: `linker.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.core.text\n- **Functions**: 62\n- **File**: `text.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### src.services.actions.executeAction\n- **Calls**: src.services.actions.resolveRoot, src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent\n\n### src.services.actions.root\n- **Calls**: src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent, src.services.actions.extractMarkdownIntentAudited\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.web.diff-ui.diffUiHtml\n- **Calls**: src.web.diff-ui.gradient, src.web.diff-ui.min, src.web.diff-ui.clamp, src.web.diff-ui.not, src.web.diff-ui.media, src.web.diff-ui.token, src.web.diff-ui.getElementById, src.web.diff-ui.byId\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- **Calls**: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.implementation.trim, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.resolve, src.synthesis.code-change-plan.implementation.assertPathWithinRoot, src.synthesis.code-change-plan.implementation.ensureDir, src.synthesis.code-change-plan.implementation.dirname, src.synthesis.code-change-plan.implementation.open\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- **Calls**: src.synthesis.code-change-plan.implementation.assertIntentGraph, src.synthesis.code-change-plan.implementation.assertConclusions, src.synthesis.code-change-plan.implementation.Date, src.synthesis.code-change-plan.implementation.toISOString, src.synthesis.code-change-plan.implementation.isNaN, src.synthesis.code-change-plan.implementation.parse, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.isInteger\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### src.core.text.inferObject\n- **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.core.text.normalized\n- **Calls**: src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa, src.core.text.napraw, src.core.text.popraw\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: executeAction\n```\nexecuteAction [src.services.actions]\n └─> resolveRoot\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 2: root\n```\nroot [src.services.actions]\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 3: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 4: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 5: diffUiHtml\n```\ndiffUiHtml [src.web.diff-ui]\n```\n\n### Flow 6: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 7: applyCodeChangeSourcePatch\n```\napplyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation]\n └─> assertCodeChangeSourcePatch\n```\n\n### Flow 8: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 9: proposeCodeChangePlans\n```\nproposeCodeChangePlans [src.synthesis.code-change-plan.implementation]\n```\n\n### Flow 10: parseCommand\n```\nparseCommand [src.interfaces.a2a-message]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 29\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 28\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `src.services.actions.executeAction` - 65 calls\n- `src.services.actions.root` - 64 calls\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.web.diff-ui.diffUiHtml` - 42 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `src.core.text.inferObject` - 31 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.core.text.normalized` - 29 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n executeAction --> resolveRoot\n executeAction --> scopedPath\n executeAction --> extractNlIntentAudit\n executeAction --> nlModeValue\n executeAction --> extractGitIntent\n root --> scopedPath\n root --> extractNlIntentAudit\n root --> nlModeValue\n root --> extractGitIntent\n root --> numberValue\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n diffUiHtml --> gradient\n diffUiHtml --> min\n diffUiHtml --> clamp\n diffUiHtml --> not\n diffUiHtml --> media\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "70.4KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__offset["offset"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__server["server"]\n examples__backend__src__server__event["event"]\n examples__backend__src__server__store["store"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__server__limit["limit"]\n examples__backend__src__validation__agent["agent"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__app__createState["createState"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__app__refresh["refresh"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n end\n subgraph src__cli\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__absolute["absolute"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__stamp["stamp"]\n src__cli__diagnostics["diagnostics"]\n src__cli__svg["svg"]\n src__cli__taskFile["taskFile"]\n src__cli__diff["diff"]\n src__cli__handleReality["handleReality"]\n src__cli__invokedPath["invokedPath"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__optionNumber["optionNumber"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__controller["controller"]\n src__cli__result["result"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__command["command"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__optionNlMode["optionNlMode"]\n src__cli__pipeline["pipeline"]\n src__cli__optionTaskMode["optionTaskMode"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__optionString["optionString"]\n src__cli__handleExtract["handleExtract"]\n src__cli__context["context"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__handleLink["handleLink"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__handleIntake["handleIntake"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n src__cli__initProject["initProject"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__file["file"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__main["main"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__emitJson["emitJson"]\n src__cli__root["root"]\n src__cli__printHelp["printHelp"]\n src__cli__handler["handler"]\n src__cli__parsed["parsed"]\n src__cli__stop["stop"]\n src__cli__doctor["doctor"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__optionList["optionList"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__handleDiff["handleDiff"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__view["view"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__optionNullableString["optionNullableString"]\n end\n subgraph src__extractors\n src__extractors__todo__classified["classified"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__git__result["result"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__todo__body["body"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__ast__typescript__context["context"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__git__count["count"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__nl__action["action"]\n src__extractors__docs_record__target["target"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__configuration__match["match"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__git__state["state"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__configuration__entry["entry"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__configuration__relative["relative"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__git__runGit["runGit"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__todo__action["action"]\n src__extractors__git__readStats["readStats"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__configuration__pair["pair"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__git__root["root"]\n src__extractors__nl__body["body"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__ast__typescript__recordModuleFact["recordModuleFact"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__configuration__lines["lines"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__todo__raw["raw"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__configuration__heading["heading"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__todo__heading["heading"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__docs_schema__target["target"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__nl__object["object"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__todo__checked["checked"]\n src__extractors__todo__block["block"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__todo__text["text"]\n src__extractors__docs_record__action["action"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"]\n src__extractors__changelog__relative["relative"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__ast__records__start["start"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__nl__missing["missing"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__todo__lines["lines"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__configuration__line["line"]\n src__extractors__ast__external__result["result"]\n src__extractors__nl__classified["classified"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__ast__typescript__handleNode["handleNode"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__changelog__body["body"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__todo__match["match"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__changelog__lines["lines"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__todo__relative["relative"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"]\n src__extractors__configuration__files["files"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__todo__task["task"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__configuration__entries["entries"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>225 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>292 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2378 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [153KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [34KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "163.3KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "23.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 251f 39151L | typescript:143,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.26s\n# CC̅=3.6 | critical:90/3683 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC buildLocalWarnings CC=18 (limit:15)\n 🟡 CC executeAction CC=83 (limit:15)\n 🟡 CC root CC=83 (limit:15)\n 🟡 CC normalized CC=30 (limit:15)\n 🟡 CC inferObject CC=34 (limit:15)\n 🟡 CC walkFiles CC=15 (limit:15)\n 🟡 CC diffUiHtml CC=52 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC rerankSemanticCandidates CC=25 (limit:15)\n 🟡 CC assertSemanticRerankResult CC=21 (limit:15)\n 🟡 CC records CC=16 (limit:15)\n 🟡 CC seenDecisions CC=16 (limit:15)\n 🟡 CC acceptedDeclarations CC=16 (limit:15)\n 🟡 CC assertSemanticCandidateSet CC=27 (limit:15)\n 🟡 CC NON_SOURCE_DIR_SEGMENTS CC=38 (limit:15)\n 🟡 CC BINARY_EXTENSIONS CC=38 (limit:15)\n 🟡 CC GENERATED_ANALYSIS_BASENAMES CC=38 (limit:15)\n 🟡 CC T2C_ARTIFACT_BASENAMES CC=38 (limit:15)\n\nREFACTOR[2]:\n 1. split src/graph/linker.ts (god module)\n 2. split 19 high-CC methods (CC>15)\n\nPIPELINES[2061]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.8 ←in:0 →out:0\n │ !! cli.ts 935L 1C 124m CC=13 ←0\n │ !! actions.ts 737L 1C 79m CC=83 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! linker.ts 537L 4C 81m CC=10 ←3\n │ !! text.ts 517L 0C 57m CC=34 ←0\n │ diagnostics.ts 459L 1C 58m CC=11 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intent.ts 306L 4C 36m CC=12 ←0\n │ !! communication-file-helpers.ts 296L 2C 39m CC=18 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ !! result.ts 264L 0C 16m CC=21 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ intent.ts 258L 15C 0m CC=0.0 ←0\n │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ code-change.ts 221L 16C 0m CC=0.0 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ !! code-change-path.ts 204L 0C 14m CC=38 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! candidate.ts 200L 0C 13m CC=27 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ !! record.ts 183L 2C 13m CC=17 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ !! io.ts 177L 1C 32m CC=15 ←0\n │ markdown-llm.ts 175L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ !! diff-ui.ts 48L 0C 9m CC=52 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ !! implementation.ts 1L 10C 127m CC=47 ←3\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.diff/ (fan-in=6)\n HUB: src.synthesis/ (fan-in=5)\n HUB: src.live/ (fan-in=7)\n SMELL: scripts.research/ fan-out=11 → split needed\n SMELL: sdk.python/ fan-out=8 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.2KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 401 | edges: 500 | modules: 30\n# CC̄=3.6\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.ast.records.moduleRecords\n CC=6 in:1 out:14 total:15\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.body\n CC=7 in:0 out:15 total:15\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [11 funcs]\n context CC=1 out:4\n createTypeScriptExtractionContext CC=1 out:0\n extractTypeScriptFile CC=1 out:7\n handleExportDeclaration CC=4 out:3\n handleImportDeclaration CC=5 out:4\n handleNode CC=6 out:5\n handleSymbolDeclaration CC=4 out:9\n handleVariableDeclaration CC=8 out:7\n recordModuleFact CC=1 out:2\n scriptKind CC=4 out:3\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [4 funcs]\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [15 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n nonEmptyText CC=3 out:1\n normalizedText CC=1 out:1\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "251.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 401\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 639\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 92\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 705\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 869\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.handleVariableDeclaration:\n name: handleVariableDeclaration\n module: src.extractors.ast.typescript\n line: 111\n cyclomatic_complexity: 8\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 194\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 445\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 554\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.cli.svg:\n name: svg\n module: src.cli\n line: 560\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 344\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.diff:\n name: diff\n module: src.cli\n line: 500\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 547\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 929\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 405\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 830\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 823\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.cli.controller:\n name: controller\n module: src.cli\n line: 347\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.extractors.ast.typescript.handleSymbolDeclaration:\n name: handleSymbolDeclaration\n module: src.extractors.ast.typescript\n line: 87\n cyclomatic_complexity: 4\n calls_out: 9\n calls_in: 1\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.result:\n name: result\n module: src.cli\n line: 763\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 306\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 255\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 508\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 31\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 326\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 268\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 484\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 158\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.context:\n name: context\n module: src.extractors.ast.typescript\n line: 12\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 594\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 553\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 843\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 345\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 853\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 410\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 237\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 121\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 380\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 176\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 367\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 875\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 811\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 573\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.cli.context:\n name: context\n module: src.cli\n line: 531\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 168\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 142\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 87\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 530\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 127\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.ast.typescript.handleExportDeclaration:\n name: handleExportDeclaration\n module: src.extractors.ast.typescript\n line: 74\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 847\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 342\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 253\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 699\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.ast.typescript.recordModuleFact:\n name: recordModuleFact\n module: src.extractors.ast.typescript\n line: 229\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 629\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 237\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 218\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 286\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 363\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 75\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 729\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 197\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.file:\n name: file\n module: src.cli\n line: 595\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 185\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 444\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 612\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 622\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 617\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.ast.typescript.createTypeScriptExtractionContext:\n name: createTypeScriptExtractionContext\n module: src.extractors.ast.typescript\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 219\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.ast.typescript.visitTypeScriptNode:\n name: visitTypeScriptNode\n module: src.extractors.ast.typescript\n line: 46\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 259\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 684\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 694\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.root:\n name: root\n module: src.cli\n line: 660\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 883\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.handler:\n name: handler\n module: src.cli\n line: 587\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 189\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.cli.stop:\n name: stop\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.ast.typescript.handleNode:\n name: handleNode\n module: src.extractors.ast.typescript\n line: 52\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 750\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 513\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 649\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 90\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 838\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 215\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 159\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 772\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 607\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 464\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 490\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 859\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.extractors.ast.typescript.handleImportDeclaration:\n name: handleImportDeclaration\n module: src.extractors.ast.typescript\n line: 61\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.cli.view:\n name: view\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 659\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 816\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.docs-schema.target\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.target\n c\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3374 func | 137f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts\n WHY: 1310L, 10 classes, max CC=47\n EFFORT: ~4h IMPACT: 61570\n\n [2] !! SPLIT src/cli.ts\n WHY: 935L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12155\n\n [3] !! SPLIT-FUNC executeAction CC=83 fan=65\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5395\n\n [4] !! SPLIT-FUNC root CC=83 fan=64\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5312\n\n [5] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42\n WHY: CC=52 exceeds 15\n EFFORT: ~1h IMPACT: 2184\n\n [8] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [9] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n [10] !! SPLIT-FUNC applyCodeChangeSourcePatch CC=41 fan=35\n WHY: CC=41 exceeds 15\n EFFORT: ~1h IMPACT: 1435\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n\nMETRICS-TARGET:\n CC̄: 3.7 → ≤2.6\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 79 → ≤39\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.7 → now CC̄=3.7\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "153.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 251f 39151L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:143,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.03s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3683 func | 0 cls | 251 mod | CC̄=3.6 | critical:90 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64\n# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; diffUiHtml fan=42; compareWorkspaceIntent fan=40\n# evolution: CC̄ 3.7→3.6 (improved -0.1)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[251]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,935\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,177\n src/core/record.ts,183\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,306\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,517\n src/core/types/index.ts,4\n src/core/types/code-change.ts,221\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,258\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,296\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,175\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,256\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,537\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,210\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,200\n src/semantic/reranker/result.ts,264\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,737\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,204\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,48\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n file()\n text()\n analysis()\n records()\n graph()\n graph()\n diagnostics()\n graph()\n diagnostics()\n result()\n output()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n planSet()\n review()\n patchPath()\n auditPath()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n patch()\n receiptPath()\n result()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n beforePath()\n afterPath()\n diff()\n result()\n graph()\n diagnostics()\n view()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/web/diff-ui.ts:\n e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs\n diffUiHtml()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/synthesis/code-change-plan/implementation.ts:\n i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n CreateCodeChangeReviewOptions:\n CreatedCodeChangeReview:\n CreateCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n PreparedSourceEdit:\n IMPLEMENTATION_DIAGNOSTIC_CODES()\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n conclusions()\n proposals()\n recordsById()\n proposalsByDiagnostic()\n conclusionsByDiagnostic()\n candidates()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n generation()\n planHash()\n createRepositoryPathProbe()\n base()\n absolute()\n implementationDiagnosticRank()\n evaluateCodeChangeAcceptance()\n afterDiagnostics()\n beforeIds()\n afterById()\n targeted()\n clearedDiagnosticIds()\n remainingDiagnosticIds()\n newBlockingDiagnosticIds()\n accepted()\n evaluatedAt()\n closeCodeChanges()\n evaluatedAt()\n afterDiagnostics()\n planIds()\n acceptances()\n acceptedCount()\n indexProposalsByDiagnostic()\n index()\n list()\n indexConclusionsByDiagnostic()\n index()\n list()\n collectTarget()\n paths()\n symbols()\n tickets()\n versions()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n titleFor()\n record()\n object()\n startsWithImperative()\n descriptionFor()\n acceptanceCriteriaFor()\n priorityFor()\n confidenceFor()\n riskFor()\n level()\n rollbackFor()\n deterministicGeneration()\n uniqueSorted()\n createCodeChangeReviewPatch()\n createdAt()\n markdown()\n renderCodeChangeReviewMarkdown()\n symbols()\n assertCodeChangeReviewPatch()\n artifact()\n generation()\n priorityRank()\n inline()\n renderIds()\n createCodeChangeSourcePatch()\n plan()\n graphFingerprint()\n createdAt()\n allowed()\n diffs()\n normalized()\n path()\n rawDiff()\n unifiedDiff()\n patchHash()\n createCodeChangeSourcePatchSet()\n generatedAt()\n assertCodeChangeSourcePatch()\n patch()\n paths()\n path()\n expectedHash()\n allowed()\n expectedChanges()\n editPath()\n assertCodeChangeSourcePatchSet()\n set()\n plansById()\n patchIds()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n instructionFor()\n symbols()\n criteria()\n normalizeUnifiedDiff()\n normalized()\n path()\n bare()\n stripped()\n applyCodeChangeSourcePatch()\n root()\n receiptPath()\n existing()\n relative()\n absolute()\n exists()\n before()\n after()\n now()\n fileHashesAfter()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n expectedPaths()\n hashPaths()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n normalizedDiff()\n baseLines()\n diffLines()\n cursor()\n oldIndex()\n oldCount()\n newCount()\n mark()\n body()\n splitKeep()\n lines()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n lowerBasename()\n dot()\n ext()\n isUsefulCodeChangePath()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n result()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n src/semantic/reranker/candidate.ts:\n i: ../../core/schema.js,../../core/types.js,./validation.js\n e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair\n createSemanticCandidateSet()\n grouped()\n values()\n assertSemanticCandidateSet()\n records()\n seenIds()\n seenPairs()\n byDeclaration()\n declaration()\n module()\n existing()\n expectedHash()\n comparePair()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/semantic/reranker-llm.ts:\n i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util\n e: SemanticRerankerOptions,SemanticRerankerRequiredError\n SemanticRerankerOptions:\n SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1)\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n src/semantic/reranker/result.ts:\n i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js\n e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons\n createSemanticRerankResult()\n decisions()\n assertSemanticRerankResult()\n candidates()\n records()\n seenDecisions()\n acceptedDeclarations()\n candidate()\n citations()\n record()\n expectedHash()\n applyAcceptedSemanticRelations()\n candidates()\n added()\n candidate()\n assertSemanticVerdictReason()\n allowedVerdicts()\n allowedReasons()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,declaredRole,declaredA2aAgentId,declaredGitAuthors,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n declaredRole()\n declaredA2aAgentId()\n declaredGitAuthors()\n rawTimestamp()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n seed()\n buildRecordSeed()\n buildRecordStatement()\n buildRecordSource()\n buildRecordEpistemic()\n withRecordGeneration()\n generationMetadata()\n generationIdentity()\n separator()\n clamp()\n sourcePrefix()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n ignored()\n extensions()\n maxFiles()\n matcher()\n base()\n visit()\n entries()\n absolute()\n relative()\n extension()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTarget()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskStore()\n removeTemporaryFile()\n prepareTask()\n key()\n indexedTask()\n taskForMessage()\n indexedTaskId()\n task()\n continueTask()\n existing()\n continuationError()\n message()\n createTask()\n taskId()\n contextId()\n executeMessage()\n command()\n result()\n domainResult()\n rejectTask()\n protobuf()\n diagnostic()\n message()\n currentTaskState()\n completeTask()\n protobuf()\n message()\n protobufResult()\n intakeDomainResult()\n record()\n failTask()\n message()\n agentMessage()\n listTasks()\n contextId()\n status()\n pageSize()\n historyLength()\n includeArtifacts()\n statusTimestampAfter()\n filter()\n filtered()\n pageCursor()\n start()\n page()\n last()\n filteredTasks()\n compareTasksByUpdate()\n timestampOrder()\n indexAfterCursor()\n exact()\n cursorTime()\n next()\n taskTime()\n encodeCursor()\n decodeCursor()\n decoded()\n taskView()\n effectiveHistoryLength()\n history()\n cloneArtifact()\n ownedTask()\n task()\n messageKey()\n errorMessage()\n src/communication/intake-store.ts:\n i: ../core/io.js,../core/security.js,node:crypto,node:fs,node:path\n e: IntakeEvent,StreamSnapshot,IntakeEventStore\n IntakeEvent:\n StreamSnapshot:\n IntakeEventStore: read(-1),names(-1),name(-1),eventPath(-1),stat(-1),event(-1),lockPath(-1),stream(-1),existing(-1),writeRegistry(-1),projectionPath(-1),slug(-1),atomicWrite(-1),safe(-1),temp(-1),assertSafe(-1),hashEvent(-1),broken(-1),unsafe(-1)\n scripts/verify-workflow-yaml.mjs:\n i: node:fs,node:path\n e: explicit,files,body,seen,match,key,previous,workflowFiles,directory\n explicit()\n files()\n body()\n seen()\n match()\n key()\n previous()\n workflowFiles()\n directory()\n scripts/research/audit-changelog-sample.mjs:\n i: node:child_process,node:fs,node:path\n e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,classification,labelCounts,labelRepositories,stratifiedSample,groups,values,added,record,targetClass,target,classify,text,file,exactFileUpdate,match,candidate,basename,pathOwners,file,countBy,item,readJson,parseArgs,value,index,limitIndex,limit,intentDirectoryIndex,intentDirectory\n options()\n entries()\n root()\n latest()\n runDirectory()\n diagnostics()\n graph()\n recordsById()\n findings()\n selected()\n trackedFiles()\n classification()\n labelCounts()\n labelRepositories()\n stratifiedSample()\n groups()\n values()\n added()\n record()\n targetClass()\n target()\n classify()\n text()\n file()\n exactFileUpdate()\n match()\n candidate()\n basename()\n pathOwners()\n file()\n countBy()\n item()\n readJson()\n parseArgs()\n value()\n index()\n limitIndex()\n limit()\n intentDirectoryIndex()\n intentDirectory()\n sdk/php/src/Client.php:\n e: Client\n Client:\n sdk/python/examples/basic.py:\n e: main\n main()\n examples/backend/src/validation.ts:\n e: ValidationResult,ALLOWED_ACTIONS,validateEventPayload,invalid,record,agent,action,object\n ValidationResult:\n ALLOWED_ACTIONS()\n validateEventPayload()\n invalid()\n record(\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "190.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.17s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)'\n description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:466`\n with cyclomatic complexity 34 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)'\n description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:467`\n with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n (CC=25)'\n description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates`\n at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker-llm.ts\n dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet\n (CC=27)'\n description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet`\n at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)'\n description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)'\n description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS`\n at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES`\n at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES`\n at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS`\n at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES`\n at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath`\n at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n (CC=41)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity\n 41 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText`\n at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor\n (CC=25)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor`\n at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity\n 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)'\n description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1`\n with cyclomatic complexity 52 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml\n- signal: code2llm_god\n title: 'Split god module: src/graph/linker.ts'\n description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines,\n 4 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/graph/linker.ts\n dedupe_key: code2llm:god:src/graph/linker.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts`\n as a large module (1310 lines, 10 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation`\n in `src/synthesis/code-change-plan/implementation.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions,\n 10 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God\n Module: src.synthesis.code-change-plan.implementation'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)'\n description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/io.ts\n dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication-file-helpers.buildLocalWarnings\n (CC=18)'\n description: 'code2llm reports `src.extractors.communication-file-helpers.buildLocalWarnings`\n at `src/extractors/communication-file-helpers.ts:254` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: code2llm:cc:src/extractors/communication-file-helpers.ts:src.extractors.communication-file-helpers.buildLocalWarnings\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations`\n at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult\n (CC=21)'\n description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult`\n at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n (CC=23)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch`\n at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity\n 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n (CC=18)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet`\n at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff`\n at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths\n (CC=16)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths`\n at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity\n 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans`\n at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: action, self, payload'\n description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n action, self, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: action, self, payload'\n description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n action, self, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: excludes, self, patterns, root'\n description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (excludes, self, patterns, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n excludes, self, patterns, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: excludes, self, patterns, root'\n description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (excludes, self, patterns, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n excludes, self, patterns, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, nl_mode, self, root'\n description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (file, nl_mode, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n file, nl_mode, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, nl_mode, self, root'\n description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (file, nl_mode, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n file, nl_mode, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo'\n description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root,\n todo` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n markdown_mode, changelog, self, root, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo'\n description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root,\n todo` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n markdown_mode, changelog, self, root, todo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:369`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:369:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:179`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertSourceApplyReceipt'\n description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`.\n\n\n Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God\n Function: assertSourceApplyReceipt'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: base'\n description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`.\n\n\n Function ''base'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/io.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:92:God Function: base'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byDeclaration'\n description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`.\n\n\n Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God\n Function: byDeclaration'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: candidates'\n description: 'code2llm reports `God Function: candidates` in `src/synthesis/code-change-plan/implementation.ts:124`.\n\n\n Function ''candidates'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:124:God\n Function: candidates'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: closeCodeChanges'\n description: 'code2llm reports `God Function: closeCodeChanges` in `src/synthesis/code-change-plan/implementation.ts:298`.\n\n\n Function ''closeCodeChanges'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:298:God\n Function: closeCodeChanges'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: conclusions'\n description: 'code2llm reports `God Function: conclusions` in `src/synthesis/code-change-plan/implementation.ts:118`.\n\n\n Function ''conclusions'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:118:God\n Function: conclusions'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: conclusionsByDiagnostic'\n description: 'code2llm reports `God Function: conclusionsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:122`.\n\n\n Function ''conclusionsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:122:God\n Function: conclusionsByDiagnostic'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeReviewPatch'\n description: 'code2llm reports `God Function: createCodeChangeReviewPatch` in `src/synthesis/code-change-plan/implementation.ts:547`.\n\n\n Function ''createCodeChangeReviewPatch'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:547:God\n Function: createCodeChangeReviewPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: createCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation.ts:698`.\n\n\n Function ''createCodeChangeSourcePatch'' is oversized: CC=13, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:698:God\n Function: createCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeSourcePatchSet'\n description: 'code2llm reports `God Function: createCodeChangeSourcePatchSet` in\n `src/synthesis/code-change-plan/implementation.ts:759`.\n\n\n Function ''createCodeChangeSourcePatchSet'' is oversized: CC=8, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:759:God\n Function: createCodeChangeSourcePatchSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_f\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3683 func | 171f | 39185L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.6 critical=256 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded executeAction = 83 (limit:15)\n !!! cc_exceeded root = 83 (limit:15)\n !!! high_fan_out executeAction = 65 (limit:10)\n !!! high_fan_out root = 64 (limit:10)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded diffUiHtml = 52 (limit:15)\n !!! cc_exceeded analyzeCommunication = 48 (limit:15)\n\nMODULES[251] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/services/actions.ts] 737L C:1 F:79 CC↑83 D:0 (typescript)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[src/core/text.ts] 517L C:0 F:57 CC↑34 D:0 (typescript)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript)\n M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript)\n LANGS: typescript:143/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ executeAction fan=65 // Orchestrates 65 calls\n ★ root fan=64 // Orchestrates 64 calls\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ diffUiHtml fan=42 // Orchestrates 42 calls\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n\nREFACTOR[15]:\n [1] H/L Split executeAction (CC=83)\n [2] H/L Split root (CC=83)\n [3] H/L Split normalized (CC=30)\n [4] H/L Split inferObject (CC=34)\n [5] H/L Split diffUiHtml (CC=52)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.6 crit=256 39185L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; + const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "93.1KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.3KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3900 \n**Total Classes**: 390 \n**Modules**: 252 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "34.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 144, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3900\n- **Total Classes**: 390\n- **Modules**: 252\n- **Entry Points**: 2662\n\n## Architecture by Module\n\n### src.synthesis.code-change-plan.implementation-helpers\n- **Functions**: 308\n- **Classes**: 25\n- **File**: `implementation-helpers.ts`\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.services.actions\n- **Functions**: 145\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.graph.linker\n- **Functions**: 85\n- **Classes**: 4\n- **File**: `linker.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.core.text\n- **Functions**: 66\n- **File**: `text.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation-helpers.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.python.todo2code.runtime.TypeScriptRuntime.reality\n- **Calls**: tempfile.TemporaryDirectory, self.invoke, Path, Path, Path, str, str, str\n\n### src.extractors.nl.extractNlIntent\n- **Calls**: src.extractors.nl.assertNlExtractionOptions, src.extractors.nl.resolve, src.extractors.nl.readText, src.extractors.nl.isAbsolute, src.extractors.nl.relativePosix, src.extractors.nl.replace, src.extractors.nl.splitIntentLines, src.extractors.nl.classifyAction\n\n### src.extractors.ast.extractAstIntent\n- **Calls**: src.extractors.ast.resolve, src.extractors.ast.ContentCache, src.extractors.ast.loadIgnoreMatcher, src.extractors.ast.walkFiles, src.extractors.ast.readText, src.extractors.ast.relativePosix, src.extractors.ast.getOrCompute, src.extractors.ast.sha256\n\n### src.extractors.todo.body\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.relative\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.lines\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.synthesis.todo-patch.applyTodoPatch\n- **Calls**: src.synthesis.todo-patch.all, src.synthesis.todo-patch.readText, src.synthesis.todo-patch.assertTodoPatchArtifact, src.synthesis.todo-patch.sha256, src.synthesis.todo-patch.Error, src.synthesis.todo-patch.assertApproval, src.synthesis.todo-patch.ensureDir, src.synthesis.todo-patch.dirname\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 2: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 3: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 4: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 5: parseCommand\n```\nparseCommand [src.interfaces.a2a-message]\n```\n\n### Flow 6: assertOperationPlan\n```\nassertOperationPlan [src.operations.validation]\n └─> objectValue\n └─> exactKeys\n```\n\n### Flow 7: temporaryParent\n```\ntemporaryParent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 8: baseWorktree\n```\nbaseWorktree [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 9: extractTodo\n```\nextractTodo [src.extractors.todo]\n```\n\n### Flow 10: makefile\n```\nmakefile [scripts.verify-env-contract]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 43\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 28\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `src.semantic.reranker.result.assertSemanticRerankResult` - 37 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.web.diff-ui.diffUiScriptMarkup` - 36 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n- `src.extractors.ast.extractAstIntent` - 20 calls\n- `src.extractors.todo.body` - 20 calls\n- `src.extractors.todo.relative` - 20 calls\n- `src.extractors.todo.lines` - 20 calls\n- `src.synthesis.todo-patch.createTodoPatch` - 20 calls\n- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls\n- `src.llm.openrouter.OpenRouterClient.request` - 20 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n compareWorkspaceInte --> relative\n compareWorkspaceInte --> startsWith\n analyzeCommunication --> assertIntentGraph\n analyzeCommunication --> filter\n analyzeCommunication --> validateSyntheses\n analyzeCommunication --> evidenceNeighbors\n analyzeCommunication --> participantOf\n parseCommand --> find\n parseCommand --> from\n parseCommand --> decodeIntakeEnvelope\n parseCommand --> isRecord\n parseCommand --> commandFromData\n main --> list\n main --> monotonic\n main --> SentenceTransformer\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "70.7KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__validation__record["record"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__server__offset["offset"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__server__event["event"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__limit["limit"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__validation__agent["agent"]\n examples__backend__src__server__store["store"]\n examples__backend__src__server__server["server"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__app__createState["createState"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__refresh["refresh"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n end\n subgraph src__cli\n src__cli__taskFile["taskFile"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__invokedPath["invokedPath"]\n src__cli__emitJson["emitJson"]\n src__cli__optionNumber["optionNumber"]\n src__cli__doctor["doctor"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__command["command"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__printHelp["printHelp"]\n src__cli__diff["diff"]\n src__cli__optionString["optionString"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__handler["handler"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__stop["stop"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__pipeline["pipeline"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__parsed["parsed"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__result["result"]\n src__cli__optionNullableString["optionNullableString"]\n src__cli__absolute["absolute"]\n src__cli__handleIntake["handleIntake"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__context["context"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__view["view"]\n src__cli__handleExtract["handleExtract"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__file["file"]\n src__cli__stamp["stamp"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__optionNlMode["optionNlMode"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__handleReality["handleReality"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__svg["svg"]\n src__cli__main["main"]\n src__cli__optionList["optionList"]\n src__cli__diagnostics["diagnostics"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__root["root"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__controller["controller"]\n src__cli__initProject["initProject"]\n src__cli__handleDiff["handleDiff"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__handleLink["handleLink"]\n src__cli__optionTaskMode["optionTaskMode"]\n end\n subgraph src__extractors\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_record__action["action"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__git__readStats["readStats"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__configuration__entries["entries"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__todo__raw["raw"]\n src__extractors__ast__records__start["start"]\n src__extractors__git__runGit["runGit"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__changelog__relative["relative"]\n src__extractors__configuration__files["files"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__configuration__entry["entry"]\n src__extractors__nl__action["action"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__todo__action["action"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__docs_record__target["target"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__changelog__body["body"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__git__result["result"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__todo__text["text"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__configuration__relative["relative"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__todo__classified["classified"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__configuration__lines["lines"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__ast__typescript__context["context"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"]\n src__extractors__configuration__pair["pair"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__nl__object["object"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__configuration__match["match"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__todo__task["task"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__nl__classified["classified"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__todo__checked["checked"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__configuration__heading["heading"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__ast__external__result["result"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__changelog__lines["lines"]\n src__extractors__todo__lines["lines"]\n src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__nl__body["body"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__todo__body["body"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__git__state["state"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__configuration__line["line"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__todo__block["block"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"]\n src__extractors__nl__missing["missing"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__todo__relative["relative"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__git__count["count"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__todo__heading["heading"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__git__root["root"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"]\n src__extractors__docs_schema__target["target"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__todo__match["match"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__ast__typescript__recordModuleFact["recordModuleFact"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>225 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>444 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2419 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [166KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [34KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "165.1KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "24.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 252f 41875L | typescript:144,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.28s\n# CC̅=3.3 | critical:64/3900 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10\n 🔴 GOD src/synthesis/code-change-plan/implementation-helpers.ts = 2239L, 25 classes, 270m, max CC=13\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC generationMetadata CC=17 (limit:15)\n 🟡 CC diffUiScriptMarkup CC=46 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC assertSemanticRerankResult CC=29 (limit:15)\n 🟡 CC timeout CC=26 (limit:15)\n 🟡 CC request CC=31 (limit:15)\n 🟡 CC parseCommand CC=63 (limit:15)\n 🟡 CC runListItem CC=18 (limit:15)\n 🟡 CC myers CC=19 (limit:15)\n 🟡 CC n CC=15 (limit:15)\n 🟡 CC m CC=15 (limit:15)\n 🟡 CC max CC=15 (limit:15)\n 🟡 CC offset CC=15 (limit:15)\n 🟡 CC y CC=15 (limit:15)\n 🟡 CC backtrack CC=18 (limit:15)\n 🟡 CC x CC=15 (limit:15)\n 🟡 CC buildRealityView CC=26 (limit:15)\n\nREFACTOR[3]:\n 1. split src/graph/linker.ts (god module)\n 2. split src/synthesis/code-change-plan/implementation-helpers.ts (god module)\n 3. split 18 high-CC methods (CC>15)\n\nPIPELINES[2067]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.4 ←in:0 →out:0\n │ !! implementation-helpers.ts 2239L 25C 270m CC=13 ←3\n │ !! cli.ts 935L 1C 124m CC=13 ←0\n │ !! actions.ts 803L 1C 106m CC=13 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! linker.ts 537L 4C 81m CC=10 ←3\n │ !! text.ts 530L 0C 61m CC=14 ←0\n │ diagnostics.ts 459L 1C 58m CC=11 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ !! result.ts 312L 0C 23m CC=29 ←0\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intent.ts 306L 4C 36m CC=12 ←0\n │ reranker-llm.ts 291L 2C 35m CC=9 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ intent.ts 258L 15C 0m CC=0.0 ←0\n │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ candidate.ts 250L 1C 19m CC=8 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ code-change-path.ts 232L 0C 23m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ code-change.ts 221L 16C 0m CC=0.0 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ io.ts 211L 2C 30m CC=11 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ !! record.ts 183L 2C 13m CC=17 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ markdown-llm.ts 175L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ !! diff-ui.ts 167L 0C 15m CC=46 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ implementation.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.live/ (fan-in=7)\n HUB: src.synthesis/ (fan-in=5)\n HUB: src.diff/ (fan-in=6)\n SMELL: sdk.python/ fan-out=8 → split needed\n SMELL: scripts.research/ fan-out=11 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 402 | edges: 500 | modules: 30\n# CC̄=3.3\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.body\n CC=7 in:0 out:15 total:15\n src.extractors.ast.records.moduleRecords\n CC=6 in:1 out:14 total:15\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [6 funcs]\n context CC=1 out:4\n createTypeScriptExtractionContext CC=1 out:0\n extractTypeScriptFile CC=1 out:7\n recordModuleFact CC=1 out:2\n scriptKind CC=4 out:3\n visitTypeScriptNode CC=2 out:2\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [10 funcs]\n appendA2aAgentWarnings CC=5 out:4\n appendIdentityWarnings CC=4 out:2\n appendRegistryAlignmentWarnings CC=7 out:2\n appendRoleAndParticipantWarnings CC=3 out:2\n appendTimestampWarnings CC=3 out:2\n buildLocalWarnings CC=3 out:5\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [15 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n nonEmptyText CC=3 out:1\n normalizedText CC=1 out:1\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "254.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 402\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 344\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 306\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 612\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 929\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 694\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 830\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 750\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 684\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 342\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 218\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 219\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.ast.typescript.createTypeScriptExtractionContext:\n name: createTypeScriptExtractionContext\n module: src.extractors.ast.typescript\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 659\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 367\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 405\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 617\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 363\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 639\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 484\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 286\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 513\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 326\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 197\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 607\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 883\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n src.cli.diff:\n name: diff\n module: src.cli\n line: 500\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 811\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 75\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 530\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.handler:\n name: handler\n module: src.cli\n line: 587\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 869\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 823\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 237\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 508\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.cli.stop:\n name: stop\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.ast.typescript.context:\n name: context\n module: src.extractors.ast.typescript\n line: 12\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 142\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 345\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 859\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 259\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 629\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 847\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.communication-file-helpers.appendIdentityWarnings:\n name: appendIdentityWarnings\n module: src.extractors.communication-file-helpers\n line: 282\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 253\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.cli.result:\n name: result\n module: src.cli\n line: 763\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 158\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 816\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 705\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 699\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 87\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 159\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.cli.context:\n name: context\n module: src.cli\n line: 531\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 553\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.cli.view:\n name: view\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 573\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 121\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 649\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.cli.file:\n name: file\n module: src.cli\n line: 595\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 255\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 445\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 176\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-file-helpers.buildLocalWarnings:\n name: buildLocalWarnings\n module: src.extractors.communication-file-helpers\n line: 254\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 772\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 622\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 843\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 237\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 875\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 547\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 168\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 185\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 380\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n src.cli.svg:\n name: svg\n module: src.cli\n line: 560\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.communication-file-helpers.appendA2aAgentWarnings:\n name: appendA2aAgentWarnings\n module: src.extractors.communication-file-helpers\n line: 314\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 194\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 838\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.communication-file-helpers.appendRoleAndParticipantWarnings:\n name: appendRoleAndParticipantWarnings\n module: src.extractors.communication-file-helpers\n line: 273\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 554\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 490\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.extractors.communication-file-helpers.appendTimestampWarnings:\n name: appendTimestampWarnings\n module: src.extractors.communication-file-helpers\n line: 328\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 31\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 268\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 410\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.root:\n name: root\n module: src.cli\n line: 660\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 594\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.ast.typescript.visitTypeScriptNode:\n name: visitTypeScriptNode\n module: src.extractors.ast.typescript\n line: 46\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.cli.controller:\n name: controller\n module: src.cli\n line: 347\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 90\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 215\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 189\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.extractors.communication-file-helpers.appendRegistryAlignmentWarnings:\n name: appendRegistryAlignmentWarnings\n module: src.extractors.communication-file-helpers\n line: 299\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 1\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 92\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 729\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 464\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 444\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 127\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.ast.typescript.recordModuleFact:\n name: recordModuleFact\n module: src.extractors.ast.typescript\n line: 229\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 0\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 853\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntri\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3591 func | 137f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation-helpers.ts\n WHY: 2239L, 25 classes, max CC=13\n EFFORT: ~4h IMPACT: 29107\n\n [2] !! SPLIT src/cli.ts\n WHY: 935L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12155\n\n [3] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [4] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [5] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [6] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n [7] !! SPLIT-FUNC diffUiScriptMarkup CC=46 fan=36\n WHY: CC=46 exceeds 15\n EFFORT: ~1h IMPACT: 1656\n\n [8] !! SPLIT-FUNC assertSemanticRerankResult CC=29 fan=37\n WHY: CC=29 exceeds 15\n EFFORT: ~1h IMPACT: 1073\n\n [9] !! SPLIT-FUNC parseFile CC=38 fan=19\n WHY: CC=38 exceeds 15\n EFFORT: ~1h IMPACT: 722\n\n [10] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37\n WHY: CC=18 exceeds 15\n EFFORT: ~1h IMPACT: 666\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation-helpers.ts may break 270 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n\nMETRICS-TARGET:\n CC̄: 3.3 → ≤2.3\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 53 → ≤26\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.7 → now CC̄=3.3\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "166.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 252f 41875L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:144,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.03s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3900 func | 0 cls | 252 mod | CC̄=3.3 | critical:64 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC parseCommand=63; CC runPipeline=56; fan-out runPipeline=56; CC analyzeCommunication=48\n# hotspots[5]: runPipeline fan=56; compareWorkspaceIntent fan=40; assertSemanticRerankResult fan=37; Client.parse_http_response fan=37; diffUiScriptMarkup fan=36\n# evolution: CC̄ 3.7→3.3 (improved -0.4)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[252]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,935\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,211\n src/core/record.ts,183\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,306\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,530\n src/core/types/index.ts,4\n src/core/types/code-change.ts,221\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,258\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,342\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,175\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,256\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,537\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,291\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,250\n src/semantic/reranker/result.ts,312\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,803\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,232\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/code-change-plan/implementation-helpers.ts,2239\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,167\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/web/diff-ui.ts:\n e: diffUiStyles,diffUiRunPanel,diffUiFiltersPanel,diffUiBodyMarkup,diffUiScriptMarkup,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs,diffUiTemplate,diffUiHtml\n diffUiStyles()\n diffUiRunPanel()\n diffUiFiltersPanel()\n diffUiBodyMarkup()\n diffUiScriptMarkup()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n diffUiTemplate()\n diffUiHtml()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n src/semantic/reranker/result.ts:\n i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js\n e: createSemanticRerankResult,decisions,assertSemanticRerankResult,seenDecisions,acceptedDeclarations,candidate,assertSemanticRerankHeader,createCandidateAndRecordIndex,validateSemanticDecisionCandidate,candidate,validateSemanticDecisionDecision,validateSemanticDecisionEvidence,citations,record,validateDecisionEvidenceScope,validateSemanticDecisionVerdict,assertRerankResultHash,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons\n createSemanticRerankResult()\n decisions()\n assertSemanticRerankResult()\n seenDecisions()\n acceptedDeclarations()\n candidate()\n assertSemanticRerankHeader()\n createCandidateAndRecordIndex()\n validateSemanticDecisionCandidate()\n candidate()\n validateSemanticDecisionDecision()\n validateSemanticDecisionEvidence()\n citations()\n record()\n validateDecisionEvidenceScope()\n validateSemanticDecisionVerdict()\n assertRerankResultHash()\n expectedHash()\n applyAcceptedSemanticRelations()\n candidates()\n added()\n candidate()\n assertSemanticVerdictReason()\n allowedVerdicts()\n allowedReasons()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n seed()\n buildRecordSeed()\n buildRecordStatement()\n buildRecordSource()\n buildRecordEpistemic()\n withRecordGeneration()\n generationMetadata()\n generationIdentity()\n separator()\n clamp()\n sourcePrefix()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n appendRoleAndParticipantWarnings()\n appendIdentityWarnings()\n appendRegistryAlignmentWarnings()\n appendA2aAgentWarnings()\n declaredA2aAgentId()\n hasRegistryEntry()\n appendTimestampWarnings()\n rawTimestamp()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n withoutAction()\n result()\n normalizeForObject()\n removeObjectAction()\n stripObjectConnector()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n handler()\n executeExtractNlAction()\n file()\n text()\n executeExtractGitAction()\n executeExtractAstAction()\n executeExtractConfigAction()\n executeExtractMarkdownAction()\n executeExtractDocsAction()\n executeExtractCommunicationAction()\n executeAnalyzeCommunicationAction()\n analysis()\n executeLinkAction()\n records()\n executeDiagnoseAction()\n graph()\n executeSummarizeAction()\n graph()\n diagnostics()\n executeProposeTodoAction()\n graph()\n diagnostics()\n result()\n output()\n executeRenderTodoAction()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n executeApplyTodoAction()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n executeProposeCodeChangeAction()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n executeRenderCodeChangeAction()\n planSet()\n review()\n patchPath()\n auditPath()\n executeProposeSourcePatchAction()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n executeApplySourcePatchAction()\n patch()\n receiptPath()\n result()\n executeEvaluateCodeChangeAction()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n executeCloseCodeChangeAction()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n executeDiffAction()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n executeDiffFilesAction()\n beforePath()\n afterPath()\n diff()\n executeDiffGitAction()\n result()\n executeRealityAction()\n graph()\n diagnostics()\n view()\n executeCompareWorkspaceAction()\n executePipelineAction()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/synthesis/code-change-plan/implementation-helpers.ts:\n i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,PlanContext,CodeChangePlanSemanticDraft,AcceptanceContext,CloseCodeChangeContext,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CodeChangeReviewContext,CreateCodeChangeSourcePatchOptions,SourcePatchCreationContext,SourcePatchSetBuildContext,SourcePatchEditValidationContext,SourcePatchSetValidationContext,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,context,candidates,plans,buildPlansForCandidates,plan,buildPlanSetResult,parseIsoDateTime,generatedAt,parseMaxPlans,maxPlans,buildPlanContext,conclusions,proposals,collectImplementationDiagnostics,findRelatedRecords,createPlanForDiagnostic,relatedRecords,matchingProposals,matchingConclusions,target,changes,evidence,confidence,semantic,confidenceForDiagnostic,buildPlanEvidence,buildPlanSemantic,buildPlanResult,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,context,reasons,accepted,acceptance,buildAcceptanceContext,evaluatedAt,afterDiagnostics,beforeDiagnosticIds,afterById,targetedDiagnosticIds,buildAcceptanceReasons,isAcceptancePassed,appendAcceptanceGateReason,buildAcceptanceResult,closeCodeChanges,context,acceptances,acceptedCount,buildCloseCodeChangeContext,evaluatedAt,afterDiagnostics,ensureClosePlanIdsAreUnique,planIds,buildCloseResult,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,target,collectTargetComponents,paths,symbols,tickets,versions,addTargetEntries,finalizeTarget,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,context,markdown,artifact,buildCodeChangeReviewContext,createdAt,sortCodeChangeReviewPlans,buildCodeChangeReviewMarkdown,buildCodeChangeReviewArtifact,renderCodeChangeReviewMarkdown,lines,buildCodeChangeReviewMarkdownLines,appendPriorityHeader,appendPlanDetails,appendPlanChanges,symbols,appendAfterImplementationSection,assertCodeChangeReviewPatch,artifact,validateReviewPatchKeys,assertCodeChangeReviewPatchSchema,assertReviewPatchSchemaVersion,assertReviewPatchDateFields,assertReviewPatchIds,assertCodeChangeReviewPatchPlanCollections,assertCodeChangeReviewPatchGeneration,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,context,edits,semantic,patchHash,buildSourcePatchContext,graphFingerprint,createdAt,allowedPaths,collectPlanTargetPaths,validateUnifiedDiffsBelongToPlan,normalizedPath,buildSourcePatchEdits,buildSourcePatchEdit,path,rawDiff,unifiedDiff,buildSourcePatchSemantic,createCodeChangeSourcePatchSet,context,patches,result,normalizePatchSetOptions,generatedAt,buildPatchesForSet,buildSourcePatchSet,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchObject,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,normalizeUnifiedDiffText,normalized,validateUnifiedDiffBody,validateUnifiedDiffPathHeaders,extractUnifiedDiffHeaders,validateUnifiedDiffHeaderPath,normalizedPath,normalizeUnifiedDiffHeaderPath,assertUnifiedDiffHeaderPathSafety,bare,stripped,isUnifiedDiffTraversalHeader,matchesUnifiedDiffExpectedHeader,normalizedHeaderPathCandidate,stripLeadingDiffPrefix,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertCodeChangeSourcePatchAndActorAndEdits,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n PlanContext:\n CodeChangePlanSemanticDraft:\n AcceptanceContext:\n CloseCodeChangeContext:\n CreateCodeChangeReviewOptions:\n CreatedCodeChangeReview:\n CodeChangeReviewContext:\n CreateCodeChangeSourcePatchOptions:\n SourcePatchCreationContext:\n SourcePatchSetBuildContext:\n SourcePatchEditValidationContext:\n SourcePatchSetValidationContext:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n NormalizedApplyCodeChangeSourcePatchRequest:\n SourcePatchApplyLock:\n SourcePatchEditTarget:\n PreparedSourceEdit:\n ParsedUnifiedDiffHunk:\n UnifiedDiffParsingContext:\n UnifiedDiffCursor:\n IMPLEMENTATION_DIAGNOSTIC_CODES()\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n context()\n candidates()\n plans()\n buildPlansForCandidates()\n plan()\n buildPlanSetResult()\n parseIsoDateTime()\n generatedAt()\n parseMaxPlans()\n maxPlans()\n buildPlanContext()\n conclusions()\n proposals()\n collectImplementationDiagnostics()\n findRelatedRecords()\n createPlanForDiagnostic()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n evidence()\n confidence()\n semantic()\n confidenceForDiagnostic()\n buildPlanEvidence()\n buildPlanSemantic()\n buildPlanResult()\n createRepositoryPathProbe()\n base()\n absolute()\n implementationDiagnosticRank()\n evaluateCodeChangeAcceptance()\n context()\n reasons()\n accepted()\n acceptance()\n buildAcceptanceContext()\n evaluatedAt()\n afterDiagnostics()\n beforeDiagnosticIds()\n afterById()\n targetedDiagnosticIds()\n buildAcceptanceReasons()\n isAcceptancePassed()\n appendAcceptanceGateReason()\n buildAcceptanceResult()\n closeCodeChanges()\n context()\n acceptances()\n acceptedCount()\n buildCloseCodeChangeContext()\n evaluatedAt()\n afterDiagnostics()\n ensureClosePlanIdsAreUnique()\n planIds()\n buildCloseResult()\n indexProposalsByDiagnostic()\n index()\n list()\n indexConclusionsByDiagnostic()\n index()\n list()\n collectTarget()\n target()\n collectTargetComponents()\n paths()\n symbols()\n tickets()\n versions()\n addTargetEntries()\n finalizeTarget()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n titleFor()\n record()\n object()\n startsWithImperative()\n descriptionFor()\n acceptanceCriteriaFor()\n priorityFor()\n confidenceFor()\n riskFor()\n level()\n rollbackFor()\n deterministicGeneration()\n uniqueSorted()\n createCodeChangeReviewPatch()\n context()\n markdown()\n artifact()\n buildCodeChangeReviewContext()\n createdAt()\n sortCodeChangeReviewPlans()\n buildCodeChangeReviewMarkdown()\n buildCodeChangeReviewArtifact()\n renderCodeChangeReviewMarkdown()\n lines()\n buildCodeChangeReviewMarkdownLines()\n appendPriorityHeader()\n appendPlanDetails()\n appendPlanChanges()\n symbols()\n appendAfterImplementationSection()\n assertCodeChangeReviewPatch()\n artifact()\n validateReviewPatchKeys()\n assertCodeChangeReviewPatchSchema()\n assertReviewPatchSchemaVersion()\n assertReviewPatchDateFields()\n assertReviewPatchIds()\n assertCodeChangeReviewPatchPlanCollections()\n assertCodeChangeReviewPatchGeneration()\n generation()\n priorityRank()\n inline()\n renderIds()\n createCodeChangeSourcePatch()\n context()\n edits()\n semantic()\n patchHash()\n buildSourcePatchContext()\n graphFingerprint()\n createdAt()\n allowedPaths()\n collectPlanTargetPaths()\n validateUnifiedDiffsBelongToPlan()\n normalizedPath()\n buildSourcePatchEdits()\n buildSourcePatchEdit()\n path()\n rawDiff()\n unifiedDiff()\n buildSourcePatchSemantic()\n createCodeChangeSourcePatchSet()\n context()\n patches()\n result()\n normalizePatchSetOptions()\n generatedAt()\n buildPatchesForSet()\n buildSourcePatchSet()\n assertCodeChangeSourcePatch()\n patch()\n editPaths()\n assertCodeChangeSourcePatchObject()\n patch()\n validateSourcePatchSchema()\n validateSourcePatchIdentifiers()\n validateSourcePatchEdits()\n collectSourcePatchEditPathActions()\n paths()\n editContext()\n validateSourcePatchEdit()\n normalizedEdit()\n normalizedPath()\n assertSourcePatchEditObject()\n validateSourcePatchEditBody()\n validateSourcePatchEditDiff()\n assertUniqueSourcePatchEditPathAction()\n normalizeSourcePatchEditPath()\n normalizedPath()\n ensureSourcePatchEditAction()\n ensureSourcePatchEditInstruction()\n validateSourcePatchHashAndId()\n expectedHash()\n validateSourcePatchGeneration()\n validateSourcePatchAgainstPlan()\n expectedChanges()\n assertSourcePatchPlanBinding()\n collectExpectedPlanChanges()\n validateSourcePatchEditsAgainstPlan()\n allowed()\n editPath()\n validateSourcePatchEvidence()\n assertCodeChangeSourcePatchSet()\n set()\n context()\n createSourcePatchSetValidationContext()\n expectedPlanIds()\n assertSourcePatchObject()\n assertSourcePatchSetObject()\n set()\n validateSourcePatchSetSchema()\n validateSourcePatchSetPatches()\n patchIds()\n validateSetPatchAndTrackDuplicates()\n expectedPlan()\n validateSetPatchGraphFingerprint()\n assertUniqueSetPatchId()\n validateSetPatchesPlanCoverage()\n validateSourcePatchSetGeneration()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n instructionFor()\n symbols()\n criteria()\n normalizeUnifiedDiff()\n normalized()\n normalizeUnifiedDiffText()\n normalized()\n validateUnifiedDiffBody()\n validateUnifiedDiffPathHeaders()\n extractUnifiedDiffHeaders()\n validateUnifiedDiffHeaderPath()\n normalizedPath()\n normalizeUnifiedDiffHeaderPath()\n assertUnifiedDiffHeaderPathSafety()\n bare()\n stripped()\n isUnifiedDiffTraversalHeader()\n matchesUnifiedDiffExpectedHeader()\n normalizedHeaderPathCandidate()\n stripLeadingDiffPrefix()\n applyCodeChangeSourcePatch()\n request()\n root()\n receiptPath()\n lock()\n idempotentResult()\n prepared()\n now()\n receipt()\n readExistingReceipt()\n existing()\n assertPatchApplicationRequest()\n patch()\n assertCodeChangeSourcePatchAndActorAndEdits()\n assertPatchApprovalActor()\n assertPatchApprovalHash()\n assertPatchEditsContainDiffs()\n acquireApplyLock()\n lock()\n prepareSourceEdits()\n target()\n before()\n after()\n prepareSourceEditTarget()\n relative()\n absolute()\n existed()\n assertSourcePatchTargetNotSymlink()\n assertDeleteEditClearsAll()\n validatePatchTargetForEdit()\n applyPreparedEdits()\n receipt()\n rollbackErrors()\n writePreparedEdits()\n buildPatchApplyReceipt()\n fileHashesAfter()\n rollbackPreparedEdits()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n validateSourceApplyReceiptShape()\n validateSourceApplyReceiptIdentity()\n validateSourceApplyReceiptTimestamps()\n validateSourceApplyReceiptPathHashes()\n expectedPaths()\n hashPaths()\n validateSourceApplyReceiptGeneration()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n baseLines()\n hunks()\n output()\n joinAppliedText()\n parseUnifiedDiffIntoHunks()\n normalizedDiff()\n context()\n createEmptyUnifiedDiffContext()\n parseUnifiedDiffLines()\n finalizeUnifiedDiffContext()\n applyUnifiedDiffLineToContext()\n header()\n parseUnifiedDiffHeader()\n buildParsedUnifiedDiffHunk()\n applyUnifiedDiffHunks()\n applyUnifiedDiffHunk()\n oldIndex()\n copyBaseLinesToCursor()\n appendRemainingBaseLines()\n validateHunkCounts()\n oldCount()\n newCount()\n applyUnifiedDiffLine()\n mark()\n body()\n applyUnifiedDiffContextLine()\n applyUnifiedDiffDeletionLine()\n applyUnifiedDiffAdditionLine()\n splitKeep()\n lines()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTarget()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplemen\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "164.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.15s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult\n (CC=29)'\n description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult`\n at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 29 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiScriptMarkup (CC=46)'\n description: 'code2llm reports `src.web.diff-ui.diffUiScriptMarkup` at `src/web/diff-ui.ts:127`\n with cyclomatic complexity 46 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiScriptMarkup\n- signal: code2llm_god\n title: 'Split god module: src/graph/linker.ts'\n description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines,\n 4 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/graph/linker.ts\n dedupe_key: code2llm:god:src/graph/linker.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation-helpers.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation-helpers.ts`\n as a large module (2239 lines, 25 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-helpers.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-helpers'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-helpers`\n in `src/synthesis/code-change-plan/implementation-helpers.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation-helpers'' is too large\n (308 functions, 25 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1:God\n Module: src.synthesis.code-change-plan.implementation-helpers'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:139`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, changelog, self, todo, markdown_mode'\n description: 'code2llm reports `Data Clump: root, changelog, self, todo, markdown_mode`\n in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (root, changelog, self, todo, markdown_mode) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n root, changelog, self, todo, markdown_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, changelog, self, todo, markdown_mode'\n description: 'code2llm reports `Data Clump: root, changelog, self, todo, markdown_mode`\n in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (root, changelog, self, todo, markdown_mode) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n root, changelog, self, todo, markdown_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, excludes, self, patterns'\n description: 'code2llm reports `Data Clump: root, excludes, self, patterns` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (root, excludes, self, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n root, excludes, self, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, excludes, self, patterns'\n description: 'code2llm reports `Data Clump: root, excludes, self, patterns` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (root, excludes, self, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n root, excludes, self, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, file, self, nl_mode'\n description: 'code2llm reports `Data Clump: root, file, self, nl_mode` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (root, file, self, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n root, file, self, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, file, self, nl_mode'\n description: 'code2llm reports `Data Clump: root, file, self, nl_mode` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (root, file, self, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n root, file, self, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:227`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:227:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-helpers.ts:1663`.\n\n\n Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1663:God\n Function: applyCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildAcceptanceContext'\n description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers.ts:376`.\n\n\n Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:376:God\n Function: buildAcceptanceContext'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:16:God\n Function: createSemanticCandidateSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticRerankResult'\n description: 'code2llm reports `God Function: createSemanticRerankResult` in `src/semantic/reranker/result.ts:23`.\n\n\n Function ''createSemanticRerankResult'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:23:God\n Function: createSemanticRerankResult'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createTodoPatch'\n description: 'code2llm reports `God Function: createTodoPatch` in `src/synthesis/todo-patch.ts:69`.\n\n\n Function ''createTodoPatch'' is oversized: CC=8, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:69:God Function:\n createTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_chunked'\n description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:189`.\n\n\n Function ''decode_chunked'' is oversized: CC=7, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:189:God Function:\n decode_chunked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diagnoseGraph'\n description: 'code2llm reports `God Function: diagnoseGraph` in `src/graph/diagnostics.ts:16`.\n\n\n Function ''diagnoseGraph'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:16:God Function:\n diagnoseGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diffIntentGraphs'\n description: 'code2llm reports `God Function: diffIntentGraphs` in `src/graph/diff.ts:16`.\n\n\n Function ''diffIntentGraphs'' is oversized: CC=11, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diff.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diff.ts:16:God Function: diffIntentGraphs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: encode_envelope'\n description: 'code2llm reports `God Function: encode_envelope` in `src/interfaces/intake_cli.py:55`.\n\n\n Function ''encode_envelope'' is oversized: CC=6, fan-out=11, mutations=11.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:55:God Function:\n encode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichBatchCovering'\n description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm-helpers.ts:112`.\n\n\n Function ''enrichBatchCovering'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:112:God\n Function: enrichBatchCovering'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichMarkdownRecords'\n description: 'code2llm reports `God Function: enrichMarkdownRecords` in `src/extractors/markdown-llm-helpers.ts:57`.\n\n\n Function ''enrichMarkdownRecords'' is oversized: CC=13, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:57:God\n Function: enrichMarkdownRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichRecord'\n description: 'code2llm reports `God Function: enrichRecord` in `src/extractors/markdown-llm-helpers.ts:274`.\n\n\n Function ''enrichRecord'' is oversized: CC=14, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God\n Function: enrichRecord'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDiagnosticsCase'\n description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:182`.\n\n\n Function ''evaluateDiagnosticsCase'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:182:God Function:\n evaluateDiagnosticsCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDsl2TodoCase'\n description: 'code2llm reports `God Function: evaluateDsl2TodoCase` in `src/evaluation/gold-cases.ts:210`.\n\n\n Function ''evaluateDsl2TodoCase'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:210:God Function:\n evaluateDsl2TodoCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: exchange'\n description: 'code2llm reports `God Function: exchange` in `sdk/rust/src/client.rs:125`.\n\n\n Function ''exchange'' is oversized: CC=10, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function:\n exchange'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeAnalyzeCommunicationAction'\n description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction`\n in `src/services/actions.ts:155`.\n\n\n Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:155:God Function:\n executeAnalyzeCommunicationAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeCloseCodeChangeAction'\n description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:410`.\n\n\n Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:410:God Function:\n executeCloseCodeChangeAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executePipelineAction'\n description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:553`.\n\n\n Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:553:God Function:\n executePipelineAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractAstIntent'\n description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`.\n\n\n Function ''extractAstIntent'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast.ts:23:God Function:\n extractAstIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractChangelog'\n description: 'code2llm reports `God Function: extractChangelog` in `src/extractors/changelog.ts:18`.\n\n\n Function ''extractChangelog'' is oversized: CC=10, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:18:God Function:\n extractChangelog'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractCommunicationIntentAudited'\n description: 'code2llm reports `God Function: extractCommunicationIntentAudited`\n in `src/communication/llm/implementation.ts:63`.\n\n\n Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:63:God\n Function: extractCommunicationIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractConventionalAction'\n description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`.\n\n\n Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractDocumentationIntent'\n description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`.\n\n\n Function ''extractDocumentationIntent'' is oversized: CC=3, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-llm.ts:45:God Function:\n extractDocumentationIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractMarkdownIntentAudited'\n description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:31`.\n\n\n Function ''extractMarkdownIntentAudited'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:31:God Function:\n extractMarkdownIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntent'\n description: 'code2llm reports `God Function: extractNlIntent` in `src/extractors/nl.ts:38`.\n\n\n Function ''extractNlIntent'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:38:God Function: extractNlIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntentAudited'\n description: 'code2llm reports `God Function: extractNlIntentAudited` in `src/extractors/nl-llm.ts:33`.\n\n\n Function ''extractNlIntentAudited'' is oversized: CC=10, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:33:God Function:\n extractNlIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPhpAst'\n description: 'code2llm reports `God Function: extractPhpAst` in `src/extractors/ast/php.ts:11`.\n\n\n Function ''extractPhpAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/php.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/php.ts:11:God Function:\n extractPhpAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPythonAst'\n description: 'code2llm reports `God Function: extractPythonAst` in `src/extractors/ast/python.ts:11`.\n\n\n Function ''extractPythonAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/python.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/python.ts:11:God Function:\n extractPythonAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRepositoryGitIntent'\n description: 'code2llm reports `God Function: extractRepositoryGitIntent` in `src/extractors/git.ts:74`.\n\n\n Function ''extractRepositoryGitIntent'' is oversized: CC=11, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/git.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:74:God Function:\n extractRepositoryGitIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRuntimeCycleIntent'\n description: 'code2llm reports `God Function: extractRuntimeCycleIntent` in `src/extractors/runtime-cycle.ts:29`.\n\n\n Function ''extractRuntimeCycleIntent'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:29:God\n Function: extractRuntimeCycleIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractSymbols'\n description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`.\n\n\n Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractTodo'\n description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`.\n\n\n Function ''extractTodo'' is oversized: CC=5, fan-out=24, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:19:God Function:\n extractTodo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `scripts/verify-module-boundaries.mjs:6`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:6:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: goldReportIsPerfect'\n description: 'code2llm reports `God Function: goldReportIsPerfect` in `src/evaluation/gold.ts:100`.\n\n\n Function ''goldReportIsPerfect'' is oversized: CC=14, fan-out=0, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold.ts:100:God Function:\n goldReportIsPerfect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: graph'\n description: 'code2llm reports `God Function: graph` in `scripts/verify-module-boundaries.mjs:7`.\n\n\n Function ''graph'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:7:God\n Function: graph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleCommunication'\n description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:659`.\n\n\n Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:659:God Function: handleCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleDiff'\n description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:464`.\n\n\n Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:464:God Function: handleDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleGraphDiff'\n description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:490`.\n\n\n Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:490:God Function: handleGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleIntake'\n description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:699`.\n\n\n Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:699:God Function: handleIntake'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleReality'\n description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:547`.\n\n\n Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:547:God Function: handleReality'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleWatch'\n description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:342`.\n\n\n Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:342:God Function: handleWatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: index'\n description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`.\n\n\n Function ''index'' is oversized: CC=13, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/t\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3900 func | 171f | 41875L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.3 critical=221 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded analyzeCommunication = 48 (limit:15)\n !!! cc_exceeded diffUiScriptMarkup = 46 (limit:15)\n !!! cc_exceeded variables = 44 (limit:15)\n !!! cc_exceeded variableById = 44 (limit:15)\n !!! cc_exceeded steps = 44 (limit:15)\n !!! cc_exceeded stepIds = 44 (limit:15)\n\nMODULES[252] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/synthesis/code-change-plan/implementation-helpers.ts] 2239L C:25 F:270 CC↑13 D:3 (typescript)\n M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript)\n M[src/services/actions.ts] 803L C:1 F:106 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript)\n M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript)\n LANGS: typescript:144/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n ★ assertSemanticRerankResult fan=37 // Orchestrates 37 calls\n ★ Client.parse_http_response fan=37 // Orchestrates 37 calls\n ★ diffUiScriptMarkup fan=36 // Orchestrates 36 calls\n\nREFACTOR[15]:\n [1] H/L Split diffUiScriptMarkup (CC=46)\n [2] H/L Split assertSemanticRerankResult (CC=29)\n [3] H/L Split OpenRouterClient.timeout (CC=26)\n [4] H/L Split OpenRouterClient.request (CC=31)\n [5] H/L Split parseCommand (CC=63)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.3 crit=221 41875L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; let currentFile = null; function renderFileList(filter = '') { diff --git a/project/map.toon.yaml b/project/map.toon.yaml index 05f8759..5a1ec50 100644 --- a/project/map.toon.yaml +++ b/project/map.toon.yaml @@ -1,12 +1,12 @@ -# todo2code | 251f 39151L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:143,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 +# todo2code | 252f 41875L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:144,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 # generated in 0.03s # producer: code2llm | artifact: map.toon.yaml | schema: 1 -# stats: 3683 func | 0 cls | 251 mod | CC̄=3.6 | critical:90 | cycles:0 -# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64 -# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; diffUiHtml fan=42; compareWorkspaceIntent fan=40 -# evolution: CC̄ 3.7→3.6 (improved -0.1) +# stats: 3900 func | 0 cls | 252 mod | CC̄=3.3 | critical:64 | cycles:0 +# alerts[5]: CC assertOperationPlan=84; CC parseCommand=63; CC runPipeline=56; fan-out runPipeline=56; CC analyzeCommunication=48 +# hotspots[5]: runPipeline fan=56; compareWorkspaceIntent fan=40; assertSemanticRerankResult fan=37; Client.parse_http_response fan=37; diffUiScriptMarkup fan=36 +# evolution: CC̄ 3.7→3.3 (improved -0.4) # Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods -M[251]: +M[252]: Dockerfile,45 Makefile,132 adapters/tensorflow/package.json,14 @@ -131,7 +131,7 @@ M[251]: src/core/grounding.ts,24 src/core/id.ts,167 src/core/ignore.ts,200 - src/core/io.ts,177 + src/core/io.ts,211 src/core/record.ts,183 src/core/schema/index.ts,4 src/core/schema/code-change.ts,322 @@ -141,7 +141,7 @@ M[251]: src/core/schema/utils.ts,239 src/core/security.ts,55 src/core/target.ts,57 - src/core/text.ts,517 + src/core/text.ts,530 src/core/types/index.ts,4 src/core/types/code-change.ts,221 src/core/types/diagnostics.ts,45 @@ -173,7 +173,7 @@ M[251]: src/extractors/ast/unsupported.ts,30 src/extractors/changelog.ts,99 src/extractors/communication.ts,63 - src/extractors/communication-file-helpers.ts,296 + src/extractors/communication-file-helpers.ts,342 src/extractors/communication-helpers.ts,320 src/extractors/configuration.ts,208 src/extractors/docs-chunks.ts,147 @@ -234,19 +234,20 @@ M[251]: src/pipeline/run.ts,617 src/sdk/typescript.ts,172 src/semantic/reranker/index.ts,8 - src/semantic/reranker-llm.ts,210 + src/semantic/reranker-llm.ts,291 src/semantic/reranker-response.ts,42 - src/semantic/reranker/candidate.ts,200 - src/semantic/reranker/result.ts,264 + src/semantic/reranker/candidate.ts,250 + src/semantic/reranker/result.ts,312 src/semantic/reranker/types.ts,106 src/semantic/reranker/validation.ts,111 - src/services/actions.ts,737 + src/services/actions.ts,803 src/summary/payload.ts,65 src/summary/render.ts,61 src/summary/summarizer.ts,333 - src/synthesis/code-change-path.ts,204 + src/synthesis/code-change-path.ts,232 src/synthesis/code-change-plan/index.ts,1 src/synthesis/code-change-plan/implementation.ts,1 + src/synthesis/code-change-plan/implementation-helpers.ts,2239 src/synthesis/task-synthesis-contract.ts,66 src/synthesis/task-synthesis-materialize.ts,172 src/synthesis/task-synthesis-payload.ts,70 @@ -256,7 +257,7 @@ M[251]: src/tf/classifier.ts,135 src/version.ts,2 src/watch/watcher.ts,243 - src/web/diff-ui.ts,48 + src/web/diff-ui.ts,167 tsconfig.json,23 D: src/operations/validation.ts: @@ -309,128 +310,6 @@ D: decision() verification() expectedHash() - src/services/actions.ts: - i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path - e: CommunicationGraphFilter,executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest - CommunicationGraphFilter: - executeAction() - root() - file() - text() - analysis() - records() - graph() - graph() - diagnostics() - graph() - diagnostics() - result() - output() - graph() - diagnostics() - synthesis() - todoPath() - patchPath() - auditPath() - todoContent() - rendered() - todoPath() - patchPath() - auditPath() - receiptPath() - result() - graph() - diagnostics() - conclusions() - proposals() - result() - output() - planSet() - review() - patchPath() - auditPath() - plan() - unifiedDiffs() - patch() - output() - planSet() - result() - output() - patch() - receiptPath() - result() - plan() - beforeGraph() - beforeDiagnostics() - afterGraph() - afterDiagnostics() - result() - output() - beforeGraph() - beforeDiagnostics() - afterGraph() - afterDiagnostics() - value() - planSet() - result() - output() - beforeInput() - afterInput() - before() - after() - diff() - svg() - beforePath() - afterPath() - diff() - result() - graph() - diagnostics() - view() - filterCommunicationGraph() - filter() - records() - parseCommunicationGraphFilter() - participant() - role() - ticket() - communicationOnly() - matchesCommunicationFilter() - matchesParticipant() - matchesRole() - matchesTicket() - nlModeValue() - llmModeValue() - taskSynthesisMode() - summaryModeValue() - pipelineTaskMode() - withTextDiffViews() - title() - readGraphInput() - safePath() - readActionObject() - safePath() - resolveRoot() - requested() - scopedPath() - selected() - nullableScopedPath() - selected() - readRecords() - files() - safeFile() - stringValue() - nullableString() - stringList() - numberValue() - number() - hasInputValue() - objectMapOfStrings() - booleanValue() - objectValue() - registerRunArtifacts() - manifestPath() - manifest() src/interfaces/a2a-message.ts: i: ../communication/intake-protobuf.js e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage @@ -540,17 +419,6 @@ D: failureCode() skippedAudit() appendLlmNotConfigured() - src/web/diff-ui.ts: - e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs - diffUiHtml() - byId() - requestHeaders() - formatBytes() - selectedRun() - updateMeta() - fillSelect() - loadRuns() - compareGraphs() src/communication/analyzer.ts: i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex @@ -636,305 +504,80 @@ D: severityRank() escapeCell() escapeRegex() - src/synthesis/code-change-plan/implementation.ts: - i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path - e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines - ProposeCodeChangePlansOptions: - ProposeCodeChangePlansResult: - EvaluateCodeChangeAcceptanceOptions: - CloseCodeChangesOptions: - CreateCodeChangeReviewOptions: - CreatedCodeChangeReview: - CreateCodeChangeSourcePatchOptions: - ApplyCodeChangeSourcePatchOptions: - ApplyCodeChangeSourcePatchResult: - PreparedSourceEdit: - IMPLEMENTATION_DIAGNOSTIC_CODES() - proposeCodeChangePlans() - generatedAt() - maxPlans() - conclusions() - proposals() - recordsById() - proposalsByDiagnostic() - conclusionsByDiagnostic() - candidates() - relatedRecords() - matchingProposals() - matchingConclusions() - target() - changes() - generation() - planHash() - createRepositoryPathProbe() - base() - absolute() - implementationDiagnosticRank() - evaluateCodeChangeAcceptance() - afterDiagnostics() - beforeIds() - afterById() - targeted() - clearedDiagnosticIds() - remainingDiagnosticIds() - newBlockingDiagnosticIds() - accepted() - evaluatedAt() - closeCodeChanges() - evaluatedAt() - afterDiagnostics() - planIds() - acceptances() - acceptedCount() - indexProposalsByDiagnostic() - index() - list() - indexConclusionsByDiagnostic() - index() - list() - collectTarget() - paths() - symbols() - tickets() - versions() - buildChanges() - symbols() - sourceIntents() - rationale() - normalized() - exists() - titleFor() - record() - object() - startsWithImperative() - descriptionFor() - acceptanceCriteriaFor() - priorityFor() - confidenceFor() - riskFor() - level() - rollbackFor() - deterministicGeneration() - uniqueSorted() - createCodeChangeReviewPatch() - createdAt() - markdown() - renderCodeChangeReviewMarkdown() - symbols() - assertCodeChangeReviewPatch() - artifact() - generation() - priorityRank() - inline() - renderIds() - createCodeChangeSourcePatch() - plan() - graphFingerprint() - createdAt() - allowed() - diffs() - normalized() - path() - rawDiff() - unifiedDiff() - patchHash() - createCodeChangeSourcePatchSet() - generatedAt() - assertCodeChangeSourcePatch() - patch() - paths() - path() - expectedHash() - allowed() - expectedChanges() - editPath() - assertCodeChangeSourcePatchSet() - set() - plansById() - patchIds() - exactSourcePatchKeys() - actual() - assertSourcePatchIds() - assertSourcePatchStrings() - exactSourcePatchSet() - instructionFor() - symbols() - criteria() - normalizeUnifiedDiff() - normalized() - path() - bare() - stripped() - applyCodeChangeSourcePatch() - root() - receiptPath() - existing() - relative() - absolute() - exists() - before() - after() - now() - fileHashesAfter() - assertExistingSourceReceipt() - relative() - absolute() - exists() - current() - assertSourceApplyReceipt() - expectedPaths() - hashPaths() - atomicWriteRaw() - applyUnifiedDiffToText() - normalizedDiff() - baseLines() - diffLines() - cursor() - oldIndex() - oldCount() - newCount() - mark() - body() - splitKeep() - lines() - src/synthesis/code-change-path.ts: - e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath - NON_SOURCE_DIR_SEGMENTS() - BINARY_EXTENSIONS() - GENERATED_ANALYSIS_BASENAMES() - T2C_ARTIFACT_BASENAMES() - EXTENSIONLESS_SOURCE_BASENAMES() - isPlannablePath() - normalized() - segments() - lowerSegments() - basename() - lowerBasename() - dot() - ext() - isUsefulCodeChangePath() - php/ast_extract.php: - e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile - argumentValue() - normalizedToken() - significant() - qualifiedName() - sourceExcerpt() - addFact() - parseFile() - src/core/text.ts: - i: ./types.js - e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value - STOP_WORDS() - buildStopWords() - classifyActionHeuristically() - conventionalAction() - prose() - searchable() - matchedByPattern() - extractConventionalAction() - conventional() - findActionInText() - removeInlineCode() - detectModality() - prose() - searchable() - matches() - detectPolarity() - prose() - stripped() - normalized() - normalizeToken() - keywords() - GENERIC_TOPICS() - topicKeywords() - separated() - foldTopicToken() - aliased() - singular() - similarity() - left() - right() - intersection() - extractBacktickValues() - value() - extractPaths() - FILE_EXTENSIONS() - hasFileExtension() - last() - dot() - PATH_ROOTS() - isPathLike() - segments() - HOST_TLDS() - isHostname() - parts() - tld() - extractSymbols() - repositoryPaths() - backticks() - camel() - ticketPrefixes() - extractTickets() - values() - extractVersions() - inferObject() - normalized() - result() - splitIntentLines() - lines() - raw() - cleaned() - pieces() - value() - src/evaluation/gold-types.ts: - e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules - GoldRecordProjection: - GoldDocumentModelRecord: - GoldExtractionCase: - GoldFixtureRecord: - GoldExpectedRelation: - GoldRerankerDecisionFixture: - GoldRerankerFixture: - GoldLinkingCase: - GoldProposalFixture: - GoldDsl2TodoCase: - GoldExpectedDiagnostic: - GoldDiagnosticsCase: - GoldDataset: - BinaryMetric: - GoldEvaluationReport: - assertGoldDataset() - dataset() - assertDatasetObject() - assertDatasetMetadata() - assertDatasetCollections() - assertUniqueCaseIds() - assertExtractionCoverage() - channels() - assertLinkingCohorts() - labels() - modules() - src/llm/openrouter.ts: - i: ../config/env.js,../core/types.js,./structured-schema.js - e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient - ChatMessage: - OpenRouterChoice: - OpenRouterResponse: - OpenRouterResult: - OpenRouterModelsResponse: - OpenRouterModelError: super(-1) - OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1) - src/communication/identity.ts: - i: ../core/io.js,../core/security.js,./intake-contract.js,node:path - e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra - ParticipantIdentityEntry: - ParticipantIdentityRegistry: - LoadedParticipantIdentityRegistry: - loadParticipantIdentityRegistry() - v2Path() - v1Path() - registryPath() + src/web/diff-ui.ts: + e: diffUiStyles,diffUiRunPanel,diffUiFiltersPanel,diffUiBodyMarkup,diffUiScriptMarkup,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs,diffUiTemplate,diffUiHtml + diffUiStyles() + diffUiRunPanel() + diffUiFiltersPanel() + diffUiBodyMarkup() + diffUiScriptMarkup() + byId() + requestHeaders() + formatBytes() + selectedRun() + updateMeta() + fillSelect() + loadRuns() + compareGraphs() + diffUiTemplate() + diffUiHtml() + php/ast_extract.php: + e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile + argumentValue() + normalizedToken() + significant() + qualifiedName() + sourceExcerpt() + addFact() + parseFile() + src/evaluation/gold-types.ts: + e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules + GoldRecordProjection: + GoldDocumentModelRecord: + GoldExtractionCase: + GoldFixtureRecord: + GoldExpectedRelation: + GoldRerankerDecisionFixture: + GoldRerankerFixture: + GoldLinkingCase: + GoldProposalFixture: + GoldDsl2TodoCase: + GoldExpectedDiagnostic: + GoldDiagnosticsCase: + GoldDataset: + BinaryMetric: + GoldEvaluationReport: + assertGoldDataset() + dataset() + assertDatasetObject() + assertDatasetMetadata() + assertDatasetCollections() + assertUniqueCaseIds() + assertExtractionCoverage() + channels() + assertLinkingCohorts() + labels() + modules() + src/llm/openrouter.ts: + i: ../config/env.js,../core/types.js,./structured-schema.js + e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient + ChatMessage: + OpenRouterChoice: + OpenRouterResponse: + OpenRouterResult: + OpenRouterModelsResponse: + OpenRouterModelError: super(-1) + OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1) + src/communication/identity.ts: + i: ../core/io.js,../core/security.js,./intake-contract.js,node:path + e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra + ParticipantIdentityEntry: + ParticipantIdentityRegistry: + LoadedParticipantIdentityRegistry: + loadParticipantIdentityRegistry() + v2Path() + v1Path() + registryPath() normalized() normalizeParticipantIdentityRegistry() registry() @@ -957,6 +600,34 @@ D: allowed() missing() extra() + src/semantic/reranker/result.ts: + i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js + e: createSemanticRerankResult,decisions,assertSemanticRerankResult,seenDecisions,acceptedDeclarations,candidate,assertSemanticRerankHeader,createCandidateAndRecordIndex,validateSemanticDecisionCandidate,candidate,validateSemanticDecisionDecision,validateSemanticDecisionEvidence,citations,record,validateDecisionEvidenceScope,validateSemanticDecisionVerdict,assertRerankResultHash,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons + createSemanticRerankResult() + decisions() + assertSemanticRerankResult() + seenDecisions() + acceptedDeclarations() + candidate() + assertSemanticRerankHeader() + createCandidateAndRecordIndex() + validateSemanticDecisionCandidate() + candidate() + validateSemanticDecisionDecision() + validateSemanticDecisionEvidence() + citations() + record() + validateDecisionEvidenceScope() + validateSemanticDecisionVerdict() + assertRerankResultHash() + expectedHash() + applyAcceptedSemanticRelations() + candidates() + added() + candidate() + assertSemanticVerdictReason() + allowedVerdicts() + allowedReasons() scripts/verify-env-contract.mjs: i: node:fs,node:path e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute @@ -978,22 +649,6 @@ D: absolute() collect() absolute() - src/semantic/reranker/candidate.ts: - i: ../../core/schema.js,../../core/types.js,./validation.js - e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair - createSemanticCandidateSet() - grouped() - values() - assertSemanticCandidateSet() - records() - seenIds() - seenPairs() - byDeclaration() - declaration() - module() - existing() - expectedHash() - comparePair() scripts/research/rank-intent-graph-embeddings.py: e: parse_args,projection_text,main parse_args() @@ -1090,11 +745,6 @@ D: envOr() truncate() joinedIDs() - src/semantic/reranker-llm.ts: - i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util - e: SemanticRerankerOptions,SemanticRerankerRequiredError - SemanticRerankerOptions: - SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1) src/diff/git.ts: i: ./text.js,node:child_process,node:fs,node:path,node:util e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result @@ -1122,27 +772,6 @@ D: readWorkingFile() runGit() result() - src/semantic/reranker/result.ts: - i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js - e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons - createSemanticRerankResult() - decisions() - assertSemanticRerankResult() - candidates() - records() - seenDecisions() - acceptedDeclarations() - candidate() - citations() - record() - expectedHash() - applyAcceptedSemanticRelations() - candidates() - added() - candidate() - assertSemanticVerdictReason() - allowedVerdicts() - allowedReasons() sdk/rust/examples/basic.rs: i: serde_json::json,std::env,todo2code::Client e: main,run,joined_ids @@ -1251,54 +880,6 @@ D: timer() onAbort() finish() - src/extractors/communication-file-helpers.ts: - i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path - e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,declaredRole,declaredA2aAgentId,declaredGitAuthors,rawTimestamp - CommunicationFileOutcome: - CommunicationMetadata: - extractCommunicationFile() - scope() - readResult() - envelope() - inferred() - extracted() - localWarnings() - segmentResult() - records() - shouldSkipCommunicationFile() - explicitEnvelope() - hasExplicitEnvelopeMetadata() - buildCommunicationSegments() - inferredRole() - segments() - resolveFileScope() - relativeToProject() - segments() - pathTicket() - readCommunicationBody() - collectCommunicationMetadata() - declaredParticipant() - declaredRole() - declaredParticipantId() - identity() - participant() - role() - displayName() - explicitMessageType() - messageType() - ticket() - recipient() - rawTimestamp() - timestamp() - declaredGitAuthors() - gitAuthors() - explicitPaths() - explicitSymbols() - buildLocalWarnings() - declaredRole() - declaredA2aAgentId() - declaredGitAuthors() - rawTimestamp() src/interfaces/a2a-history.ts: i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath @@ -1448,6 +1029,24 @@ D: i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super:: e: Client Client: + src/core/record.ts: + i: ./id.js,./target.js,./version.js + e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix + BuildRecordGenerationInput: + BuildRecordInput: + buildRecord() + rawExcerpt() + seed() + buildRecordSeed() + buildRecordStatement() + buildRecordSource() + buildRecordEpistemic() + withRecordGeneration() + generationMetadata() + generationIdentity() + separator() + clamp() + sourcePrefix() sdk/typescript/examples/basic.ts: i: ../src/index.js e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison @@ -1470,24 +1069,6 @@ D: reality() gitDiff() comparison() - src/core/record.ts: - i: ./id.js,./target.js,./version.js - e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix - BuildRecordGenerationInput: - BuildRecordInput: - buildRecord() - rawExcerpt() - seed() - buildRecordSeed() - buildRecordStatement() - buildRecordSource() - buildRecordEpistemic() - withRecordGeneration() - generationMetadata() - generationIdentity() - separator() - clamp() - sourcePrefix() examples/backend/src/server.ts: i: ./store.js,./validation.js,node:http e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host @@ -1519,46 +1100,6 @@ D: is_module_entrypoint(node) iter_python_files(root;files_from) main() - src/core/io.ts: - i: ./types.js,node:fs,node:path - e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix - WalkOptions: - DEFAULT_IGNORED_DIRS() - ensureDir() - readText() - stat() - pathExists() - writeJson() - writeText() - writeJsonl() - readJsonl() - body() - readJson() - walkFiles() - ignored() - extensions() - maxFiles() - matcher() - base() - visit() - entries() - absolute() - relative() - extension() - escapeRegex() - globToRegExp() - normalized() - char() - next() - after() - matchesAnyGlob() - normalized() - resolveGlobs() - files() - absolute() - relative() - relative() - relativePosix() scripts/verify-no-llm-imports.mjs: i: node:fs,node:path e: visited,visit,body,resolved,resolveSource,raw @@ -1671,36 +1212,157 @@ D: normalized() semanticsFor() unquote() - src/evaluation/gold.ts: - i: ../core/id.js,./gold-extraction.js,node:fs - e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result - EvaluationCore: - EvaluationRun: - EvaluationResult: - loadGoldDataset() - parsed() - evaluateGoldDataset() - first() - second() - stable() - goldReportIsPerfect() - renderGoldReportMarkdown() - percent() - support() - rows() + src/extractors/communication-file-helpers.ts: + i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path + e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp + CommunicationFileOutcome: + CommunicationMetadata: + extractCommunicationFile() + scope() + readResult() + envelope() + inferred() + extracted() + localWarnings() + segmentResult() + records() + shouldSkipCommunicationFile() + explicitEnvelope() + hasExplicitEnvelopeMetadata() + buildCommunicationSegments() + inferredRole() + segments() + resolveFileScope() + relativeToProject() + segments() + pathTicket() + readCommunicationBody() + collectCommunicationMetadata() + declaredParticipant() + declaredRole() + declaredParticipantId() + identity() + participant() + role() + displayName() + explicitMessageType() + messageType() + ticket() + recipient() + rawTimestamp() + timestamp() + declaredGitAuthors() + gitAuthors() + explicitPaths() + explicitSymbols() + buildLocalWarnings() + appendRoleAndParticipantWarnings() + appendIdentityWarnings() + appendRegistryAlignmentWarnings() + appendA2aAgentWarnings() + declaredA2aAgentId() + hasRegistryEntry() + appendTimestampWarnings() + rawTimestamp() + src/core/text.ts: + i: ./types.js + e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value + STOP_WORDS() + buildStopWords() + classifyActionHeuristically() + conventionalAction() + prose() + searchable() + matchedByPattern() + extractConventionalAction() + conventional() + findActionInText() + removeInlineCode() + detectModality() + prose() + searchable() + matches() + detectPolarity() + prose() + stripped() + normalized() + normalizeToken() + keywords() + GENERIC_TOPICS() + topicKeywords() + separated() + foldTopicToken() + aliased() + singular() + similarity() + left() + right() + intersection() + extractBacktickValues() value() - evaluateOnce() - extraction() - linking() - dsl2todo() - diagnostics() - evaluateExtraction() - byChannel() - actual() - overall() - evaluateDiagnostics() - counts() - forbiddenViolations() + extractPaths() + FILE_EXTENSIONS() + hasFileExtension() + last() + dot() + PATH_ROOTS() + isPathLike() + segments() + HOST_TLDS() + isHostname() + parts() + tld() + extractSymbols() + repositoryPaths() + backticks() + camel() + ticketPrefixes() + extractTickets() + values() + extractVersions() + inferObject() + normalized() + withoutAction() + result() + normalizeForObject() + removeObjectAction() + stripObjectConnector() + splitIntentLines() + lines() + raw() + cleaned() + pieces() + value() + src/evaluation/gold.ts: + i: ../core/id.js,./gold-extraction.js,node:fs + e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result + EvaluationCore: + EvaluationRun: + EvaluationResult: + loadGoldDataset() + parsed() + evaluateGoldDataset() + first() + second() + stable() + goldReportIsPerfect() + renderGoldReportMarkdown() + percent() + support() + rows() + value() + evaluateOnce() + extraction() + linking() + dsl2todo() + diagnostics() + evaluateExtraction() + byChannel() + actual() + overall() + evaluateDiagnostics() + counts() + forbiddenViolations() snapshots() result() evaluateLinking() @@ -2021,6 +1683,155 @@ D: reportPipelineDegradation() printHelp() invokedPath() + src/services/actions.ts: + i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path + e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest + CommunicationGraphFilter: + executeAction() + root() + handler() + executeExtractNlAction() + file() + text() + executeExtractGitAction() + executeExtractAstAction() + executeExtractConfigAction() + executeExtractMarkdownAction() + executeExtractDocsAction() + executeExtractCommunicationAction() + executeAnalyzeCommunicationAction() + analysis() + executeLinkAction() + records() + executeDiagnoseAction() + graph() + executeSummarizeAction() + graph() + diagnostics() + executeProposeTodoAction() + graph() + diagnostics() + result() + output() + executeRenderTodoAction() + graph() + diagnostics() + synthesis() + todoPath() + patchPath() + auditPath() + todoContent() + rendered() + executeApplyTodoAction() + todoPath() + patchPath() + auditPath() + receiptPath() + result() + executeProposeCodeChangeAction() + graph() + diagnostics() + conclusions() + proposals() + result() + output() + executeRenderCodeChangeAction() + planSet() + review() + patchPath() + auditPath() + executeProposeSourcePatchAction() + plan() + unifiedDiffs() + patch() + output() + planSet() + result() + output() + executeApplySourcePatchAction() + patch() + receiptPath() + result() + executeEvaluateCodeChangeAction() + plan() + beforeGraph() + beforeDiagnostics() + afterGraph() + afterDiagnostics() + result() + output() + executeCloseCodeChangeAction() + beforeGraph() + beforeDiagnostics() + afterGraph() + afterDiagnostics() + value() + planSet() + result() + output() + executeDiffAction() + beforeInput() + afterInput() + before() + after() + diff() + svg() + executeDiffFilesAction() + beforePath() + afterPath() + diff() + executeDiffGitAction() + result() + executeRealityAction() + graph() + diagnostics() + view() + executeCompareWorkspaceAction() + executePipelineAction() + filterCommunicationGraph() + filter() + records() + parseCommunicationGraphFilter() + participant() + role() + ticket() + communicationOnly() + matchesCommunicationFilter() + matchesParticipant() + matchesRole() + matchesTicket() + nlModeValue() + llmModeValue() + taskSynthesisMode() + summaryModeValue() + pipelineTaskMode() + withTextDiffViews() + title() + readGraphInput() + safePath() + readActionObject() + safePath() + resolveRoot() + requested() + scopedPath() + selected() + nullableScopedPath() + selected() + readRecords() + files() + safeFile() + stringValue() + nullableString() + stringList() + numberValue() + number() + hasInputValue() + objectMapOfStrings() + booleanValue() + objectValue() + registerRunArtifacts() + manifestPath() + manifest() src/config/env.ts: i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter @@ -2049,85 +1860,421 @@ D: getConfig() model() root() - configForDisplay() - hasOpenRouter() - src/diff/text-render.ts: - i: ./text-types.js - e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number - TextDiffSvgOptions: - SideBySideRow: - renderUnifiedDiff() - marker() - toSideBySideRows() - index() - line() - pairs() - renderTextDiffSvg() - theme() - maxRows() - maxColumns() - title() - charWidth() - rowHeight() - gutterWidth() - columnWidth() - width() - totals() - y() - rendered() - skipped() - summarizeDiffs() - diffHeading() - svgBody() - sideBySideRowMarkup() - changed() - number() - renderTextDiffHtml() - title() - sections() - renderHtmlSection() + configForDisplay() + hasOpenRouter() + src/diff/text-render.ts: + i: ./text-types.js + e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number + TextDiffSvgOptions: + SideBySideRow: + renderUnifiedDiff() + marker() + toSideBySideRows() + index() + line() + pairs() + renderTextDiffSvg() + theme() + maxRows() + maxColumns() + title() + charWidth() + rowHeight() + gutterWidth() + columnWidth() + width() + totals() + y() + rendered() + skipped() + summarizeDiffs() + diffHeading() + svgBody() + sideBySideRowMarkup() + changed() + number() + renderTextDiffHtml() + title() + sections() + renderHtmlSection() + hunks() + rows() + htmlCell() + cssClass() + number() + src/operations/subactor.ts: + i: ../core/types.js,./validation.js + e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding + CompileSubactorEnvelopeOptions: + valueMatchesType() + assertBinding() + ageSeconds() + compileSubactorProcessEnvelope() + variableById() + referenced() + variable() + binding() + humanApproval() + binding() + src/communication/intake-service.ts: + i: ./intake-store.js,node:crypto,node:fs,node:path + e: IntakeState,GovernedIntakeService + IntakeState: + GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) + scripts/live-model-comparison.mjs: + i: node:fs,node:path,node:url + e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile + REPO_ROOT() + main() + probe() + timeoutMs() + models() + root() + config() + result() + comparison() + rendered() + jsonTarget() + markdownTarget() + failedAudit() + message() + writeFile() + src/synthesis/code-change-plan/implementation-helpers.ts: + i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path + e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,PlanContext,CodeChangePlanSemanticDraft,AcceptanceContext,CloseCodeChangeContext,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CodeChangeReviewContext,CreateCodeChangeSourcePatchOptions,SourcePatchCreationContext,SourcePatchSetBuildContext,SourcePatchEditValidationContext,SourcePatchSetValidationContext,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,context,candidates,plans,buildPlansForCandidates,plan,buildPlanSetResult,parseIsoDateTime,generatedAt,parseMaxPlans,maxPlans,buildPlanContext,conclusions,proposals,collectImplementationDiagnostics,findRelatedRecords,createPlanForDiagnostic,relatedRecords,matchingProposals,matchingConclusions,target,changes,evidence,confidence,semantic,confidenceForDiagnostic,buildPlanEvidence,buildPlanSemantic,buildPlanResult,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,context,reasons,accepted,acceptance,buildAcceptanceContext,evaluatedAt,afterDiagnostics,beforeDiagnosticIds,afterById,targetedDiagnosticIds,buildAcceptanceReasons,isAcceptancePassed,appendAcceptanceGateReason,buildAcceptanceResult,closeCodeChanges,context,acceptances,acceptedCount,buildCloseCodeChangeContext,evaluatedAt,afterDiagnostics,ensureClosePlanIdsAreUnique,planIds,buildCloseResult,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,target,collectTargetComponents,paths,symbols,tickets,versions,addTargetEntries,finalizeTarget,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,context,markdown,artifact,buildCodeChangeReviewContext,createdAt,sortCodeChangeReviewPlans,buildCodeChangeReviewMarkdown,buildCodeChangeReviewArtifact,renderCodeChangeReviewMarkdown,lines,buildCodeChangeReviewMarkdownLines,appendPriorityHeader,appendPlanDetails,appendPlanChanges,symbols,appendAfterImplementationSection,assertCodeChangeReviewPatch,artifact,validateReviewPatchKeys,assertCodeChangeReviewPatchSchema,assertReviewPatchSchemaVersion,assertReviewPatchDateFields,assertReviewPatchIds,assertCodeChangeReviewPatchPlanCollections,assertCodeChangeReviewPatchGeneration,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,context,edits,semantic,patchHash,buildSourcePatchContext,graphFingerprint,createdAt,allowedPaths,collectPlanTargetPaths,validateUnifiedDiffsBelongToPlan,normalizedPath,buildSourcePatchEdits,buildSourcePatchEdit,path,rawDiff,unifiedDiff,buildSourcePatchSemantic,createCodeChangeSourcePatchSet,context,patches,result,normalizePatchSetOptions,generatedAt,buildPatchesForSet,buildSourcePatchSet,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchObject,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,normalizeUnifiedDiffText,normalized,validateUnifiedDiffBody,validateUnifiedDiffPathHeaders,extractUnifiedDiffHeaders,validateUnifiedDiffHeaderPath,normalizedPath,normalizeUnifiedDiffHeaderPath,assertUnifiedDiffHeaderPathSafety,bare,stripped,isUnifiedDiffTraversalHeader,matchesUnifiedDiffExpectedHeader,normalizedHeaderPathCandidate,stripLeadingDiffPrefix,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertCodeChangeSourcePatchAndActorAndEdits,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines + ProposeCodeChangePlansOptions: + ProposeCodeChangePlansResult: + EvaluateCodeChangeAcceptanceOptions: + CloseCodeChangesOptions: + PlanContext: + CodeChangePlanSemanticDraft: + AcceptanceContext: + CloseCodeChangeContext: + CreateCodeChangeReviewOptions: + CreatedCodeChangeReview: + CodeChangeReviewContext: + CreateCodeChangeSourcePatchOptions: + SourcePatchCreationContext: + SourcePatchSetBuildContext: + SourcePatchEditValidationContext: + SourcePatchSetValidationContext: + ApplyCodeChangeSourcePatchOptions: + ApplyCodeChangeSourcePatchResult: + NormalizedApplyCodeChangeSourcePatchRequest: + SourcePatchApplyLock: + SourcePatchEditTarget: + PreparedSourceEdit: + ParsedUnifiedDiffHunk: + UnifiedDiffParsingContext: + UnifiedDiffCursor: + IMPLEMENTATION_DIAGNOSTIC_CODES() + proposeCodeChangePlans() + generatedAt() + maxPlans() + context() + candidates() + plans() + buildPlansForCandidates() + plan() + buildPlanSetResult() + parseIsoDateTime() + generatedAt() + parseMaxPlans() + maxPlans() + buildPlanContext() + conclusions() + proposals() + collectImplementationDiagnostics() + findRelatedRecords() + createPlanForDiagnostic() + relatedRecords() + matchingProposals() + matchingConclusions() + target() + changes() + evidence() + confidence() + semantic() + confidenceForDiagnostic() + buildPlanEvidence() + buildPlanSemantic() + buildPlanResult() + createRepositoryPathProbe() + base() + absolute() + implementationDiagnosticRank() + evaluateCodeChangeAcceptance() + context() + reasons() + accepted() + acceptance() + buildAcceptanceContext() + evaluatedAt() + afterDiagnostics() + beforeDiagnosticIds() + afterById() + targetedDiagnosticIds() + buildAcceptanceReasons() + isAcceptancePassed() + appendAcceptanceGateReason() + buildAcceptanceResult() + closeCodeChanges() + context() + acceptances() + acceptedCount() + buildCloseCodeChangeContext() + evaluatedAt() + afterDiagnostics() + ensureClosePlanIdsAreUnique() + planIds() + buildCloseResult() + indexProposalsByDiagnostic() + index() + list() + indexConclusionsByDiagnostic() + index() + list() + collectTarget() + target() + collectTargetComponents() + paths() + symbols() + tickets() + versions() + addTargetEntries() + finalizeTarget() + buildChanges() + symbols() + sourceIntents() + rationale() + normalized() + exists() + titleFor() + record() + object() + startsWithImperative() + descriptionFor() + acceptanceCriteriaFor() + priorityFor() + confidenceFor() + riskFor() + level() + rollbackFor() + deterministicGeneration() + uniqueSorted() + createCodeChangeReviewPatch() + context() + markdown() + artifact() + buildCodeChangeReviewContext() + createdAt() + sortCodeChangeReviewPlans() + buildCodeChangeReviewMarkdown() + buildCodeChangeReviewArtifact() + renderCodeChangeReviewMarkdown() + lines() + buildCodeChangeReviewMarkdownLines() + appendPriorityHeader() + appendPlanDetails() + appendPlanChanges() + symbols() + appendAfterImplementationSection() + assertCodeChangeReviewPatch() + artifact() + validateReviewPatchKeys() + assertCodeChangeReviewPatchSchema() + assertReviewPatchSchemaVersion() + assertReviewPatchDateFields() + assertReviewPatchIds() + assertCodeChangeReviewPatchPlanCollections() + assertCodeChangeReviewPatchGeneration() + generation() + priorityRank() + inline() + renderIds() + createCodeChangeSourcePatch() + context() + edits() + semantic() + patchHash() + buildSourcePatchContext() + graphFingerprint() + createdAt() + allowedPaths() + collectPlanTargetPaths() + validateUnifiedDiffsBelongToPlan() + normalizedPath() + buildSourcePatchEdits() + buildSourcePatchEdit() + path() + rawDiff() + unifiedDiff() + buildSourcePatchSemantic() + createCodeChangeSourcePatchSet() + context() + patches() + result() + normalizePatchSetOptions() + generatedAt() + buildPatchesForSet() + buildSourcePatchSet() + assertCodeChangeSourcePatch() + patch() + editPaths() + assertCodeChangeSourcePatchObject() + patch() + validateSourcePatchSchema() + validateSourcePatchIdentifiers() + validateSourcePatchEdits() + collectSourcePatchEditPathActions() + paths() + editContext() + validateSourcePatchEdit() + normalizedEdit() + normalizedPath() + assertSourcePatchEditObject() + validateSourcePatchEditBody() + validateSourcePatchEditDiff() + assertUniqueSourcePatchEditPathAction() + normalizeSourcePatchEditPath() + normalizedPath() + ensureSourcePatchEditAction() + ensureSourcePatchEditInstruction() + validateSourcePatchHashAndId() + expectedHash() + validateSourcePatchGeneration() + validateSourcePatchAgainstPlan() + expectedChanges() + assertSourcePatchPlanBinding() + collectExpectedPlanChanges() + validateSourcePatchEditsAgainstPlan() + allowed() + editPath() + validateSourcePatchEvidence() + assertCodeChangeSourcePatchSet() + set() + context() + createSourcePatchSetValidationContext() + expectedPlanIds() + assertSourcePatchObject() + assertSourcePatchSetObject() + set() + validateSourcePatchSetSchema() + validateSourcePatchSetPatches() + patchIds() + validateSetPatchAndTrackDuplicates() + expectedPlan() + validateSetPatchGraphFingerprint() + assertUniqueSetPatchId() + validateSetPatchesPlanCoverage() + validateSourcePatchSetGeneration() + exactSourcePatchKeys() + actual() + assertSourcePatchIds() + assertSourcePatchStrings() + exactSourcePatchSet() + instructionFor() + symbols() + criteria() + normalizeUnifiedDiff() + normalized() + normalizeUnifiedDiffText() + normalized() + validateUnifiedDiffBody() + validateUnifiedDiffPathHeaders() + extractUnifiedDiffHeaders() + validateUnifiedDiffHeaderPath() + normalizedPath() + normalizeUnifiedDiffHeaderPath() + assertUnifiedDiffHeaderPathSafety() + bare() + stripped() + isUnifiedDiffTraversalHeader() + matchesUnifiedDiffExpectedHeader() + normalizedHeaderPathCandidate() + stripLeadingDiffPrefix() + applyCodeChangeSourcePatch() + request() + root() + receiptPath() + lock() + idempotentResult() + prepared() + now() + receipt() + readExistingReceipt() + existing() + assertPatchApplicationRequest() + patch() + assertCodeChangeSourcePatchAndActorAndEdits() + assertPatchApprovalActor() + assertPatchApprovalHash() + assertPatchEditsContainDiffs() + acquireApplyLock() + lock() + prepareSourceEdits() + target() + before() + after() + prepareSourceEditTarget() + relative() + absolute() + existed() + assertSourcePatchTargetNotSymlink() + assertDeleteEditClearsAll() + validatePatchTargetForEdit() + applyPreparedEdits() + receipt() + rollbackErrors() + writePreparedEdits() + buildPatchApplyReceipt() + fileHashesAfter() + rollbackPreparedEdits() + assertExistingSourceReceipt() + relative() + absolute() + exists() + current() + assertSourceApplyReceipt() + validateSourceApplyReceiptShape() + validateSourceApplyReceiptIdentity() + validateSourceApplyReceiptTimestamps() + validateSourceApplyReceiptPathHashes() + expectedPaths() + hashPaths() + validateSourceApplyReceiptGeneration() + atomicWriteRaw() + applyUnifiedDiffToText() + baseLines() hunks() - rows() - htmlCell() - cssClass() - number() - src/operations/subactor.ts: - i: ../core/types.js,./validation.js - e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding - CompileSubactorEnvelopeOptions: - valueMatchesType() - assertBinding() - ageSeconds() - compileSubactorProcessEnvelope() - variableById() - referenced() - variable() - binding() - humanApproval() - binding() - src/communication/intake-service.ts: - i: ./intake-store.js,node:crypto,node:fs,node:path - e: IntakeState,GovernedIntakeService - IntakeState: - GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) - scripts/live-model-comparison.mjs: - i: node:fs,node:path,node:url - e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile - REPO_ROOT() - main() - probe() - timeoutMs() - models() - root() - config() - result() - comparison() - rendered() - jsonTarget() - markdownTarget() - failedAudit() - message() - writeFile() + output() + joinAppliedText() + parseUnifiedDiffIntoHunks() + normalizedDiff() + context() + createEmptyUnifiedDiffContext() + parseUnifiedDiffLines() + finalizeUnifiedDiffContext() + applyUnifiedDiffLineToContext() + header() + parseUnifiedDiffHeader() + buildParsedUnifiedDiffHunk() + applyUnifiedDiffHunks() + applyUnifiedDiffHunk() + oldIndex() + copyBaseLinesToCursor() + appendRemainingBaseLines() + validateHunkCounts() + oldCount() + newCount() + applyUnifiedDiffLine() + mark() + body() + applyUnifiedDiffContextLine() + applyUnifiedDiffDeletionLine() + applyUnifiedDiffAdditionLine() + splitKeep() + lines() src/extractors/ast.ts: i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result @@ -2189,6 +2336,56 @@ D: RawNlRecord: NlResponse: NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1) + src/core/schema/intent.ts: + i: ../id.js + e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation + GroundedValidationContext: + TodoProposalValidationContext: + CodeChangePlanValidationContext: + CodeChangeAcceptanceValidationContext: + assertIntentRecord() + record() + statement() + lifecycle() + source() + epistemic() + metadata() + assertIntentStatement() + statement() + assertIntentTarget() + target() + assertIntentLifecycle() + lifecycle() + assertIntentSource() + source() + lines() + assertIntentEpistemic() + epistemic() + assertIntentMetadata() + typedMetadata() + generation() + assertGenerationMatchesExtractor() + generation() + separator() + expectedGenerator() + assertIntentGenerationMetadata() + generation() + assertIntentRecords() + assertIntentGraph() + graph() + recordIds() + relationIds() + stats() + records() + expectedFingerprint() + assertIntentGraphDiff() + diff() + records() + change() + relations() + summary() + assertRelation() + relation() src/synthesis/todo-patch.ts: i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings @@ -2332,95 +2529,45 @@ D: json() requirePerfect() outIndex() - outPath() - dataset() - report() - rendered() - src/live/model-comparison.ts: - i: ../core/types.js,./contract-check.js - e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round - LiveModelRun: - LiveModelMeasurement: - LiveModelAgreement: - LiveModelComparison: - measureLiveModelRun() - responses() - records() - enrichedRecords() - costUsd() - isLlmEnriched() - sourceKey() - lines() - compareLiveModelOutputs() - rightBySource() - pairs() - agreeing() - buildLiveModelComparison() - models() - passing() - pick() - measured() - renderLiveModelComparison() - sumUsage() - values() - round() - src/communication/llm/implementation.ts: - i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js - e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError - ParticipantCommunicationSynthesis: - AuditedCommunicationExtractionResult: - CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1) - CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1) - src/core/schema/intent.ts: - i: ../id.js - e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation - GroundedValidationContext: - TodoProposalValidationContext: - CodeChangePlanValidationContext: - CodeChangeAcceptanceValidationContext: - assertIntentRecord() - record() - statement() - lifecycle() - source() - epistemic() - metadata() - assertIntentStatement() - statement() - assertIntentTarget() - target() - assertIntentLifecycle() - lifecycle() - assertIntentSource() - source() - lines() - assertIntentEpistemic() - epistemic() - assertIntentMetadata() - typedMetadata() - generation() - assertGenerationMatchesExtractor() - generation() - separator() - expectedGenerator() - assertIntentGenerationMetadata() - generation() - assertIntentRecords() - assertIntentGraph() - graph() - recordIds() - relationIds() - stats() - records() - expectedFingerprint() - assertIntentGraphDiff() - diff() + outPath() + dataset() + report() + rendered() + src/live/model-comparison.ts: + i: ../core/types.js,./contract-check.js + e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round + LiveModelRun: + LiveModelMeasurement: + LiveModelAgreement: + LiveModelComparison: + measureLiveModelRun() + responses() records() - change() - relations() - summary() - assertRelation() - relation() + enrichedRecords() + costUsd() + isLlmEnriched() + sourceKey() + lines() + compareLiveModelOutputs() + rightBySource() + pairs() + agreeing() + buildLiveModelComparison() + models() + passing() + pick() + measured() + renderLiveModelComparison() + sumUsage() + values() + round() + src/communication/llm/implementation.ts: + i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js + e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError + ParticipantCommunicationSynthesis: + AuditedCommunicationExtractionResult: + CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1) + CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1) src/extractors/changelog.ts: i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower @@ -2672,6 +2819,45 @@ D: isImportantRecord() makeDiagnostic() severityRank() + src/core/io.ts: + i: ./types.js,node:fs,node:path + e: WalkOptions,WalkState,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,state,createWalkState,walkDirectory,entries,walkEntry,absolute,relative,isTargetFile,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix + WalkOptions: + WalkState: + DEFAULT_IGNORED_DIRS() + ensureDir() + readText() + stat() + pathExists() + writeJson() + writeText() + writeJsonl() + readJsonl() + body() + readJson() + walkFiles() + state() + createWalkState() + walkDirectory() + entries() + walkEntry() + absolute() + relative() + isTargetFile() + escapeRegex() + globToRegExp() + normalized() + char() + next() + after() + matchesAnyGlob() + normalized() + resolveGlobs() + files() + absolute() + relative() + relative() + relativePosix() src/core/schema/code-change.ts: i: ../id.js,../types.js e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch @@ -2719,6 +2905,31 @@ D: proposal() proposalIds() assertStringSetMatch() + src/synthesis/code-change-path.ts: + e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isUsefulCodeChangePath,isPlannablePath,normalized,segments,lowerSegments,basename,normalizePlannablePath,isCandidatePathSyntax,splitPathSegments,isInvalidSegmentShape,isConcretePath,hasShellPattern,isDisallowedSegment,isPlannableBasename,lowerBasename,dot,ext,isGeneratedArtifactPath + NON_SOURCE_DIR_SEGMENTS() + BINARY_EXTENSIONS() + GENERATED_ANALYSIS_BASENAMES() + T2C_ARTIFACT_BASENAMES() + EXTENSIONLESS_SOURCE_BASENAMES() + isUsefulCodeChangePath() + isPlannablePath() + normalized() + segments() + lowerSegments() + basename() + normalizePlannablePath() + isCandidatePathSyntax() + splitPathSegments() + isInvalidSegmentShape() + isConcretePath() + hasShellPattern() + isDisallowedSegment() + isPlannableBasename() + lowerBasename() + dot() + ext() + isGeneratedArtifactPath() src/synthesis/validation.ts: i: ../core/schema.js,../core/types.js e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values @@ -3019,6 +3230,35 @@ D: readListBlock() cursor() line() + src/graph/symbol-resolution.ts: + i: ../core/target.js,../core/types.js + e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,collectAstCandidates,byAlias,candidate,values,buildAstCandidate,uniqueSymbols,sortCandidates,collectNlResolutions,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration + AstSymbolCandidate: + NlSymbolResolution: + SymbolResolutionIndex: + buildSymbolResolutionIndex() + byAlias() + collectAstCandidates() + byAlias() + candidate() + values() + buildAstCandidate() + uniqueSymbols() + sortCandidates() + collectNlResolutions() + byNlRecord() + hasResolvedNlAstSymbolPair() + nl() + ast() + resolveSymbol() + matched() + selected() + paths() + pathSelects() + normalized() + candidatePath() + uniquePaths() + isAstDeclaration() src/graph/linker.ts: i: ../core/id.js,../core/schema.js,../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js,./symbol-resolution.js e: PairEvidence,RecordKeywords,DirectedRelation,SourceRelationRule,indexKeywords,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,isSuppressedConfigurationPair,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,objectSimilarity,scoreSharedTickets,scoreSharedSymbol,hasResolvedSymbol,hasSharedAlias,scoreSharedPath,points,capabilityOverlap,scoreSameAction,scoreObjectSimilarity,objectSimilarity,scoreSharedTopics,sharedTopics,scoreSourceKindPenalty,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation,intersects,set,intersectsAliases,set,countBy,key @@ -3291,35 +3531,6 @@ D: COMMUNICATION_ENRICHMENT_CONTRACT() PARTICIPANT_SYNTHESIS_CONTRACT() COMMUNICATION_RESPONSE_CONTRACT() - src/graph/symbol-resolution.ts: - i: ../core/target.js,../core/types.js - e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,collectAstCandidates,byAlias,candidate,values,buildAstCandidate,uniqueSymbols,sortCandidates,collectNlResolutions,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration - AstSymbolCandidate: - NlSymbolResolution: - SymbolResolutionIndex: - buildSymbolResolutionIndex() - byAlias() - collectAstCandidates() - byAlias() - candidate() - values() - buildAstCandidate() - uniqueSymbols() - sortCandidates() - collectNlResolutions() - byNlRecord() - hasResolvedNlAstSymbolPair() - nl() - ast() - resolveSymbol() - matched() - selected() - paths() - pathSelects() - normalized() - candidatePath() - uniquePaths() - isAstDeclaration() rust-ast/src/main.rs: i: proc_macro2::Span,quote::ToTokens,serde::Serialize,serde_json::,std::collections::BTreeSet,std::env,std::fs,std::path::,syn::spanned::Spanned,syn::visit:: e: Fact,Output,Collector,main,arguments,collect_files,new,qualified,add,excerpt,modifiers,visit_item_mod,visit_item_use,visit_item_struct,visit_item_enum,visit_item_trait,visit_item_type,visit_item_const,visit_item_static,visit_item_fn,visit_item_impl,visit_impl_item_fn,visit_expr_call,visit_expr_method_call @@ -3450,6 +3661,11 @@ D: diagnostic() validateTodoProposalContext() known() + src/semantic/reranker-llm.ts: + i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util + e: SemanticRerankerOptions,SemanticRerankerRequiredError + SemanticRerankerOptions: + SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),validateCandidateSetSize(-1),model(-1),modelRevision(-1),cached(-1),client(-1),payload(-1),response(-1),validateCandidateSetSize(-1),resolveRerankerModel(-1),resolveModelRevision(-1),revision(-1),resolveCachedResult(-1),assertSemanticRerankResult(-1),assertRerankerClient(-1),client(-1),assertTrackedSnapshotAvailable(-1),buildRerankerPayload(-1),records(-1),messagesForCandidates(-1),callReranker(-1),metadata(-1),buildRerankResult(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1) src/interfaces/mcp.ts: i: ../config/env.js,./mcp-errors.js,./mcp-resources.js,./mcp-tools.js,node:path,node:readline,node:url e: JsonRpcRequest,McpConnectionState,DISCOVERY_TTL_MS,LIST_TTL_MS,RESOURCE_TTL_MS,createMcpConnectionState,startMcpServer,resolvedConfig,state,input,parsed,request,result,handleMcpRequest,initializeLegacy,params,requested,protocolVersion,handleModernRequest,params,responseMeta,handleLegacyRequest,params,validateModernRequest,params,meta,validateModernMetadata,requested,capabilities,hasModernMetadata,meta,parseRequestLine,completePublic,serverInfo,serverMeta,serverInstructions,isLegacyProtocol,isJsonRpcRequest,candidate,requestId,id,rpcError,sendError,send,invokedPath @@ -3656,51 +3872,6 @@ D: isGeneratedAnalysisPath() segments() basename() - scripts/verify-structured-responses.mjs: - i: node:fs,node:path - e: root,sourceRoot,files,structuredCalls,source,typescriptFiles,absolute - root() - sourceRoot() - files() - structuredCalls() - source() - typescriptFiles() - absolute() - scripts/verify-generated-analysis.mjs: - i: node:child_process,node:fs,node:path,node:util - e: execFileAsync,root,projectDirectory,textExtensions,untracked,tracked,generatedRelative,trackedReferences,relative,content,normalizePath,referencesAlreadyInTrackedSources,referenced,content,text - execFileAsync() - root() - projectDirectory() - textExtensions() - untracked() - tracked() - generatedRelative() - trackedReferences() - relative() - content() - normalizePath() - referencesAlreadyInTrackedSources() - referenced() - content() - text() - sdk/typescript/src/index.ts: - e: IntentTarget,IntentStatement,IntentGenerationMetadata,IntentRecord,IntentGraph,DiagnosticReport,ExtractionAudit,ExtractionResult,A2APart,A2AMessage,A2ATask,T2CError,ClientOptions,T2CClient,unwrapTask - IntentTarget: - IntentStatement: - IntentGenerationMetadata: - IntentRecord: - IntentGraph: - DiagnosticReport: - ExtractionAudit: - ExtractionResult: - A2APart: - A2AMessage: - A2ATask: - T2CError: super(-1) - ClientOptions: - T2CClient: health(-1),agentCard(-1),send(-1),result(-1),call(-1),task(-1),detail(-1),part(-1),getTask(-1),cancelTask(-1),listTasks(-1),extractNl(-1),extractGit(-1),extractAst(-1),extractConfig(-1),link(-1),diagnose(-1),summarize(-1),compareWorkspace(-1),diffGraphs(-1),response(-1),body(-1),message(-1),diffFiles(-1),diffGit(-1),reality(-1),pipeline(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),rpc(-1),body(-1),response(-1),payload(-1),getJson(-1),response(-1),request(-1),controller(-1),timer(-1),clearTimeout(-1) - unwrapTask() src/core/schema/utils.ts: i: ../types.js e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation,assertGroundedLlMMode,assertModeRequirements,assertDeterministicGeneration,assertDegradedRequirements @@ -3746,6 +3917,74 @@ D: assertModeRequirements() assertDeterministicGeneration() assertDegradedRequirements() + src/semantic/reranker/candidate.ts: + i: ../../core/schema.js,../../core/types.js,./validation.js + e: CandidateValidationState,createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,state,assertCandidateSetHeader,createCandidateValidationState,addValidatedCandidate,validateCandidateId,validateCandidateRecords,declaration,module,validateCandidateRank,registerCandidate,existing,assertBoundedRanks,assertCandidateSetHash,expectedHash,comparePair + CandidateValidationState: + createSemanticCandidateSet() + grouped() + values() + assertSemanticCandidateSet() + state() + assertCandidateSetHeader() + createCandidateValidationState() + addValidatedCandidate() + validateCandidateId() + validateCandidateRecords() + declaration() + module() + validateCandidateRank() + registerCandidate() + existing() + assertBoundedRanks() + assertCandidateSetHash() + expectedHash() + comparePair() + scripts/verify-structured-responses.mjs: + i: node:fs,node:path + e: root,sourceRoot,files,structuredCalls,source,typescriptFiles,absolute + root() + sourceRoot() + files() + structuredCalls() + source() + typescriptFiles() + absolute() + scripts/verify-generated-analysis.mjs: + i: node:child_process,node:fs,node:path,node:util + e: execFileAsync,root,projectDirectory,textExtensions,untracked,tracked,generatedRelative,trackedReferences,relative,content,normalizePath,referencesAlreadyInTrackedSources,referenced,content,text + execFileAsync() + root() + projectDirectory() + textExtensions() + untracked() + tracked() + generatedRelative() + trackedReferences() + relative() + content() + normalizePath() + referencesAlreadyInTrackedSources() + referenced() + content() + text() + sdk/typescript/src/index.ts: + e: IntentTarget,IntentStatement,IntentGenerationMetadata,IntentRecord,IntentGraph,DiagnosticReport,ExtractionAudit,ExtractionResult,A2APart,A2AMessage,A2ATask,T2CError,ClientOptions,T2CClient,unwrapTask + IntentTarget: + IntentStatement: + IntentGenerationMetadata: + IntentRecord: + IntentGraph: + DiagnosticReport: + ExtractionAudit: + ExtractionResult: + A2APart: + A2AMessage: + A2ATask: + T2CError: super(-1) + ClientOptions: + T2CClient: health(-1),agentCard(-1),send(-1),result(-1),call(-1),task(-1),detail(-1),part(-1),getTask(-1),cancelTask(-1),listTasks(-1),extractNl(-1),extractGit(-1),extractAst(-1),extractConfig(-1),link(-1),diagnose(-1),summarize(-1),compareWorkspace(-1),diffGraphs(-1),response(-1),body(-1),message(-1),diffFiles(-1),diffGit(-1),reality(-1),pipeline(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),rpc(-1),body(-1),response(-1),payload(-1),getJson(-1),response(-1),request(-1),controller(-1),timer(-1),clearTimeout(-1) + unwrapTask() src/extractors/communication.ts: i: ../communication/identity.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,./communication-file-helpers.js,node:path e: CommunicationExtractionOptions,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,fileResult @@ -4535,6 +4774,7 @@ Graph compar... SemanticRerankResult: SemanticRerankGenerationInput: src/synthesis/code-change-plan/index.ts: + src/synthesis/code-change-plan/implementation.ts: src/interfaces/governed-intake.proto: src/interfaces/intake-schemas/command-v1.schema.json: src/interfaces/intake-schemas/result-v1.schema.json: diff --git a/project/mermaid.export b/project/mermaid.export index b18415d..564227b 100644 --- a/project/mermaid.export +++ b/project/mermaid.export @@ -870,7 +870,7 @@ flowchart TD src__core__text__matches["matches"] src__core__text__detectPolarity("detectPolarity CC=8") src__core__text__stripped["stripped"] - src__core__text__normalized{{normalized CC=30}} + src__core__text__normalized["normalized"] src__core__text__normalizeToken["normalizeToken"] src__core__text__keywords["keywords"] src__core__text__GENERIC_TOPICS["GENERIC_TOPICS"] @@ -1129,28 +1129,28 @@ flowchart TD src__graph__diff__metricCard["metricCard"] src__graph__diff__escapeXml["escapeXml"] src__graph__diff__truncate["truncate"] - src__graph__linker__indexKeywords["indexKeywords"] - src__graph__linker__jaccard["jaccard"] - src__graph__linker__intersection["intersection"] - src__graph__linker__linkIntentRecords["linkIntentRecords"] - src__graph__linker__records["records"] - src__graph__linker__byId["byId"] - src__graph__linker__keywordIndex["keywordIndex"] - src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"] - src__graph__linker__candidatePairs["candidatePairs"] - src__graph__linker__resolvableBasenames["resolvableBasenames"] - src__graph__linker__left["left"] - src__graph__linker__right["right"] - src__graph__linker__evidence["evidence"] - src__graph__linker__directed["directed"] - src__graph__linker__deduplicateRecords["deduplicateRecords"] - src__graph__linker__existing["existing"] - src__graph__linker__collectCandidatePairs("collectCandidatePairs CC=10") - src__graph__linker__buckets("buckets CC=10") - src__graph__linker__astIds("astIds CC=10") - src__graph__linker__moduleAstIds("moduleAstIds CC=10") - src__graph__linker__declarationAstIds("declarationAstIds CC=10") - src__graph__linker__configurationIds("configurationIds CC=10") + src__graph__symbol_resolution__buildSymbolResolutionIndex["buildSymbolResolutionIndex"] + src__graph__symbol_resolution__byAlias("byAlias CC=8") + src__graph__symbol_resolution__collectAstCandidates("collectAstCandidates CC=8") + src__graph__symbol_resolution__candidate["candidate"] + src__graph__symbol_resolution__values["values"] + src__graph__symbol_resolution__buildAstCandidate["buildAstCandidate"] + src__graph__symbol_resolution__uniqueSymbols["uniqueSymbols"] + src__graph__symbol_resolution__sortCandidates["sortCandidates"] + src__graph__symbol_resolution__collectNlResolutions["collectNlResolutions"] + src__graph__symbol_resolution__byNlRecord["byNlRecord"] + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair("hasResolvedNlAstSymbolPair CC=10") + src__graph__symbol_resolution__nl["nl"] + src__graph__symbol_resolution__ast["ast"] + src__graph__symbol_resolution__resolveSymbol("resolveSymbol CC=8") + src__graph__symbol_resolution__matched["matched"] + src__graph__symbol_resolution__selected["selected"] + src__graph__symbol_resolution__paths["paths"] + src__graph__symbol_resolution__pathSelects["pathSelects"] + src__graph__symbol_resolution__normalized["normalized"] + src__graph__symbol_resolution__candidatePath["candidatePath"] + src__graph__symbol_resolution__uniquePaths["uniquePaths"] + src__graph__symbol_resolution__isAstDeclaration["isAstDeclaration"] end subgraph src__interfaces src__interfaces__a2a_card__sendAgentCard["sendAgentCard"] @@ -1482,21 +1482,32 @@ flowchart TD end subgraph src__semantic src__semantic__reranker_llm__SemanticRerankerRequiredError__super["super"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates{{rerankSemanticCandidates CC=25}} + src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates["rerankSemanticCandidates"] src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticCandidateSet["assertSemanticCandidateSet"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__validateCandidateSetSize["validateCandidateSetSize"] src__semantic__reranker_llm__SemanticRerankerRequiredError__model["model"] src__semantic__reranker_llm__SemanticRerankerRequiredError__modelRevision["modelRevision"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult["assertSemanticRerankResult"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__cached["cached"] src__semantic__reranker_llm__SemanticRerankerRequiredError__client["client"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__records("records CC=9") src__semantic__reranker_llm__SemanticRerankerRequiredError__payload["payload"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__response("response CC=8") + src__semantic__reranker_llm__SemanticRerankerRequiredError__response["response"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__resolveRerankerModel["resolveRerankerModel"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__resolveModelRevision["resolveModelRevision"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__revision["revision"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__resolveCachedResult["resolveCachedResult"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult["assertSemanticRerankResult"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__assertRerankerClient["assertRerankerClient"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshotAvailable["assertTrackedSnapshotAvailable"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__buildRerankerPayload["buildRerankerPayload"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__records("records CC=9") + src__semantic__reranker_llm__SemanticRerankerRequiredError__messagesForCandidates["messagesForCandidates"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__callReranker["callReranker"] src__semantic__reranker_llm__SemanticRerankerRequiredError__metadata["metadata"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__buildRerankResult["buildRerankResult"] src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankerResponse["assertSemanticRerankerResponse"] src__semantic__reranker_llm__SemanticRerankerRequiredError__execFileAsync["execFileAsync"] src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshot["assertTrackedSnapshot"] src__semantic__reranker_llm__SemanticRerankerRequiredError__root["root"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__revision["revision"] src__semantic__reranker_llm__SemanticRerankerRequiredError__head["head"] src__semantic__reranker_llm__SemanticRerankerRequiredError__resolvedRevision["resolvedRevision"] src__semantic__reranker_llm__SemanticRerankerRequiredError__tracked("tracked CC=9") @@ -1512,97 +1523,86 @@ flowchart TD src__semantic__reranker_response__response["response"] src__semantic__reranker__result__createSemanticRerankResult["createSemanticRerankResult"] src__semantic__reranker__result__decisions["decisions"] - src__semantic__reranker__result__assertSemanticRerankResult{{assertSemanticRerankResult CC=21}} - src__semantic__reranker__result__candidates["candidates"] - src__semantic__reranker__result__records{{records CC=16}} - src__semantic__reranker__result__seenDecisions{{seenDecisions CC=16}} - src__semantic__reranker__result__acceptedDeclarations{{acceptedDeclarations CC=16}} + src__semantic__reranker__result__assertSemanticRerankResult{{assertSemanticRerankResult CC=29}} + src__semantic__reranker__result__seenDecisions["seenDecisions"] + src__semantic__reranker__result__acceptedDeclarations["acceptedDeclarations"] src__semantic__reranker__result__candidate["candidate"] + src__semantic__reranker__result__assertSemanticRerankHeader["assertSemanticRerankHeader"] + src__semantic__reranker__result__createCandidateAndRecordIndex["createCandidateAndRecordIndex"] + src__semantic__reranker__result__validateSemanticDecisionCandidate["validateSemanticDecisionCandidate"] + src__semantic__reranker__result__validateSemanticDecisionDecision["validateSemanticDecisionDecision"] + src__semantic__reranker__result__validateSemanticDecisionEvidence["validateSemanticDecisionEvidence"] src__semantic__reranker__result__citations["citations"] src__semantic__reranker__result__record["record"] + src__semantic__reranker__result__validateDecisionEvidenceScope["validateDecisionEvidenceScope"] + src__semantic__reranker__result__validateSemanticDecisionVerdict["validateSemanticDecisionVerdict"] + src__semantic__reranker__result__assertRerankResultHash["assertRerankResultHash"] src__semantic__reranker__result__expectedHash["expectedHash"] src__semantic__reranker__result__applyAcceptedSemanticRelations["applyAcceptedSemanticRelations"] + src__semantic__reranker__result__candidates["candidates"] src__semantic__reranker__result__added["added"] - src__semantic__reranker__result__assertSemanticVerdictReason["assertSemanticVerdictReason"] - src__semantic__reranker__result__allowedVerdicts["allowedVerdicts"] - src__semantic__reranker__result__allowedReasons["allowedReasons"] - src__semantic__reranker__candidate__createSemanticCandidateSet("createSemanticCandidateSet CC=8") - src__semantic__reranker__candidate__grouped["grouped"] - src__semantic__reranker__candidate__values["values"] - src__semantic__reranker__candidate__assertSemanticCandidateSet{{assertSemanticCandidateSet CC=27}} - src__semantic__reranker__candidate__records("records CC=14") - src__semantic__reranker__candidate__seenIds("seenIds CC=14") - src__semantic__reranker__candidate__seenPairs("seenPairs CC=14") - src__semantic__reranker__candidate__byDeclaration("byDeclaration CC=14") - src__semantic__reranker__candidate__declaration["declaration"] - src__semantic__reranker__candidate__module["module"] - src__semantic__reranker__candidate__existing["existing"] - src__semantic__reranker__candidate__expectedHash["expectedHash"] - src__semantic__reranker__candidate__comparePair["comparePair"] - src__semantic__reranker__validation__requiredText["requiredText"] - src__semantic__reranker__validation__validateRetrieval["validateRetrieval"] end subgraph src__services - src__services__actions__executeAction{{executeAction CC=83}} - src__services__actions__root{{root CC=83}} + src__services__actions__executeAction["executeAction"] + src__services__actions__root["root"] + src__services__actions__handler["handler"] + src__services__actions__executeExtractNlAction["executeExtractNlAction"] src__services__actions__file["file"] src__services__actions__text["text"] + src__services__actions__executeExtractGitAction["executeExtractGitAction"] + src__services__actions__executeExtractAstAction["executeExtractAstAction"] + src__services__actions__executeExtractConfigAction["executeExtractConfigAction"] + src__services__actions__executeExtractMarkdownAction["executeExtractMarkdownAction"] + src__services__actions__executeExtractDocsAction["executeExtractDocsAction"] + src__services__actions__executeExtractCommunicationAction["executeExtractCommunicationAction"] + src__services__actions__executeAnalyzeCommunicationAction["executeAnalyzeCommunicationAction"] src__services__actions__analysis["analysis"] + src__services__actions__executeLinkAction["executeLinkAction"] src__services__actions__records["records"] + src__services__actions__executeDiagnoseAction["executeDiagnoseAction"] src__services__actions__graph["graph"] + src__services__actions__executeSummarizeAction["executeSummarizeAction"] src__services__actions__diagnostics["diagnostics"] + src__services__actions__executeProposeTodoAction["executeProposeTodoAction"] src__services__actions__result["result"] src__services__actions__output["output"] + src__services__actions__executeRenderTodoAction["executeRenderTodoAction"] src__services__actions__synthesis["synthesis"] src__services__actions__todoPath["todoPath"] src__services__actions__patchPath["patchPath"] src__services__actions__auditPath["auditPath"] src__services__actions__todoContent["todoContent"] src__services__actions__rendered["rendered"] + src__services__actions__executeApplyTodoAction["executeApplyTodoAction"] src__services__actions__receiptPath["receiptPath"] + src__services__actions__executeProposeCodeChangeAction("executeProposeCodeChangeAction CC=10") src__services__actions__conclusions["conclusions"] src__services__actions__proposals["proposals"] + src__services__actions__executeRenderCodeChangeAction("executeRenderCodeChangeAction CC=8") src__services__actions__planSet["planSet"] src__services__actions__review["review"] + src__services__actions__executeProposeSourcePatchAction["executeProposeSourcePatchAction"] src__services__actions__plan["plan"] src__services__actions__unifiedDiffs["unifiedDiffs"] src__services__actions__patch["patch"] + src__services__actions__executeApplySourcePatchAction["executeApplySourcePatchAction"] + src__services__actions__executeEvaluateCodeChangeAction["executeEvaluateCodeChangeAction"] src__services__actions__beforeGraph("beforeGraph CC=8") src__services__actions__beforeDiagnostics("beforeDiagnostics CC=8") src__services__actions__afterGraph("afterGraph CC=8") src__services__actions__afterDiagnostics("afterDiagnostics CC=8") + src__services__actions__executeCloseCodeChangeAction("executeCloseCodeChangeAction CC=13") src__services__actions__value["value"] + src__services__actions__executeDiffAction["executeDiffAction"] src__services__actions__beforeInput["beforeInput"] src__services__actions__afterInput["afterInput"] src__services__actions__before["before"] src__services__actions__after["after"] src__services__actions__diff["diff"] src__services__actions__svg["svg"] + src__services__actions__executeDiffFilesAction["executeDiffFilesAction"] src__services__actions__beforePath["beforePath"] src__services__actions__afterPath["afterPath"] - src__services__actions__view["view"] - src__services__actions__filterCommunicationGraph["filterCommunicationGraph"] - src__services__actions__filter["filter"] - src__services__actions__parseCommunicationGraphFilter["parseCommunicationGraphFilter"] - src__services__actions__participant["participant"] - src__services__actions__role["role"] - src__services__actions__ticket["ticket"] - src__services__actions__communicationOnly["communicationOnly"] - src__services__actions__matchesCommunicationFilter["matchesCommunicationFilter"] - src__services__actions__matchesParticipant["matchesParticipant"] - src__services__actions__matchesRole["matchesRole"] - src__services__actions__matchesTicket["matchesTicket"] - src__services__actions__nlModeValue["nlModeValue"] - src__services__actions__llmModeValue["llmModeValue"] - src__services__actions__taskSynthesisMode["taskSynthesisMode"] - src__services__actions__summaryModeValue["summaryModeValue"] - src__services__actions__pipelineTaskMode["pipelineTaskMode"] - src__services__actions__withTextDiffViews["withTextDiffViews"] - src__services__actions__title["title"] - src__services__actions__readGraphInput["readGraphInput"] - src__services__actions__safePath["safePath"] - src__services__actions__readActionObject["readActionObject"] - src__services__actions__resolveRoot["resolveRoot"] end subgraph src__summary src__summary__payload__compactSummaryPayload("compactSummaryPayload CC=12") @@ -1663,20 +1663,29 @@ flowchart TD src__synthesis__task_synthesis_payload__groundedDiagnostics["groundedDiagnostics"] src__synthesis__task_synthesis_payload__compactRecord["compactRecord"] src__synthesis__task_synthesis_payload__compareDiagnostics["compareDiagnostics"] - src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS{{NON_SOURCE_DIR_SEGMENTS CC=38}} - src__synthesis__code_change_path__BINARY_EXTENSIONS{{BINARY_EXTENSIONS CC=38}} - src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES{{GENERATED_ANALYSIS_BASENAMES CC=38}} - src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES{{T2C_ARTIFACT_BASENAMES CC=38}} - src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES{{EXTENSIONLESS_SOURCE_BASENAMES CC=38}} - src__synthesis__code_change_path__isPlannablePath{{isPlannablePath CC=38}} + src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS["NON_SOURCE_DIR_SEGMENTS"] + src__synthesis__code_change_path__BINARY_EXTENSIONS["BINARY_EXTENSIONS"] + src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES["GENERATED_ANALYSIS_BASENAMES"] + src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES["T2C_ARTIFACT_BASENAMES"] + src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES["EXTENSIONLESS_SOURCE_BASENAMES"] + src__synthesis__code_change_path__isUsefulCodeChangePath["isUsefulCodeChangePath"] + src__synthesis__code_change_path__isPlannablePath["isPlannablePath"] src__synthesis__code_change_path__normalized["normalized"] src__synthesis__code_change_path__segments["segments"] src__synthesis__code_change_path__lowerSegments["lowerSegments"] src__synthesis__code_change_path__basename["basename"] + src__synthesis__code_change_path__normalizePlannablePath["normalizePlannablePath"] + src__synthesis__code_change_path__isCandidatePathSyntax["isCandidatePathSyntax"] + src__synthesis__code_change_path__splitPathSegments["splitPathSegments"] + src__synthesis__code_change_path__isInvalidSegmentShape["isInvalidSegmentShape"] + src__synthesis__code_change_path__isConcretePath["isConcretePath"] + src__synthesis__code_change_path__hasShellPattern["hasShellPattern"] + src__synthesis__code_change_path__isDisallowedSegment["isDisallowedSegment"] + src__synthesis__code_change_path__isPlannableBasename("isPlannableBasename CC=11") src__synthesis__code_change_path__lowerBasename["lowerBasename"] src__synthesis__code_change_path__dot["dot"] src__synthesis__code_change_path__ext["ext"] - src__synthesis__code_change_path__isUsefulCodeChangePath["isUsefulCodeChangePath"] + src__synthesis__code_change_path__isGeneratedArtifactPath("isGeneratedArtifactPath CC=10") src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse["materializeTaskSynthesisResponse"] src__synthesis__task_synthesis_materialize__parsed["parsed"] src__synthesis__task_synthesis_materialize__conclusionKeys["conclusionKeys"] @@ -1706,15 +1715,6 @@ flowchart TD src__synthesis__task_synthesis_materialize__target["target"] src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria["normalizeAcceptanceCriteria"] src__synthesis__task_synthesis_materialize__criteria["criteria"] - src__synthesis__task_synthesis_materialize__source["source"] - src__synthesis__task_synthesis_materialize__assertProposalEvidenceMatchesConclusions["assertProposalEvidenceMatchesConclu"] - src__synthesis__task_synthesis_materialize__byId["byId"] - src__synthesis__task_synthesis_materialize__cited["cited"] - src__synthesis__task_synthesis_materialize__diagnostics["diagnostics"] - src__synthesis__task_synthesis_materialize__records["records"] - src__synthesis__todo_patch__diagnosticReportFingerprint["diagnosticReportFingerprint"] - src__synthesis__todo_patch__createTodoPatch("createTodoPatch CC=8") - src__synthesis__todo_patch__expectedValidation["expectedValidation"] end subgraph src__tf src__tf__classifier__dynamicImport["dynamicImport"] @@ -1790,7 +1790,11 @@ flowchart TD src__watch__watcher__finish["finish"] end subgraph src__web - src__web__diff_ui__diffUiHtml{{diffUiHtml CC=52}} + src__web__diff_ui__diffUiStyles["diffUiStyles"] + src__web__diff_ui__diffUiRunPanel["diffUiRunPanel"] + src__web__diff_ui__diffUiFiltersPanel["diffUiFiltersPanel"] + src__web__diff_ui__diffUiBodyMarkup["diffUiBodyMarkup"] + src__web__diff_ui__diffUiScriptMarkup{{diffUiScriptMarkup CC=46}} src__web__diff_ui__byId["byId"] src__web__diff_ui__requestHeaders["requestHeaders"] src__web__diff_ui__formatBytes["formatBytes"] @@ -1799,6 +1803,8 @@ flowchart TD src__web__diff_ui__fillSelect["fillSelect"] src__web__diff_ui__loadRuns("loadRuns CC=12") src__web__diff_ui__compareGraphs{{compareGraphs CC=15}} + src__web__diff_ui__diffUiTemplate["diffUiTemplate"] + src__web__diff_ui__diffUiHtml["diffUiHtml"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -2294,6 +2300,11 @@ flowchart TD src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText @@ -2379,29 +2390,24 @@ flowchart TD src__graph__diff__changedFieldPaths --> src__graph__diff__isObject src__graph__diff__compareRelations --> src__graph__diff__relationKey src__graph__diff__metricCard --> src__graph__diff__escapeXml - src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords - src__graph__linker__linkIntentRecords --> src__graph__linker__indexKeywords - src__graph__linker__linkIntentRecords --> src__graph__linker__collectCandidatePairs - src__graph__linker__linkIntentRecords --> src__graph__linker__indexResolvableBasenames - src__graph__linker__linkIntentRecords --> src__graph__linker__scorePair - src__graph__linker__linkIntentRecords --> src__graph__linker__determineRelation - src__graph__linker__records --> src__graph__linker__scorePair - src__graph__linker__records --> src__graph__linker__determineRelation - src__graph__linker__byId --> src__graph__linker__set - src__graph__linker__keywordIndex --> src__graph__linker__scorePair - src__graph__linker__keywordIndex --> src__graph__linker__determineRelation - src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair - src__graph__linker__symbolResolutionIndex --> src__graph__linker__determineRelation - src__graph__linker__candidatePairs --> src__graph__linker__scorePair - src__graph__linker__candidatePairs --> src__graph__linker__determineRelation - src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair - src__graph__linker__resolvableBasenames --> src__graph__linker__determineRelation - src__graph__linker__deduplicateRecords --> src__graph__linker__set - src__graph__linker__deduplicateRecords --> src__graph__linker__values - src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTargetBuckets - src__graph__linker__collectCandidatePairs --> src__graph__linker__indexKeywordBuckets + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectAstCandidates + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__sortCandidates + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectNlResolutions + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__uniqueSymbols + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__buildAstCandidate + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__uniqueSymbols + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__buildAstCandidate + src__graph__symbol_resolution__sortCandidates --> src__graph__symbol_resolution__values + src__graph__symbol_resolution__collectNlResolutions --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths + src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths classDef highCC fill:#ff6b6b,stroke:#c92a2a,color:#fff classDef medCC fill:#ffd43b,stroke:#f08c00,color:#000 - class examples__backend__src__server__handleRequest,src__extractors__communication_file_helpers__buildLocalWarnings,src__services__actions__executeAction,src__services__actions__root,src__core__text__normalized,src__core__text__inferObject,src__core__io__walkFiles,src__web__diff_ui__diffUiHtml,src__web__diff_ui__compareGraphs,src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates,src__semantic__reranker__result__assertSemanticRerankResult,src__semantic__reranker__result__records,src__semantic__reranker__result__seenDecisions,src__semantic__reranker__result__acceptedDeclarations,src__semantic__reranker__candidate__assertSemanticCandidateSet,src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS,src__synthesis__code_change_path__BINARY_EXTENSIONS,src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES,src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES,src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES,src__synthesis__code_change_path__isPlannablePath,src__synthesis__code_change_plan__implementation__proposeCodeChangePlans,src__synthesis__code_change_plan__implementation__paths,src__synthesis__code_change_plan__implementation__assertCodeChangeReviewPatch,src__synthesis__code_change_plan__implementation__assertCodeChangeSourcePatch,src__synthesis__code_change_plan__implementation__assertCodeChangeSourcePatchSet,src__synthesis__code_change_plan__implementation__normalizeUnifiedDiff,src__synthesis__code_change_plan__implementation__applyCodeChangeSourcePatch,src__synthesis__code_change_plan__implementation__applyUnifiedDiffToText,src__synthesis__code_change_plan__implementation__cursor highCC + class examples__backend__src__server__handleRequest,src__core__record__generationMetadata,src__web__diff_ui__diffUiScriptMarkup,src__web__diff_ui__compareGraphs,src__semantic__reranker__result__assertSemanticRerankResult,src__llm__openrouter__OpenRouterClient__timeout,src__llm__openrouter__OpenRouterClient__request,src__interfaces__a2a_message__parseCommand,src__interfaces__a2a_history__runListItem,src__diff__text__myers,src__diff__text__n,src__diff__text__m,src__diff__text__max,src__diff__text__offset,src__diff__text__y,src__diff__text__backtrack,src__diff__text__x,src__diff__reality__buildRealityView,src__diff__reality__resolveStatus,src__diff__reality__renderRealitySvg,src__diff__git__BINARY_EXTENSIONS,src__diff__git__collectGitDiff,src__pipeline__run__runPipeline,src__pipeline__run__persistFailedRun,src__evaluation__gold_types__assertLinkingCohorts,src__evaluation__gold_types__labels,src__evaluation__gold_types__modules,src__evaluation__gold_cases__evaluateRerankingCase,src__evaluation__gold_cases__buildFixtureRecords,src__evaluation__gold_cases__labels highCC class rust_ast__src__main__collect_files,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__cli__main,src__cli__handleRenderTodo,src__cli__handleApplyTodo,src__cli__options,src__cli__formatWatchEvent,src__cli__stamp,src__cli__handleDiff,src__cli__handleReality,src__cli__handleCommunication,src__cli__handleIntake,src__cli__intakeExitCode,src__cli__parseArgs,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk,src__extractors__changelog__extractChangelog,src__extractors__changelog__changelogAction medCC diff --git a/project/planfile-tickets.yaml b/project/planfile-tickets.yaml index b43fc0f..812442a 100644 --- a/project/planfile-tickets.yaml +++ b/project/planfile-tickets.yaml @@ -1,5 +1,5 @@ source: code2llm -# generated in 0.17s +# generated in 0.15s schema: code2llm.planfile_tickets.v1 project_root: /home/tom/github/semcod/todo2code tickets: @@ -160,40 +160,6 @@ tickets: files: - src/communication/identity.ts dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)' - description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:466` - with cyclomatic complexity 34 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/text.ts - dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)' - description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:467` - with cyclomatic complexity 30 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/text.ts - dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)' description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153` @@ -404,253 +370,10 @@ tickets: - src/pipeline/run.ts dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates - (CC=25)' - description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates` - at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/semantic/reranker-llm.ts - dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet - (CC=27)' - description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet` - at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/semantic/reranker/candidate.ts - dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)' - description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72` - with cyclomatic complexity 83 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/services/actions.ts - dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)' - description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73` - with cyclomatic complexity 83 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/services/actions.ts - dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS` - at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES` - at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES` - at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS` - at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES` - at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath` - at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch - (CC=41)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity - 41 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText - (CC=47)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText` - at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity - 47 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch - (CC=47)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity - 47 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor - (CC=25)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor` - at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity - 25 (limit 15). + title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult + (CC=29)' + description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult` + at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 29 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -662,12 +385,12 @@ tickets: - complexity - refactor files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor + - src/semantic/reranker/result.ts + dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)' - description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1` - with cyclomatic complexity 52 (limit 15). + title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiScriptMarkup (CC=46)' + description: 'code2llm reports `src.web.diff-ui.diffUiScriptMarkup` at `src/web/diff-ui.ts:127` + with cyclomatic complexity 46 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -680,7 +403,7 @@ tickets: - refactor files: - src/web/diff-ui.ts - dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml + dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiScriptMarkup - signal: code2llm_god title: 'Split god module: src/graph/linker.ts' description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines, @@ -699,9 +422,9 @@ tickets: - src/graph/linker.ts dedupe_key: code2llm:god:src/graph/linker.ts - signal: code2llm_god - title: 'Split god module: src/synthesis/code-change-plan/implementation.ts' - description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts` - as a large module (1310 lines, 10 classes). + title: 'Split god module: src/synthesis/code-change-plan/implementation-helpers.ts' + description: 'code2llm reports `src/synthesis/code-change-plan/implementation-helpers.ts` + as a large module (2239 lines, 25 classes). Split it by responsibility, keep public imports stable, and add focused tests @@ -713,8 +436,8 @@ tickets: - god-module - refactor files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-helpers.ts - signal: code2llm_smell_god_function title: 'Address code smell: God Function: decode_envelope' description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`. @@ -811,13 +534,13 @@ tickets: - src/cli.ts dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation' - description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation` - in `src/synthesis/code-change-plan/implementation.ts:1`. + title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-helpers' + description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-helpers` + in `src/synthesis/code-change-plan/implementation-helpers.ts:1`. - Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions, - 10 classes). Consider splitting into sub-modules. + Module ''src.synthesis.code-change-plan.implementation-helpers'' is too large + (308 functions, 25 classes). Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -828,9 +551,9 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God - Module: src.synthesis.code-change-plan.implementation' + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1:God + Module: src.synthesis.code-change-plan.implementation-helpers' - signal: code2llm_cc title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest (CC=16)' @@ -1059,23 +782,6 @@ tickets: files: - src/communication/intake-protobuf.ts dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)' - description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with - cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/io.ts - dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)' description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141` @@ -1418,25 +1124,6 @@ tickets: files: - src/evaluation/gold-types.ts dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.communication-file-helpers.buildLocalWarnings - (CC=18)' - description: 'code2llm reports `src.extractors.communication-file-helpers.buildLocalWarnings` - at `src/extractors/communication-file-helpers.ts:254` with cyclomatic complexity - 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/communication-file-helpers.ts - dedupe_key: code2llm:cc:src/extractors/communication-file-helpers.ts:src.extractors.communication-file-helpers.buildLocalWarnings - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)' description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107` @@ -1508,11 +1195,10 @@ tickets: - src/pipeline/run.ts dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations - (CC=16)' - description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations` - at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit - 15). + title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS + (CC=19)' + description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144` + with cyclomatic complexity 19 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1524,13 +1210,13 @@ tickets: - complexity - refactor files: - - src/semantic/reranker/result.ts - dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations + - src/watch/watcher.ts + dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult - (CC=21)' - description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult` - at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15). + title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS + (CC=19)' + description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145` + with cyclomatic complexity 19 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1542,12 +1228,12 @@ tickets: - complexity - refactor files: - - src/semantic/reranker/result.ts - dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult + - src/watch/watcher.ts + dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)' - description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110` - with cyclomatic complexity 16 (limit 15). + title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)' + description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147` + with cyclomatic complexity 19 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1559,178 +1245,12 @@ tickets: - complexity - refactor files: - - src/semantic/reranker/result.ts - dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records + - src/watch/watcher.ts + dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions - (CC=16)' - description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/semantic/reranker/result.ts - dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch - (CC=23)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch` - at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity - 23 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet - (CC=18)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet` - at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity - 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff - (CC=17)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff` - at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity - 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths - (CC=16)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths` - at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity - 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans - (CC=17)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity - 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - (CC=19)' - description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144` - with cyclomatic complexity 19 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - (CC=19)' - description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145` - with cyclomatic complexity 19 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)' - description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147` - with cyclomatic complexity 19 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)' - description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45` - with cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)' + description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:139` + with cyclomatic complexity 15 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1745,12 +1265,13 @@ tickets: - src/web/diff-ui.ts dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: action, self, payload' - description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:249`. + title: 'Address code smell: Data Clump: root, changelog, self, todo, markdown_mode' + description: 'code2llm reports `Data Clump: root, changelog, self, todo, markdown_mode` + in `sdk/python/todo2code/client.py:332`. - Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, - sdk.python.todo2code.client.T2CClient.call. + Arguments (root, changelog, self, todo, markdown_mode) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1762,15 +1283,16 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: - action, self, payload' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: + root, changelog, self, todo, markdown_mode' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: action, self, payload' - description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:261`. + title: 'Address code smell: Data Clump: root, changelog, self, todo, markdown_mode' + description: 'code2llm reports `Data Clump: root, changelog, self, todo, markdown_mode` + in `sdk/python/todo2code/client.py:341`. - Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, - sdk.python.todo2code.client.T2CClient.call. + Arguments (root, changelog, self, todo, markdown_mode) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1782,14 +1304,14 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: - action, self, payload' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: + root, changelog, self, todo, markdown_mode' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: excludes, self, patterns, root' - description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:354`. + title: 'Address code smell: Data Clump: root, excludes, self, patterns' + description: 'code2llm reports `Data Clump: root, excludes, self, patterns` in `sdk/python/todo2code/client.py:354`. - Arguments (excludes, self, patterns, root) are used together in multiple functions: + Arguments (root, excludes, self, patterns) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. @@ -1803,13 +1325,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: - excludes, self, patterns, root' + root, excludes, self, patterns' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: excludes, self, patterns, root' - description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:362`. + title: 'Address code smell: Data Clump: root, excludes, self, patterns' + description: 'code2llm reports `Data Clump: root, excludes, self, patterns` in `sdk/python/todo2code/client.py:362`. - Arguments (excludes, self, patterns, root) are used together in multiple functions: + Arguments (root, excludes, self, patterns) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. @@ -1823,13 +1345,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: - excludes, self, patterns, root' + root, excludes, self, patterns' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: file, nl_mode, self, root' - description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:307`. + title: 'Address code smell: Data Clump: root, file, self, nl_mode' + description: 'code2llm reports `Data Clump: root, file, self, nl_mode` in `sdk/python/todo2code/client.py:307`. - Arguments (file, nl_mode, self, root) are used together in multiple functions: + Arguments (root, file, self, nl_mode) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. @@ -1843,13 +1365,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: - file, nl_mode, self, root' + root, file, self, nl_mode' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: file, nl_mode, self, root' - description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:312`. + title: 'Address code smell: Data Clump: root, file, self, nl_mode' + description: 'code2llm reports `Data Clump: root, file, self, nl_mode` in `sdk/python/todo2code/client.py:312`. - Arguments (file, nl_mode, self, root) are used together in multiple functions: + Arguments (root, file, self, nl_mode) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. @@ -1863,15 +1385,14 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: - file, nl_mode, self, root' + root, file, self, nl_mode' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo' - description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root, - todo` in `sdk/python/todo2code/client.py:332`. + title: 'Address code smell: Data Clump: self, action, payload' + description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`. - Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + sdk.python.todo2code.client.T2CClient.call. Make the smallest refactor that removes the smell and run local tests.' @@ -1883,16 +1404,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: - markdown_mode, changelog, self, root, todo' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: + self, action, payload' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo' - description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root, - todo` in `sdk/python/todo2code/client.py:341`. + title: 'Address code smell: Data Clump: self, action, payload' + description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`. - Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + sdk.python.todo2code.client.T2CClient.call. Make the smallest refactor that removes the smell and run local tests.' @@ -1904,8 +1424,8 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: - markdown_mode, changelog, self, root, todo' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: + self, action, payload' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: MAX_PER_SECTION' description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`. @@ -1946,7 +1466,7 @@ tickets: OBJECT_PLACEHOLDERS' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: PATH_ROOTS' - description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:369`. + description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`. Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0. @@ -1961,7 +1481,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:369:God Function: PATH_ROOTS' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: RPC' description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`. @@ -2059,7 +1579,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyAcceptedSemanticRelations' description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in - `src/semantic/reranker/result.ts:179`. + `src/semantic/reranker/result.ts:227`. Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0. @@ -2074,8 +1594,27 @@ tickets: - god-function files: - src/semantic/reranker/result.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:227:God Function: applyAcceptedSemanticRelations' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: applyCodeChangeSourcePatch' + description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-helpers.ts:1663`. + + + Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1663:God + Function: applyCodeChangeSourcePatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyTodoPatch' description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`. @@ -2270,25 +1809,6 @@ tickets: - src/communication/intake-service.ts dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God Function: assertProjectionWritable' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: assertSourceApplyReceipt' - description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`. - - - Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God - Function: assertSourceApplyReceipt' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertTodoPatchArtifact' description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`. @@ -2346,24 +1866,6 @@ tickets: - src/synthesis/todo-patch.ts dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function: atomicWrite' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: base' - description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`. - - - Function ''base'' is oversized: CC=11, fan-out=16, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:92:God Function: base' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: baseWorktree' description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`. @@ -2459,11 +1961,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function: body' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: byDeclaration' - description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`. + title: 'Address code smell: God Function: buildAcceptanceContext' + description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers.ts:376`. - Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0. + Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2474,9 +1976,9 @@ tickets: - code-smell - god-function files: - - src/semantic/reranker/candidate.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God - Function: byDeclaration' + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:376:God + Function: buildAcceptanceContext' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: byKey' description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`. @@ -2496,25 +1998,6 @@ tickets: - src/communication/llm/implementation-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God Function: byKey' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: candidates' - description: 'code2llm reports `God Function: candidates` in `src/synthesis/code-change-plan/implementation.ts:124`. - - - Function ''candidates'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:124:God - Function: candidates' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: changePaths' description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`. @@ -2572,25 +2055,6 @@ tickets: - src/extractors/todo.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function: classified' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: closeCodeChanges' - description: 'code2llm reports `God Function: closeCodeChanges` in `src/synthesis/code-change-plan/implementation.ts:298`. - - - Function ''closeCodeChanges'' is oversized: CC=6, fan-out=13, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:298:God - Function: closeCodeChanges' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: collect' description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`. @@ -2627,110 +2091,14 @@ tickets: - god-function files: - src/extractors/communication-file-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God - Function: collectCommunicationMetadata' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: collectRecordDiagnostics' - description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`. - - - Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/graph/diagnostics.ts - dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function: - collectRecordDiagnostics' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: collect_files' - description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`. - - - Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - rust-ast/src/main.rs - dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function: - collect_files' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: communicationSegments' - description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`. - - - Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/extractors/communication-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God - Function: communicationSegments' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: compareWorkspaceIntent' - description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`. - - - Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/comparison/workspace.ts - dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function: - compareWorkspaceIntent' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: compileSubactorProcessEnvelope' - description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in - `src/operations/subactor.ts:41`. - - - Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/operations/subactor.ts - dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function: - compileSubactorProcessEnvelope' + dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God + Function: collectCommunicationMetadata' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: conclusions' - description: 'code2llm reports `God Function: conclusions` in `src/synthesis/code-change-plan/implementation.ts:118`. + title: 'Address code smell: God Function: collectRecordDiagnostics' + description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`. - Function ''conclusions'' is oversized: CC=7, fan-out=18, mutations=0. + Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2741,15 +2109,15 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:118:God - Function: conclusions' + - src/graph/diagnostics.ts + dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function: + collectRecordDiagnostics' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: conclusionsByDiagnostic' - description: 'code2llm reports `God Function: conclusionsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:122`. + title: 'Address code smell: God Function: collect_files' + description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`. - Function ''conclusionsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0. + Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2760,15 +2128,15 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:122:God - Function: conclusionsByDiagnostic' + - rust-ast/src/main.rs + dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function: + collect_files' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: configurationRecords' - description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`. + title: 'Address code smell: God Function: communicationSegments' + description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`. - Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0. + Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2779,15 +2147,15 @@ tickets: - code-smell - god-function files: - - src/extractors/configuration.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God - Function: configurationRecords' + - src/extractors/communication-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God + Function: communicationSegments' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: createCodeChangeReviewPatch' - description: 'code2llm reports `God Function: createCodeChangeReviewPatch` in `src/synthesis/code-change-plan/implementation.ts:547`. + title: 'Address code smell: God Function: compareWorkspaceIntent' + description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`. - Function ''createCodeChangeReviewPatch'' is oversized: CC=6, fan-out=15, mutations=0. + Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2798,15 +2166,16 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:547:God - Function: createCodeChangeReviewPatch' + - src/comparison/workspace.ts + dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function: + compareWorkspaceIntent' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: createCodeChangeSourcePatch' - description: 'code2llm reports `God Function: createCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation.ts:698`. + title: 'Address code smell: God Function: compileSubactorProcessEnvelope' + description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in + `src/operations/subactor.ts:41`. - Function ''createCodeChangeSourcePatch'' is oversized: CC=13, fan-out=20, mutations=0. + Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2817,16 +2186,15 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:698:God - Function: createCodeChangeSourcePatch' + - src/operations/subactor.ts + dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function: + compileSubactorProcessEnvelope' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: createCodeChangeSourcePatchSet' - description: 'code2llm reports `God Function: createCodeChangeSourcePatchSet` in - `src/synthesis/code-change-plan/implementation.ts:759`. + title: 'Address code smell: God Function: configurationRecords' + description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`. - Function ''createCodeChangeSourcePatchSet'' is oversized: CC=8, fan-out=11, mutations=0. + Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2837,9 +2205,9 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:759:God - Function: createCodeChangeSourcePatchSet' + - src/extractors/configuration.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God + Function: configurationRecords' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createMarkdownPathResolver' description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`. @@ -3048,25 +2416,6 @@ tickets: - src/extractors/markdown-llm-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God Function: enrichRecord' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: evaluateCodeChangeAcceptance' - description: 'code2llm reports `God Function: evaluateCodeChangeAcceptance` in `src/synthesis/code-change-plan/implementation.ts:224`. - - - Function ''evaluateCodeChangeAcceptance'' is oversized: CC=9, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:224:God - Function: evaluateCodeChangeAcceptance' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: evaluateDiagnosticsCase' description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:182`. @@ -3125,11 +2474,13 @@ tickets: dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function: exchange' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: extensions' - description: 'code2llm reports `God Function: extensions` in `src/core/io.ts:89`. + title: 'Address code smell: God Function: executeAnalyzeCommunicationAction' + description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction` + in `src/services/actions.ts:155`. - Function ''extensions'' is oversized: CC=11, fan-out=16, mutations=0. + Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18, + mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -3140,8 +2491,47 @@ tickets: - code-smell - god-function files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:89:God Function: extensions' + - src/services/actions.ts + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:155:God Function: + executeAnalyzeCommunicationAction' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: executeCloseCodeChangeAction' + description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:410`. + + + Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/services/actions.ts + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:410:God Function: + executeCloseCodeChangeAction' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: executePipelineAction' + description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:553`. + + + Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/services/actions.ts + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:553:God Function: + executePipelineAction' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractAstIntent' description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`. @@ -3203,7 +2593,7 @@ tickets: Function: extractCommunicationIntentAudited' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractConventionalAction' - description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:62`. + description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`. Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0. @@ -3218,7 +2608,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:62:God Function: extractConventionalAction' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractDocumentationIntent' description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`. @@ -3372,7 +2762,7 @@ tickets: Function: extractRuntimeCycleIntent' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractSymbols' - description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:438`. + description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`. Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0. @@ -3387,7 +2777,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:438:God Function: extractSymbols' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractTodo' description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`. @@ -3572,24 +2962,6 @@ tickets: files: - src/cli.ts dedupe_key: 'code2llm:smell:god_function:src/cli.ts:342:God Function: handleWatch' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: ignored' - description: 'code2llm reports `God Function: ignored` in `src/core/io.ts:88`. - - - Function ''ignored'' is oversized: CC=11, fan-out=16, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:88:God Function: ignored' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: index' description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`. @@ -3647,7 +3019,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:298:God Function: indexResolvableBasenames' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: isPathLike' - description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:387`. + description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:408`. Function ''isPathLike'' is oversized: CC=13, fan-out=12, mutations=0. @@ -3662,7 +3034,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:387:God Function: isPathLike' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:408:God Function: isPathLike' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: lines' description: 'code2llm reports `God Function: lines` in `src/extractors/changelog.ts:30`. @@ -3815,7 +3187,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/config/env.ts:76:God Function: loadEnvFile' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: loadRuns' - description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui.ts:43`. + description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui.ts:137`. Function ''loadRuns'' is oversized: CC=12, fan-out=14, mutations=0. @@ -3830,7 +3202,7 @@ tickets: - god-function files: - src/web/diff-ui.ts - dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui.ts:43:God Function: loadRuns' + dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui.ts:137:God Function: loadRuns' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: local' description: 'code2llm reports `God Function: local` in `scripts/verify-env-contract.mjs:52`. @@ -4000,24 +3372,6 @@ tickets: - python/ast_extract.py dedupe_key: 'code2llm:smell:god_function:python/ast_extract.py:195:God Function: main' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: matcher' - description: 'code2llm reports `God Function: matcher` in `src/core/io.ts:91`. - - - Function ''matcher'' is oversized: CC=11, fan-out=16, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:91:God Function: matcher' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: matchesRunFilters' description: 'code2llm reports `God Function: matchesRunFilters` in `src/interfaces/a2a-history.ts:192`. @@ -4077,24 +3431,6 @@ tickets: - src/synthesis/task-synthesis-materialize.ts dedupe_key: 'code2llm:smell:god_function:src/synthesis/task-synthesis-materialize.ts:14:God Function: materializeTaskSynthesisResponse' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: maxFiles' - description: 'code2llm reports `God Function: maxFiles` in `src/core/io.ts:90`. - - - Function ''maxFiles'' is oversized: CC=11, fan-out=16, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:90:God Function: maxFiles' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: maxFiles' description: 'code2llm reports `God Function: maxFiles` in `src/watch/watcher.ts:38`. @@ -4359,44 +3695,6 @@ tickets: files: - src/diff/reality.ts dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:386:God Function: primaryTargetKey' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: proposals' - description: 'code2llm reports `God Function: proposals` in `src/synthesis/code-change-plan/implementation.ts:119`. - - - Function ''proposals'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:119:God - Function: proposals' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: proposalsByDiagnostic' - description: 'code2llm reports `God Function: proposalsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:121`. - - - Function ''proposalsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:121:God - Function: proposalsByDiagnostic' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: read' description: 'code2llm reports `God Function: read` in `src/communication/intake-store.ts:60`. @@ -4435,47 +3733,9 @@ tickets: - src/interfaces/a2a-history.ts dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:155:God Function: readCommunicationSummary' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: records' - description: 'code2llm reports `God Function: records` in `src/semantic/reranker/candidate.ts:120`. - - - Function ''records'' is oversized: CC=14, fan-out=9, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/semantic/reranker/candidate.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:120:God - Function: records' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: recordsById' - description: 'code2llm reports `God Function: recordsById` in `src/synthesis/code-change-plan/implementation.ts:120`. - - - Function ''recordsById'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:120:God - Function: recordsById' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: registerRunArtifacts' - description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:723`. + description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:789`. Function ''registerRunArtifacts'' is oversized: CC=7, fan-out=12, mutations=0. @@ -4490,7 +3750,7 @@ tickets: - god-function files: - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:723:God Function: + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:789:God Function: registerRunArtifacts' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: relative' @@ -4624,9 +3884,28 @@ tickets: - sdk/php/src/Client.php dedupe_key: 'code2llm:smell:god_function:sdk/php/src/Client.php:331:God Function: request' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: rerankSemanticCandidates' + description: 'code2llm reports `God Function: rerankSemanticCandidates` in `src/semantic/reranker-llm.ts:39`. + + + Function ''rerankSemanticCandidates'' is oversized: CC=2, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/semantic/reranker-llm.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker-llm.ts:39:God Function: + rerankSemanticCandidates' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: resolveGlobs' - description: 'code2llm reports `God Function: resolveGlobs` in `src/core/io.ts:152`. + description: 'code2llm reports `God Function: resolveGlobs` in `src/core/io.ts:186`. Function ''resolveGlobs'' is oversized: CC=4, fan-out=14, mutations=0. @@ -4641,7 +3920,7 @@ tickets: - god-function files: - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:152:God Function: resolveGlobs' + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:186:God Function: resolveGlobs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: resolvedPaths' description: 'code2llm reports `God Function: resolvedPaths` in `src/extractors/todo.ts:51`. @@ -4773,44 +4052,6 @@ tickets: - src/communication/llm/implementation-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:147:God Function: seen' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: seenIds' - description: 'code2llm reports `God Function: seenIds` in `src/semantic/reranker/candidate.ts:121`. - - - Function ''seenIds'' is oversized: CC=14, fan-out=9, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/semantic/reranker/candidate.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:121:God - Function: seenIds' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: seenPairs' - description: 'code2llm reports `God Function: seenPairs` in `src/semantic/reranker/candidate.ts:122`. - - - Function ''seenPairs'' is oversized: CC=14, fan-out=9, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/semantic/reranker/candidate.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:122:God - Function: seenPairs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: sourcePath' description: 'code2llm reports `God Function: sourcePath` in `src/extractors/nl.ts:42`. @@ -5097,11 +4338,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:278:God Function: validateCodeChangePlanContext' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: validateProjection' - description: 'code2llm reports `God Function: validateProjection` in `src/communication/intake-service.ts:183`. + title: 'Address code smell: God Function: validatePatchTargetForEdit' + description: 'code2llm reports `God Function: validatePatchTargetForEdit` in `src/synthesis/code-change-plan/implementation-helpers.ts:1820`. - Function ''validateProjection'' is oversized: CC=9, fan-out=20, mutations=0. + Function ''validatePatchTargetForEdit'' is oversized: CC=13, fan-out=3, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -5112,15 +4353,15 @@ tickets: - code-smell - god-function files: - - src/communication/intake-service.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:183:God - Function: validateProjection' + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1820:God + Function: validatePatchTargetForEdit' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: visit' - description: 'code2llm reports `God Function: visit` in `src/core/io.ts:95`. + title: 'Address code smell: God Function: validateProjection' + description: 'code2llm reports `God Function: validateProjection` in `src/communication/intake-service.ts:183`. - Function ''visit'' is oversized: CC=11, fan-out=15, mutations=0. + Function ''validateProjection'' is oversized: CC=9, fan-out=20, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -5131,8 +4372,9 @@ tickets: - code-smell - god-function files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:95:God Function: visit' + - src/communication/intake-service.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:183:God + Function: validateProjection' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: visit' description: 'code2llm reports `God Function: visit` in `src/watch/watcher.ts:42`. @@ -5452,7 +4694,7 @@ tickets: description: 'code2llm reports `God Module: src.core.text` in `src/core/text.ts:1`. - Module ''src.core.text'' is too large (62 functions, 0 classes). Consider splitting + Module ''src.core.text'' is too large (66 functions, 0 classes). Consider splitting into sub-modules. @@ -5590,7 +4832,7 @@ tickets: in `src/extractors/communication-file-helpers.ts:1`. - Module ''src.extractors.communication-file-helpers'' is too large (43 functions, + Module ''src.extractors.communication-file-helpers'' is too large (47 functions, 2 classes). Consider splitting into sub-modules. @@ -5821,6 +5063,26 @@ tickets: files: - src/pipeline/run.ts dedupe_key: 'code2llm:smell:god_function:src/pipeline/run.ts:1:God Module: src.pipeline.run' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.semantic.reranker-llm' + description: 'code2llm reports `God Module: src.semantic.reranker-llm` in `src/semantic/reranker-llm.ts:1`. + + + Module ''src.semantic.reranker-llm'' is too large (43 functions, 2 classes). Consider + splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/semantic/reranker-llm.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker-llm.ts:1:God Module: + src.semantic.reranker-llm' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.semantic.reranker.types' description: 'code2llm reports `God Module: src.semantic.reranker.types` in `src/semantic/reranker/types.ts:1`. @@ -5846,7 +5108,7 @@ tickets: description: 'code2llm reports `God Module: src.services.actions` in `src/services/actions.ts:1`. - Module ''src.services.actions'' is too large (118 functions, 1 classes). Consider + Module ''src.services.actions'' is too large (145 functions, 1 classes). Consider splitting into sub-modules. diff --git a/project/project.toon.yaml b/project/project.toon.yaml index 784f88a..ed11d81 100644 --- a/project/project.toon.yaml +++ b/project/project.toon.yaml @@ -1,52 +1,52 @@ -# todo2code | 3683 func | 171f | 39185L | typescript | 2026-08-04 +# todo2code | 3900 func | 171f | 41875L | typescript | 2026-08-04 # generated in 0.00s HEALTH: - CC̄=3.6 critical=256 (limit:10) dup=28 cycles=0 + CC̄=3.3 critical=221 (limit:10) dup=28 cycles=0 ALERTS[20]: !!! cc_exceeded assertOperationPlan = 84 (limit:15) - !!! cc_exceeded executeAction = 83 (limit:15) - !!! cc_exceeded root = 83 (limit:15) - !!! high_fan_out executeAction = 65 (limit:10) - !!! high_fan_out root = 64 (limit:10) !!! cc_exceeded parseCommand = 63 (limit:15) !!! cc_exceeded runPipeline = 56 (limit:15) !!! high_fan_out runPipeline = 56 (limit:10) - !!! cc_exceeded diffUiHtml = 52 (limit:15) !!! cc_exceeded analyzeCommunication = 48 (limit:15) + !!! cc_exceeded diffUiScriptMarkup = 46 (limit:15) + !!! cc_exceeded variables = 44 (limit:15) + !!! cc_exceeded variableById = 44 (limit:15) + !!! cc_exceeded steps = 44 (limit:15) + !!! cc_exceeded stepIds = 44 (limit:15) -MODULES[251] (top by size): +MODULES[252] (top by size): M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json) + M[src/synthesis/code-change-plan/implementation-helpers.ts] 2239L C:25 F:270 CC↑13 D:3 (typescript) M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript) + M[src/services/actions.ts] 803L C:1 F:106 CC↑13 D:0 (typescript) M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json) - M[src/services/actions.ts] 737L C:1 F:79 CC↑83 D:0 (typescript) M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript) M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript) M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json) M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript) M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript) M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript) + M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript) M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml) - M[src/core/text.ts] 517L C:0 F:57 CC↑34 D:0 (typescript) M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python) M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript) - M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript) - LANGS: typescript:143/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 + LANGS: typescript:144/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 HOTSPOTS[10]: - ★ executeAction fan=65 // Orchestrates 65 calls - ★ root fan=64 // Orchestrates 64 calls ★ runPipeline fan=56 // Orchestrates 56 calls - ★ diffUiHtml fan=42 // Orchestrates 42 calls ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls + ★ assertSemanticRerankResult fan=37 // Orchestrates 37 calls + ★ Client.parse_http_response fan=37 // Orchestrates 37 calls + ★ diffUiScriptMarkup fan=36 // Orchestrates 36 calls REFACTOR[15]: - [1] H/L Split executeAction (CC=83) - [2] H/L Split root (CC=83) - [3] H/L Split normalized (CC=30) - [4] H/L Split inferObject (CC=34) - [5] H/L Split diffUiHtml (CC=52) + [1] H/L Split diffUiScriptMarkup (CC=46) + [2] H/L Split assertSemanticRerankResult (CC=29) + [3] H/L Split OpenRouterClient.timeout (CC=26) + [4] H/L Split OpenRouterClient.request (CC=31) + [5] H/L Split parseCommand (CC=63) EVOLUTION: - 2026-08-04 CC̄=3.6 crit=256 39185L // Automated analysis + 2026-08-04 CC̄=3.3 crit=221 41875L // Automated analysis diff --git a/project/prompt.txt b/project/prompt.txt index 25bf7fc..1e0186b 100644 --- a/project/prompt.txt +++ b/project/prompt.txt @@ -9,7 +9,7 @@ Files for analysis: Note: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup) - analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB] -- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [153KB] +- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [166KB] - evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB] - project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB] - context.md (LLM narrative - architecture summary and project context) [34KB] diff --git a/src/core/types/code-change.ts b/src/core/types/code-change.ts index 8e2ef10..262e481 100644 --- a/src/core/types/code-change.ts +++ b/src/core/types/code-change.ts @@ -219,3 +219,32 @@ export interface TodoPatchArtifact { contentHash: string; }; graphFingerprint: string; + diagnosticsFingerprint: string; + selectedProposalIds: string[]; + duplicateProposalIds: string[]; + duplicates: TodoPatchDuplicateClassification[]; + synthesisAudit: PipelineStageAudit; + renderedPatchHash: string; +} + +export interface TodoPatchApproval { + actor: string; + patchHash: string; +} + +export interface TodoApplyReceipt { + schemaVersion: 't2c.todo-apply-receipt/v1'; + patchHash: string; + sourceTodoHash: string; + resultTodoHash: string; + selectedProposalIds: string[]; + approvedBy: string; + approvedAt: string; + appliedAt: string; +} + +export interface TodoApplyResult { + applied: boolean; + idempotent: boolean; + receipt: TodoApplyReceipt; +} diff --git a/src/semantic/reranker/result.ts b/src/semantic/reranker/result.ts index f948b55..38bdf68 100644 --- a/src/semantic/reranker/result.ts +++ b/src/semantic/reranker/result.ts @@ -99,7 +99,6 @@ export function assertSemanticRerankResult( const acceptedDeclarations = new Set(); assertSemanticRerankHeader(value, candidateSet, graph); - if (value.schemaVersion !== 't2c.semantic-rerank/v1') { for (const decision of value.decisions) { const candidate = validateSemanticDecisionCandidate(decision, candidates, seenDecisions); validateSemanticDecisionDecision(decision); From eb12c470a6a9b8bda15cd218b26ee10671a5ce5c Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 11:53:51 +0200 Subject: [PATCH 18/43] chore: remove unrelated project artifact diffs from refactor fix --- README.md | 6 +- project/README.md | 6 +- project/analysis.toon.yaml | 80 +- project/calls.mmd | 675 +++-- project/calls.png | Bin 95312 -> 100449 bytes project/calls.toon.yaml | 42 +- project/calls.yaml | 4752 ++++++++++++++++----------------- project/compact_flow.mmd | 2 +- project/compact_flow.png | Bin 37210 -> 37242 bytes project/context.md | 186 +- project/evolution.toon.yaml | 54 +- project/flow.mmd | 2 +- project/flow.png | Bin 14232 -> 14246 bytes project/index.html | 2 +- project/map.toon.yaml | 2426 ++++++++--------- project/mermaid.export | 236 +- project/planfile-tickets.yaml | 1266 +++++++-- project/project.toon.yaml | 42 +- project/prompt.txt | 2 +- 19 files changed, 5108 insertions(+), 4671 deletions(-) diff --git a/README.md b/README.md index bfd8d48..b6364fd 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ ## AI Cost Tracking ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.2-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green) -![AI Cost](https://img.shields.io/badge/AI%20Cost-$6.35-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-47.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) +![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.00-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-44.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) -- 🤖 **LLM usage:** $6.3511 (124 commits) -- 👤 **Human dev:** ~$4759 (47.6h @ $100/h, 30min dedup) +- 🤖 **LLM usage:** $3.9955 (119 commits) +- 👤 **Human dev:** ~$4463 (44.6h @ $100/h, 30min dedup) Generated on 2026-08-04 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next) diff --git a/project/README.md b/project/README.md index f3a447a..f04a395 100644 --- a/project/README.md +++ b/project/README.md @@ -333,8 +333,8 @@ code2llm ./ -f yaml --separate-orphans **Generated by**: `code2llm ./ -f all --readme` **Analysis Date**: 2026-08-04 -**Total Functions**: 3900 -**Total Classes**: 390 -**Modules**: 252 +**Total Functions**: 3683 +**Total Classes**: 373 +**Modules**: 251 For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm diff --git a/project/analysis.toon.yaml b/project/analysis.toon.yaml index d5d7919..4f9eb57 100644 --- a/project/analysis.toon.yaml +++ b/project/analysis.toon.yaml @@ -1,35 +1,34 @@ -# code2llm | 252f 41875L | typescript:144,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 -# generated in 0.28s -# CC̅=3.3 | critical:64/3900 | dups:0 | cycles:0 +# code2llm | 251f 39151L | typescript:143,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 +# generated in 0.26s +# CC̅=3.6 | critical:90/3683 | dups:0 | cycles:0 HEALTH[20]: 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10 - 🔴 GOD src/synthesis/code-change-plan/implementation-helpers.ts = 2239L, 25 classes, 270m, max CC=13 🟡 CC handleRequest CC=16 (limit:15) - 🟡 CC generationMetadata CC=17 (limit:15) - 🟡 CC diffUiScriptMarkup CC=46 (limit:15) + 🟡 CC buildLocalWarnings CC=18 (limit:15) + 🟡 CC executeAction CC=83 (limit:15) + 🟡 CC root CC=83 (limit:15) + 🟡 CC normalized CC=30 (limit:15) + 🟡 CC inferObject CC=34 (limit:15) + 🟡 CC walkFiles CC=15 (limit:15) + 🟡 CC diffUiHtml CC=52 (limit:15) 🟡 CC compareGraphs CC=15 (limit:15) - 🟡 CC assertSemanticRerankResult CC=29 (limit:15) - 🟡 CC timeout CC=26 (limit:15) - 🟡 CC request CC=31 (limit:15) - 🟡 CC parseCommand CC=63 (limit:15) - 🟡 CC runListItem CC=18 (limit:15) - 🟡 CC myers CC=19 (limit:15) - 🟡 CC n CC=15 (limit:15) - 🟡 CC m CC=15 (limit:15) - 🟡 CC max CC=15 (limit:15) - 🟡 CC offset CC=15 (limit:15) - 🟡 CC y CC=15 (limit:15) - 🟡 CC backtrack CC=18 (limit:15) - 🟡 CC x CC=15 (limit:15) - 🟡 CC buildRealityView CC=26 (limit:15) + 🟡 CC rerankSemanticCandidates CC=25 (limit:15) + 🟡 CC assertSemanticRerankResult CC=21 (limit:15) + 🟡 CC records CC=16 (limit:15) + 🟡 CC seenDecisions CC=16 (limit:15) + 🟡 CC acceptedDeclarations CC=16 (limit:15) + 🟡 CC assertSemanticCandidateSet CC=27 (limit:15) + 🟡 CC NON_SOURCE_DIR_SEGMENTS CC=38 (limit:15) + 🟡 CC BINARY_EXTENSIONS CC=38 (limit:15) + 🟡 CC GENERATED_ANALYSIS_BASENAMES CC=38 (limit:15) + 🟡 CC T2C_ARTIFACT_BASENAMES CC=38 (limit:15) -REFACTOR[3]: +REFACTOR[2]: 1. split src/graph/linker.ts (god module) - 2. split src/synthesis/code-change-plan/implementation-helpers.ts (god module) - 3. split 18 high-CC methods (CC>15) + 2. split 19 high-CC methods (CC>15) -PIPELINES[2067]: +PIPELINES[2061]: [1] Src [main]: main → arguments PURITY: 100% pure [2] Src [new]: new @@ -142,16 +141,15 @@ LAYERS: │ !! ast_extract 221L 1C 18m CC=16 ←0 │ requirements.txt 1L 0C 0m CC=0.0 ←0 │ - src/ CC̄=3.4 ←in:0 →out:0 - │ !! implementation-helpers.ts 2239L 25C 270m CC=13 ←3 + src/ CC̄=3.8 ←in:0 →out:0 │ !! cli.ts 935L 1C 124m CC=13 ←0 - │ !! actions.ts 803L 1C 106m CC=13 ←0 + │ !! actions.ts 737L 1C 79m CC=83 ←0 │ !! reality.ts 619L 3C 74m CC=26 ←0 │ !! run.ts 617L 1C 65m CC=56 ←0 │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0 │ !! analyzer.ts 542L 3C 72m CC=48 ←0 │ !! linker.ts 537L 4C 81m CC=10 ←3 - │ !! text.ts 530L 0C 61m CC=14 ←0 + │ !! text.ts 517L 0C 57m CC=34 ←0 │ diagnostics.ts 459L 1C 58m CC=11 ←0 │ git.ts 397L 6C 57m CC=11 ←0 │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0 @@ -160,7 +158,6 @@ LAYERS: │ docs-deterministic.ts 369L 3C 43m CC=11 ←0 │ !! gold-cases.ts 366L 4C 42m CC=18 ←0 │ implementation-helpers.ts 357L 5C 33m CC=10 ←0 - │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0 │ workspace.ts 342L 3C 54m CC=12 ←0 │ !! openrouter.ts 338L 7C 39m CC=31 ←0 │ summarizer.ts 333L 5C 27m CC=10 ←0 @@ -170,47 +167,47 @@ LAYERS: │ code-change.ts 322L 0C 35m CC=11 ←0 │ communication-helpers.ts 320L 3C 45m CC=14 ←0 │ contract-check.ts 317L 6C 39m CC=14 ←2 - │ !! result.ts 312L 0C 23m CC=29 ←0 │ runtime-cycle.ts 306L 1C 35m CC=9 ←0 │ intent.ts 306L 4C 36m CC=12 ←0 - │ reranker-llm.ts 291L 2C 35m CC=9 ←0 + │ !! communication-file-helpers.ts 296L 2C 39m CC=18 ←0 │ intake-service.ts 291L 2C 48m CC=13 ←0 │ !! validation.ts 281L 0C 47m CC=84 ←0 │ !! intake-contract.ts 273L 7C 30m CC=18 ←0 │ docs-llm.ts 269L 1C 28m CC=12 ←0 │ typescript.ts 266L 1C 26m CC=8 ←0 │ tasks-llm.ts 266L 4C 22m CC=11 ←0 + │ !! result.ts 264L 0C 16m CC=21 ←0 │ mcp.ts 261L 2C 38m CC=9 ←0 │ intent.ts 258L 15C 0m CC=0.0 ←0 │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0 │ text-render.ts 251L 2C 33m CC=13 ←0 - │ candidate.ts 250L 1C 19m CC=8 ←0 │ !! watcher.ts 243L 4C 37m CC=19 ←0 - │ utils.ts 239L 0C 42m CC=8 ←0 │ !! text.ts 239L 1C 48m CC=19 ←2 + │ utils.ts 239L 0C 42m CC=8 ←0 │ diff.ts 235L 1C 38m CC=11 ←0 - │ code-change-path.ts 232L 0C 23m CC=11 ←0 │ env.ts 231L 1C 20m CC=13 ←0 │ !! a2a-history.ts 226L 3C 37m CC=18 ←0 │ code-change.ts 221L 16C 0m CC=0.0 ←0 │ structured-schema.ts 218L 5C 25m CC=10 ←0 │ model-comparison.ts 218L 4C 21m CC=12 ←0 - │ io.ts 211L 2C 30m CC=11 ←0 │ conclusions.ts 210L 0C 21m CC=9 ←0 + │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0 │ configuration.ts 208L 1C 38m CC=10 ←0 │ implementation.ts 208L 4C 21m CC=12 ←0 + │ !! code-change-path.ts 204L 0C 14m CC=38 ←0 │ ignore.ts 200L 3C 23m CC=10 ←0 + │ !! candidate.ts 200L 0C 13m CC=27 ←0 │ !! a2a-message.ts 197L 0C 35m CC=63 ←1 │ docs-record.ts 193L 0C 34m CC=14 ←0 │ !! record.ts 183L 2C 13m CC=17 ←0 │ a2a-card.ts 181L 0C 7m CC=3 ←0 + │ !! io.ts 177L 1C 32m CC=15 ←0 │ markdown-llm.ts 175L 2C 11m CC=9 ←0 │ pipeline.ts 173L 7C 0m CC=0.0 ←0 │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0 │ typescript.ts 172L 6C 16m CC=2 ←0 │ ast.ts 167L 2C 15m CC=12 ←0 │ id.ts 167L 0C 16m CC=5 ←0 - │ !! diff-ui.ts 167L 0C 15m CC=46 ←0 │ a2a-types.ts 164L 9C 14m CC=10 ←0 │ nl-llm.ts 163L 2C 19m CC=10 ←0 │ !! git.ts 161L 3C 21m CC=22 ←0 @@ -219,8 +216,8 @@ LAYERS: │ intake_cli 156L 0C 6m CC=10 ←0 │ types.ts 155L 8C 0m CC=0.0 ←0 │ docs-chunks.ts 147L 0C 29m CC=8 ←0 - │ symbol-resolution.ts 146L 3C 22m CC=10 ←0 │ !! identity.ts 146L 3C 22m CC=30 ←0 + │ symbol-resolution.ts 146L 3C 22m CC=10 ←0 │ content-cache.ts 139L 4C 12m CC=5 ←0 │ classifier.ts 135L 4C 32m CC=6 ←0 │ gold-extraction.ts 127L 0C 13m CC=5 ←0 @@ -252,6 +249,7 @@ LAYERS: │ index.ts 53L 0C 0m CC=0.0 ←0 │ gold-metrics.ts 50L 1C 11m CC=4 ←0 │ external.ts 48L 1C 5m CC=9 ←0 + │ !! diff-ui.ts 48L 0C 9m CC=52 ←0 │ diagnostics.ts 45L 2C 0m CC=0.0 ←0 │ gold-cli.ts 44L 0C 10m CC=12 ←0 │ docs-schema.ts 43L 0C 5m CC=1 ←0 @@ -284,8 +282,8 @@ LAYERS: │ index.ts 4L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 + │ !! implementation.ts 1L 10C 127m CC=47 ←3 │ index.ts 1L 0C 0m CC=0.0 ←0 - │ implementation.ts 1L 0C 0m CC=0.0 ←0 │ llm.ts 1L 0C 0m CC=0.0 ←0 │ scripts/ CC̄=3.4 ←in:0 →out:0 @@ -423,11 +421,11 @@ COUPLING: java ←2 ── examples.frontend ←1 ── CYCLES: none - HUB: src.live/ (fan-in=7) - HUB: src.synthesis/ (fan-in=5) HUB: src.diff/ (fan-in=6) - SMELL: sdk.python/ fan-out=8 → split needed + HUB: src.synthesis/ (fan-in=5) + HUB: src.live/ (fan-in=7) SMELL: scripts.research/ fan-out=11 → split needed + SMELL: sdk.python/ fan-out=8 → split needed EXTERNAL: validation: run `vallm batch .` → validation.toon diff --git a/project/calls.mmd b/project/calls.mmd index 97d3219..a001c05 100644 --- a/project/calls.mmd +++ b/project/calls.mmd @@ -1,35 +1,35 @@ flowchart LR %% generated in 0.04s subgraph examples__backend - examples__backend__src__validation__record["record"] + examples__backend__src__server__createBackend["createBackend"] + examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] examples__backend__src__validation__action["action"] - examples__backend__src__server__offset["offset"] examples__backend__src__validation__object["object"] - examples__backend__src__server__startBackend["startBackend"] examples__backend__src__server__readBody["readBody"] - examples__backend__src__validation__validateEventPayload["validateEventPayload"] - examples__backend__src__server__createBackend["createBackend"] - examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] + examples__backend__src__server__sendJson["sendJson"] + examples__backend__src__server__offset["offset"] examples__backend__src__validation__invalid["invalid"] - examples__backend__src__server__size["size"] examples__backend__src__server__validation["validation"] + examples__backend__src__validation__validateEventPayload["validateEventPayload"] + examples__backend__src__server__size["size"] + examples__backend__src__server__startBackend["startBackend"] + examples__backend__src__server__server["server"] examples__backend__src__server__event["event"] - examples__backend__src__server__sendJson["sendJson"] - examples__backend__src__server__limit["limit"] + examples__backend__src__server__store["store"] examples__backend__src__server__handleRequest["handleRequest"] + examples__backend__src__validation__record["record"] + examples__backend__src__server__limit["limit"] examples__backend__src__validation__agent["agent"] - examples__backend__src__server__store["store"] - examples__backend__src__server__server["server"] end subgraph examples__frontend - examples__frontend__src__app__reload["reload"] examples__frontend__src__app__state["state"] - examples__frontend__src__render__classifyEvent["classifyEvent"] - examples__frontend__src__app__mountPanel["mountPanel"] + examples__frontend__src__render__toRows["toRows"] examples__frontend__src__render__headerRow["headerRow"] + examples__frontend__src__app__reload["reload"] examples__frontend__src__app__createState["createState"] - examples__frontend__src__render__toRows["toRows"] + examples__frontend__src__render__classifyEvent["classifyEvent"] examples__frontend__src__render__renderTable["renderTable"] + examples__frontend__src__app__mountPanel["mountPanel"] examples__frontend__src__app__refresh["refresh"] end subgraph examples__src @@ -37,384 +37,383 @@ flowchart LR examples__src__runtime__executeContract["executeContract"] end subgraph java__JavaAstExtract - java__JavaAstExtract__JavaAstExtract__main["main"] java__JavaAstExtract__JavaAstExtract__try["try"] - java__JavaAstExtract__JavaAstExtract__json["json"] - java__JavaAstExtract__JavaAstExtract__add["add"] + java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] java__JavaAstExtract__JavaAstExtract__collect["collect"] java__JavaAstExtract__JavaAstExtract__emit["emit"] + java__JavaAstExtract__JavaAstExtract__add["add"] java__JavaAstExtract__JavaAstExtract__map["map"] + java__JavaAstExtract__JavaAstExtract__json["json"] java__JavaAstExtract__JavaAstExtract__slash["slash"] - java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] + java__JavaAstExtract__JavaAstExtract__main["main"] java__JavaAstExtract__JavaAstExtract__escape["escape"] end subgraph rust_ast__src - rust_ast__src__main__slash["slash"] - rust_ast__src__main__visit_item_static["visit_item_static"] + rust_ast__src__main__visit_item_struct["visit_item_struct"] rust_ast__src__main__visit_item_fn["visit_item_fn"] - rust_ast__src__main__main["main"] - rust_ast__src__main__visit_item_type["visit_item_type"] rust_ast__src__main__visit_item_use["visit_item_use"] + rust_ast__src__main__visit_item_trait["visit_item_trait"] + rust_ast__src__main__collect_files["collect_files"] + rust_ast__src__main__arguments["arguments"] + rust_ast__src__main__main["main"] + rust_ast__src__main__visit_expr_call["visit_expr_call"] rust_ast__src__main__qualified["qualified"] + rust_ast__src__main__modifiers["modifiers"] rust_ast__src__main__excerpt["excerpt"] - rust_ast__src__main__arguments["arguments"] - rust_ast__src__main__visit_item_enum["visit_item_enum"] - rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] + rust_ast__src__main__visit_item_mod["visit_item_mod"] + rust_ast__src__main__visit_item_type["visit_item_type"] rust_ast__src__main__visit_item_const["visit_item_const"] + rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] + rust_ast__src__main__visit_item_enum["visit_item_enum"] + rust_ast__src__main__slash["slash"] + rust_ast__src__main__visit_item_static["visit_item_static"] rust_ast__src__main__add["add"] rust_ast__src__main__type_item["type_item"] - rust_ast__src__main__visit_item_struct["visit_item_struct"] - rust_ast__src__main__modifiers["modifiers"] - rust_ast__src__main__visit_expr_call["visit_expr_call"] - rust_ast__src__main__visit_item_trait["visit_item_trait"] - rust_ast__src__main__visit_item_mod["visit_item_mod"] - rust_ast__src__main__collect_files["collect_files"] - rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] + rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] end subgraph src__cli + src__cli__handleExtractDocs["handleExtractDocs"] + src__cli__absolute["absolute"] + src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] + src__cli__stamp["stamp"] + src__cli__diagnostics["diagnostics"] + src__cli__svg["svg"] src__cli__taskFile["taskFile"] - src__cli__handleCloseCodeChange["handleCloseCodeChange"] - src__cli__handleExtractAst["handleExtractAst"] + src__cli__diff["diff"] + src__cli__handleReality["handleReality"] src__cli__invokedPath["invokedPath"] - src__cli__emitJson["emitJson"] - src__cli__optionNumber["optionNumber"] - src__cli__doctor["doctor"] - src__cli__emitExtraction["emitExtraction"] - src__cli__handleWatch["handleWatch"] - src__cli__handleProposeCodeChange["handleProposeCodeChange"] - src__cli__handleCommunication["handleCommunication"] - src__cli__buildPipelineOptions["buildPipelineOptions"] src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] - src__cli__handleExtractConfig["handleExtractConfig"] - src__cli__resolvePipelineRoot["resolvePipelineRoot"] - src__cli__handleExtractDocs["handleExtractDocs"] - src__cli__parseDiffMode["parseDiffMode"] - src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] - src__cli__buildFileDiff["buildFileDiff"] - src__cli__handleCompareWorkspace["handleCompareWorkspace"] - src__cli__handleApplyTodo["handleApplyTodo"] - src__cli__command["command"] - src__cli__handleExtractGit["handleExtractGit"] - src__cli__printHelp["printHelp"] - src__cli__diff["diff"] - src__cli__optionString["optionString"] - src__cli__buildGitDiff["buildGitDiff"] - src__cli__handler["handler"] - src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] + src__cli__optionNumber["optionNumber"] src__cli__optionBoolean["optionBoolean"] + src__cli__controller["controller"] + src__cli__result["result"] + src__cli__handleCloseCodeChange["handleCloseCodeChange"] src__cli__buildDiffPayload["buildDiffPayload"] - src__cli__stop["stop"] - src__cli__handleSummarize["handleSummarize"] + src__cli__execFileAsync["execFileAsync"] + src__cli__command["command"] + src__cli__handleCompareWorkspace["handleCompareWorkspace"] + src__cli__handleApplySourcePatch["handleApplySourcePatch"] + src__cli__parseDiffMode["parseDiffMode"] + src__cli__handleExtractNl["handleExtractNl"] + src__cli__diagnosticsPath["diagnosticsPath"] + src__cli__optionNlMode["optionNlMode"] src__cli__pipeline["pipeline"] - src__cli__optionSummaryMode["optionSummaryMode"] - src__cli__isPlanSet["isPlanSet"] - src__cli__handleExtractMarkdown["handleExtractMarkdown"] + src__cli__optionTaskMode["optionTaskMode"] + src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] + src__cli__handleRenderCodeChange["handleRenderCodeChange"] + src__cli__commandHandlers["commandHandlers"] + src__cli__resolveMainCommand["resolveMainCommand"] + src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] + src__cli__handleRenderTodo["handleRenderTodo"] + src__cli__buildPipelineOptions["buildPipelineOptions"] + src__cli__reportPipelineDegradation["reportPipelineDegradation"] + src__cli__optionString["optionString"] + src__cli__handleExtract["handleExtract"] + src__cli__context["context"] + src__cli__handleSummarize["handleSummarize"] + src__cli__buildGitDiff["buildGitDiff"] + src__cli__handleLink["handleLink"] src__cli__optionLlmMode["optionLlmMode"] - src__cli__parsed["parsed"] + src__cli__handleWatch["handleWatch"] src__cli__handleProposeSourcePatch["handleProposeSourcePatch"] - src__cli__result["result"] - src__cli__optionNullableString["optionNullableString"] - src__cli__absolute["absolute"] src__cli__handleIntake["handleIntake"] - src__cli__handleProposeTodo["handleProposeTodo"] - src__cli__context["context"] - src__cli__diagnosticsPath["diagnosticsPath"] - src__cli__handleDiagnose["handleDiagnose"] - src__cli__view["view"] - src__cli__handleExtract["handleExtract"] - src__cli__resolveMainCommand["resolveMainCommand"] - src__cli__handleExtractCommunication["handleExtractCommunication"] + src__cli__handleExtractMarkdown["handleExtractMarkdown"] + src__cli__handleProposeCodeChange["handleProposeCodeChange"] + src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] + src__cli__resolvePipelineRoot["resolvePipelineRoot"] + src__cli__initProject["initProject"] + src__cli__handleApplyTodo["handleApplyTodo"] src__cli__file["file"] - src__cli__stamp["stamp"] - src__cli__handleRenderTodo["handleRenderTodo"] - src__cli__parseArgs["parseArgs"] + src__cli__formatWatchEvent["formatWatchEvent"] + src__cli__handleExtractAst["handleExtractAst"] src__cli__handleExtractRuntime["handleExtractRuntime"] src__cli__handlePipeline["handlePipeline"] - src__cli__optionNlMode["optionNlMode"] - src__cli__commandHandlers["commandHandlers"] - src__cli__handleRenderCodeChange["handleRenderCodeChange"] - src__cli__reportPipelineDegradation["reportPipelineDegradation"] - src__cli__handleReality["handleReality"] - src__cli__execFileAsync["execFileAsync"] - src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] - src__cli__svg["svg"] + src__cli__handleExtractConfig["handleExtractConfig"] src__cli__main["main"] - src__cli__optionList["optionList"] - src__cli__diagnostics["diagnostics"] - src__cli__handleGraphDiff["handleGraphDiff"] - src__cli__handleApplySourcePatch["handleApplySourcePatch"] - src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] + src__cli__isPlanSet["isPlanSet"] + src__cli__emitExtraction["emitExtraction"] + src__cli__emitJson["emitJson"] src__cli__root["root"] - src__cli__handleExtractNl["handleExtractNl"] - src__cli__controller["controller"] - src__cli__initProject["initProject"] + src__cli__printHelp["printHelp"] + src__cli__handler["handler"] + src__cli__parsed["parsed"] + src__cli__stop["stop"] + src__cli__doctor["doctor"] + src__cli__buildFileDiff["buildFileDiff"] + src__cli__handleExtractCommunication["handleExtractCommunication"] + src__cli__optionList["optionList"] + src__cli__handleProposeTodo["handleProposeTodo"] + src__cli__parseArgs["parseArgs"] + src__cli__handleDiagnose["handleDiagnose"] + src__cli__handleExtractGit["handleExtractGit"] src__cli__handleDiff["handleDiff"] - src__cli__formatWatchEvent["formatWatchEvent"] - src__cli__handleLink["handleLink"] - src__cli__optionTaskMode["optionTaskMode"] + src__cli__handleGraphDiff["handleGraphDiff"] + src__cli__optionSummaryMode["optionSummaryMode"] + src__cli__view["view"] + src__cli__handleCommunication["handleCommunication"] + src__cli__optionNullableString["optionNullableString"] end subgraph src__extractors + src__extractors__todo__classified["classified"] + src__extractors__runtime_cycle__violationRecord["violationRecord"] + src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] + src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] + src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] src__extractors__runtime_cycle__factsMetadata["factsMetadata"] + src__extractors__git__result["result"] + src__extractors__nl__absolute["absolute"] + src__extractors__runtime_cycle__tags["tags"] + src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] + src__extractors__configuration__configurationFormat["configurationFormat"] + src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] + src__extractors__docs_record__isPlaceholder["isPlaceholder"] + src__extractors__docs_record__modality["modality"] + src__extractors__docs_record__fallback["fallback"] + src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] + src__extractors__docs_chunks__flush["flush"] + src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] + src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__git__readChangedFiles["readChangedFiles"] + src__extractors__todo__body["body"] + src__extractors__markdown_paths__headingScopes["headingScopes"] + src__extractors__todo__extractExplicitId["extractExplicitId"] + src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"] + src__extractors__docs_chunks__splitLongSection["splitLongSection"] + src__extractors__docs_deterministic__heading["heading"] + src__extractors__nl_llm_helpers__NlAttemptError__action["action"] + src__extractors__todo__inferOwner["inferOwner"] + src__extractors__configuration__parsed["parsed"] src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"] - src__extractors__git__finishDiscovery["finishDiscovery"] - src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] + src__extractors__ast__typescript__scriptKind["scriptKind"] + src__extractors__docs_deterministic__resolver["resolver"] + src__extractors__nl_llm__NlLlmRequiredError__client["client"] + src__extractors__docs_deterministic__match["match"] + src__extractors__runtime_cycle__label["label"] + src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] + src__extractors__ast__records__adapterRecords["adapterRecords"] + src__extractors__communication_helpers__flush["flush"] + src__extractors__git__mapWithConcurrency["mapWithConcurrency"] + src__extractors__ast__records__capabilities["capabilities"] + src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] + src__extractors__docs_chunks__index["index"] + src__extractors__runtime_cycle__text["text"] + src__extractors__docs_record__resolveModality["resolveModality"] + src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] src__extractors__ast__records__end["end"] - src__extractors__docs_record__action["action"] - src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] - src__extractors__communication_file_helpers__inferred["inferred"] - src__extractors__git__readStats["readStats"] - src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] - src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] - src__extractors__configuration__entries["entries"] - src__extractors__docs_schema__documentRecord["documentRecord"] - src__extractors__communication_helpers__fileParts["fileParts"] - src__extractors__runtime_cycle__probeRecord["probeRecord"] - src__extractors__todo__raw["raw"] - src__extractors__ast__records__start["start"] - src__extractors__git__runGit["runGit"] - src__extractors__docs_record__linesFromChunk["linesFromChunk"] - src__extractors__changelog__relative["relative"] - src__extractors__configuration__files["files"] - src__extractors__communication_helpers__raw["raw"] - src__extractors__docs_chunks__item["item"] - src__extractors__markdown_paths__basenames["basenames"] - src__extractors__changelog__extractChangelog["extractChangelog"] - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] - src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"] - src__extractors__communication_helpers__heading["heading"] - src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] - src__extractors__docs_record__resolveTarget["resolveTarget"] - src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"] - src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] - src__extractors__runtime_cycle__text["text"] - src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] + src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] + src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__markdown_paths__headingDirectories["headingDirectories"] + src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] + src__extractors__ast__typescript__context["context"] src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] - src__extractors__docs_record__fallback["fallback"] - src__extractors__configuration__entry["entry"] + src__extractors__docs_record__anchorToSource["anchorToSource"] + src__extractors__communication_helpers__communicationSegments["communicationSegments"] + src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] + src__extractors__runtime_cycle__parseCycle["parseCycle"] + src__extractors__docs_chunks__needles["needles"] + src__extractors__git__count["count"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] + src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] + src__extractors__docs_deterministic__action["action"] + src__extractors__markdown_paths__index["index"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] + src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] + src__extractors__todo__resolvedPaths["resolvedPaths"] src__extractors__nl__action["action"] - src__extractors__nl__extractNlIntent["extractNlIntent"] - src__extractors__docs_chunks__markdownSections["markdownSections"] - src__extractors__todo__action["action"] - src__extractors__communication_helpers__listValue["listValue"] - src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] - src__extractors__docs_record__resolveAction["resolveAction"] - src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] - src__extractors__runtime_cycle__label["label"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] - src__extractors__communication_helpers__normalize["normalize"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] src__extractors__docs_record__target["target"] - src__extractors__communication_helpers__inferIdentity["inferIdentity"] - src__extractors__ast__external__execFileAsync["execFileAsync"] - src__extractors__communication_helpers__normalizeType["normalizeType"] - src__extractors__docs_deterministic__convertDocument["convertDocument"] - src__extractors__configuration__parsed["parsed"] - src__extractors__changelog__body["body"] - src__extractors__ast__isIntentRecords["isIntentRecords"] - src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] - src__extractors__runtime_cycle__violationRecord["violationRecord"] - src__extractors__communication_helpers__communicationSegments["communicationSegments"] - src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] - src__extractors__git__result["result"] - src__extractors__communication_helpers__sameStrings["sameStrings"] - src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] + src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] + src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] + src__extractors__configuration__match["match"] + src__extractors__docs_schema__documentRecord["documentRecord"] + src__extractors__markdown_paths__state["state"] + src__extractors__docs_record__resolveAction["resolveAction"] + src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] src__extractors__communication_helpers__unquote["unquote"] - src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] - src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] + src__extractors__communication_helpers__match["match"] + src__extractors__configuration__tomlEntries["tomlEntries"] + src__extractors__git__state["state"] + src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] + src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] + src__extractors__git__gitMarkerState["gitMarkerState"] + src__extractors__configuration__entry["entry"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] + src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] - src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] - src__extractors__git__readCommits["readCommits"] - src__extractors__git__createDiscoveryState["createDiscoveryState"] - src__extractors__ast__records__moduleRecords["moduleRecords"] - src__extractors__markdown_paths__headingDirectories["headingDirectories"] - src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] - src__extractors__docs_chunks__worker["worker"] - src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__runtime_cycle__results["results"] - src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] - src__extractors__communication_helpers__flush["flush"] - src__extractors__todo__text["text"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] + src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] + src__extractors__changelog__extractChangelog["extractChangelog"] src__extractors__configuration__relative["relative"] - src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] - src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] - src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] - src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] + src__extractors__git__isGitWorkTree["isGitWorkTree"] + src__extractors__git__runGit["runGit"] + src__extractors__docs_chunks__worker["worker"] + src__extractors__changelog__changelogAction["changelogAction"] + src__extractors__communication_helpers__basename["basename"] + src__extractors__todo__action["action"] + src__extractors__git__readStats["readStats"] + src__extractors__docs_record__resolveObject["resolveObject"] src__extractors__communication_helpers__item["item"] - src__extractors__todo__classified["classified"] - src__extractors__docs_chunks__workerCount["workerCount"] - src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] - src__extractors__todo__extractExplicitId["extractExplicitId"] - src__extractors__docs_deterministic__primePathMapper["primePathMapper"] + src__extractors__docs_deterministic__targetsOf["targetsOf"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] + src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"] + src__extractors__docs_schema__strings["strings"] + src__extractors__configuration__pair["pair"] + src__extractors__git__execFileAsync["execFileAsync"] + src__extractors__docs_record__statementText["statementText"] + src__extractors__configuration__configurationRecords["configurationRecords"] + src__extractors__docs_chunks__chunkPriority["chunkPriority"] + src__extractors__git__discoverGitRepositories["discoverGitRepositories"] + src__extractors__git__root["root"] + src__extractors__nl__body["body"] + src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] + src__extractors__ast__typescript__recordModuleFact["recordModuleFact"] + src__extractors__docs_chunks__sectionText["sectionText"] + src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] + src__extractors__configuration__findKeyLine["findKeyLine"] + src__extractors__docs_deterministic__convertDocument["convertDocument"] + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] src__extractors__configuration__lines["lines"] - src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__todo__extractTodo["extractTodo"] - src__extractors__runtime_cycle__tags["tags"] - src__extractors__ast__typescript__context["context"] - src__extractors__ast__isExtractionResult["isExtractionResult"] - src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] - src__extractors__docs_record__keywordOverlap["keywordOverlap"] - src__extractors__markdown_paths__index["index"] - src__extractors__configuration__configurationFormat["configurationFormat"] - src__extractors__docs_chunks__splitLongSection["splitLongSection"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__docs_deterministic__heading["heading"] - src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] - src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] - src__extractors__runtime_cycle__watched["watched"] + src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] + src__extractors__docs_deterministic__readParagraph["readParagraph"] + src__extractors__todo__raw["raw"] + src__extractors__ast__records__moduleRecords["moduleRecords"] + src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] - src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"] - src__extractors__configuration__pair["pair"] - src__extractors__communication_helpers__basename["basename"] - src__extractors__nl__object["object"] - src__extractors__docs_record__allowedAction["allowedAction"] - src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] - src__extractors__docs_record__modality["modality"] - src__extractors__todo__resolvedPaths["resolvedPaths"] - src__extractors__docs_record__isPlaceholder["isPlaceholder"] - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] - src__extractors__docs_schema__strings["strings"] - src__extractors__configuration__match["match"] - src__extractors__git__isGitWorkTree["isGitWorkTree"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] - src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] - src__extractors__docs_deterministic__root["root"] - src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] + src__extractors__configuration__heading["heading"] + src__extractors__git__finishDiscovery["finishDiscovery"] src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] - src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] - src__extractors__communication_helpers__nestedRole["nestedRole"] - src__extractors__todo__task["task"] - src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] - src__extractors__nl__classified["classified"] - src__extractors__docs_chunks__chunkPriority["chunkPriority"] - src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] + src__extractors__git__readCommits["readCommits"] + src__extractors__communication_helpers__heading["heading"] + src__extractors__todo__heading["heading"] + src__extractors__communication_file_helpers__envelope["envelope"] + src__extractors__docs_schema__target["target"] + src__extractors__ast__external__execFileAsync["execFileAsync"] + src__extractors__runtime_cycle__proposalAction["proposalAction"] + src__extractors__configuration__fileAggregate["fileAggregate"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] + src__extractors__nl__object["object"] + src__extractors__docs_schema__documentResponseContract["documentResponseContract"] + src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] + src__extractors__todo__checked["checked"] + src__extractors__todo__block["block"] src__extractors__docs_record__clampLine["clampLine"] - src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] + src__extractors__configuration__dockerEntries["dockerEntries"] + src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] + src__extractors__git__createDiscoveryState["createDiscoveryState"] + src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] + src__extractors__docs_record__linesFromChunk["linesFromChunk"] + src__extractors__docs_deterministic__root["root"] + src__extractors__todo__text["text"] + src__extractors__docs_record__action["action"] + src__extractors__docs_deterministic__statementRecord["statementRecord"] + src__extractors__nl__detectMissingFields["detectMissingFields"] + src__extractors__communication_helpers__fileParts["fileParts"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] + src__extractors__ast__isIntentRecords["isIntentRecords"] + src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] - src__extractors__docs_record__anchorToSource["anchorToSource"] - src__extractors__ast__records__moduleTopicText["moduleTopicText"] - src__extractors__todo__checked["checked"] + src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"] + src__extractors__changelog__relative["relative"] + src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"] + src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"] + src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] + src__extractors__ast__records__start["start"] + src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] + src__extractors__nl__missing["missing"] + src__extractors__runtime_cycle__watched["watched"] + src__extractors__todo__lines["lines"] + src__extractors__communication_helpers__normalizeType["normalizeType"] + src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] src__extractors__nl__sourcePath["sourcePath"] - src__extractors__docs_record__hasTarget["hasTarget"] - src__extractors__docs_schema__documentResponseContract["documentResponseContract"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] - src__extractors__configuration__heading["heading"] - src__extractors__git__execFileAsync["execFileAsync"] - src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] - src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] - src__extractors__docs_record__resolveModality["resolveModality"] - src__extractors__ast__typescript__scriptKind["scriptKind"] - src__extractors__docs_chunks__sectionText["sectionText"] - src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] - src__extractors__configuration__isConfigurationPath["isConfigurationPath"] + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] + src__extractors__docs_chunks__markdownSections["markdownSections"] + src__extractors__communication_helpers__listValue["listValue"] + src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] + src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] + src__extractors__configuration__line["line"] src__extractors__ast__external__result["result"] - src__extractors__todo__inferOwner["inferOwner"] - src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] - src__extractors__docs_chunks__sectionLines["sectionLines"] - src__extractors__runtime_cycle__jsonScalar["jsonScalar"] - src__extractors__nl__confidence["confidence"] - src__extractors__docs_deterministic__readParagraph["readParagraph"] - src__extractors__runtime_cycle__parseCycle["parseCycle"] - src__extractors__changelog__lines["lines"] - src__extractors__todo__lines["lines"] - src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"] + src__extractors__nl__classified["classified"] + src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] - src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] - src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] - src__extractors__runtime_cycle__proposalAction["proposalAction"] - src__extractors__nl__detectMissingFields["detectMissingFields"] - src__extractors__configuration__findKeyLine["findKeyLine"] + src__extractors__communication_helpers__nestedRole["nestedRole"] src__extractors__configuration__jsonEntries["jsonEntries"] - src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] - src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] - src__extractors__git__mapWithConcurrency["mapWithConcurrency"] - src__extractors__nl__body["body"] + src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] + src__extractors__git__extractGitIntent["extractGitIntent"] + src__extractors__nl__confidence["confidence"] + src__extractors__communication_helpers__normalize["normalize"] + src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] + src__extractors__configuration__bounded["bounded"] + src__extractors__ast__typescript__handleNode["handleNode"] + src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] + src__extractors__docs_record__keywordOverlap["keywordOverlap"] + src__extractors__docs_chunks__item["item"] + src__extractors__communication_helpers__sameStrings["sameStrings"] + src__extractors__communication_helpers__raw["raw"] + src__extractors__communication_helpers__inferIdentity["inferIdentity"] + src__extractors__configuration__isConfigurationPath["isConfigurationPath"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] + src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] + src__extractors__runtime_cycle__results["results"] + src__extractors__changelog__body["body"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] + src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] + src__extractors__nl__extractNlIntent["extractNlIntent"] + src__extractors__markdown_paths__basenames["basenames"] + src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] + src__extractors__todo__match["match"] + src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] + src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] + src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] + src__extractors__docs_deterministic__marker["marker"] src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] - src__extractors__todo__body["body"] + src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] - src__extractors__configuration__configurationRecords["configurationRecords"] - src__extractors__docs_record__statementText["statementText"] - src__extractors__nl__inferActor["inferActor"] - src__extractors__git__state["state"] - src__extractors__nl__absolute["absolute"] - src__extractors__configuration__fileAggregate["fileAggregate"] - src__extractors__configuration__line["line"] - src__extractors__ast__records__adapterRecords["adapterRecords"] - src__extractors__git__gitMarkerState["gitMarkerState"] - src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] - src__extractors__todo__block["block"] - src__extractors__ast__records__capabilities["capabilities"] + src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] + src__extractors__runtime_cycle__jsonScalar["jsonScalar"] + src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] + src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] + src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] + src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] + src__extractors__changelog__lines["lines"] + src__extractors__configuration__uniqueEntries["uniqueEntries"] + src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] - src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] + src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] + src__extractors__todo__relative["relative"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] + src__extractors__docs_record__hasTarget["hasTarget"] + src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"] + src__extractors__configuration__files["files"] src__extractors__runtime_cycle__driftRecord["driftRecord"] - src__extractors__configuration__dockerEntries["dockerEntries"] - src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"] - src__extractors__nl__missing["missing"] + src__extractors__runtime_cycle__proposalRecord["proposalRecord"] + src__extractors__todo__task["task"] + src__extractors__ast__records__moduleTopicText["moduleTopicText"] + src__extractors__runtime_cycle__probeRecord["probeRecord"] + src__extractors__configuration__entries["entries"] + src__extractors__docs_chunks__sectionLines["sectionLines"] + src__extractors__docs_chunks__workerCount["workerCount"] + src__extractors__todo__extractTodo["extractTodo"] + src__extractors__docs_deterministic__primePathMapper["primePathMapper"] + src__extractors__nl__inferActor["inferActor"] + src__extractors__docs_record__allowedAction["allowedAction"] src__extractors__runtime_cycle__boundedArray["boundedArray"] - src__extractors__markdown_paths__headingScopes["headingScopes"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] - src__extractors__configuration__bounded["bounded"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] - src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] - src__extractors__todo__relative["relative"] - src__extractors__communication_helpers__match["match"] - src__extractors__docs_deterministic__statementRecord["statementRecord"] - src__extractors__nl_llm__NlLlmRequiredError__client["client"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] - src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"] - src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] - src__extractors__configuration__uniqueEntries["uniqueEntries"] - src__extractors__git__count["count"] - src__extractors__docs_chunks__flush["flush"] - src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"] - src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] - src__extractors__docs_deterministic__action["action"] - src__extractors__todo__heading["heading"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] - src__extractors__docs_deterministic__targetsOf["targetsOf"] - src__extractors__docs_deterministic__marker["marker"] - src__extractors__git__root["root"] - src__extractors__docs_record__resolveObject["resolveObject"] + src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] + src__extractors__communication_file_helpers__inferred["inferred"] + src__extractors__ast__isExtractionResult["isExtractionResult"] src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] - src__extractors__configuration__tomlEntries["tomlEntries"] - src__extractors__docs_chunks__index["index"] - src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] - src__extractors__changelog__changelogAction["changelogAction"] - src__extractors__git__extractChangedSymbols["extractChangedSymbols"] - src__extractors__runtime_cycle__proposalRecord["proposalRecord"] - src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] - src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"] - src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] - src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] - src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] - src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] - src__extractors__git__extractGitIntent["extractGitIntent"] - src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"] - src__extractors__docs_schema__target["target"] - src__extractors__communication_file_helpers__envelope["envelope"] - src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] src__extractors__docs_record__allowedModality["allowedModality"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] - src__extractors__git__readChangedFiles["readChangedFiles"] - src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] - src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] - src__extractors__nl_llm_helpers__NlAttemptError__action["action"] - src__extractors__docs_chunks__needles["needles"] - src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] - src__extractors__todo__match["match"] - src__extractors__docs_deterministic__match["match"] - src__extractors__markdown_paths__state["state"] - src__extractors__docs_deterministic__resolver["resolver"] - src__extractors__git__discoverGitRepositories["discoverGitRepositories"] - src__extractors__ast__typescript__recordModuleFact["recordModuleFact"] - src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] - src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] + src__extractors__docs_record__resolveTarget["resolveTarget"] + src__extractors__git__extractChangedSymbols["extractChangedSymbols"] + src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -883,11 +882,6 @@ flowchart LR src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText @@ -916,3 +910,8 @@ flowchart LR src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind + src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration diff --git a/project/calls.png b/project/calls.png index 63fcfd52a6fccc2258371dd9dd88fe98c0483b9d..211a7055ff53e09eea88299439549c1ef8f85eb5 100644 GIT binary patch literal 100449 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
NLhcG9` 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 funcs"] src__graph["src.graph
225 funcs"] src__live["src.live
60 funcs"] - src__synthesis["src.synthesis
444 funcs"] + src__synthesis["src.synthesis
292 funcs"] scripts__research ==>|7| src__live python__ast_extract ==>|4| src__diff sdk__python ==>|4| src__synthesis diff --git a/project/compact_flow.png b/project/compact_flow.png index 8fcc98da80932057e1bbe49054289cf0b075a95e..9b23ee509d033da3ed736ccd38bfff5e107b825c 100644 GIT binary patch literal 37242 zcmb@NRahL+7NsFLH16&Mx5nMw-Gf_#1t+)$cXxMpf&>We!GZ^Occ04r=FU9KJj}!J z0R2(WU3Ge&wbuT3b-0R>G%_LqA_N2kvaF1R8UzH?58!bR{0HEBU4Q{S1Oys{tc0kB zN7hL;l0o9_+mN5(or;}?*}_kquR3r#(t~uC14pFCeP#X_tSZ-HIuWo3=w%|xB6LZC zba50PRc5JZLlRu^wF<||h_WI0#Sz7%eJKzFyt{uhSNhXNn~Lmvj$7L`*l0D? zvhV)_`8Oa-p8ux< z+iIE8JRYwR`(&>%`~PvPPFsd6wc zu2s1i8{T-Eu|Au7>-+lRb=Z%4Z20Z0xSsdNo+&@4h~>`G?fZ3-!Z2=PladdL_vbxy zeghHsV9@*Xi`BWGk)(keLLca_gexO#5I!z*^L-!Z;-@|EIeoB`lJD&6rQtTqu&nXK zV7lGt0gtcKIUSKoUlhcBuD0P>1opLVR%Oh9F)J<#$xzh4<@k5SAULh@|1QtCqw&E1 zw*v|>re}*y*#|SIFVb%FMd5vmBpUIQI#X@%BzYR0^hR1EqX38WI{zi-dwVklGYlTc(jXmrV70bF z)`!t9Q|ve`qDVWZ(bzRdL6AK80s8e0;dOErUQPN)c3Z|h{L4ya3r%~0WEd-6RAb<0 zNf0c!-XMYovM@%1d03SEHZ(lx3iE2^;{(4kra@c%H`JjRZxY$NL)l*vc%VVg-ewBe zpmd$VinQkydJ;qR5=`iCx3ow6$RI9Z3UX@IgP5e^*b-Tt5&r96XO;mnZnBNIxYm26 z>y_gSy!H}h7xgPh=#;dt(Tw?ru7%zC^rccY*7FpozB+QFi1GXZW!$6kjgg-T=U@X5 z@$u5*@Od3@OrBOX39$-x;%XuqGH{qouL~2^F!tM5unPGs6n%A*6_(1SZ+HbnT@<{V z9u*8To9e16YU&M#F79x@V`5SWV(CU+W1}@Q=wYe`TL;MgKv0q_!Sq{fZ4j9wjvz+ka%M+I9O>KX6$G7vZ>kJxD>m}IBs`aS%MX5G}w)$QfjL& z8%v%u45-+t#7PXw3HCyefs&V(=mwz^-zZ$vi52wqgZnVrPj`Qp*azm`3~R#43!RDI z{JlxNmbAaSszxejRM6L64_C1|^T}`jPOMc2*8Tp)_pCk6E=Y*YXK2qF1=5qTCr@Fy zfco&HJ#e@vxK4z-ZxU6sMOo?zW$EqZ)fG8=Z~NtM8@4=oYVYNq;b-mn4weWDE{&0x z&-hz6r@R#Rz7zFVfeqq{r)#hT{fQrA6lE|ncYE@$ReF~}lJeXmSqw_Ua%i6D@Im<6 zc^zE4^G|NbnUg+tfn8FiSs$f&q<|P zhP%tY7Ar0zwBo}oHwWHCv*_0XG+Wh&)e}vOsb4xSZJ=ecgx!xuxfy7qz0`0)y;-$G ztJUn^O%n#ns*Nb+Xdyx5cjnLPL6RxGApRcVvmxjKHmBE8s1a+r6#k8n~c!) ze$nP;o+~xH;5({H%>P>#Y+dw6UpG7cyxYpThy^mfIZ$({na@|}38Uu?XQaE~#Qb$( zjlrWt-ZnD=QN_dD+cK@CrlLTgb^5ckWm9xV)LeOH#{950+Bkc~PDF>D9V{+SVs#2O zE~)*tM77MNG*g3=`h`7?pUr}|t5maSQWDyP2|Le;NwHOIm9cnAAUQ}rVjE8%`!{9# zXZ>bzD!=b3g6pa}jxalJ zE?!?}DrUrhB5lCZ?QoHF*BGI5mZmq5-l|fEnv)?^YPENbH{HleT^|(Zc`$xq-Sz250@u;;vtgYJc;L7;u0r; z!{zTJ39cpj+RvJY&vg9;m2oZbeW^4PT3X36U%>}oXr*g_niS@UNC+JD^12wsf}Ejo z-~pTJY#796Yb@-c6D2b59GJsJfUF&3)n|3o>UxsFJ*=K(1}%A~(+#OZr5)DT()3hI zHUv$AlwxRG%2+ZMb~6UfmJ3b888;+-c`FW1glY^KJ<+FXc{a3)`kK{u2)gkjrOgYP zDOOgu4$B#AsNFP6i$>Y{*hIvMMD`j)%Pb?4X5Z|hZwE5)fx3(}Etv^Qp(_5qhK?cm z9lEMnnWUmD5;GV<+=F_+^=tDVB#o*P*$OHjQy3!<_pj}a-#g6foj)N)5sL@YJ()*W z<1rvOlZL|#p35W_@=&fVTIWwvUB885o6{g|V%Psfs+LdD81Da>$?0Qn>@C-^)Q|J^ zhS&xpT@7=>iS+9A`%*!acmeqRCPTomy;Bi$V$R)KCXiB(h~|#s7kd2Mu>olfp{Tf! zfGC-Ju$-!URfEc;PP^-|>5+nyBUwFjq0}-#!?G}ykWz}4hQT;S*{FV+YGw-j+FuZN zZg0;k$hq(LwH6#`7}scZL3^vL)N=o;zL`24@6;zsmU8P4tuFVL&L5%A?*8;NsuybG z%XED5F!u=Nk3h>ry&e9tfl04C1C`Lg&X`@+Zg9tY+H~qocsQ^-Su$&ozWUP>GD&cO z`^NdyWqM=k;e5q!f@Z6^k_r541!*zK&An}c>+oLQ6|jUOPn2}oqJ82R zzt+VIIxN^1kHg1n2OR^S2^OE;=!?+8hL(O)PY8BOJO5HvE6jKeC*g6`x+YXV#E`gBOm4M`WSW5UC+IYXl9S z)+p5R_kX%hY82WFc{`-!cNrD)UNgH`DzNtM)WJ6>e|Gpw@C%VaO^XF9G;}?c@>smc z$l=7w@s}yHE!_ldnau%j>=OBtmgKgq_*e@kdf>Fm^+v&*9;eOpUGD&1=fMLjsq31M z>?N zQ&UVl1#>D0f-i#PJb~>eGiz0ik8TH_?ccA#5dBAG1_6SyXa4QerPc7dofd(>-Ua{SpYH^yC zIhYuv6Bbcd&IUX$A}G~A%8MgiP_dA7Y}=cVg_LLM9gfV9e)StzS<_7y3Kee!$K&Jm z37a{H`+wh;YT-nggZ(9<5pG9JsMGw?kt>JAQWO@$yDR&EYHAuCceNrQH^q|4jY4j%dJkvsYq(rb6;-4N+(>UO#H ztzmQ)c~)yJ?df6X-wmjQFTco|J)`VpMdL?roV>bHBwTQu_q+(1uQA*lHoq`1PZ)h% zBg~3RW^^Nd%Ry_JK~>?+bO`&)_u$cAr&*P0EaYN3=( zsOcHi=4RFvk|i9Q65Oy*Q`z#9ju;1=Xn!WB2ymRn15>l|QtV1D@$Pzt2=S|1 zW`4|eAw0Dl<-GB_7-P&AxQAM{_d8yOOn)C(Q6ZxP|RrUS2Hv7R%(~REe zC>}pca)&Rl2O~(MBTN-hXTAf9SXU|58j4BJ;A3f9uq-)iKZY}E5reF$2J}9eEgQd&Z(&+Lw489nw zhD1_8;lXM)W?WocTjJ@*%+Y?c%T}I#Dd-z;`2Tz zEz2O#7!Eq;USUk{k`QBw?krPS7(x%{wbBclS&U$;`59TlTceU4zbL54si^ns?v9{( zGrHHs&CzDm)X4?Iqs)JVN^p3tcbvG{yC|?$mY2*Q(A-&ONFb!1i&s|C zF{cp^O2dZI{yw8HXncr|eA$sqh(<~xcZ&BeD6Z*@&uQbOoHL{pR`J%E(kCUQ*@3Qh z@cJt5)Jtx^XUc3g>=1i{f0fzwAfQ!TMC+F-lvb&(aiWQbrnpv3ZOGG?T%Vw6;VDa) zG}9}fEuN@Rf?k}lm)?%@G+9r50%zLKJiQt&e12_he7M zML4!Pm1vlWGh$5^x~n_orOjD*k*b`tVHLSut=fHSlGw>$rN3+-zVB+a!|pRlWiBb@ zUfD6Vt6|_xANHz{?A>1^_LJ;!=UsSjyk<@q&zktYrHYQO1RM;uAI)6E{8Gj{YEFh{ z-N=Mbrs8C!&7;RLU^A}TJqnN|#x&8`r&Pls92V3~7nvk4nvL9vw2A1b6xusY2bl$C zLn`w`MU3+0?=P@jiJPPiR0bJctqL@wpnI|Xh0Q&%jG4TrO>$+LBK@v3mFp0`Xu65P zsFK?*d=O9a^RkVz8BEHNmt!^FNb7yIA&+QeuqGkBGk92r4VP0RS+4nulUN#Rz!Mq( zKmKgK2w0|Mwv>>46E|_q4rrxymLFXTw+E4SlOoLoF(%SO1QKRvky%#SMj*AGrZ(G# zUG~G*UW|7gZt0#TtggN!&`{8tIQJfTQi70Z4j5Z9ZD7eW?JH~%lsvwQVM#MEj7`<5 zJyLyP`o4L*liWaJ+9HA{qfSCUzOk}Ll9M3oV}~0fw~G zKP&!FbF^IW@?xi!oXQHVFuHCA_m%pnz5WuNtO)*oIyl%-N?p|`#HPAf^~G(`Q@&v< z2;RcgUNjvmWZyv<{YNu#mFiKRYWP|wzwE&>%~DEkrv8jfgJ+VHQ0V!|c$){Jq=A{Z zg^6$V@<$pC5$x4Y)gzk%z}YP zJtvsX*1K*l?rP#@QcQGNI6-dKHwbf@6SW#bH^LSmHPGD`*u^xStlwINOXewgijY}; z0%ZA|_N>y>WNiCkro@T^XDPu<#GrN+`1_w^kn+@PDWCL|;b*~#l&kpyFjRIv?PNwW z9H&#vwEPA6-)8J41e`K)TQv>}cvK1w@D0Lp14h_KBO08Y8IJk>kf-abQ^FeHT^k5; z6*vt9HqJr}sxXK#Wp@;lh0bc~XJvn4q=ZUwSWck(np-mFV#=E4v{eA0!OsV(kMZ5J zxQ63M1RbauHXpw?V^{5DhnTwSFH$ON6jxUmmz<9y4xrc2?QpM=O5eK0qR5*+=#Z!8Sn&4q!S9(rH);5zIaTLkTQxnaw-_9}X>P2#1`0K+&93zm z7Hh*fluO4~Bh=rfs@Qq4c~prbdyNM}oK~rSwAPn&wkXkm&LnQvJt+E`u0gz9$JaVC zh@uG+9qpaiQk~lG2aw%(TcI#{HEnI8Ja#aT^I%P9c&~9u;HCPw`KL(pPt{zkG?dOZ z{*CrbQguO?EnZ6*{9_Bp1Eby1f%$)|qA=GZ?CQrJu6Ofn<2r+4yoe(2FvjDGsWh#9$5 zdrlvgJX{$-gF@z0-(cD$6{9Y0Cg{Y*aLAu9HQVu%?HIesvK+o>&e@OA=<(NrS*---_Wc}j8{<{fA!=U{cg>Yazhk7k5V%_M#HCoaf;JNMpYtNh zGSPrtDotu;@4w<2fctH&HH4t;4jXV|XqBSObw`;|$8$>Ip%ai zj~E>$|HW~P49zf;!z$>|e6w%9@~R@^7JeJ+ASuBIu}j&!YPu7_xTiz5WRJ$ulKHA+ z>6?7dS8bP@#IX56`;oyPVyU|vVx}t-@~?K-PDrzNqs6?RaS_GEL&knz#by(um@}{h zbkZv7b}3j3C8#=8;hL~cf^NhZu=vi0lj@ueL4jw8oUNiORy9nrwEP^`@y_+Cs~lHR zA)7Nl2;ihPZi$xAs15AsecIYgSkn-O@Ug&b`bqWNpC#k?eWsmi^K{S)eLfjo#&ci$Ie@AnKjcqf&*!n$NC<0qA{+ruw1hf~$O4VOh!@yi)^&L|^G38p-NB4}Y-80HC zR=|C2kOJl^R&gmS2W>)fjowGNJOO}cS{S_yYQN1qL4qWf`;68Z)UMUR#;UBTwqu5E zCZ7E4I7n&zc;n2g!&T#HA_S%|)H`+~QQPdH?;y1m4Gk4}#BH$pmgG&#)oLGst<3j{ z&LUMTY>kCPUk3FAZN!7uw&M_|uP%1%Hb2nuvD#zPhZr3GQ1gSSMh&qr*`*CL4OM2V z)a0lYsk9mQK+KB&t{!iwk9Uv_)6G2U2N@fA8+j|&H$^6~o4lkb$H{3hz7eGF8>k@k z?>I6%-b5KFg_RtvYrQ-aJazVYLx;uT7#m|vvzXI%s!TBxyq7K(mQQhg_2gv{7D~la zFkoWJB1VKB&N?X?TVPOgheiX_uFnq5c6H#^x3&>GWIFA&v>pJt8sGnm!|NaV`GXbv zzuAuo$I7VuYXyDXs(=_p;ehdQI4&hOIm*M}? zjr(&ixw+ho64(%KQA;>}oFZ&suLG_o5Hq_wsJ_QTe`yc~`$e*xE?msLvkb{H;o#)t zi;WHB#C^~EYi)VC&G50=eHua^2S>VK>KKQWS>V8JPBg)f`OvqVlmx`xle+2|0d8$7 zIobJK1APNEY(@iOR-@Txn(DT6`^eGpALrfj#8;P>m)F-noFIY$cSKUEO1rIqP3{eu z5(1kA_ug%G#DAs6gYCAb>{=`en$a4a3^J;9u(ubo z-#Z50q{GtOs!v^K9mj8M5V1r2X)Bz2sAL99Uqa_iV^kELCiJvQHCt>ESXAow`k58Z z3~1;bv~S}fYYKv>F(JC>mkx&hY)NnvSMz-0E%{!4~>9B!$HcflPE#~nFn@okJK1C`l%VrXiZh^lRtxZV(J=J5NTb(kb zGd^0TmUPvV*ap3u1jNe^xVArYeL09kMldbZ@?3MW9N(MI3hi`VI$b?TGuBd9tejCi znfUc}DgIEK!Il7-F`w4an*wq>HPuvgrsKq`#lsW6RJ>pg{P=bw?=o4KH|2* z!8r|Y|E5VG#^`l-H-V@4aM0fDIZ{L$C)=_xPr~iRjJO>ukQ3dDg6PPQnu0S=#zyEm zmqKzRG5js~UcuH0O3^zK|L9Y-7Lt_Eu86ppe|#;gc$e4hyte*{)j{#k9spnPumU>* zy`P)CF^+b!HZHXl5C4m=hn!eM8h=K-V`DJGZ?mY7gqI!LUsp)_SX;Ujq=$lM1>>i| z(k6%b4SfU>_ZNF`2zVvQ=g@s3$tNoLffrc8rN2H-^oz3-;Wy~3E`BkOknr8+T=ibP z!VraqMbJAgTDgjc`;?S}Ps+wj^I&~&^77`Wb$#_;7Ld*TE-tw5$n*C0HtpL_37y2! zzJn3$gz@zJtenLI`2_lfFW~0l@^ZVlbUBo2=C9`Ss72De0dTE$}9nc(_%MdNyX7y ztgqmeDol!~m@Q-gIqR8!Lgih}5O>tK1p21ba?)Gb-97RZWZ*P_{cqtgaCNoIadxDi zls>tzv3v*2X~dyJIOgm)YV1Y~WorN2+V@=A`5o1rvm`WTyW_lP#z3evnP46<;M-Uq zJhZ3?nr96@+Vpe*WmFKPtkj{I$IIP{L-nT*xJ!$RxW8j2EXA(^QllnQ1$8$n2jEAT|9P=NW}pRe z1JCssdl8dDFtVXJ&(F^f3v43j*~q3&TGOucb93<+ZNynv@|vOdo=jYudS`I z*>Y%(OFKZn{2n&p4&+pcwTF50N_&89 ziO3s__~vhhY~d(?gZRssmF7P;p6o-3qP=s7zgEszGj4O|VW(z@?m2=v-=i?5b8>R5 z2f=gfO}^MW@wXLSiM*Q)Jv}`wEjS9hqVhAy8A+k(dNrJ8x`9E6aw^;0BC_u{v&y+? z`9{P|_|cI_M(f2QWVOCll=IgI^P<+=SSie?Y3 zVIh14n!mvh*0^hH> zld|J>wX|?W`iGi6bm3P#dyP=1I<^~(32`RY_mRPZqkl#KbHOO^H0U`kJR%~{&+qki z(Gr}OlbMlGgtlCFP#bZ?EU`U=deCA|Kbg)K zPeJFz0gAc-j>N-wvoGXA^WNMijCB&iyt*edUD!{E9S)9>P*BfdOL2lMm@1Tnpg8A} zBp7e}`+sh6p-Ew=Y1`5QsvtW%JINpR_KToTT(7atiIsIvw*8BRvU2Qz3Y;su^&koK z5L2eQze4&|^W)!@z%O3c6Wnmo2#^ATf~39=n_(ng@D31%C)3s(e!#Pdhe5qAf^O-X z)jKR6WwM^|#>xJ(+KCaR>Cfjqr0H;z^vQB^g8kc8mSwY@otg^>Zdts!$csCgE<=?-5|MTaM$-c!~2vRxcr1lU>fZg8Nk8>%g zZ)j?sg#N=*bl^E0`oEe%)-62KL@013tYFlYALfhlPuqf&niKUR3Z9~%{2ts10zd7 z9aKE>5ic2;aRIk-J`P2mIkY$Fu_oouyOKRsReJm!{yhPDR&;rJ`QxLb&~9jV78)8F z0Ris^Rf^}F)9LpcxQyOEjIlAFhH|(yE`}N&_*^WiKZW=s%m)?!+~#HlL$5?ET>^{r ziNyE8gdT)AfE`7vt*y<`7=XjZ&ArG@kFGKB@_0?^@i*XeZ5IwNp7869K9 zSSvCL%H-4(sn;HG?CxrerT_7Qs57oK$17sMG~WgpuTnmRu|6u$XEOx%tbLz^V|&J$ zBk3Nb6N?eLrEHh^fxye)?rh=s_ChpC1)}=pdP-Qo2XV6Aq8t+LQ{{2%hVQrI>Q;Js z`k!<}Pe)z%>x9I_f)48f!T1OV)zlw92EoXqNr;K{HCT*IgP?4U<@58j{9AloC$o4{ z9)I|~KW|*3tfw7DG}7U#D%2PwXKO#`9H4Gg;i{qWiRC$;BjTrT7-^QK~Vs8!XVZfT2U+ia|S9c@rvep6-Lg!^4u1IGfp7}gd_IRdgwK2Wh6zRygnm}8aGVZk|6n&u+n+h0P{m3WFx zVVRQC(`5z2)|vjqd8pTm#!(>%BF0VrOW(~^*c>mW^>{^%7V9_WA2#vjEQ%>mNZ%{VBd*D3c)a%O&1|}wxx~3((3VrUkGhP*e6w3Fv`=0#I0jw?l z_Sn?fqT+slh@{*R7BJ*Fm0uEecXux=0L6qmzYY~Ns3#Iyw9r|2adjm&*>9EW1A9xJ z^pubN?7C?z>&x}Fb7jJZURzr_i;9r;IX)>N4r=dxB93lEd;LXAS1&1l3m$8b&nnSluH8WnQ z(zV_SxbfPK=0+hE0;#&1lR&_c5@TYTImgW4e)3k;(15;WVZRU2sx|VN61*S(<8)-q zM9Swfe04snER1X^&<8?lz5^HMY=#e*hm;U}#p3xj{WEAQ|7#(PZ50f4JbBWli{QnE z-+Na{32YPl{8STc#N!0_hJfGOi|6&;CLJj*%1$m2@X9+oi87SR+`7%qS*OkaJ(qSl%xBQH9@Mu7L{8R5c$U4w-}4^ifzA%y|WpRkQacxO*Q(|TBvDe|eW5cAQ<_~ZFX zD{7zg!Vd(BYcXTfdXK~3#oVioz@4ple{;k>l4ekuua^=~h;3_zC~5n?Jz9+o=6>>f zZFap3b|Y$F0BQie)+o$LAxoA`JnUc3_IBF3QRY`!S?Q#+-x;v(=i~F5>CpWM)T%lY z^RF=yuY-KRBHue-x$5c}=;{Av{M{$NzCfMsMn^{nB1Zef_4Ct{oSYmP@#dI;+meOx zJfnU~lu{|>c>7PowGP+H-A~^u{Yyhw_r8Fn8jA5rnrNXdOjW^g5Xau|)vjh{+kn!2 zVnxcoq>)YFn>4MbJp{!H2?@n4k-u+6vY-(0kfn~n5r?s$nh=#ymD+Y4;lme6T3XWF z^!^+U3k;X$ip4-9IXyj1X{P*_#y``2z)y34jbMTfEb$If0EPCYV>RA-L?tC90fIz6 z4g>Y-TNf<47kDMImv7nI+e_vg6c{K)Iu3J*ToIGu08O#|{&xN@!l3UaNrHHQT{rYo z5GEH^$m#9nu~Mu0gHI5vTU|^I#8@hevYeb47^7P2bJuuQF;euTdtT9ub?~vu5xzOc z{D%161w5w{8Z?K2-Dv;W+>P$^=tre2z?h+%ahVO^7uZuiC&n7pPK}LKmX`S0+T2j z*-YJF2H8)C#1V6{Nul=_=V8KWCdfv7`!}FvurcITMd~Ku{Tj>;mACgH-~0Xb9<^u3 zSzNpyiKP>wnOq=@iv*gq6Wv4#xd@3zCxx9qS`y4jk#5TgOqY&Dr5bW`b1g>bQBhGj zOhhK2U^d5CdV;H-U+*{cyCGzpRi-`!K?8M8C%C>S;Oag1)2(vqvGir)Z*E*Tm>|Fi1d_HUZTW*3yAf@?nhup5O8J{_}ulk{|j;=+rrm<~8 zN3?fz5O{MQ@sh-{jr>c8U)x_UHv9jX^qf}GF(?*LOlppm`uh4s1LuhgZ3u@i_h)MW ziF+dTdx1RHYyY|nXnB;l4ep2Ume%1+&n`T*)@SGErLZh&o7%^(Wz}#jfpXmdv5TXG z>~)tDgu-z`-M}ArkQ3Z+nN{5H(o4~+UI#v2pzqLSksd1pNdYk)SXM?WfIiwAfVQfx zEGSvcAPhL!+?+<1IVNPV|J(D%yV?hWq^8@2phcr^)sli6j{V3UicI5ee-9$?V~5hd zk|F%mfUO;CIOSrW8Vz&NtuyYuSjqEWYcLx^f!7L5gUAQfe<0!^#9jA$_fZ*1!TIpT z*E%^K46ziRVGIOT-G~aRQ*tjaFP8;Pi;3Tph+Vg? zenoo8Qq9-`yw}IZ<`6IxLF--~__1FD18aWouWglwj3R??Q+{viT3WCnSWn*o(}04* zGNA#XA*d9q%%bK!+X;FEDV2)XW~xmoY1A7Np-F3xPpiW@i3kpDv(codq~Lr<>VFNp zBMfE_#x*lFjgq3&nauURLTG}XD+BTHxNM>0IZO#XGisPz{NoKE4LbKe;cT=h# z-vBhcxl;nU@WY{ZBmT)>r;Sm zb#+x1dMuLUu(Gt2l8_*S%L5|X7m|v0f+nq`$Vj9nog|4+w=qxd6+(2|g}-dzIdcdI zJ?j7w5znbP0`uvto|mgJ0Cxm=TR0AARp|tTJ@fO!29fjgKLe-ZzYn+yps7UbtM&

f~ce{1IBTb43-b3#zy~?d#>mC?(}&`_$`1H6M>e{x*f3D zjvqhbJy)rMpZBM79cn32d>b|BtE;M@8DP@qA*{)Y)c`W(epsB!tlO{ySoKimkP
oW1STa&fJ_Xw*saJUKyQ!>3zLe$!Gp0y2=9y2|HWn% zMcr7$>zkWSPl(PV@E}c0Wm<2~_{d0p&IZs%q>T8bg+sj5X@Bx*uBeDuZpV6IVom;+ z%~WGDp$8PAHy*}72N3Y0fxA(xn6bBf6LCiT?q?tnNFworIbodtJEz&c1tinfT^fK}>mx%Z4FZM6}Y6$PI=YC;iLTN_u;L``7YG;4{CY!P0AP5enprk~% zl*uLI#Ai0u6lG5FkhT`ua#+ zcGLR6$>0Ajmj8F{Y=+S5Z+%EC{+>XpNkxZ-bfYAK=0<0RN%@#l!!aYG)6>?L=7q9b zTvTMf^?{w3m{@}lN(WW0L@OfCZ5XQL(lHVVvdX=V@E>n}0lLEl*V+NI&^W=iF;UA4 z#(kSXhn`p1g{g1nU2s$XI#eK(Dvj`kr{#}%kwcb-{fnTqwOI~W1ubnJ*KiXA)@izjOL0rnb1^uXgJqWC(=e=ZURy=q}@)cSR%Kr+vI%4~s^)_*_e8%otKLv1HJ z7!2m&`SYateX$1^XXK5=>-LLgFdMX?4I$FN(+(>OzcyKz;L{``WT#vk4U)2t0Qp2w zc4u%<>X-}a_p&LKI36S%niN!0^XjUBEqyf%3k%EiC|WQ+M?St1z)e@ZZDlRnMjTtu z+qPrgpL^c>#SKazCnhG!%gcRye9$61-yZk(Co;oWQ4k(rfLQ0>Qk9<%IZDZC8~@=K z0(JK0%nVM{kOEpvSz2#tFs<;dfUvM%97=x{_rC-J5D1_@e*ka}#r47hKpB8ui8mGn zfn&$mR?G@E2Ps6XF8%aW1XlFL=lL!`3JzVWaOPhU2O6okLwNA|PvW=5o;Mh|$S2$) z?C*Os-x4(pFbH6+NdN#?C4DO@Jk&sfsk7)Yk}(5SQ3iaKlni#1xH>!QcX@Fpg={WH z1yMnyR<1``r1AU;5#`4o(>8z)wFI+BtDliB?FrMA5Al9rcS z1JgF0fHKeM00fYftmt}1npD&jKU&H>W@Qzq&%B)8Z-a${+2|_9K-A{@x&zPdfDEsN z9`lC>Db7u0LhZA3V2^Q^;65>uzc+*9mq{%mu`_&QX&g9NMjQ*Xk&%c5Bj^wK>7h1_dIu$4qgh1 z58a@JiS4l|;dfAmLbaCqdyQW65uo3#LXcZga>WUHhag7g&!y%7&r4DD^6=OVfk?Rk zPYFQXFFpPBxnFB_J6%TSP9Y^ZnD@S0vLeeC2BKrMRM2=MEYyb&5)?Cn_p4@I)_j9> z9;eNVfO^9gV~i5dm3b&5mqIOTp-s$nOB##lXjKJq#VkKyR;UZ*#^UN_!}6qX+zuOQO@j3 z5$SrY_Go0CWs+_!UzXH#b!CZzEq$d<-C>>v`5Mf6=jXAb(GT|C_J!XAO6G=!_G^Be z1-cPrD1UZE;u_QmD-a{&p`_dfGHUR#xrIeYaBvASf`^=Q$jDI8;P$`M@}4U%w#28}{n~7>$$J%Ho5;)5fr(X2hhetTftq za+bQf_%4p|o^I$I>%bsTTsdgLMPV5|0k&Yo*t(an*YfV}PHGz%>HqoR&T?Qm&88At zrPqwuGysFL2PJ6U^&tZWCz3PfcQ5-%FM;(*=_+HX0!q69$`eAxmocXY(?CcOHuXkf zIH!3{ZN+EoEfKpvCn|;yv{(m_I9OOZW0%v@(?FLyGL8XwGjY)~a4W%Qn|yLn08;Gz zgZFcd;?WgNi$o&&tl(r)jYbtnu~MW6a*ak`U*EgQCf!Go=I{xdu;S8ExFd7hN15YL zAzE5^1FM5ozDW=IG7>wtk(#bMy{a@~88&e7! zGy`zje;Pbns;ti+i8EM~*2}8jXo);G^N+vGZRhdNct9N?*D%J*kcGVfjB^FZn<63* ze4i}yOiN&Yi~1ojA|D614BHB~*VWYl3^BzE1s{rGPt@SMDQq=VKq`<)e|?44OSQ`J z+ykZx;_4Fe@<=jPtT{~h*lIZRnsJkVzwibgM`2&9{1lZ@QnLT@CAfQ{#_-49WcKH4 zj;ge5+zV(z0s~}O-$=vg@ z{_VW@Hv)&cg~hIdeC8+LL%Y|%%|Q+%cGhQ9wRbnDUI+2gBo}5et8wD|$a?8|B)wx} zpC7MwQ3Wm_EM^0tTWKxTTyF*v?!GP7g3Mz?*@6sWVq@Vd*;!c~hhm5^=}XD-IxWU< zE~Mi6@bU5Is00vIis!V1h9Mt-+i3FaU>BDX%*Z1Fu>X+21*MWW$U70xUHmkl9gQk{ zTSsa}!(eG%(@n+&-^}-YudlDq@9jEQd`h)4gJ9kF_SQYGnsr+6)&9r(rZfqBmJhGi zxDqUfXKqHmo*-hKp?&){fg|f^P5qVoY0#_lqOsar5m=(hTB@%y*1H102K% znYvc$%E%yaOl5ix9EJS+*eCrMOF0)46&@ZwP2Y1p$q(dC80pU6pd_AQ!u>E9eJFaNlRT4+jRnq2{duX-T+-Cg+RANhVO?a$Ag{J|aTK|-Zq2n6ZpLO`ChFSN)y2K$ zf;sm$aiK(PgMecLNF+c92Vgpo-3!2@j2*sV{m446CBalF?7R^hk;4H;`2V_p|aIWA#?e)ihtn zSI$3uJFn)BdXFQ7lR}a^75+pp$$twwVj(One2_byBS^?gqQVQE;dxYEns?{%eA)_p zysc(@Tw&Tg5|7~#?BSn-S^saiH2gwH!>uaE)xG3*nBA)k~EE;QfdH zQlVCUAWs9zo`eJ?hZfHa370u|or~kntnJt1+flv9+q6dQUCavJeSalOXEY6Lu^K`N z|DV$oPP91Q9Fb^`pviG-FLnm)nipV}P_DR5#)tYpNPEk$I-_J;7k3Np?(XjH?hu@X zySux)JHg#O!QCx5Bshc+ELh0>=)1dn_v!QR8a&(W6astxs0ZazLwe6!?(4+Pc> zXa%z%Qv49m_6_+mrZES=5_(%%(VT*+dP=(gP9f>)ETD+Tp`QDQ^Dr&d3ct+k{~c)! zVUjWsmdI{Zj4+F=I3L9kDHXc@Ir63FB)23tJl_;g&l?a#DdIc&2aafRt%@79zOQa? zBRQg3vKe{pcmTBqX@E3w^A{vVf8l7-HjjJjyS|4_J5sF@MQkiArBzMVDz1m0d!GRb zF$@;9!KfeKVh;$z(gNb&`vUKA$@)khe|J1VZM0Zz>v&W*Ho_vJoy%Xi{57G3&BME> zv$YNw)afA3`vu56MFDuPkDVgV2b){yVZ0nx5dm&RACG!(_L5Tl)_Ky*0|d%Zy6!WB zO1>i;ec;1V?a5-)1Js-(QC?hkj#qM8N3^dc*p5Zz8Qt&?1u71`S;5(xd2nvb>DG~= z#(;J3`R%@Or`K!ilK4X4f`I?S3t13#=FBppipu;E=v_Po?3u=njt9U)sqice?Xm;( zpSz_JzU=4(HQd)Ot0$-ur)=8ZNt+z^QG0y(xBTjAUt#9t4aGCO)oP8EIJCSjAb>3@ zMrm^O{nACiKNA&GS39LWOqCvjC;_}Q)z{5SN_r*9d zv9*oO`(>}k_-(wO`JrxYi9@N87CE%@AC|uU>VHomsxF(@dTF1(Zs+ zCJ+9Rj)C6}MAO2-^T5A-2DB*}IBGN@AQ%-|FM9zY=NcCe?~K$SJuKtu=&0RshaX4} z`y+tQvRIOt(J$)j=O^;G4~aH~jEtQ5@mtjo8nEk(aXTmzxw02J?Z}OpeU0}Ce&^iW+Pupo+<8jf z04{>S-wEh9+?p~@xgj@*O5E=5zplD5rViOxe4M=XRR{xk%#*K&KxxORaJiP zjjMBm@Yvs-M;dTR+Lgnbi9#ib9QZyIfjD@R6aHZrKoc-{6-}qW+C-dEd1g%@)Wtw%&`;o+ta&N+;id`9%^z zlE?KwfnQAu)tq_rS8H`7!X5#`L~Q=ybg>ML0$?9PWf?h1NZF$P>-`96ElDarWz`!CFlm1ph!9lR|G+7U5%5(Af&m%q8YlS~_` zZ5%*QJ^?J6pVkU~Kxv$wks;OzPDw2&zPcaJAqj}(UO@hX?Gz9o)IJXve*gDrK1iH? z54a2%Lf)8yHSg^2$`?{v(Vc70VU_h=PnMvu_zBS~uaP4oyOi!R5@C9uUqtTnp9`Id zA`D?ZRBO^#pBx+<>`#=Q!NrX}0~!P}%qczljGRGbKrS7e||Xa zb50+*F3cwT;Q&lv2R2l%^yiPXpuXT($K?v8#l=OmIM~l5p=uT{i~Ws7#d{BpG7wg( z2cuuZNu!-P05udX0&E?R@dTg-;BzP5d9aNZ%ZD}M(ReJ_nwL}eXG*07Puajf_fZdC z^1H8dvR3#6Ml5WtC--Gc*652D_kjDjo+pL^AFW_L+Sqem!}9qR{nGjHI+$Vrs3?+0 z?baKh?eGq7^7-6Ib5SdHcKiLz&CO{xAcGNB(1l0^LTqb z6x_lSDrmqDi?bEbjW;Z5Pw zb^wY9;f;!^>4BmrPep8Yb~f0@OLq%JFis2-}J#7g{txm{o6UrySg{OT3^bi3gYV+;S%ite=0+vEHLO@>* z^zicXa&>K)<*H$}xZDS#-@|*55DEl*=dVch1Ay{2Iy%ZQOF9k$YQJQwFO5Rp*Zaly zTE(!XtD9eu!8tE@pF?fieNV+6sVkKWAZ)Y@3>26uMIDaafzo~lcrZ}V=U}){m3{*H z5`cpp|IuXnEM#*E9L@8eYe>cmxp{dc0e5QWPtW%kI4nl-AmU`V!oX)6>tNuw)jxF~ zr04;=G+5$P2N*3E1U8N?c8S_HOfkal#+7 z2|fQnKUp$f()WEM9EFoUEZdX;3=lQMZ(DuuZIh<~MQjBnM*|Vd-P6M(v|z7zW>`tU z=Y}#oK4tiN@9!IruBM`=k<%hbWUsSW+lj zc>$!pk{sw0d|RDPut7xW%$kPWd0I2!-%d`v0MnfU3A6$r#13DZz|9H)bD34s7_dm$ z!sCmzmaMN?3)#Z3ZZVyo?`)b@%gV}B_MGx1u;b9qMWFewBf z5m{zOz6YfFZay{o6U$BGWmj%j~3!-XlSee zrs*FRWG@^?Hxw)^1=4X}@VOljSV+^!biol0M{$gyxR%z|B3aAK)vew_mRVKcJ)ooN887)Hv`eaR6l9bgfRV*!QU;kaW-hhR+P9nwpxkLdl-J z&3$1?QXYfq1_K4SD(|8C__U-;g?H}z9o|5*WfpLPK#oR_X1f2 zkXF|lKH9C-4Q|*-Rt!9J;?@EL6i05NDD%wRT;R7DnqrTG+oyLI?0mJBXjwI?(F^dv z-v6lS7e61pgJYPu|EUG|`BAj~x$y zFzPc;c+u&60K7&Q6)t>_790~vstcSGU)h{ z2E_auKo)3+T4v?W@g4OCBtkWn3QG;BHTIEjy$V-N zLIQHggc+AR4_R#G>GtF=U>*U5oc95rAMZjH(zN}Z4VWdoW-_%n ze*WX>T?bG*S69+=UjTJ2h8oOPC5NWSU%g&i;=~V#)9-Qqy>c&zY*shdM|;SY3AtZU z?-PZJkpCpE+~WUo2Wcj`-~<~+k|Z=5j|1cfNT{e$9ZvV>tGvb=P<}Jt3c&aon$Ln4+}Rz?{@ z8Vtd_<-E>jTD!5#`Uph&cYaqOuH9bA-~Sb8ywd#mac6NcgfI_KYl8rf{o0~WIw}YN z4uP!~ZLT3uX=jN2dn^6zJr>km!AlCnK)oTrcY%aLD zakaQoAf3?^9TmF%f;7VmA=LcN1I~ip`9EGeWXp4`R?7g5Q)Yo_+29f&5qO$0V*(_c zv9U4!>ZMT35EfJ>^6aCDW^gymtG=wP^$4foidEY|WutCaD(mt0bjze!!fC5Te5h^2 zm&>qSKY?|)#rZ&d+Hn5IR_FY6)zLen3>>?#pTy|sp{yF!E14Wt&mKk?uv0s>(MK(P?%e`#o7CR8LCSz!RdA!`WCf&taV z#0FT&D-alg0Qvsjz{d`3^6N~di}ri10)+J>5V3Tb3s7(a{wf31^3~_Rf#Esi zRT=xgAP%x)f^+92+naC^H5#+uNzv*2fRmf-dtV{mDIj_B4+;{QsQdHsTi`~2+WZKx zf6(Jb7nlJmD-EMxWa4RYc^UE}qjLn))_MZg(}m+!Y#lO0IK6K5Yn22 zUemZBezDWv%hq}Qo)NV6{9;RFqRjWO%EW|Rs^aMAsCrK}vm)j*<6SQ?BZ-EOk8nWI z*LX-uXjaWQ{RIh4v~$<@f~j*G9T)d>U!#dEk%WN2Kt~6bNyf#6E&PT_`Kj#yAioZr zc>$i&!^o)c{ujXJD#@LPhlh)fHStaXugOH;b5C5{bhHzpFBhej>UF&U!E)dMTouOqX9Zd>%z)aDqsH$nxJj4MqA)mwHTxG# zUDbQ5!`<1k{3mo%n66XcLW*l3$XYbzRD&O5-@*)F5ej-<;^wLYPhih7acB?8_l@)M2uJMKTsOpArOB zr9jS#O4)Pbv#^`{U=_ZfU>OaB(|aHh#vYh-=-dJEecjr60U~plS!6677uWr#ETi1r zX*wXMJ32ld!ifIz&eEqFM*2a>aX%5Xy;;KKw8BLTJ$Pr8E%km5P@wcRt~T8#TfXC#gTF?w1t3hvUB&#(yE8(TItSw6(bt4T^XX zFV-77b(n_4XnleD5srhAG^^8T&k+wrQ$s@n3prT2OwGWLmkucWOqevJV5Sh+lZ+us zV2B_eS5+;FN62O{KLE{3#7oxx;v4WMvqo>; z82mKDYCSr5NbpQ=jWgX#Yvl`MN!NmGY-|h+h_kX^?10wL*6tmiuR06g^czb;nqjwx zfqsTEvNc5aG2z#1iNm(bonD-9ocp-_${pZci^FDmelHNL=JJ6oZnnyI9=!XqWx6Uz|sbrYr%Y63GuR(-}(*FLP9{E!IQ2+%%X2-~t3+`4PwTc>m>W`Kygfh`6_#(D& z1>C&xckuC)s$N?_b6G>VRY}74m=ryxI2ySpCwm`NXuhkY%kGyaHT zdjME_V&)vAM(>PsS+)7aT74#XFLqT(lQlJXE?DZ=Zmo0NJ9)qvqYHY|3$Ak=#nL%E zIr)4&geWl&i;TP%R8!1B5oUuA zcx!2`E(Ew#8;7%^3Zp`59oux_Ed%?=6C&#Ok$Gj%|zAHnVb%A#zUI z*Ns{`Pxb(|JBs@+wkVY1%c@%xxZ%UQE|_^xLz*=x{zdp3ZAdBjDkc}doppC`9oJ;R zq)SO@=@9$04_c;PFs=;PAv_7^=14McIc?2N$)i!zUh$$CGL3KE`Lwpd-O(*#J7d ztmX?7SW!x|Q+zPonspWHIpM3hwBAHyY5mv{Un%KFRG9d9+`vS>1AI^*a0K2t$=<6T z#4E`5z7N}JKs_SCoK-d%s!qAk8mg)LIWRz3Inl$~6%BwrS8_CO#15jIP?7|Rod6&k zcvF-CC^dH@m`*AI6zSRthy{Y7K6Rolv`kEZ@?jz?3-|SQ;ZKwM%K=FF=_by+w4hCAYdC^j(62o`|#F*e36ZRZJl=1ob`Mo_7 z;zguL{L3z9Id)f#uXuc08FnS zeFClU(@@-OSQSxGQ-|V)%7*rP7_pT>QQo|#fIxaUR1j_k@!$qvA+9jRSiv_->+4Z7 zz2C)CLQL@CERBtg;eM-S5EoMav=)u?0W!C<`)44B-2;q`_hHQdy9czO0hz3bmhTKW zUcK4dRo8*$ba-PHRN<%o)mEA)AP+*!AzyJ%o&fk!F2P+|lb2n8tlX>DZM#?bhvn1x zDDL*!+6y3&Sv?E%xgLaFv{>Bs_rKZ>iU*yL$xgi|GJw87Oia9PG~Mw#arz@mH`NL< zAG$-r^PE$l#Bx^N70Bp}J7d%z?YZd9nwQ^k_}5_dkF&Fzrq$7RNN-+Nj&XbpHw$` zOmokPC60`*_HUBBb*b^-17AwE(vMQ8m!pzXtm!!vFXD zDL|9@f1hs8TWhw)bIgc{I-Bx4_l>N#T<-%gQHcKD%4n67ct(!^pO{{^>mYfm4Kk)d zDL1V{5f`6c-(a&&CfjD34-b+<-}lI;q-5GPv4D=?--GTyjD0wJAC2FvX6?TyhPCk580z+Ox%cOh;jB zM2}1^CKf%M&~GP)(HPT4cgI}<9`~9KlxXI zC62bK&Wzaq0_Aw`i~O&7RjdBR#;Z%kAehPutLSaCvBhA=Pr29My7(N)a(ud+&3_Xo zO5wteR#7a5r{hSA%G)R*eyZ+yk`g6sh&}{Y6YD{2n7hR+jNX(w$vdU?qUW#IfabMbR zO54=+G%5?Pm=aZ#QBM-A20h^>n4jJU>EHjrA4;Ra9Is0%h&uF1vfzOpgQd``Z~J)h zq2tWtMo>qcYRlMAcgy=`MkroMkL(724f8bPNHEo4J?eDujOE1HmgHkE3DZt9O=e3Y zFg4wdq~4@FTYzkVmOH==B?D{aq93ypPo2=VWwkDz^m21Nz5U&vgXO%O5>Qt-S-Z4Z)#zK@q zEhmU!zIf2G3BxscgVCs>1b2jHazoX~ER2$2d|=**LoTiQOrR&eERgUVS(A^?hlzbS zh^i1`K}_r0ktWwDsA=e_+8`*`^8^KlJvtr-uXl4k1VdpKVed=fQFxJzLEfcIQpm9< zwCp4~;q+(P0LKkZ!@s+$&TtU|e*ESTT4t;f>11|^WLmGaIkLdr*^O6A*F6E+h2YSr zdh7Pdmf$4mNZ>S`>&a4!-LjH+@#Gq6k?q&w?Y5dh#7?NR4$AMC=MD#1H zv3E!6F~XF42<=oh7gGWs&S&~rIB}YX5j?38f9z7(oNvBr2R;`vF52JX)*rSlF{>S4 z$$C8O_tCVd{h)Nlf7q()R5JFmCOBA5ZRIsCk*Ts)lKfB#P5px&?nDt5GU77jCopE2 zRyh})S+tMS^i#CN*X~Zg)RXS7Q@G3(Y&siB^4Scdr?L^3UD(Zi(BD|WYqDeswqD>o zO=SIhy5*y4zAtiF@{2X;B$W;Vtp)0`QZEMhj z;xP#cOYeiTkfRR>+cPv+MIFv9m6%SudrmZTzn>oYVkSF8pDkhGGxCm*!$TU1n1!nDe@cLbF?-!Tp@<(HdeK6N9?;LcL;TeN7OQ`|YI=S*dgU|Xb4 zYgH4(=8?gxFL9VdH!yvwU5d3_zEJ+nLp;G$dvS|0tr&yTs)RKs`r>jGaFue>u%%lr z`qoUBw~SHRU1jj8^B@OVi3^5>Ji6X4l{>%N$s$U8SKfIPd>uXd(yno?erYa2ZcY)+ zr;2jJr-JZm2%DNZYDTP$&y)_@paZi3P4!!hWPt~JhK#JZZ#)>6merv`)i)EGoC%E7 z&{zG{y5#VgLspV<8hD6?K4A{w=)mJVBq4AQ~V+R@#)z#-STL z+Lk&+CUHv|z)W)e>6WzL4AnDo?^``=QV!RDcWjYCf6PK1wD3@GU(3 z{?>;SjQxQ}ef_79b}j;m5)M^G`Pfs*nlc5x4E2;b^*s@O>V7nKR7^jdizKDT!mBK* z?9>!k*pz?y50jko47@%c1>35P5AevHM2J^TwM?6PLkQE`1@_$LQ2$sgFvHT_*JMzx1`o@t0pCUTZ=KAL9 zu>2Dhpvyb85Y3KWhdkvgi=RuNmXEnJ_WT`!L~;v_h9H45#=^_m;re>}*>SfLOl;W`SI8YcBo~ z>3jz+w zwQxodr<5zvaJj$^1>5{dF3f)|QONp!JpAwN8nI>c+VfI50*aOhG5!WgSJEM$CEt5Mec|%8uIeZ^#@)>xks>Lzup#7eFIwR6g z9j49fv@Gd%iOI*R73 zaDZBmx{zK-MpZ$ZD4-Urc{9(5a2=bfH^9;OEK5izTQ^;m(h*tr&>7(L!xE|0y2OWN zzPJWrz%GxxT`oDbZ-{e3^UIap2CYWh*$`hvo=O=klbk%;>X%Zul;HMxvyW?IF=KSWr15OQyT`_~mZTP+j*Q z+-r3Kd>(3fV91>rTW4P#XIXG&izJ~nRxS;&L;_M`^kr4a!$BI=C42U3KbD18S{$vJ3bO%!}`OzrsaHtEm$_@c;y4mrj=Xu|PP&433JGw}z6^a3ui zRpbb(AVe2q%#%g#k}~_Ee<-w@E!9&uG_7e&Hjg`YNZwyK8buP(!p!s^S=^ovcuEck z!-5rS85GedUyB&hyuwFY^eygvuWmw2xjW`bhGE55y6A&~v;ulF%X1ov*9l&JV6~Zw zG=HwFu7H1{yw(dR_%LE6hb6Ol_XZxn;dxt+j2jwWhwF692Nfrf9EJD3Jmf5G^@XxH zlBYhO$A7n@!E@$oO{dI`v?AmeTw6h#)9nswv%GuLiVoCG79PLfYoIY!)0S5lM|>BU zTM;B47HVX?JG5t_d|-mTDp;>!h4q>wj2_AQ*IEpux_vf_JhA-R3w;av@A*y1A-s`! zsC#)-HjO$qRn->o*^jRSzat_`BF-nLN>Kvy0E3X9Bv~IZX;nOzyU?W9{_6}^sA#K0g?VOj*o78 z;-6Z8y3+U6DjeLl*3TN1>kG@>@3I+KDYTc`v1gBpi;LVc(J1O&>m$6=on#VRlnlQrBx zUE81$9VS$1=vv_<4~7LLpw%W=7@x{YIWl;l-y-)Yv&j$9%D~0uf&XlGKfDeYKt8w6 z?-Y(v0oyaS1dN~W0k_2ZQ0_~b)SdhG+336>o_j09F7cqqx&h^C#OxDW zp1sX4s}|Us*-s}^h)Kr^t{Hu!Dc}^yE5enV%^FTg0}0tM$^7lui%-*O=HY9fvrJyH zsmkj8>_p7-Ss3|=u6nMvsgfeAF$}l6%I3Ml_;l9K;yHDGw_X5{8e{o79%)+9ZG|ZT zV$1rQkUj3}!Eq4?{o-7BBMgYZhPA4ow1D^3S3u&;n@t( zrAAJE+CflBoZN5g-h^evM_xpU)Fr!gX(iV+JJ zoVqrg)fR8sWmRpBnjgzv4`0kUtJbh9jHwLU?>vDGB!0*eyjD{DFpM7GR$6tV^a71S zozqqh4(kcJ2Bgz8>t2?&-Y?hiAABdzQM5feQu{K*DoQt1nyeO8aRwhy;c(Ni4&1xC z=HsSwadvf^$$A-ilD@ZcWpX`Y!XV;Pw`=p{ZV6JZl5fMah(!nK{rb=?UTN+2O96#& zT#ad%dbuumBL5@VwB1cAB4TTHet#H_BB?aLDgFXQV`^JZ1g5<*m(OVhC!Ya3_EkwRZ zs#B$LpCQxw`ABvgm0^0!=K44vFZe4U`w{#}#q3Yeg3XJEM?o#$_Gem$W@K8C8R-AEPwm^0=J@Uh3sgY+sfQ+~F>qIwaK$N^dTU}4n6FGA| z0YZ1eS^RUNw9jx(#u6TJ;4YH+bP7JzZjRXvo|1aYYxtYHLs(n2-Ra9@A?T^OwRXAp z7d8_-V);eys;6urnQ*xv*QVq5y<$yH}aMu!m5V##D$ORt?Lp^nqeaEEm;86L_#I%}U{K02MkTW^Zt zi@C6W4Q!=jKvu*HvngE25ddGjB|V<(*@O{CoAV-gdUe}m3}|gTFV4?RmGbPAkmmq} znJo~w`)=A3XPtYc^qiaFyNEo>tNe4|HQ)0IyMyHRS0zCZG*{hn%w(b~y z93PWCul1mK{9_&`q~)Y@h4~dvC8{niFli~NJ{~F)Gbn7*o;@IK^;7UAhky_%%BW%k zRtZwu6>!A#x#h}jDQ+aPW5z-1C@_*=rgSH3TKdY7r%p`@YfI$lm!s9ikke=$tVHxT z<`Cw}GZ)Tvu2kmgZ*_Cgekgf~A-y!)N8%KX*Q8?}{ak`|^N5Y@M}RD??k#zd1@wiU z(m&f$;8hYv21Z-qkMMC2+r`eMIl;%eSN}1rx5DK>;+SU!o$(``>LIqHtRpJo35VP# z!_7$r#iV;0O|EX6ZY4>RB@|mSnxP#h?s{$g{CRQs81cD%L@_Hm%HnbV%0oxLruo!3&RxXaRy-a^kw<$$VIrtgeOH4V-$N zFWWzaGyLcF9PPu1d;*=oLvj(H6pQZ=ma>MFMb^~}PUSR?b8sH(6ArruiT&||#KV>N z|GfgJBI0DOe)osg&IHJ#GUdo|BEz;H!|N)V;HXa#hKFC>xx9&&N~T|TWO0%~K3BHr ziES`hZR_&0o%LIrALoL{OU33yz?hKq`N7@EkDSHw(HtKEOR-1}(4s%mna5)2G=4c#r zrI%L3sYL5jqq{SX!HH%(OLg{FbDp2d=sg{B9Y-g}+MKEOh21e!hJ5zerOjX6>HCZ4 z?oF#MVq4RS{9RYm?64(eqL=9HAK*ToFipmylBchBLtCn27Je3zx?J;YI-Vitik_p? zM=1xL;H=W)4Z=s{qzvG&-+k#O-G&H*V$5(i2(%F*Q=C^!Y|@L#hMjXnG54CBYH>qE zxM)Xmy1hgSoippr5$DO2JcvfmLeRC1(5z^|B8U(~BS%4q+h?02{_yE)G9LbcnxF=; z6_Md6nuO__B1h6*#2_NNXo7L(N5jhR<0qfOHwxP<@VRsUWBE&!R2IyR)l2p96xQQX zaulh>l{LNB|G8?XS>uu#_1j;;G%XC_6s?Q&=xQMd5y5vek}2ReP#NXbw^8 zw{0^U5|S&e>?Hjb6&LDDL~<5!+IZpKwg=~vqAd{HYgR=?RI`9Zy9bl4&fDvZh1)S1 z@4+Oz8ex4MqsV9ZqqL@W(#Xa%9h5p8p0?tRC&`UUE>~x?2)BAKL$~j-U3bC}myaae zxBps=gU_r*Whc;T1Gk|U)Ya4TI%8}p=de}%uMIuL$^YKaBNY~?=`$bL@6edQ+Gv$U zcwAP`K+njSO5dA&JG?(?>8ONy&|6~{cXQh*r)4yR*5v2+W5>YtF`i9d*Ksp9^b$E@ z)dOa?bcRXOJizhZ@w0N1-p&U_?6k;i`!(7zO(aq82&*e4oO#`yuP=*NvdIS6CN8SS7rkv5&Rf zEAzA4g>3WH+Fw@e5hnS02U6Y6X$vns!sF7q)Wcy$}tiW&Z=ZJ3p;I(qgMkvjX>6&Z&-E zs~i0@FSzi68<%a~(S5+gmbtWI@t6tB@}AqJs#bklLql9vGF~v&wxsw2=g-FNEy_l_ z#g+~EwtNV& z^D2dM!?6`m>RX0X)f`JFk)JBZ5y#uwxc~zam^Pf_4(DZR5A#}bJFb-eD;L6)RXNE{ z^d{wZ>IV?I$u;(RUnj09>oOXSsnQsB4w(#IC?} ziH&@P;TcaG>Y@WFec#=_ETxwAjy_6$lhksQwj_vSfjc2Ez-r%Wkz1RKSG88Ut3hGf z;i1h|WjMc>Qs3h2^{PW@TXaqP*fJE~BCV}z(Gz_#>^0mze7MZQqRdox@f$ljR4q!J zjA>f9WTVB)18k9EdX}ky<`rPCCb^{o99&vsx6Rv;`=dxD4{eO@@=5!k?DLpJgYqaD z8hgSpQnSggzqz_R0W||}rka(VZscJ- zfq`yqW4cd$rA%$6(Tcvrq%}a!{!bs6F{^;YIYr)$qsBncY)*0MoTQq(J&?l@jg9+k zeD>END{(9yKhI0+Edzm~pNT>Hm+~I5U1?vLV+SMf$u)*){p2mpy$X0>1Q4=r^Y09- z<225jK99+E1id_ARuk)sdMB;yhUBznh{j${tu8op1a7Go2=7+7<>MK?3vS|uM!S#r zXs68bdoydzkp4=M`tyEz7u+k;=UOQPR@_VFFX1DV@l6t7z&au?wAb=@i;Oy)$bV`9 z_Js*3tf_IGt2W1DPD;%kS-^H=NQ5O8(|PS>1j|1)xreI}OZt|CPP?Q;YmJUJsvKb& z%fF71ze5ft%zeE~>I$hi`cSghV(MaQo}f-~+~vVQi45cUSn)%zB0F!Oo6`Z9S-`2? z^c6UBYJaN_mGG0AX7X2WD>gu}9BF|Wj3SNu&T)g!#nW(D)m-lL&7=4+j6 zTqXPIq24kjilJSZG|CU9IZ64D=G;-|zmfXSo9iOt)GyjB{EjF-l*BP? zKC8{Aw9y`H#$s4?@KOoXtRa*wq1-3$=O5MSW~x(&WViBj3TmRYlYc60_S%>KlWXqR zsx2cKfgnCC#jxaB?!fQ%Vubp}27Wj;e?S^O-2qB^wQ2@gy|PWLCql~s8CHx) zNxQ4OO&p%{DadL=tEwXt4Y|l4YQ6etw%Tp=FfsEN+M$0|&lxr7=%uxL=Fo1ZV}G!7 zL!qBtubGJ9C_s{Fxv`qTwbM}+-OpJafsZ6u#u6lyg*e@6vytPs+NX+yExNF^w+r^S z?i4MM5V3eWr9rJt*hx+BieR3$S=mxyT=q2n=SnH1PoiCnOn<*_yg1cDgg5BeOr2Yb z-=@UJn)kzTEC!RO{Bv1Wo!1r7N2yo>$r?y6jssE$!;!6MR~@++5l81{_RkV zbDSgFZ5gvViblx#%&vw!}zS}Gzh{4DY#du!}!^(z12@hGT} zjsj|DIDxeN-0ha@;6uJ)GTMmv-IwgUog4+3&5Zp2vI(^`x9aTv+rdrk8H4P$^a$8B z&7u2c#(gd`GJ}X`r+>s0z^R<TL?t}#&d)XLkf z6sqNMTVz@tR7lQgqcT-d@5A{h%=M z-4fL6^=SqAT+;M5KesMEoS2#F>Xcd}${iL#cEKScsp!Q!(f|7ntp|2d3>m8eCd2T! z$#zQE?mlKm!yqRfXJTE!KvE~56B%k&fSHeL4s#vj-|kdBzdE&zC5+Qb@+oP=5IIG0am?`IOquZ~UP>LmX!MbaZ0Z9lxNHq3Iy%~W`GosLh6in0#h&yg zZk!+3v>4&NpGlHNi|ziTXwRy6aACk{|3k!#qN^2LJ;uuMMJ zAczMMlcg-0!D&bTsvu4qkrg*}mhwdbB6mE(HlYeBMt4uX&v8+FN>~5uaKV|H;p%Q* z%Wq%CNl|a8QL8bic`jM?Rt17FV5PWiEbjlT{K^$DcwfT3Zy4}pKYG+~MLkzdb$KD| zWw}hevTh=)%`ZAD8Wy=}nUI05;m2*&tMkx&M04YQ|Ygn|V@9YwMent;)Q zGqve%eQcV$sHGhR<*e_5emleY-Dhs}^TnN&~Wd^n?@ z;M0c5Cxq)u_LQMd|6%{oFu1kSCwiEKZHVEjrx@XOiRGsNF;6^4bacCnwpw)#MIrjQ zyW6!y0R3leW~L?`Q+;)upXf+z{7^cYwt|+a!`9=j%n&1)tU9Wi8U+5!pc4AK_n;D+ zos83)_ZLyWoQll;Hyp$>ypb;P;g_n)J_-hRu%H8uz4*}0YUgBNuu1kFs zUF{s<@mlWXDw&w#x(|GBCncPm%|nl6oSSXMWRu|XN6Yym^)ePX>~%kGazLAGZQ(j+ zY}Q<=g8idNko$uLsw;C*Q$|S+$NBlb z&#&iw|Gd}zyw7vrSgsf~$r{#@-`V(Ox`fA>9Grvk;(6urJ}NtGZ)7NB?Sr9TRLoVLSY^g6R077RhTK*PE=&Nh@Lls_Mx0 zUnUa@-)<+SZPtBVof2q-wiH^iCWfET&GD2+8DHG(c^Xj5L$|Qd=|Qny;m3eNK_!Je6GSFjbn#ZV%#GzZiWk$_-HnLL@Ef%2LgTGsPqH| z@+GIp-?qpj0D@18n+A=(vU>v1av;94^nCt~dO*>Y@z;?x^;FGD$AKs>0CVn_fm^rZ z6VXkw zX;)OXb~3*btw=kXy%t592kbHAU$uXh>%*xm->)=Eqk#F^s$^aT8RhPQTuSWA*ZFonjK9Nj z#&S^8j6~(Cg@2(JANqp|XHmUdXHQfeawT4l@ET(OFgnmf;O5uF|2+I#5>5}C{)Si{ zdeg?ambfUho|_vt(jc8T$zoFw}e|OY!*d6{M}G9AGZWo z=fDTpT|%AG)jKgTkiBX)SfyX+_zaUIY{ZzszUA}|X?fztSw!+GITedEevW7?3C+iEyIp0ze6T@R? zxyM^XV-xc8@+>Z;r#Oc`W}fnD;a9bAFNG7JVH_U~fdr$fgh*n6Mj%9ZJgV8s+<`%!3y>+;Sz z$65?~>ifyt{YX9s2|>cFTzs3;D_ba4v>e0ZkV6CV%5S&zcaeDhrE{ZP_R%lbv?JG?d8Kf za`jyS6OWcf607XW+8e_t!57WX_gIg;9%64q0qeCNI9q|!rE!JHLB9c_@8$InEk}bv^gMFb1CGMiSp{Ri3 zq9looW75)RUg|w&xI~GE)(vi-%vd<`P=-ZNi-US@Y_~?MUHC2efv@SK{AZ@PQdzQw zbs;S3=!9NPQ;Ln7zS#Iwh+g$UC!;t$bVCDwXE$htV5mSu{14EU)`d-$whIIe!wzc; zNjq%1O!((7fgGOCwszym4OZnNwO}K@rU&Fb(~dg=v;YCGV>Y(J0Px`k7{qjE* z_m*?e%>nxRD-BVMDohOv%gs8~&ZHvua825DC98q!Y6iK{jWmHfPg?&Ya0X7Z#vA?{ zIl+D?tA6~SN5`@MeSxchw;uaJ;^gnbbVZ9_kN3yL_r_&q)ZNkcUS+&1)2x77ywlp% zgW<)s6{finQ-T;jcF|Zb_F)LR!2&RRsmfFwRlMwpK1C48O4g2+lT>xfw5_rdI zm{d3tAbs&oSZ#wrk1@`&b*!K6k%`WM((&0Kthn>y#ch}(V4hPrZ!QCZD2<{r(-7RQvm*5awg1bAxCHPM6*4^Ezec6Y7 zp-wSyX1e?D&;FhWm5(wgNQ6ib5D+MGvXW{L5YQdK=WYZj;Ad^1J_7^Xx zEC*R%-Sz#KzkypBPX)W37?YKAwuYhg|LCavqjz8Y&RQ?lsQQtq~VyzN=i2qUP;g@?%H#u$K zegxKP@{IG#&W1W)eh2~NxoA!M8V=(@1E1Ev+p`d_#S#2>P6$wcq_h8La*Wy1w|gT0 zzg6};mt)sDjS&%7(54JWSfy@ z(!KW6r_cp<9Jv}H_qPh43@>q{E5xTiSWh{n7{#%3Nka+en9I$)zOM38QK%+t_*SrK zk@z4>(>81+C~1-i{rF(<6BI1^ecHViC*`)9YHvH(DAO$H9 z9A{m$Ci_E+rciskA}zwzx$2xdA-=tzxv6d9Gzq-|nNnJgc`!`!$+ zhgL@Sb1Ozc;V%bP@#w8+-ulpzU1?tlO@|o$nF=Y=m&>`ieM)yIRmbGCgXB4$G8C9u zMmh#|M%#0yzS}m&MMg>b0s|ZiZf4zqgJ0C8G!w2Z^wO@QnL+go8TIOMM-84q=}RH_ zHyQ0bHmW+B24)?x+gRl2v>&8B>FV)t=*VrgItA+SXMz&laiyKYuv*RIeEd}dC7pkZ znR&uSrcqa;J0qlUeO3Z9ikc}m56`X3g%T^3di%gM6TuUAGzSY#|r$~I8egXB?(KzdgRekiT;>ezRsbr{jdgi6%&w^p;2EpGc z*T1eAvXFD5Xoi+JTC-&;1SeBdBo|(`@iTrflyg3EBA5eHj~R8cFtbMoyP(1a^Bcvr z=~-Wk zRPCTor`)l{ck&~tApUXyzj#ScCr4+i%St_&3^JjqFNMEJz|UjI^!*KYq^mv~`!&^I z%(FznHY*ZYRZ>IzQ)_c|MWIm5u($W8=$QKGx$>;c`C(=BK8}jL$o8twaCm%4RjDb- z#16ZXtjZ{2%=Oahmkzl8a`!^6mQCQ~Z2W!`4!$#!?^ba?oP3*uC_u`whxmFpzo|U! zber^$iX_VwYQqT|3X-tBX@=WRGW3iw}I)-PSC-vM&;^!tL zyGop+=2>Q_vC}+$rtjCUjBiGuOr`c_sB}}f<~X(=mZ?SvCJ^O{Tn|mTyN$;whbmOs za4Pv#+to%%+xBCEike4acxD6@n`n9qx3t9Bef#axWM^S=!I$NrW{EMw)cAu!P2%$S zy<)rR=5blDHH0c%O4FdzM1;;PrQL6DgkZ<+!Oybg)^9w`E`cQlT)q}fE4*Jlaq|{* zwRCcm*1Me*4)p(Knj3k$8fwZa+RKNiI$L*B)8_s8`C$^x&JqOYA`+P)jb@mg&EO^@ zi%pMNyCCFQR>)$A&H~#1!&079Ik=H;%B`gK;h2c_(z2C;bTNg-{c0N)R_znr{M5Le z$-@1d7+ry6*IuT~hk7{IRzi}Qfd@v@Qw?&ZD7Q50!uW# z;TiX01#@{N&@bQN2Pz?{jBk=wZ^zu8?O!~zXu`@brsH8`8tL@Ul)|Zs%69dQs)@i7 zT|!`V_YiSa_aF7LliGC_W0WU~&a&urJPpz-gzXIEToi_>hWcuKm}R4S=`%!l$m?4m z-p$_bS5QMg=d~6r>M)++ORCmRxl)5mTT@+ma5hnX!bP<;RLj>z8W$><^ZTXl2K6E> z0@-$dNe#(j!AR^Z_q$>HO)Lhb8R(=2PUe_0e*Js?yT(6XiS{S_WCiH(w; z5dBf|W~|yC12etm|O2I7|rihUmI3 z!t`w5Vb~gvGl^8Iub&th``TF1DE$ZLr?dKj{%kIrYKUj|kdLYCd9xzM8R{X%3Af(< zb?km8L`ZKm8Jtocsb`4vU^qA|5-;Q7u4Nwg!qFtu>W@5o>1W6WySp%fO5TKG-A}42 z)dwFw>tGJldVdZ&=w|xhoIvjqL8;hQWM5OP)R;}yYb6%3f$=MtcxDxfBZnDjyRDtw zJ}pwhr57`|Mz>4v_XyI+urlYVD@B^DGHcBbJ#74s=^~4?A|EEsOpu}Dy;RFP!6f_N zKL4wv0;+fXwJkB8ay2eH1V{B#Bl?uA5}G61L|&?DZR?g62(Xz)tEvThKUMsg_>%+5 za*abmd33|JfK{X_uTdA;*tB8I?`%&zfmzyg<1gAU%cV_=&M2m#IOUbN2>pHMV<~qO zYBjv~oP4J2cumQcxC>mj*}sm^eJcyEiVG}GPh`Q`>5q;kx>cE6*3Vm}AVWp*)|z&Q zyyA5#A?HE;78BONTjag$-Fus48KhaWLMoU9yGXt0Ve9FHgVCNIY-vO*Teh4_1dMT> zIlMg_QdQeBc;Ode3ceuzvzhfD4aaUr>@5Kld3Fzsy8eaI^y;=9b}r|FNkV-NMh0Kj ztdC}Y`+PH;J|8)t{)|L$_=`0LH)QZf@>fc#Wh=SbuMV|SVkf^V%_Bed$q-{%Gya^( zU^=P9uoq>?Vk>*TOs5qq?Ow z7KLPf@Cxc~{UJOK?fF59(GCrU*4%s$c2d0P+nJ^vMh;MepN1Qs3}99lU)J?KG1z_N zauZwVYzM|LL7DS7T-R&2+5K?-?6RLpi}cjAe{lF_8`gZl$QjIT+Xx$58!*V?*He&p zS&)ASqqZy!H~7{~3-kGwL}RjKm7*2(Z7m$ao4bCV_MS+?K>BhukyE^iC=w>PKVzTg zZ&260vKxh_3^{lX3tX^G07WXHlR!lQum81d+~!k`zFpg0R9tkQ`_Y>xzl z6_1>x527KuC5@aUkMYT_6hEM1c*cG7K-+`Dv`3|r7Mfh(49}lMFK^-1<9-N~juMlO zgP+pD`Bg{BPhM4(C+SAWF~pn0>&Ne^h&K~a_lso~u6`e#dnUpY$|cA^o{ywod)G1C zl+U%~$4>8DFkA4XoedOo-oA%Oem*5hk#3-Fq<5jrb+l|c z!++I2le`x)63%{@8CZEbr$X3@#g!ceI09dmMy)VIdOI~NeQj9{-aIQ>b@Ck^jk{GYVA7XWB=J$e9jzYzWU5XbWZI3SuS^=5q+OHL_DW4C)AC+(R zoOR~7xrA}a>Wpf55vhWxBBL@TX5GsaXQ?Hwj!i>aqW|9EcZvI_)*Tybn$_&Pj0C#d z#QtGPyhp@DP6}2vkjtH`w;c-a&Y1%v2ln1u?TQ48zUPf>OcxzQ-6Ulq_xTC2eR_im_<`W2$V)qm0zZQKj6@OW6$ z6;4w%$!r9@3;YD}=Ggz_DxNe6WM`1L0>nS@Zb{V;i3 zLR4ygE?=C~$6vX@{2mwaC-?OZhYpzx^+9$yiL?=0U5ttF++**F2XE#_BKc z#xP#E;EaUqxL@{MTpGzF)RIiTMUC=mrIs?Z-?ERjPT<6stE3BQU?_U6ETcFX5qTJ@ z>BgzVedUVWty^1uGIF-Es|Ha?eJF1`k)n+KXjs<~ahroj1eNQM^?D&uVSD}iCNn&L z?@x*6!dk01OM+HHUT|ShL~16|v79;eDmQiE$j#zGql=lTgtiiQl{9Z1+AOtvtB;Yc zfs$N-6(1P^ej!~)lGDVF4D)Roo&wLfR@jitRYYq0wY1mol5sZom>01T6JbXK@z!{( z&g$clyAPq?T6LmYqba(DN8N`V?+ zmcufnP_y9|@|rn1H(HFwCtakSsaO4^;)UVsg+sX}5jnx;UoM~Bi*RKS$8JuVtNniX z8U9Ews!p48MdXM~b$O=d4`v;%b?2B$p}Mq~Tfjc(kVX{NboKtgOl|6B_gTO#I=}40 zPJ5^C>Egp+sJOgc$|8x?kb~}^6#h7MKL4j$p3+!mL)_8hc)B}9KZvaDk(kH?x_iwU z-zf;i8*#vEpLc=CXC?59tk zR8+oSE3K*Fk1dWcS_p@fis4JDlQJ+YtsamjWJ>vd#*3xn{;;N{r=_ova%BtRHc^E!iKFlx?u)?O?|@ejF>=PjPOu9Fn}Pf?(7$8Q~h1_#ci=I zssSqq(ZbcxBm-Lt+g<^uqlx5)>Pfy@#A+j>&e00ZvTl5u){JbuXR@Wu^|_ z5Cmn_mE0do=w$T;?R2GOYO#OW58~NPc7xoMrO*53l9$MfOpR2xH*gOknX?uV<2wuQ zLncbkSVmV;o1#n8QgEuK7?UcF8f1hsk%HS)5FYZ4Ar(HX>#FD~BXHKMQLa;n!qPZ; zwy}X_x&BPiGYJ+Jc+Y;05pvEV>Xtkz36Zq_6!cOkJ8UDGkT6+RCr6C!$n(JYdYWJ0Ru%dbc?J z^P0-Hl(jt_Pv|QN*Q`9c9fLN#VC2AgbG1xvnY@us@Ay&zNf?#B`mkfWXzclE^whO9 z>eS(dwcmw|%bTP4?3nDa8{Dk3{-XEEV(o{bx?^_EWZ~t_&>&rs) z>s-btvu4{9gk`=g;KoNi<5y{@zx?yiYmIABn6xhKD(jG&WK*)lAtT~adV?6bE7IA zIv!3tx%>teX6af9%odMTLP7CXXKAw6U;qC1uY_&f;-~pW=OWJEYB}@ifH;^O(Z*>& z<~=u7%C4dcF6+GhDDU7s6CHb3H7w{#f+4AhCS(Wukj6i~tf1*6>M#CD18xk6k zT6!qIdd89I(T&;is8<3qK-y+y=JwyVGhsZM#D7;03kev-dRdEK*H_Bz1Y z!ECV&V@gaVm^`cv?SoYJXMdRucHhQ3PaIeS`I0wElgU_yrOy6j1WIT*k$0F&Wmv@g z*eU~IOr>3fSykjEpp*8MSsd9{t#0c0YZu((=pB?%3KoZ!!#1tIMclI%CZyolS4s5V zBn}FFL?@bZ2<=_^cIH{bR?`}Rkx)mkX{|#k>0ije+E5=eh$nd&Qx&;V#ZPS~Q&L6$ z;_L>jE^4qk-GN`q5AyCyr>O0<^(WM}9qO38gdCiHiYHBO`pQVcJq81E$Kf@%r%zHu z$5<&@ZEI+FZJc%Zk#6g> zRUQbOVn+fP40an)XkM^6pthH5GE|Mz;2lJ$1sILg1sP%Ky8> zwk)9;GcW;aa*GrXWauL;%{5H!W<4}Cp+k|4(Qb}E@A~1x9mrWt_nJebf^}?_f%l>A zG~uvnUFC-uq;q)|2c}tTncnvcTFv^z#C~~7b5C1o;<$oe>u1@pN)5%;Dd6JAI>Gzx}0bN0A_ZlJWjz`xslTMDv-KGMMs$-Nk?ZPSC=tU9v68RKlv#&IQRX zQ&YaYIASkyFuS)6(TW!Yx2w%3BWl?f8|{oo{UMBNZ~ov%wNyB1b|yhDffr4`;IwD} zcn&?AKQOT9IHebp#_~IY(rNnTvhN?Fll{*>#S1(BcPycP#HMJTYiLw+_J0O6KwINT zHF<2Fv~SPYT_K2E`h5LkEBxOZZICYODlJ{S;Ft7tX*7A+3G}R;8S&UIDg#P&TT{Mh zOFf%%BTd-UEE#K!XnYX=6=g^-9~@lp_U&=^v^K@_ir$mrjd}crf*LNR)Z^Pp<6YRx zXB$f1Jwp66!fM$BY++rrN^3*zJFtz_)kSsWEFX@gh#E!y+!*F3XfqPZjQ(G@e%cd@XNmN< z8z-79zkgcOotu)v?f>=?ACI0$?0qbK!iD~|2>yem)nEkG?(b`L7*NxTtol?&fP4Anr4WhVfm-+@hfB$Y->d45*m0FYj-eCCdrxV7dV1OUE25k;T@sY|C zNz4B1u#Dii7$9ONr5D;MZ2IPZBF5*9?SEE0=b6JT?wSffK%I5HOd;@d*6~hBi2!LaJshE7O~^^&R5J z1YIA(4i6$F%Wa;L?Bw0FLJ_oJV;3*GXW1O=^AH9E$Z3!vgbGWiPmojk$2~nFJ{3b#r1eu>UWktHrnT%d8}E zqeRz+mdYcd$6H_b({6eyes-;9mZa+SPWIaM3*{z>PQtl|1K#*R{^Ds?R#sfrm6`D3;=JC-6H((?+T@=0g|J`JQnjRsYi@xpK@X|JicoC6X;=9r4_H#Mci z?Cp)-Ed*G@XKD@`y;iadVzYXq8W~U+axcc9)I>sxTUp~P!qmfAPrUFQrYD&?`9VjK zv$4-C=5Zgn{#qz<5mX#@S>`-7(3x}ws`3ruGkjmH+K6$KE|~>K25y9q)nqnfO(&)S z9aD8rTuJ=c%BRa7A)1a=-F6I&@sbXXH61PqJ9Y1xCErw=%*<4{ri3jHd@33@mkecF zl>E*KPVovoZ_wW5Mds1j!Ojk*b=cFQF`JJt1i}%S-`~LY)j3sx9MlQ4QSY$lv+eD` ze{H(0fyj*B2=r$%hRR9(8k}d&CtdU3A6K$NR5lZ+{y20&kuB=V&G?-oL8>pZ&{xk= z5?cL5Lypv?tR7o!@$)s(w`L=18a<8WG~=z>;o7U2usIwW2&>Js)s1m5C8J3li&gB_ zRh_jqMw9~YVj<#pH)4N_Ts)X-7#tJlC&B!lJA!7c{HZh{Hul2pPemBROWyknE$I-~ z=f8hiHj^#8-ru}c9C6pBA=TopMIL>+y1TneOKAzM^!fTMc1Dv=Xz`l9!MF_X{-#MJ zAslgcH$k9;KK5*Sq%Wommup^_C*}2G1|7z&<;C=(qJCveOT}FzXD4!##9JUI1 zP_%V}R`Q7=I5DdFge)zxFV-InL1knTCg629ucdcpW&ORU8)${|v3>lJj?vG`P#I1~ zUlyO%f=^)YCuwV1kuI2->(mf3#%UTOl^B$4J8+F=gn!bcC-U2SO-g4KA+GSZgoPA$ z`1y7}8ZMh6=O$tZm|?kq5_bDTxU7Cp z27Nd$(aJ}-|qe2@)zwwX{B3?rnDc_rUPboFGvM$-`c=>1e!U9k@Y*U4 zgX6SGa)1MuM9z?D9o=)rPW>2*MEVG9F6ywUT?ELRNroP8nX;irYKQ{r+kRmb%QZU| zhDjzlVeT&PrjOY%1d3^U|2Xh)C^FmpYRaid7*1{aFXrs&Bk+v>!gyR2gXF!)m>8)8 z0vs`R^%H`VFBt?&Xpp{TXUzAU_PcTrGzjs7PKWuz4 z+>FPY!~X8>_qUEgKR94#JY!i_R8*ARZ0krY6qVFL^AZBk9r2%=nc)Fb-vLxL+s{}u zh*bRWwv!WEbJ9x~Zr<;?(9qB|?I#Q&{6-oKINT~ALp@zxF(Dl?S9kZ8TdA-`#6N#* z+3+_!4|8}oJgDZ}vHBD#(RC%OB|k2s;N#8hZSfqZMevL@S4dr)ZdHkwj!Ff>*NQt;nj{+x zi6ovPsK!tRMn*8p`~9lp+|xXSz6Wk1?0DItkGr0iKlRKX*NZ2BW`oNxT9J&GgEfkDHbWK5*jXev8JOHZ(M}9^#ziXcR%Z z9`;(;7$J6A-rO|O(?c$~&M!ZLLy_-SWM0gyQ|tx9ekgk*$}a{;s8ksk9Xzx2?oQC5 z=%Dc=*1zK(<9u5O2X1KuOCr8cT;w|P#>W2oxSvK9UDU_!vg!Lk;j&<7XV-vW zJsh@~RghVervC*oZLH~sIwt`q$dqjs;eXy7dcL+Mz|7RZPleY5mkrjxJ z?Jy#yd(OFi>vo8~?>~R8bKLdj%P}+U($J@XcuguwL;@T?B#oew2$&zMnr#C$?Y$KU zkISSDVdScO?~bqw68rtsk>PoBK;h!lQ$JmFN4YVFAnq|REnYOoX&8(iOn~v92N?J= zh@-V;8}`)F(2#^Vou6Cv4UGdI6!i+aYni?4K07|H!#~OY2p6*yywz&qj1*6=F2YOZ zqZhB_*!6gjFG3NJmbTcBCi*fhfwm1xoQ!71gddT;5+Fs9b*Od{>hzxAJ%$2f1dpwD4*!2M4%~U)J>+2VB@6+s!O4TKOiQ z_=}gDeGq6&Jv)G$RSWQ^h)%jrn-vz!UMdMM&yiXl931reOKvf%c0y1% zLPA0!6H6TUnr7t3|6LF)+<&?^j>n!X`u2BsAOcGxn#fQ&SIEW}+uqFI-(TJwA~!d8 zIN|9098SHhq~zcmnIHaFgb)pLb8~(Dwc1^d_r8od!b3*0Z#_IN59{tlf!qk?jVNM! zhsgxCh&Y!OU@kpkYt(PSZ0Q-_{%F>pe(*Kws*yrPyW79|jfe}ETXLM*%E4;z)eS7f07$w?S#PzN3n5fKK^9b!%J zopL+!e}bMcwm*>h#cDQ1#PHWF!-piZenE!9SiH%Y-sv4>9Ms!v>gMAI6gn{EbfjQ$ zH(09C`FWfP`+Vu~v9X3*c^FN0$Bj;SQje__J77dZ%A&7dkERQN>R!M8EFmtAgoG59 z`v_e7`EotxBw`LoxoeOzt*cbm= zZlNwF5jVE7?)8&YBpeedKgIv;(dx8li&(FO(CMKe=&NP zl`u|Lq%T(KJxt!fb;zN_vy585GB z;@+}s?IV<*N0#8!*w z%{b>p*E7oF4-nPdu35Sir|#sb2IMnIf7PV$2wT>!G9R>BsT zm*PEC>%j5Uh|EawlX-qm^xRcA8ZV}G_{9wtYq#c5n+46yxMwV5qXKI;i0Meja{b?*H>VrL@b$zRA`>U`3%VZ< zh!kE?W^krkHQrG~MMdpSD=RCbDlP)SzRcucHJ1%l4{vX(L%^0ep0l>%}uoG1}U-kzq@e@GBs@ngbIhi zppk}_oka#g&OQhO+XFX^i6jkKb_kSH`8Ow^Cti} z-_Xdy$^dnnRka`HdRy9yy4I$m0a*O_000#n zC#gwTXy$W<+ElFxyG}tx7&a^_yT)a{N7Pwwpv3HP(*DI&5*7UfzndWW0dYZvcehyz5`FjubpxDL0YN_I#i3!GDLnxWVSR z2#QR&tUC33VMGpM>4?y4>ehP_DIw#h8WNJ$osrYWqrkB2b^hJ}6x2MKs}d*i<@+3G z=g#seTWka;y`}Z^zgg^ly(hYJbamxMJd>oxettx}4%v0H*4eys z*Xv4_#{FLR0%c+3>NoICjiG^ToJggrb9Sv;Q$n+v=keum1_MYA$9Gv{Xk`p!U} zUEgJb+n8TQMh1;Dhm(8T&cfmY&Muq_;RckhXS&YMk9i`#e=oNa6ESTg_q{KE^3u~I z{z8(57RmuIWAd7{5x-zP+!7+*5)e{E)4%47yCx?;o)$G&PSi7%_-+SZ6$she**)7r zjP;@9OZJ`u%-Q~UkOdY~uJ`(PmKy+^TYyK)=TE@j@?G1_M=<|>Lg4)Fb2}pwFI>Pc zQ#7NdrdC_vvY~xu#n6pLIF9s~lj%cZ2(J_Xv@N(M3(_eLaBy&>V%k3-Kv5GeXk)?r z{mhX88dyHe^GCIT&ir7^(?8J-kY3dojcwl|l}xOPB}B45c``tPZ`-9l4%XHl+o5>* zTp^#!cEOjuL>QKHJuZ;&V~JL!b=D*#P5)#$4Qed#;&EM6HJogFiMUX%2<&fK-l{+AZd%yZc zc3F+X_(=$WA--fciU8}d%%%E|-)W<=d3|#* z0f@~0ID5(f^l5i^e5rN?2p%U2MF5v&-X5~dA_njM4uPk@z~E1*E~h|Y};69nu@qSQhc z`0NZIS|{qD271c_?Ajn+JFg=Nhv2I+r7;!L+{|N3J2ySu`EB}zxn&JX)GE2;FTlM< zy1GvQb)jXlq4sfHU0ngc5_PZ@K#s3{zsY+~PDugNgx+r~RO$6XN&#pu3588RcL{Cn zr{}(rKYKiVQZmt8i;+j>o$BJ)|aSVq`Tgp?8^GKw#5kpIMDmR2%J|cjHTK`7x(w~x~Qt_Wnu!G z_HcrH>FnFnkp%Wc2s`Sl=-TwGtiN8_X&}oQ{*hKNJX%l}_<+Be)aSAnpz#5(a2&qS zn(j9NSu5L7WDfyjif`Y(N!*aEJaxGJ32Kq38?LfCXQyq5;HJZ2PVJ^=c9$j3(XML-vhMU0I-`RoU#{G~`u<>PM@LoEEklSM%#ElOTK&VTOuCl?&4NstP z2uPPNuC90FMg;nG`(tUl=Wmm-y~e{MBaeU*G!~?$-fKI|?T=bj;xI5Uz`aw95p01N zdI!o?vixv+_d7o5i}@hP2sAzhXzti2_suTf_rJeH(Jd(q@);sCvPBxKq=N>0QNG=&)eUFQF#A6p~uw{;yxgx2nYx?Si{yn5{Xb%OZ_6TMxys z%z`1rk~jy#y`TEoW5T9XCe z(;#AIztb8?@G`cxrf>V)^?cp{dh1t&+4}YmI|0I)8~wiJ7+CHDz*|iHCN-U9#ru$v zr5L;z0w$AHNQTFcLz}R}CbM6$`T68r^kVgph<}YZQ-_!b&z2kLBS1Yoed&Q~kXJj( zB9D8+2~?>LM5*F`frk);x$3+b=vsdc-e`Y5??_|P z`LY|s8+%N7d5>r40Xg0<#?lc@j!;WvLfabQL|-d(<@7xQuJ7r?hYxc+dui((?#lXN zB}GNS6=o2pA4ldCG3Jmwd$`UWoGAkCP~CR@-)`~%TwHEHYw{RJuZMT%UjmWt3r+kB zpL?D>0b^+V90*Uk1oV88$CJVdkjxd)Cz4-5svM{EBw%l`)Zzo9U$c2rPQ)7Q-G6tY zj6Ky>m4&VbisD2f*>+>}S>Vn7F4dV0>njHz)>+R`@?;5@M2QXNB_-Ve9;CNfn`v@* zI6#3!*bBQF#Ll{es4Cmaq)!~DlB<$Gcntut`YH&nsIl>D=g@(=Oa7ZXMAaudeweA` zlUPs>oZmpdI)L!n+Oo{?Hjq%a5fKqv1OE5RR(E%Im$n3DU)Nn110A~lG_N|e?c=UJ zx~@PdmAt(8#9O1QEj52$)sE61mxMk@P%CdNvpO}wU(|PrkrLj8`vV%lz~LOI0-UL` zD_hWS7|;R1(v|a0K;l!5`$ixfV(ZwjkmG(|C^C2^_g9&T3dBF#rah)*=xG5Q-jS6J zzf%og?7kjl%pXh8>F?z<00e$4jv{(|0^kpA#s)YPX|M>H4~1hysS^QY$V?oLiHTWo zg%h%iN&uO_5R2iX#4lc7UzZg$;&%T031*Z)x10{JOM?K*c#7|oo4t|)75Z7nGoYA<$manWnC#n}tpK8y~Q zfnd@4Nua>%9F839&;_W9?FeJWUe7>nB`+@l?ezF8fN0>GVf*-awsyc`w)9c-rqb~~Af+a0y!Ip_ z+Vp=H#=iRe`7;X(OL=+u%*+f`7cA7oC0%7jg&2$&H=6D?P^p8+8L@&+-daDj!Ab@} z<7i&b_ka4c(HI^9z9!Rz4}i8^_eRsl8kL1hiT1w8fmaFF)X+Fvs)N?8NX?12z-88j zi5UXIPvV$Rpc4ftEiWa~rzYLDQ@2{V@vS=t;cr=inj`B?OaVI7IZZnsH?(P@j&SS8$D!U|tz% z>Atkyc2A#2pnAYb<@2^Dn<-ab#kgVOE; zNE$)?KU&H?WFa!{XFtDZve&){Q9<+q|8N#!VyOZ0)en2Bp=pX;_ix%@k_Uw z77bV1T^aY}huu{QceuH;QOoqeT;}IYg6tQh0FTJZxI1q(Xmz`|3Ln;^beFdhR7S zXV^pP>MuAuA%7L{B~Bx3&PXhP+#)w=MFWB;K;svG;T^!;icnX7Q`HAty|GZR2wWSe zWw4&C>!tC6P%xI@Gaax;oK~x>`dfjzS*$id{-ep2-~;$?wenjaKP(Enp}fiWlNXSX z7&gf}zMSukE-Wgd0&J*wkg;uYax!QWZS=r5xNky$)vSaV;X!qXb9#B%W*Lo{(iWQ) z!5Ti>2;s!*^xPA7Qi4ZOltz=i-%96GR1@4azfd#)n}~&}$?TlaD3<743s=s_W?w=n ztWp8x35}N_g9qLxK}To1uPI*nv+D{&#NE-u-f)hS3qZui(LC{&+-X4-y zx1Utlh)NKbp=6;{AYX(+G57TKiQDm$;^L;}=89y zwG?b@=sB#MD(vbc$N4{DQo~$j1k9Uq^*ucP0vV#hXNkU^NKbUU!gTPd*w#LvN$bu6 zSN1cka@zntoyML4#QSf8Xe$NrP+H_r23aeoX5wDgp-4}ld7x2rSy3#=kE&Qw5Pt%{&wY z0iU2v26nGfS&ba%)0l;GKIXmssfr$sxp?O~3PSsi{px+pMP?_c&2C2&Y2>kb7*R@! zlYQtzj{bXOe7qQLTQz{;d+Ie9wMWay7uJ=tbutwjSx$oqw?D0sARv=#vK;l6d7ib) z*5_~ew^ssA9d;_0E7&?P-8`5J4+rNJuw2AmvAXkfm-m%5-O#R~f#>`FtFLIH*JAO9 z``YY+1SA?mft~6cpgDQ=q?4!h!8=H~Q}HEj_N)x~Qm|h4b7-2# z?B)#w2bym!mmQFc^Ffn=JWqo043}0%Zjsw>cqA11(=Ix{iYsBiJa3rXelaj00jAqV z*xFL)e#uM)W2Mt|rDV})skJ4;Z|bKtC;$afRUCMos=x_I5wZR#1bzd^*C9g@uKf{^ z$d{*yNlAwjS?(JV+b@21OAvB~omYbo^L}wfBjB3F;51MulO)a$UsG$H32tcd<@TMB ztTrI9VM{R)q@^vbs2J5p>hORS70SB`p82wT-~Nz=((vx5Lo+n>-z-2lQ}t-IvZd?t zW7MLj=+DedLZ>w5_n=WoyT?B7$2h9F$Y>yNS7H2@*T}??!pe012JP|55}BBosN3;N zG<80N;%x}^=DxG_p~I-EsKn>yz5yCQ_-X(P-G_)FbDj*R`!bK!#;;}FlXiLIa{u|= z=9tT2y?*NgVOL|#7*3G|y*$tNo&ft;rB3Uz2s3tvvX8DmfByWJ z&?avseJT}SCFI(SB@tv`U;sKDFs?7itewV=p4c7P7d50voCF!H{r;*IuCBZ8Mkmj5GaL^%0;jFLD8bUCI)u5NE7W8tw;!IrsRC-ii}8-CB9 zJz%3485xnemJ6k#0LCco!=}}A?J)8=&cT8Use?!%r>1tw1ak%3)jDo=fhA;?+-Zcp zs{$t;*m0sx+7A~#zx}8N%{F}|6c7{OI9hGSl8G|Q@ndERKA6#t;`$+UO&y1tCK^K zbMTFF~y5=%~$&F@D99Ro*+9GMS#mS zf{sz$IxPMNWp5Q$SJW*F;uhR3xLa^{cX!u~yIX=oaCe8`?hqtsaEIXT?j&e0&bfcz zKHdG${mKL1+H1`@q^ia!WGM4kYGr|qd=|FM)bU6xdcl_~F`F6gh)J>fPa=?~7)=w7 z-OKWT;HN zfL>p@SlEl2iV6he3NwcsL%8CH0jcxxXDudpWw z;+Bng5t8|MTwTNLgHz)G;a;*Q-W+z{MUBM za@Pk_s0R#c1?j+nz8;LTLV4k%ExTw3(NK|EX!~Gqe0zU|E3&V3{P+C;YtK@{n}drh zm_S@78tB0dOijt8^Ada+n1d5@QK;bT4FvE7YP%lrr8S0=01{e_0~1j;=JojzI0~;@ zy}*Nd47r zWyn;fCYUfnZ#se^M+8)(4lcS>1}s?}i9(hY6}fRJrkrX%lI|y%?x?01o*UlOnaA-J zVXZ>X+beupAx`6=TO&!-y--0B{H$>+fgRp&FaL_VSJDqT&ySBsrl!J?;&s&cwD85L z0ov9RfD#;*>I#5#4Rk(rbxv-MImvhizwg=dXW-&+&-Q>Kdfu2D<44Kdu`+9uQ`q_V2Z007FbQ@H{h92`I&BB`OV03b^FF}!FPyNIR- z6P^4p!eqhKz#%}LP^JRv`8hGg8P1+p73$Z6ZvuP4X$aXhAG|`;MA?E39D0yj7+C~9 zD;yTo-wBc&(hcsKq8_L2rU`TUgH*193Nm>Otccz~_uo%GzU47`4(-sj6xR5#jfZS* zw-_j}85D?1h^X(c06HbY9C)PDWHlq6)eUrc!GFriXkc{;39Hr

vuYmBQYG8n55i3p> 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%0Ay^c1D&m}-W9Xzk5hJ4*>#X&s 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 resolveRoot + └─> scopedPath + └─> stringValue ``` -### Flow 2: runPipeline +### Flow 2: root ``` -runPipeline [src.pipeline.run] +root [src.services.actions] + └─> scopedPath + └─> stringValue ``` -### Flow 3: compareWorkspaceIntent +### Flow 3: main ``` -compareWorkspaceIntent [src.comparison.workspace] - └─> git - └─> execFileAsync +main [sdk.python.examples.basic] ``` -### Flow 4: analyzeCommunication +### Flow 4: runPipeline ``` -analyzeCommunication [src.communication.analyzer] +runPipeline [src.pipeline.run] ``` -### Flow 5: parseCommand +### Flow 5: diffUiHtml ``` -parseCommand [src.interfaces.a2a-message] +diffUiHtml [src.web.diff-ui] ``` -### Flow 6: assertOperationPlan +### Flow 6: compareWorkspaceIntent ``` -assertOperationPlan [src.operations.validation] - └─> objectValue - └─> exactKeys +compareWorkspaceIntent [src.comparison.workspace] + └─> git + └─> execFileAsync ``` -### Flow 7: temporaryParent +### Flow 7: applyCodeChangeSourcePatch ``` -temporaryParent [src.comparison.workspace] - └─> git - └─> execFileAsync +applyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation] + └─> assertCodeChangeSourcePatch ``` -### Flow 8: baseWorktree +### Flow 8: analyzeCommunication ``` -baseWorktree [src.comparison.workspace] - └─> git - └─> execFileAsync +analyzeCommunication [src.communication.analyzer] ``` -### Flow 9: extractTodo +### Flow 9: proposeCodeChangePlans ``` -extractTodo [src.extractors.todo] +proposeCodeChangePlans [src.synthesis.code-change-plan.implementation] ``` -### Flow 10: makefile +### Flow 10: parseCommand ``` -makefile [scripts.verify-env-contract] +parseCommand [src.interfaces.a2a-message] ``` ## Key Classes @@ -286,10 +286,6 @@ makefile [scripts.verify-env-contract] - **Methods**: 44 - **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base -### src.semantic.reranker-llm.SemanticRerankerRequiredError -- **Methods**: 43 -- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response - ### src.llm.structured-schema.StructuredResponseError - **Methods**: 37 - **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number @@ -310,6 +306,10 @@ Example: - **Methods**: 29 - **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results +### src.semantic.reranker-llm.SemanticRerankerRequiredError +- **Methods**: 29 +- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response + ### src.extractors.nl-llm-helpers.NlAttemptError - **Methods**: 28 - **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit @@ -448,19 +448,25 @@ Key functions that process and transform data: Functions exposed as public API (no underscore prefix): +- `src.services.actions.executeAction` - 65 calls +- `src.services.actions.root` - 64 calls - `sdk.python.examples.basic.main` - 62 calls - `src.pipeline.run.runPipeline` - 56 calls - `scripts.research.rank-intent-graph-embeddings.main` - 43 calls +- `src.web.diff-ui.diffUiHtml` - 42 calls - `src.comparison.workspace.compareWorkspaceIntent` - 40 calls -- `src.semantic.reranker.result.assertSemanticRerankResult` - 37 calls - `sdk.rust.src.client.parse_http_response` - 37 calls -- `src.web.diff-ui.diffUiScriptMarkup` - 36 calls +- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls - `src.communication.analyzer.analyzeCommunication` - 35 calls +- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls - `src.interfaces.a2a-message.parseCommand` - 33 calls - `sdk.rust.examples.basic.run` - 33 calls +- `src.core.text.inferObject` - 31 calls - `scripts.research.evaluate-embedding-pairs.main` - 30 calls +- `src.core.text.normalized` - 29 calls - `src.interfaces.intake_cli.main` - 29 calls - `src.operations.validation.assertOperationPlan` - 28 calls +- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls - `src.comparison.workspace.temporaryParent` - 25 calls - `src.comparison.workspace.baseWorktree` - 25 calls - `sdk.go.examples.basic.main.run` - 25 calls @@ -473,6 +479,7 @@ Functions exposed as public API (no underscore prefix): - `scripts.live-model-comparison.main` - 22 calls - `rust-ast.src.main.main` - 21 calls - `src.extractors.git.extractRepositoryGitIntent` - 21 calls +- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls - `python.ast_extract.iter_python_files` - 21 calls - `sdk.typescript.examples.basic.baseUrl` - 21 calls - `sdk.typescript.examples.basic.token` - 21 calls @@ -481,13 +488,6 @@ Functions exposed as public API (no underscore prefix): - `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls - `rust-ast.src.main.collect_files` - 20 calls - `src.extractors.nl.extractNlIntent` - 20 calls -- `src.extractors.ast.extractAstIntent` - 20 calls -- `src.extractors.todo.body` - 20 calls -- `src.extractors.todo.relative` - 20 calls -- `src.extractors.todo.lines` - 20 calls -- `src.synthesis.todo-patch.createTodoPatch` - 20 calls -- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls -- `src.llm.openrouter.OpenRouterClient.request` - 20 calls ## System Interactions @@ -495,6 +495,16 @@ How components interact: ```mermaid graph TD + executeAction --> resolveRoot + executeAction --> scopedPath + executeAction --> extractNlIntentAudit + executeAction --> nlModeValue + executeAction --> extractGitIntent + root --> scopedPath + root --> extractNlIntentAudit + root --> nlModeValue + root --> extractGitIntent + root --> numberValue main --> get main --> T2CClient main --> print @@ -507,24 +517,14 @@ graph TD main --> read_bytes main --> loads main --> sorted + diffUiHtml --> gradient + diffUiHtml --> min + diffUiHtml --> clamp + diffUiHtml --> not + diffUiHtml --> media compareWorkspaceInte --> resolve compareWorkspaceInte --> git compareWorkspaceInte --> trim - compareWorkspaceInte --> relative - compareWorkspaceInte --> startsWith - analyzeCommunication --> assertIntentGraph - analyzeCommunication --> filter - analyzeCommunication --> validateSyntheses - analyzeCommunication --> evidenceNeighbors - analyzeCommunication --> participantOf - parseCommand --> find - parseCommand --> from - parseCommand --> decodeIntakeEnvelope - parseCommand --> isRecord - parseCommand --> commandFromData - main --> list - main --> monotonic - main --> SentenceTransformer ``` ## Reverse Engineering Guidelines diff --git a/project/evolution.toon.yaml b/project/evolution.toon.yaml index fb6fd17..a424d60 100644 --- a/project/evolution.toon.yaml +++ b/project/evolution.toon.yaml @@ -1,58 +1,58 @@ -# code2llm/evolution | 3591 func | 137f | 2026-08-04 +# code2llm/evolution | 3374 func | 137f | 2026-08-04 # generated in 0.01s NEXT[10] (ranked by impact): - [1] !! SPLIT src/synthesis/code-change-plan/implementation-helpers.ts - WHY: 2239L, 25 classes, max CC=13 - EFFORT: ~4h IMPACT: 29107 + [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts + WHY: 1310L, 10 classes, max CC=47 + EFFORT: ~4h IMPACT: 61570 [2] !! SPLIT src/cli.ts WHY: 935L, 1 classes, max CC=13 EFFORT: ~4h IMPACT: 12155 - [3] !! SPLIT-FUNC runPipeline CC=56 fan=56 + [3] !! SPLIT-FUNC executeAction CC=83 fan=65 + WHY: CC=83 exceeds 15 + EFFORT: ~1h IMPACT: 5395 + + [4] !! SPLIT-FUNC root CC=83 fan=64 + WHY: CC=83 exceeds 15 + EFFORT: ~1h IMPACT: 5312 + + [5] !! SPLIT-FUNC runPipeline CC=56 fan=56 WHY: CC=56 exceeds 15 EFFORT: ~1h IMPACT: 3136 - [4] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28 + [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28 WHY: CC=84 exceeds 15 EFFORT: ~1h IMPACT: 2352 - [5] !! SPLIT-FUNC parseCommand CC=63 fan=33 + [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42 + WHY: CC=52 exceeds 15 + EFFORT: ~1h IMPACT: 2184 + + [8] !! SPLIT-FUNC parseCommand CC=63 fan=33 WHY: CC=63 exceeds 15 EFFORT: ~1h IMPACT: 2079 - [6] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 + [9] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 WHY: CC=48 exceeds 15 EFFORT: ~1h IMPACT: 1680 - [7] !! SPLIT-FUNC diffUiScriptMarkup CC=46 fan=36 - WHY: CC=46 exceeds 15 - EFFORT: ~1h IMPACT: 1656 - - [8] !! SPLIT-FUNC assertSemanticRerankResult CC=29 fan=37 - WHY: CC=29 exceeds 15 - EFFORT: ~1h IMPACT: 1073 - - [9] !! SPLIT-FUNC parseFile CC=38 fan=19 - WHY: CC=38 exceeds 15 - EFFORT: ~1h IMPACT: 722 - - [10] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37 - WHY: CC=18 exceeds 15 - EFFORT: ~1h IMPACT: 666 + [10] !! SPLIT-FUNC applyCodeChangeSourcePatch CC=41 fan=35 + WHY: CC=41 exceeds 15 + EFFORT: ~1h IMPACT: 1435 RISKS[3]: ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths - ⚠ Splitting src/synthesis/code-change-plan/implementation-helpers.ts may break 270 import paths + ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths ⚠ Splitting src/cli.ts may break 124 import paths METRICS-TARGET: - CC̄: 3.3 → ≤2.3 + CC̄: 3.7 → ≤2.6 max-CC: 84 → ≤20 god-modules: 13 → 0 - high-CC(≥15): 53 → ≤26 + high-CC(≥15): 79 → ≤39 hub-types: 0 → ≤0 PATTERNS (language parser shared logic): @@ -80,4 +80,4 @@ PATTERNS (language parser shared logic): - Standardized FunctionInfo/ClassInfo models HISTORY: - prev CC̄=3.7 → now CC̄=3.3 + prev CC̄=3.7 → now CC̄=3.7 diff --git a/project/flow.mmd b/project/flow.mmd index d336658..1f1894b 100644 --- a/project/flow.mmd +++ b/project/flow.mmd @@ -39,7 +39,7 @@ flowchart TD rust_ast__src__main__visit_item_static["visit_item_static"] rust_ast__src__main__visit_item_fn["visit_item_fn"] rust_ast__src__main__visit_item_impl["visit_item_impl"] - ...["+2419 more"] + ...["+2378 more"] end subgraph Exporters diff --git a/project/flow.png b/project/flow.png index 72776ee7372ea775657f239c5356d042b2f54c20..cfe954a0877de7cade2053824c4b3e45d6f729b5 100644 GIT binary patch literal 14246 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 _(p8yy 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 diff --git a/project/index.html b/project/index.html index aa4b4f3..9b4ad60 100644 --- a/project/index.html +++ b/project/index.html @@ -481,7 +481,7 @@

Analysis Results

// Initialize mermaid mermaid.initialize({ startOnLoad: false, theme: 'dark' }); - const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "93.1KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.3KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3900 \n**Total Classes**: 390 \n**Modules**: 252 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "34.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 144, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3900\n- **Total Classes**: 390\n- **Modules**: 252\n- **Entry Points**: 2662\n\n## Architecture by Module\n\n### src.synthesis.code-change-plan.implementation-helpers\n- **Functions**: 308\n- **Classes**: 25\n- **File**: `implementation-helpers.ts`\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.services.actions\n- **Functions**: 145\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.graph.linker\n- **Functions**: 85\n- **Classes**: 4\n- **File**: `linker.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.core.text\n- **Functions**: 66\n- **File**: `text.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation-helpers.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.python.todo2code.runtime.TypeScriptRuntime.reality\n- **Calls**: tempfile.TemporaryDirectory, self.invoke, Path, Path, Path, str, str, str\n\n### src.extractors.nl.extractNlIntent\n- **Calls**: src.extractors.nl.assertNlExtractionOptions, src.extractors.nl.resolve, src.extractors.nl.readText, src.extractors.nl.isAbsolute, src.extractors.nl.relativePosix, src.extractors.nl.replace, src.extractors.nl.splitIntentLines, src.extractors.nl.classifyAction\n\n### src.extractors.ast.extractAstIntent\n- **Calls**: src.extractors.ast.resolve, src.extractors.ast.ContentCache, src.extractors.ast.loadIgnoreMatcher, src.extractors.ast.walkFiles, src.extractors.ast.readText, src.extractors.ast.relativePosix, src.extractors.ast.getOrCompute, src.extractors.ast.sha256\n\n### src.extractors.todo.body\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.relative\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.lines\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.synthesis.todo-patch.applyTodoPatch\n- **Calls**: src.synthesis.todo-patch.all, src.synthesis.todo-patch.readText, src.synthesis.todo-patch.assertTodoPatchArtifact, src.synthesis.todo-patch.sha256, src.synthesis.todo-patch.Error, src.synthesis.todo-patch.assertApproval, src.synthesis.todo-patch.ensureDir, src.synthesis.todo-patch.dirname\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 2: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 3: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 4: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 5: parseCommand\n```\nparseCommand [src.interfaces.a2a-message]\n```\n\n### Flow 6: assertOperationPlan\n```\nassertOperationPlan [src.operations.validation]\n └─> objectValue\n └─> exactKeys\n```\n\n### Flow 7: temporaryParent\n```\ntemporaryParent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 8: baseWorktree\n```\nbaseWorktree [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 9: extractTodo\n```\nextractTodo [src.extractors.todo]\n```\n\n### Flow 10: makefile\n```\nmakefile [scripts.verify-env-contract]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 43\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 28\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `src.semantic.reranker.result.assertSemanticRerankResult` - 37 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.web.diff-ui.diffUiScriptMarkup` - 36 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n- `src.extractors.ast.extractAstIntent` - 20 calls\n- `src.extractors.todo.body` - 20 calls\n- `src.extractors.todo.relative` - 20 calls\n- `src.extractors.todo.lines` - 20 calls\n- `src.synthesis.todo-patch.createTodoPatch` - 20 calls\n- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls\n- `src.llm.openrouter.OpenRouterClient.request` - 20 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n compareWorkspaceInte --> relative\n compareWorkspaceInte --> startsWith\n analyzeCommunication --> assertIntentGraph\n analyzeCommunication --> filter\n analyzeCommunication --> validateSyntheses\n analyzeCommunication --> evidenceNeighbors\n analyzeCommunication --> participantOf\n parseCommand --> find\n parseCommand --> from\n parseCommand --> decodeIntakeEnvelope\n parseCommand --> isRecord\n parseCommand --> commandFromData\n main --> list\n main --> monotonic\n main --> SentenceTransformer\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "70.7KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__validation__record["record"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__server__offset["offset"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__server__event["event"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__limit["limit"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__validation__agent["agent"]\n examples__backend__src__server__store["store"]\n examples__backend__src__server__server["server"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__app__createState["createState"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__refresh["refresh"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n end\n subgraph src__cli\n src__cli__taskFile["taskFile"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__invokedPath["invokedPath"]\n src__cli__emitJson["emitJson"]\n src__cli__optionNumber["optionNumber"]\n src__cli__doctor["doctor"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__command["command"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__printHelp["printHelp"]\n src__cli__diff["diff"]\n src__cli__optionString["optionString"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__handler["handler"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__stop["stop"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__pipeline["pipeline"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__parsed["parsed"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__result["result"]\n src__cli__optionNullableString["optionNullableString"]\n src__cli__absolute["absolute"]\n src__cli__handleIntake["handleIntake"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__context["context"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__view["view"]\n src__cli__handleExtract["handleExtract"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__file["file"]\n src__cli__stamp["stamp"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__optionNlMode["optionNlMode"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__handleReality["handleReality"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__svg["svg"]\n src__cli__main["main"]\n src__cli__optionList["optionList"]\n src__cli__diagnostics["diagnostics"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__root["root"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__controller["controller"]\n src__cli__initProject["initProject"]\n src__cli__handleDiff["handleDiff"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__handleLink["handleLink"]\n src__cli__optionTaskMode["optionTaskMode"]\n end\n subgraph src__extractors\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_record__action["action"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__git__readStats["readStats"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__configuration__entries["entries"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__todo__raw["raw"]\n src__extractors__ast__records__start["start"]\n src__extractors__git__runGit["runGit"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__changelog__relative["relative"]\n src__extractors__configuration__files["files"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__configuration__entry["entry"]\n src__extractors__nl__action["action"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__todo__action["action"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__docs_record__target["target"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__changelog__body["body"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__git__result["result"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__todo__text["text"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__configuration__relative["relative"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__todo__classified["classified"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__configuration__lines["lines"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__ast__typescript__context["context"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"]\n src__extractors__configuration__pair["pair"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__nl__object["object"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__configuration__match["match"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__todo__task["task"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__nl__classified["classified"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__todo__checked["checked"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__configuration__heading["heading"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__ast__external__result["result"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__changelog__lines["lines"]\n src__extractors__todo__lines["lines"]\n src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__nl__body["body"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__todo__body["body"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__git__state["state"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__configuration__line["line"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__todo__block["block"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"]\n src__extractors__nl__missing["missing"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__todo__relative["relative"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__git__count["count"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__todo__heading["heading"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__git__root["root"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"]\n src__extractors__docs_schema__target["target"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__todo__match["match"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__ast__typescript__recordModuleFact["recordModuleFact"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>225 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>444 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2419 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [166KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [34KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "165.1KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "24.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 252f 41875L | typescript:144,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.28s\n# CC̅=3.3 | critical:64/3900 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10\n 🔴 GOD src/synthesis/code-change-plan/implementation-helpers.ts = 2239L, 25 classes, 270m, max CC=13\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC generationMetadata CC=17 (limit:15)\n 🟡 CC diffUiScriptMarkup CC=46 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC assertSemanticRerankResult CC=29 (limit:15)\n 🟡 CC timeout CC=26 (limit:15)\n 🟡 CC request CC=31 (limit:15)\n 🟡 CC parseCommand CC=63 (limit:15)\n 🟡 CC runListItem CC=18 (limit:15)\n 🟡 CC myers CC=19 (limit:15)\n 🟡 CC n CC=15 (limit:15)\n 🟡 CC m CC=15 (limit:15)\n 🟡 CC max CC=15 (limit:15)\n 🟡 CC offset CC=15 (limit:15)\n 🟡 CC y CC=15 (limit:15)\n 🟡 CC backtrack CC=18 (limit:15)\n 🟡 CC x CC=15 (limit:15)\n 🟡 CC buildRealityView CC=26 (limit:15)\n\nREFACTOR[3]:\n 1. split src/graph/linker.ts (god module)\n 2. split src/synthesis/code-change-plan/implementation-helpers.ts (god module)\n 3. split 18 high-CC methods (CC>15)\n\nPIPELINES[2067]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.4 ←in:0 →out:0\n │ !! implementation-helpers.ts 2239L 25C 270m CC=13 ←3\n │ !! cli.ts 935L 1C 124m CC=13 ←0\n │ !! actions.ts 803L 1C 106m CC=13 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! linker.ts 537L 4C 81m CC=10 ←3\n │ !! text.ts 530L 0C 61m CC=14 ←0\n │ diagnostics.ts 459L 1C 58m CC=11 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ !! result.ts 312L 0C 23m CC=29 ←0\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intent.ts 306L 4C 36m CC=12 ←0\n │ reranker-llm.ts 291L 2C 35m CC=9 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ intent.ts 258L 15C 0m CC=0.0 ←0\n │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ candidate.ts 250L 1C 19m CC=8 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ code-change-path.ts 232L 0C 23m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ code-change.ts 221L 16C 0m CC=0.0 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ io.ts 211L 2C 30m CC=11 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ !! record.ts 183L 2C 13m CC=17 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ markdown-llm.ts 175L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ !! diff-ui.ts 167L 0C 15m CC=46 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ implementation.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.live/ (fan-in=7)\n HUB: src.synthesis/ (fan-in=5)\n HUB: src.diff/ (fan-in=6)\n SMELL: sdk.python/ fan-out=8 → split needed\n SMELL: scripts.research/ fan-out=11 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 402 | edges: 500 | modules: 30\n# CC̄=3.3\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.body\n CC=7 in:0 out:15 total:15\n src.extractors.ast.records.moduleRecords\n CC=6 in:1 out:14 total:15\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [6 funcs]\n context CC=1 out:4\n createTypeScriptExtractionContext CC=1 out:0\n extractTypeScriptFile CC=1 out:7\n recordModuleFact CC=1 out:2\n scriptKind CC=4 out:3\n visitTypeScriptNode CC=2 out:2\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [10 funcs]\n appendA2aAgentWarnings CC=5 out:4\n appendIdentityWarnings CC=4 out:2\n appendRegistryAlignmentWarnings CC=7 out:2\n appendRoleAndParticipantWarnings CC=3 out:2\n appendTimestampWarnings CC=3 out:2\n buildLocalWarnings CC=3 out:5\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [15 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n nonEmptyText CC=3 out:1\n normalizedText CC=1 out:1\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "254.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 402\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 344\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 306\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 612\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 929\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 694\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 830\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 750\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 684\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 342\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 218\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 219\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.ast.typescript.createTypeScriptExtractionContext:\n name: createTypeScriptExtractionContext\n module: src.extractors.ast.typescript\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 659\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 367\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 405\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 617\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 363\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 639\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 484\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 286\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 513\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 326\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 197\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 607\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 883\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n src.cli.diff:\n name: diff\n module: src.cli\n line: 500\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 811\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 75\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 530\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.handler:\n name: handler\n module: src.cli\n line: 587\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 869\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 823\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 237\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 508\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.cli.stop:\n name: stop\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.ast.typescript.context:\n name: context\n module: src.extractors.ast.typescript\n line: 12\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 142\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 345\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 859\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 259\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 629\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 847\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.communication-file-helpers.appendIdentityWarnings:\n name: appendIdentityWarnings\n module: src.extractors.communication-file-helpers\n line: 282\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 253\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.cli.result:\n name: result\n module: src.cli\n line: 763\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 158\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 816\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 705\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 699\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 87\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 159\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.cli.context:\n name: context\n module: src.cli\n line: 531\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 553\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.cli.view:\n name: view\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 573\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 121\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 649\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.cli.file:\n name: file\n module: src.cli\n line: 595\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 255\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 445\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 176\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-file-helpers.buildLocalWarnings:\n name: buildLocalWarnings\n module: src.extractors.communication-file-helpers\n line: 254\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 772\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 622\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 843\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 237\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 875\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 547\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 168\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 185\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 380\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n src.cli.svg:\n name: svg\n module: src.cli\n line: 560\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.communication-file-helpers.appendA2aAgentWarnings:\n name: appendA2aAgentWarnings\n module: src.extractors.communication-file-helpers\n line: 314\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 194\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 838\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.communication-file-helpers.appendRoleAndParticipantWarnings:\n name: appendRoleAndParticipantWarnings\n module: src.extractors.communication-file-helpers\n line: 273\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 554\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 490\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.extractors.communication-file-helpers.appendTimestampWarnings:\n name: appendTimestampWarnings\n module: src.extractors.communication-file-helpers\n line: 328\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 31\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 268\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 410\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.root:\n name: root\n module: src.cli\n line: 660\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 594\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.ast.typescript.visitTypeScriptNode:\n name: visitTypeScriptNode\n module: src.extractors.ast.typescript\n line: 46\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.cli.controller:\n name: controller\n module: src.cli\n line: 347\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 90\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 215\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 189\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.extractors.communication-file-helpers.appendRegistryAlignmentWarnings:\n name: appendRegistryAlignmentWarnings\n module: src.extractors.communication-file-helpers\n line: 299\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 1\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 92\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 729\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 464\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 444\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 127\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.ast.typescript.recordModuleFact:\n name: recordModuleFact\n module: src.extractors.ast.typescript\n line: 229\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 0\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 853\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntri\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3591 func | 137f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation-helpers.ts\n WHY: 2239L, 25 classes, max CC=13\n EFFORT: ~4h IMPACT: 29107\n\n [2] !! SPLIT src/cli.ts\n WHY: 935L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12155\n\n [3] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [4] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [5] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [6] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n [7] !! SPLIT-FUNC diffUiScriptMarkup CC=46 fan=36\n WHY: CC=46 exceeds 15\n EFFORT: ~1h IMPACT: 1656\n\n [8] !! SPLIT-FUNC assertSemanticRerankResult CC=29 fan=37\n WHY: CC=29 exceeds 15\n EFFORT: ~1h IMPACT: 1073\n\n [9] !! SPLIT-FUNC parseFile CC=38 fan=19\n WHY: CC=38 exceeds 15\n EFFORT: ~1h IMPACT: 722\n\n [10] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37\n WHY: CC=18 exceeds 15\n EFFORT: ~1h IMPACT: 666\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation-helpers.ts may break 270 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n\nMETRICS-TARGET:\n CC̄: 3.3 → ≤2.3\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 53 → ≤26\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.7 → now CC̄=3.3\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "166.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 252f 41875L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:144,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.03s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3900 func | 0 cls | 252 mod | CC̄=3.3 | critical:64 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC parseCommand=63; CC runPipeline=56; fan-out runPipeline=56; CC analyzeCommunication=48\n# hotspots[5]: runPipeline fan=56; compareWorkspaceIntent fan=40; assertSemanticRerankResult fan=37; Client.parse_http_response fan=37; diffUiScriptMarkup fan=36\n# evolution: CC̄ 3.7→3.3 (improved -0.4)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[252]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,935\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,211\n src/core/record.ts,183\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,306\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,530\n src/core/types/index.ts,4\n src/core/types/code-change.ts,221\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,258\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,342\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,175\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,256\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,537\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,291\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,250\n src/semantic/reranker/result.ts,312\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,803\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,232\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/code-change-plan/implementation-helpers.ts,2239\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,167\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/web/diff-ui.ts:\n e: diffUiStyles,diffUiRunPanel,diffUiFiltersPanel,diffUiBodyMarkup,diffUiScriptMarkup,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs,diffUiTemplate,diffUiHtml\n diffUiStyles()\n diffUiRunPanel()\n diffUiFiltersPanel()\n diffUiBodyMarkup()\n diffUiScriptMarkup()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n diffUiTemplate()\n diffUiHtml()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n src/semantic/reranker/result.ts:\n i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js\n e: createSemanticRerankResult,decisions,assertSemanticRerankResult,seenDecisions,acceptedDeclarations,candidate,assertSemanticRerankHeader,createCandidateAndRecordIndex,validateSemanticDecisionCandidate,candidate,validateSemanticDecisionDecision,validateSemanticDecisionEvidence,citations,record,validateDecisionEvidenceScope,validateSemanticDecisionVerdict,assertRerankResultHash,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons\n createSemanticRerankResult()\n decisions()\n assertSemanticRerankResult()\n seenDecisions()\n acceptedDeclarations()\n candidate()\n assertSemanticRerankHeader()\n createCandidateAndRecordIndex()\n validateSemanticDecisionCandidate()\n candidate()\n validateSemanticDecisionDecision()\n validateSemanticDecisionEvidence()\n citations()\n record()\n validateDecisionEvidenceScope()\n validateSemanticDecisionVerdict()\n assertRerankResultHash()\n expectedHash()\n applyAcceptedSemanticRelations()\n candidates()\n added()\n candidate()\n assertSemanticVerdictReason()\n allowedVerdicts()\n allowedReasons()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n seed()\n buildRecordSeed()\n buildRecordStatement()\n buildRecordSource()\n buildRecordEpistemic()\n withRecordGeneration()\n generationMetadata()\n generationIdentity()\n separator()\n clamp()\n sourcePrefix()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n appendRoleAndParticipantWarnings()\n appendIdentityWarnings()\n appendRegistryAlignmentWarnings()\n appendA2aAgentWarnings()\n declaredA2aAgentId()\n hasRegistryEntry()\n appendTimestampWarnings()\n rawTimestamp()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n withoutAction()\n result()\n normalizeForObject()\n removeObjectAction()\n stripObjectConnector()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n handler()\n executeExtractNlAction()\n file()\n text()\n executeExtractGitAction()\n executeExtractAstAction()\n executeExtractConfigAction()\n executeExtractMarkdownAction()\n executeExtractDocsAction()\n executeExtractCommunicationAction()\n executeAnalyzeCommunicationAction()\n analysis()\n executeLinkAction()\n records()\n executeDiagnoseAction()\n graph()\n executeSummarizeAction()\n graph()\n diagnostics()\n executeProposeTodoAction()\n graph()\n diagnostics()\n result()\n output()\n executeRenderTodoAction()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n executeApplyTodoAction()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n executeProposeCodeChangeAction()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n executeRenderCodeChangeAction()\n planSet()\n review()\n patchPath()\n auditPath()\n executeProposeSourcePatchAction()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n executeApplySourcePatchAction()\n patch()\n receiptPath()\n result()\n executeEvaluateCodeChangeAction()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n executeCloseCodeChangeAction()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n executeDiffAction()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n executeDiffFilesAction()\n beforePath()\n afterPath()\n diff()\n executeDiffGitAction()\n result()\n executeRealityAction()\n graph()\n diagnostics()\n view()\n executeCompareWorkspaceAction()\n executePipelineAction()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/synthesis/code-change-plan/implementation-helpers.ts:\n i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,PlanContext,CodeChangePlanSemanticDraft,AcceptanceContext,CloseCodeChangeContext,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CodeChangeReviewContext,CreateCodeChangeSourcePatchOptions,SourcePatchCreationContext,SourcePatchSetBuildContext,SourcePatchEditValidationContext,SourcePatchSetValidationContext,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,context,candidates,plans,buildPlansForCandidates,plan,buildPlanSetResult,parseIsoDateTime,generatedAt,parseMaxPlans,maxPlans,buildPlanContext,conclusions,proposals,collectImplementationDiagnostics,findRelatedRecords,createPlanForDiagnostic,relatedRecords,matchingProposals,matchingConclusions,target,changes,evidence,confidence,semantic,confidenceForDiagnostic,buildPlanEvidence,buildPlanSemantic,buildPlanResult,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,context,reasons,accepted,acceptance,buildAcceptanceContext,evaluatedAt,afterDiagnostics,beforeDiagnosticIds,afterById,targetedDiagnosticIds,buildAcceptanceReasons,isAcceptancePassed,appendAcceptanceGateReason,buildAcceptanceResult,closeCodeChanges,context,acceptances,acceptedCount,buildCloseCodeChangeContext,evaluatedAt,afterDiagnostics,ensureClosePlanIdsAreUnique,planIds,buildCloseResult,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,target,collectTargetComponents,paths,symbols,tickets,versions,addTargetEntries,finalizeTarget,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,context,markdown,artifact,buildCodeChangeReviewContext,createdAt,sortCodeChangeReviewPlans,buildCodeChangeReviewMarkdown,buildCodeChangeReviewArtifact,renderCodeChangeReviewMarkdown,lines,buildCodeChangeReviewMarkdownLines,appendPriorityHeader,appendPlanDetails,appendPlanChanges,symbols,appendAfterImplementationSection,assertCodeChangeReviewPatch,artifact,validateReviewPatchKeys,assertCodeChangeReviewPatchSchema,assertReviewPatchSchemaVersion,assertReviewPatchDateFields,assertReviewPatchIds,assertCodeChangeReviewPatchPlanCollections,assertCodeChangeReviewPatchGeneration,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,context,edits,semantic,patchHash,buildSourcePatchContext,graphFingerprint,createdAt,allowedPaths,collectPlanTargetPaths,validateUnifiedDiffsBelongToPlan,normalizedPath,buildSourcePatchEdits,buildSourcePatchEdit,path,rawDiff,unifiedDiff,buildSourcePatchSemantic,createCodeChangeSourcePatchSet,context,patches,result,normalizePatchSetOptions,generatedAt,buildPatchesForSet,buildSourcePatchSet,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchObject,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,normalizeUnifiedDiffText,normalized,validateUnifiedDiffBody,validateUnifiedDiffPathHeaders,extractUnifiedDiffHeaders,validateUnifiedDiffHeaderPath,normalizedPath,normalizeUnifiedDiffHeaderPath,assertUnifiedDiffHeaderPathSafety,bare,stripped,isUnifiedDiffTraversalHeader,matchesUnifiedDiffExpectedHeader,normalizedHeaderPathCandidate,stripLeadingDiffPrefix,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertCodeChangeSourcePatchAndActorAndEdits,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n PlanContext:\n CodeChangePlanSemanticDraft:\n AcceptanceContext:\n CloseCodeChangeContext:\n CreateCodeChangeReviewOptions:\n CreatedCodeChangeReview:\n CodeChangeReviewContext:\n CreateCodeChangeSourcePatchOptions:\n SourcePatchCreationContext:\n SourcePatchSetBuildContext:\n SourcePatchEditValidationContext:\n SourcePatchSetValidationContext:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n NormalizedApplyCodeChangeSourcePatchRequest:\n SourcePatchApplyLock:\n SourcePatchEditTarget:\n PreparedSourceEdit:\n ParsedUnifiedDiffHunk:\n UnifiedDiffParsingContext:\n UnifiedDiffCursor:\n IMPLEMENTATION_DIAGNOSTIC_CODES()\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n context()\n candidates()\n plans()\n buildPlansForCandidates()\n plan()\n buildPlanSetResult()\n parseIsoDateTime()\n generatedAt()\n parseMaxPlans()\n maxPlans()\n buildPlanContext()\n conclusions()\n proposals()\n collectImplementationDiagnostics()\n findRelatedRecords()\n createPlanForDiagnostic()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n evidence()\n confidence()\n semantic()\n confidenceForDiagnostic()\n buildPlanEvidence()\n buildPlanSemantic()\n buildPlanResult()\n createRepositoryPathProbe()\n base()\n absolute()\n implementationDiagnosticRank()\n evaluateCodeChangeAcceptance()\n context()\n reasons()\n accepted()\n acceptance()\n buildAcceptanceContext()\n evaluatedAt()\n afterDiagnostics()\n beforeDiagnosticIds()\n afterById()\n targetedDiagnosticIds()\n buildAcceptanceReasons()\n isAcceptancePassed()\n appendAcceptanceGateReason()\n buildAcceptanceResult()\n closeCodeChanges()\n context()\n acceptances()\n acceptedCount()\n buildCloseCodeChangeContext()\n evaluatedAt()\n afterDiagnostics()\n ensureClosePlanIdsAreUnique()\n planIds()\n buildCloseResult()\n indexProposalsByDiagnostic()\n index()\n list()\n indexConclusionsByDiagnostic()\n index()\n list()\n collectTarget()\n target()\n collectTargetComponents()\n paths()\n symbols()\n tickets()\n versions()\n addTargetEntries()\n finalizeTarget()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n titleFor()\n record()\n object()\n startsWithImperative()\n descriptionFor()\n acceptanceCriteriaFor()\n priorityFor()\n confidenceFor()\n riskFor()\n level()\n rollbackFor()\n deterministicGeneration()\n uniqueSorted()\n createCodeChangeReviewPatch()\n context()\n markdown()\n artifact()\n buildCodeChangeReviewContext()\n createdAt()\n sortCodeChangeReviewPlans()\n buildCodeChangeReviewMarkdown()\n buildCodeChangeReviewArtifact()\n renderCodeChangeReviewMarkdown()\n lines()\n buildCodeChangeReviewMarkdownLines()\n appendPriorityHeader()\n appendPlanDetails()\n appendPlanChanges()\n symbols()\n appendAfterImplementationSection()\n assertCodeChangeReviewPatch()\n artifact()\n validateReviewPatchKeys()\n assertCodeChangeReviewPatchSchema()\n assertReviewPatchSchemaVersion()\n assertReviewPatchDateFields()\n assertReviewPatchIds()\n assertCodeChangeReviewPatchPlanCollections()\n assertCodeChangeReviewPatchGeneration()\n generation()\n priorityRank()\n inline()\n renderIds()\n createCodeChangeSourcePatch()\n context()\n edits()\n semantic()\n patchHash()\n buildSourcePatchContext()\n graphFingerprint()\n createdAt()\n allowedPaths()\n collectPlanTargetPaths()\n validateUnifiedDiffsBelongToPlan()\n normalizedPath()\n buildSourcePatchEdits()\n buildSourcePatchEdit()\n path()\n rawDiff()\n unifiedDiff()\n buildSourcePatchSemantic()\n createCodeChangeSourcePatchSet()\n context()\n patches()\n result()\n normalizePatchSetOptions()\n generatedAt()\n buildPatchesForSet()\n buildSourcePatchSet()\n assertCodeChangeSourcePatch()\n patch()\n editPaths()\n assertCodeChangeSourcePatchObject()\n patch()\n validateSourcePatchSchema()\n validateSourcePatchIdentifiers()\n validateSourcePatchEdits()\n collectSourcePatchEditPathActions()\n paths()\n editContext()\n validateSourcePatchEdit()\n normalizedEdit()\n normalizedPath()\n assertSourcePatchEditObject()\n validateSourcePatchEditBody()\n validateSourcePatchEditDiff()\n assertUniqueSourcePatchEditPathAction()\n normalizeSourcePatchEditPath()\n normalizedPath()\n ensureSourcePatchEditAction()\n ensureSourcePatchEditInstruction()\n validateSourcePatchHashAndId()\n expectedHash()\n validateSourcePatchGeneration()\n validateSourcePatchAgainstPlan()\n expectedChanges()\n assertSourcePatchPlanBinding()\n collectExpectedPlanChanges()\n validateSourcePatchEditsAgainstPlan()\n allowed()\n editPath()\n validateSourcePatchEvidence()\n assertCodeChangeSourcePatchSet()\n set()\n context()\n createSourcePatchSetValidationContext()\n expectedPlanIds()\n assertSourcePatchObject()\n assertSourcePatchSetObject()\n set()\n validateSourcePatchSetSchema()\n validateSourcePatchSetPatches()\n patchIds()\n validateSetPatchAndTrackDuplicates()\n expectedPlan()\n validateSetPatchGraphFingerprint()\n assertUniqueSetPatchId()\n validateSetPatchesPlanCoverage()\n validateSourcePatchSetGeneration()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n instructionFor()\n symbols()\n criteria()\n normalizeUnifiedDiff()\n normalized()\n normalizeUnifiedDiffText()\n normalized()\n validateUnifiedDiffBody()\n validateUnifiedDiffPathHeaders()\n extractUnifiedDiffHeaders()\n validateUnifiedDiffHeaderPath()\n normalizedPath()\n normalizeUnifiedDiffHeaderPath()\n assertUnifiedDiffHeaderPathSafety()\n bare()\n stripped()\n isUnifiedDiffTraversalHeader()\n matchesUnifiedDiffExpectedHeader()\n normalizedHeaderPathCandidate()\n stripLeadingDiffPrefix()\n applyCodeChangeSourcePatch()\n request()\n root()\n receiptPath()\n lock()\n idempotentResult()\n prepared()\n now()\n receipt()\n readExistingReceipt()\n existing()\n assertPatchApplicationRequest()\n patch()\n assertCodeChangeSourcePatchAndActorAndEdits()\n assertPatchApprovalActor()\n assertPatchApprovalHash()\n assertPatchEditsContainDiffs()\n acquireApplyLock()\n lock()\n prepareSourceEdits()\n target()\n before()\n after()\n prepareSourceEditTarget()\n relative()\n absolute()\n existed()\n assertSourcePatchTargetNotSymlink()\n assertDeleteEditClearsAll()\n validatePatchTargetForEdit()\n applyPreparedEdits()\n receipt()\n rollbackErrors()\n writePreparedEdits()\n buildPatchApplyReceipt()\n fileHashesAfter()\n rollbackPreparedEdits()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n validateSourceApplyReceiptShape()\n validateSourceApplyReceiptIdentity()\n validateSourceApplyReceiptTimestamps()\n validateSourceApplyReceiptPathHashes()\n expectedPaths()\n hashPaths()\n validateSourceApplyReceiptGeneration()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n baseLines()\n hunks()\n output()\n joinAppliedText()\n parseUnifiedDiffIntoHunks()\n normalizedDiff()\n context()\n createEmptyUnifiedDiffContext()\n parseUnifiedDiffLines()\n finalizeUnifiedDiffContext()\n applyUnifiedDiffLineToContext()\n header()\n parseUnifiedDiffHeader()\n buildParsedUnifiedDiffHunk()\n applyUnifiedDiffHunks()\n applyUnifiedDiffHunk()\n oldIndex()\n copyBaseLinesToCursor()\n appendRemainingBaseLines()\n validateHunkCounts()\n oldCount()\n newCount()\n applyUnifiedDiffLine()\n mark()\n body()\n applyUnifiedDiffContextLine()\n applyUnifiedDiffDeletionLine()\n applyUnifiedDiffAdditionLine()\n splitKeep()\n lines()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTarget()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplemen\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "164.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.15s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult\n (CC=29)'\n description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult`\n at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 29 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiScriptMarkup (CC=46)'\n description: 'code2llm reports `src.web.diff-ui.diffUiScriptMarkup` at `src/web/diff-ui.ts:127`\n with cyclomatic complexity 46 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiScriptMarkup\n- signal: code2llm_god\n title: 'Split god module: src/graph/linker.ts'\n description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines,\n 4 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/graph/linker.ts\n dedupe_key: code2llm:god:src/graph/linker.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation-helpers.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation-helpers.ts`\n as a large module (2239 lines, 25 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-helpers.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-helpers'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-helpers`\n in `src/synthesis/code-change-plan/implementation-helpers.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation-helpers'' is too large\n (308 functions, 25 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1:God\n Module: src.synthesis.code-change-plan.implementation-helpers'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:139`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, changelog, self, todo, markdown_mode'\n description: 'code2llm reports `Data Clump: root, changelog, self, todo, markdown_mode`\n in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (root, changelog, self, todo, markdown_mode) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n root, changelog, self, todo, markdown_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, changelog, self, todo, markdown_mode'\n description: 'code2llm reports `Data Clump: root, changelog, self, todo, markdown_mode`\n in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (root, changelog, self, todo, markdown_mode) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n root, changelog, self, todo, markdown_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, excludes, self, patterns'\n description: 'code2llm reports `Data Clump: root, excludes, self, patterns` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (root, excludes, self, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n root, excludes, self, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, excludes, self, patterns'\n description: 'code2llm reports `Data Clump: root, excludes, self, patterns` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (root, excludes, self, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n root, excludes, self, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, file, self, nl_mode'\n description: 'code2llm reports `Data Clump: root, file, self, nl_mode` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (root, file, self, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n root, file, self, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, file, self, nl_mode'\n description: 'code2llm reports `Data Clump: root, file, self, nl_mode` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (root, file, self, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n root, file, self, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:227`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:227:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-helpers.ts:1663`.\n\n\n Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1663:God\n Function: applyCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildAcceptanceContext'\n description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers.ts:376`.\n\n\n Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:376:God\n Function: buildAcceptanceContext'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:16:God\n Function: createSemanticCandidateSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticRerankResult'\n description: 'code2llm reports `God Function: createSemanticRerankResult` in `src/semantic/reranker/result.ts:23`.\n\n\n Function ''createSemanticRerankResult'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:23:God\n Function: createSemanticRerankResult'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createTodoPatch'\n description: 'code2llm reports `God Function: createTodoPatch` in `src/synthesis/todo-patch.ts:69`.\n\n\n Function ''createTodoPatch'' is oversized: CC=8, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:69:God Function:\n createTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_chunked'\n description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:189`.\n\n\n Function ''decode_chunked'' is oversized: CC=7, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:189:God Function:\n decode_chunked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diagnoseGraph'\n description: 'code2llm reports `God Function: diagnoseGraph` in `src/graph/diagnostics.ts:16`.\n\n\n Function ''diagnoseGraph'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:16:God Function:\n diagnoseGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diffIntentGraphs'\n description: 'code2llm reports `God Function: diffIntentGraphs` in `src/graph/diff.ts:16`.\n\n\n Function ''diffIntentGraphs'' is oversized: CC=11, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diff.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diff.ts:16:God Function: diffIntentGraphs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: encode_envelope'\n description: 'code2llm reports `God Function: encode_envelope` in `src/interfaces/intake_cli.py:55`.\n\n\n Function ''encode_envelope'' is oversized: CC=6, fan-out=11, mutations=11.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:55:God Function:\n encode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichBatchCovering'\n description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm-helpers.ts:112`.\n\n\n Function ''enrichBatchCovering'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:112:God\n Function: enrichBatchCovering'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichMarkdownRecords'\n description: 'code2llm reports `God Function: enrichMarkdownRecords` in `src/extractors/markdown-llm-helpers.ts:57`.\n\n\n Function ''enrichMarkdownRecords'' is oversized: CC=13, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:57:God\n Function: enrichMarkdownRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichRecord'\n description: 'code2llm reports `God Function: enrichRecord` in `src/extractors/markdown-llm-helpers.ts:274`.\n\n\n Function ''enrichRecord'' is oversized: CC=14, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God\n Function: enrichRecord'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDiagnosticsCase'\n description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:182`.\n\n\n Function ''evaluateDiagnosticsCase'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:182:God Function:\n evaluateDiagnosticsCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDsl2TodoCase'\n description: 'code2llm reports `God Function: evaluateDsl2TodoCase` in `src/evaluation/gold-cases.ts:210`.\n\n\n Function ''evaluateDsl2TodoCase'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:210:God Function:\n evaluateDsl2TodoCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: exchange'\n description: 'code2llm reports `God Function: exchange` in `sdk/rust/src/client.rs:125`.\n\n\n Function ''exchange'' is oversized: CC=10, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function:\n exchange'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeAnalyzeCommunicationAction'\n description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction`\n in `src/services/actions.ts:155`.\n\n\n Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:155:God Function:\n executeAnalyzeCommunicationAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeCloseCodeChangeAction'\n description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:410`.\n\n\n Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:410:God Function:\n executeCloseCodeChangeAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executePipelineAction'\n description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:553`.\n\n\n Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:553:God Function:\n executePipelineAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractAstIntent'\n description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`.\n\n\n Function ''extractAstIntent'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast.ts:23:God Function:\n extractAstIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractChangelog'\n description: 'code2llm reports `God Function: extractChangelog` in `src/extractors/changelog.ts:18`.\n\n\n Function ''extractChangelog'' is oversized: CC=10, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:18:God Function:\n extractChangelog'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractCommunicationIntentAudited'\n description: 'code2llm reports `God Function: extractCommunicationIntentAudited`\n in `src/communication/llm/implementation.ts:63`.\n\n\n Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:63:God\n Function: extractCommunicationIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractConventionalAction'\n description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`.\n\n\n Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractDocumentationIntent'\n description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`.\n\n\n Function ''extractDocumentationIntent'' is oversized: CC=3, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-llm.ts:45:God Function:\n extractDocumentationIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractMarkdownIntentAudited'\n description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:31`.\n\n\n Function ''extractMarkdownIntentAudited'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:31:God Function:\n extractMarkdownIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntent'\n description: 'code2llm reports `God Function: extractNlIntent` in `src/extractors/nl.ts:38`.\n\n\n Function ''extractNlIntent'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:38:God Function: extractNlIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntentAudited'\n description: 'code2llm reports `God Function: extractNlIntentAudited` in `src/extractors/nl-llm.ts:33`.\n\n\n Function ''extractNlIntentAudited'' is oversized: CC=10, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:33:God Function:\n extractNlIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPhpAst'\n description: 'code2llm reports `God Function: extractPhpAst` in `src/extractors/ast/php.ts:11`.\n\n\n Function ''extractPhpAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/php.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/php.ts:11:God Function:\n extractPhpAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPythonAst'\n description: 'code2llm reports `God Function: extractPythonAst` in `src/extractors/ast/python.ts:11`.\n\n\n Function ''extractPythonAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/python.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/python.ts:11:God Function:\n extractPythonAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRepositoryGitIntent'\n description: 'code2llm reports `God Function: extractRepositoryGitIntent` in `src/extractors/git.ts:74`.\n\n\n Function ''extractRepositoryGitIntent'' is oversized: CC=11, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/git.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:74:God Function:\n extractRepositoryGitIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRuntimeCycleIntent'\n description: 'code2llm reports `God Function: extractRuntimeCycleIntent` in `src/extractors/runtime-cycle.ts:29`.\n\n\n Function ''extractRuntimeCycleIntent'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:29:God\n Function: extractRuntimeCycleIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractSymbols'\n description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`.\n\n\n Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractTodo'\n description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`.\n\n\n Function ''extractTodo'' is oversized: CC=5, fan-out=24, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:19:God Function:\n extractTodo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `scripts/verify-module-boundaries.mjs:6`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:6:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: goldReportIsPerfect'\n description: 'code2llm reports `God Function: goldReportIsPerfect` in `src/evaluation/gold.ts:100`.\n\n\n Function ''goldReportIsPerfect'' is oversized: CC=14, fan-out=0, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold.ts:100:God Function:\n goldReportIsPerfect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: graph'\n description: 'code2llm reports `God Function: graph` in `scripts/verify-module-boundaries.mjs:7`.\n\n\n Function ''graph'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:7:God\n Function: graph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleCommunication'\n description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:659`.\n\n\n Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:659:God Function: handleCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleDiff'\n description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:464`.\n\n\n Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:464:God Function: handleDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleGraphDiff'\n description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:490`.\n\n\n Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:490:God Function: handleGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleIntake'\n description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:699`.\n\n\n Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:699:God Function: handleIntake'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleReality'\n description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:547`.\n\n\n Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:547:God Function: handleReality'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleWatch'\n description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:342`.\n\n\n Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:342:God Function: handleWatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: index'\n description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`.\n\n\n Function ''index'' is oversized: CC=13, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/t\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3900 func | 171f | 41875L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.3 critical=221 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded analyzeCommunication = 48 (limit:15)\n !!! cc_exceeded diffUiScriptMarkup = 46 (limit:15)\n !!! cc_exceeded variables = 44 (limit:15)\n !!! cc_exceeded variableById = 44 (limit:15)\n !!! cc_exceeded steps = 44 (limit:15)\n !!! cc_exceeded stepIds = 44 (limit:15)\n\nMODULES[252] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/synthesis/code-change-plan/implementation-helpers.ts] 2239L C:25 F:270 CC↑13 D:3 (typescript)\n M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript)\n M[src/services/actions.ts] 803L C:1 F:106 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript)\n M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript)\n LANGS: typescript:144/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n ★ assertSemanticRerankResult fan=37 // Orchestrates 37 calls\n ★ Client.parse_http_response fan=37 // Orchestrates 37 calls\n ★ diffUiScriptMarkup fan=36 // Orchestrates 36 calls\n\nREFACTOR[15]:\n [1] H/L Split diffUiScriptMarkup (CC=46)\n [2] H/L Split assertSemanticRerankResult (CC=29)\n [3] H/L Split OpenRouterClient.timeout (CC=26)\n [4] H/L Split OpenRouterClient.request (CC=31)\n [5] H/L Split parseCommand (CC=63)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.3 crit=221 41875L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; + const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "98.1KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.4KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3683 \n**Total Classes**: 373 \n**Modules**: 251 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "34.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 143, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3683\n- **Total Classes**: 373\n- **Modules**: 251\n- **Entry Points**: 2620\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.synthesis.code-change-plan.implementation\n- **Functions**: 148\n- **Classes**: 10\n- **File**: `implementation.ts`\n\n### src.services.actions\n- **Functions**: 118\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.graph.linker\n- **Functions**: 85\n- **Classes**: 4\n- **File**: `linker.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.core.text\n- **Functions**: 62\n- **File**: `text.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### src.services.actions.executeAction\n- **Calls**: src.services.actions.resolveRoot, src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent\n\n### src.services.actions.root\n- **Calls**: src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent, src.services.actions.extractMarkdownIntentAudited\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.web.diff-ui.diffUiHtml\n- **Calls**: src.web.diff-ui.gradient, src.web.diff-ui.min, src.web.diff-ui.clamp, src.web.diff-ui.not, src.web.diff-ui.media, src.web.diff-ui.token, src.web.diff-ui.getElementById, src.web.diff-ui.byId\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- **Calls**: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.implementation.trim, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.resolve, src.synthesis.code-change-plan.implementation.assertPathWithinRoot, src.synthesis.code-change-plan.implementation.ensureDir, src.synthesis.code-change-plan.implementation.dirname, src.synthesis.code-change-plan.implementation.open\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- **Calls**: src.synthesis.code-change-plan.implementation.assertIntentGraph, src.synthesis.code-change-plan.implementation.assertConclusions, src.synthesis.code-change-plan.implementation.Date, src.synthesis.code-change-plan.implementation.toISOString, src.synthesis.code-change-plan.implementation.isNaN, src.synthesis.code-change-plan.implementation.parse, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.isInteger\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### src.core.text.inferObject\n- **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.core.text.normalized\n- **Calls**: src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa, src.core.text.napraw, src.core.text.popraw\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: executeAction\n```\nexecuteAction [src.services.actions]\n └─> resolveRoot\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 2: root\n```\nroot [src.services.actions]\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 3: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 4: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 5: diffUiHtml\n```\ndiffUiHtml [src.web.diff-ui]\n```\n\n### Flow 6: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 7: applyCodeChangeSourcePatch\n```\napplyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation]\n └─> assertCodeChangeSourcePatch\n```\n\n### Flow 8: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 9: proposeCodeChangePlans\n```\nproposeCodeChangePlans [src.synthesis.code-change-plan.implementation]\n```\n\n### Flow 10: parseCommand\n```\nparseCommand [src.interfaces.a2a-message]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 29\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 28\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `src.services.actions.executeAction` - 65 calls\n- `src.services.actions.root` - 64 calls\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.web.diff-ui.diffUiHtml` - 42 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `src.core.text.inferObject` - 31 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.core.text.normalized` - 29 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n executeAction --> resolveRoot\n executeAction --> scopedPath\n executeAction --> extractNlIntentAudit\n executeAction --> nlModeValue\n executeAction --> extractGitIntent\n root --> scopedPath\n root --> extractNlIntentAudit\n root --> nlModeValue\n root --> extractGitIntent\n root --> numberValue\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n diffUiHtml --> gradient\n diffUiHtml --> min\n diffUiHtml --> clamp\n diffUiHtml --> not\n diffUiHtml --> media\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "70.4KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__offset["offset"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__server["server"]\n examples__backend__src__server__event["event"]\n examples__backend__src__server__store["store"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__server__limit["limit"]\n examples__backend__src__validation__agent["agent"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__app__createState["createState"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__app__refresh["refresh"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n end\n subgraph src__cli\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__absolute["absolute"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__stamp["stamp"]\n src__cli__diagnostics["diagnostics"]\n src__cli__svg["svg"]\n src__cli__taskFile["taskFile"]\n src__cli__diff["diff"]\n src__cli__handleReality["handleReality"]\n src__cli__invokedPath["invokedPath"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__optionNumber["optionNumber"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__controller["controller"]\n src__cli__result["result"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__command["command"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__optionNlMode["optionNlMode"]\n src__cli__pipeline["pipeline"]\n src__cli__optionTaskMode["optionTaskMode"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__optionString["optionString"]\n src__cli__handleExtract["handleExtract"]\n src__cli__context["context"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__handleLink["handleLink"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__handleIntake["handleIntake"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n src__cli__initProject["initProject"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__file["file"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__main["main"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__emitJson["emitJson"]\n src__cli__root["root"]\n src__cli__printHelp["printHelp"]\n src__cli__handler["handler"]\n src__cli__parsed["parsed"]\n src__cli__stop["stop"]\n src__cli__doctor["doctor"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__optionList["optionList"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__handleDiff["handleDiff"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__view["view"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__optionNullableString["optionNullableString"]\n end\n subgraph src__extractors\n src__extractors__todo__classified["classified"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__git__result["result"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__todo__body["body"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__ast__typescript__context["context"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__git__count["count"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__nl__action["action"]\n src__extractors__docs_record__target["target"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__configuration__match["match"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__git__state["state"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__configuration__entry["entry"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__configuration__relative["relative"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__git__runGit["runGit"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__todo__action["action"]\n src__extractors__git__readStats["readStats"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__configuration__pair["pair"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__git__root["root"]\n src__extractors__nl__body["body"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__ast__typescript__recordModuleFact["recordModuleFact"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__configuration__lines["lines"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__todo__raw["raw"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__configuration__heading["heading"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__todo__heading["heading"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__docs_schema__target["target"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__nl__object["object"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__todo__checked["checked"]\n src__extractors__todo__block["block"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__todo__text["text"]\n src__extractors__docs_record__action["action"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"]\n src__extractors__changelog__relative["relative"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__ast__records__start["start"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__nl__missing["missing"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__todo__lines["lines"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__configuration__line["line"]\n src__extractors__ast__external__result["result"]\n src__extractors__nl__classified["classified"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__ast__typescript__handleNode["handleNode"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__changelog__body["body"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__todo__match["match"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__changelog__lines["lines"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__todo__relative["relative"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"]\n src__extractors__configuration__files["files"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__todo__task["task"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__configuration__entries["entries"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>225 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>292 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2378 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [153KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [34KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "163.3KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "23.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 251f 39151L | typescript:143,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.26s\n# CC̅=3.6 | critical:90/3683 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC buildLocalWarnings CC=18 (limit:15)\n 🟡 CC executeAction CC=83 (limit:15)\n 🟡 CC root CC=83 (limit:15)\n 🟡 CC normalized CC=30 (limit:15)\n 🟡 CC inferObject CC=34 (limit:15)\n 🟡 CC walkFiles CC=15 (limit:15)\n 🟡 CC diffUiHtml CC=52 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC rerankSemanticCandidates CC=25 (limit:15)\n 🟡 CC assertSemanticRerankResult CC=21 (limit:15)\n 🟡 CC records CC=16 (limit:15)\n 🟡 CC seenDecisions CC=16 (limit:15)\n 🟡 CC acceptedDeclarations CC=16 (limit:15)\n 🟡 CC assertSemanticCandidateSet CC=27 (limit:15)\n 🟡 CC NON_SOURCE_DIR_SEGMENTS CC=38 (limit:15)\n 🟡 CC BINARY_EXTENSIONS CC=38 (limit:15)\n 🟡 CC GENERATED_ANALYSIS_BASENAMES CC=38 (limit:15)\n 🟡 CC T2C_ARTIFACT_BASENAMES CC=38 (limit:15)\n\nREFACTOR[2]:\n 1. split src/graph/linker.ts (god module)\n 2. split 19 high-CC methods (CC>15)\n\nPIPELINES[2061]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.8 ←in:0 →out:0\n │ !! cli.ts 935L 1C 124m CC=13 ←0\n │ !! actions.ts 737L 1C 79m CC=83 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! linker.ts 537L 4C 81m CC=10 ←3\n │ !! text.ts 517L 0C 57m CC=34 ←0\n │ diagnostics.ts 459L 1C 58m CC=11 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intent.ts 306L 4C 36m CC=12 ←0\n │ !! communication-file-helpers.ts 296L 2C 39m CC=18 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ !! result.ts 264L 0C 16m CC=21 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ intent.ts 258L 15C 0m CC=0.0 ←0\n │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ code-change.ts 221L 16C 0m CC=0.0 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ !! code-change-path.ts 204L 0C 14m CC=38 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! candidate.ts 200L 0C 13m CC=27 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ !! record.ts 183L 2C 13m CC=17 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ !! io.ts 177L 1C 32m CC=15 ←0\n │ markdown-llm.ts 175L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ !! diff-ui.ts 48L 0C 9m CC=52 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ !! implementation.ts 1L 10C 127m CC=47 ←3\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.diff/ (fan-in=6)\n HUB: src.synthesis/ (fan-in=5)\n HUB: src.live/ (fan-in=7)\n SMELL: scripts.research/ fan-out=11 → split needed\n SMELL: sdk.python/ fan-out=8 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.2KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 401 | edges: 500 | modules: 30\n# CC̄=3.6\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.ast.records.moduleRecords\n CC=6 in:1 out:14 total:15\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.body\n CC=7 in:0 out:15 total:15\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [11 funcs]\n context CC=1 out:4\n createTypeScriptExtractionContext CC=1 out:0\n extractTypeScriptFile CC=1 out:7\n handleExportDeclaration CC=4 out:3\n handleImportDeclaration CC=5 out:4\n handleNode CC=6 out:5\n handleSymbolDeclaration CC=4 out:9\n handleVariableDeclaration CC=8 out:7\n recordModuleFact CC=1 out:2\n scriptKind CC=4 out:3\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [4 funcs]\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [15 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n nonEmptyText CC=3 out:1\n normalizedText CC=1 out:1\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "251.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 401\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 639\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 92\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 705\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 869\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.handleVariableDeclaration:\n name: handleVariableDeclaration\n module: src.extractors.ast.typescript\n line: 111\n cyclomatic_complexity: 8\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 194\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 445\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 554\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.cli.svg:\n name: svg\n module: src.cli\n line: 560\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 344\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.diff:\n name: diff\n module: src.cli\n line: 500\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 547\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 929\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 405\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 830\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 823\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.cli.controller:\n name: controller\n module: src.cli\n line: 347\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.extractors.ast.typescript.handleSymbolDeclaration:\n name: handleSymbolDeclaration\n module: src.extractors.ast.typescript\n line: 87\n cyclomatic_complexity: 4\n calls_out: 9\n calls_in: 1\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.result:\n name: result\n module: src.cli\n line: 763\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 306\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 255\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 508\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 31\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 326\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 268\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 484\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 158\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.context:\n name: context\n module: src.extractors.ast.typescript\n line: 12\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 594\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 553\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 843\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 345\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 853\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 410\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 237\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 121\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 380\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 176\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 367\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 875\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 811\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 573\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.cli.context:\n name: context\n module: src.cli\n line: 531\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 168\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 142\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 87\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 530\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 127\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.ast.typescript.handleExportDeclaration:\n name: handleExportDeclaration\n module: src.extractors.ast.typescript\n line: 74\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 847\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 342\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 253\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 699\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.ast.typescript.recordModuleFact:\n name: recordModuleFact\n module: src.extractors.ast.typescript\n line: 229\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 629\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 237\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 218\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 286\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 363\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 75\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 729\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 197\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.file:\n name: file\n module: src.cli\n line: 595\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 185\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 444\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 612\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 622\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 617\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.ast.typescript.createTypeScriptExtractionContext:\n name: createTypeScriptExtractionContext\n module: src.extractors.ast.typescript\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 219\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.ast.typescript.visitTypeScriptNode:\n name: visitTypeScriptNode\n module: src.extractors.ast.typescript\n line: 46\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 259\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 684\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 694\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.root:\n name: root\n module: src.cli\n line: 660\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 883\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.handler:\n name: handler\n module: src.cli\n line: 587\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 189\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.cli.stop:\n name: stop\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.ast.typescript.handleNode:\n name: handleNode\n module: src.extractors.ast.typescript\n line: 52\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 750\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 513\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 649\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 90\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 838\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 215\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 159\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 772\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 607\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 464\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 490\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 859\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.extractors.ast.typescript.handleImportDeclaration:\n name: handleImportDeclaration\n module: src.extractors.ast.typescript\n line: 61\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.cli.view:\n name: view\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 659\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 816\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.docs-schema.target\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.target\n c\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3374 func | 137f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts\n WHY: 1310L, 10 classes, max CC=47\n EFFORT: ~4h IMPACT: 61570\n\n [2] !! SPLIT src/cli.ts\n WHY: 935L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12155\n\n [3] !! SPLIT-FUNC executeAction CC=83 fan=65\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5395\n\n [4] !! SPLIT-FUNC root CC=83 fan=64\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5312\n\n [5] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42\n WHY: CC=52 exceeds 15\n EFFORT: ~1h IMPACT: 2184\n\n [8] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [9] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n [10] !! SPLIT-FUNC applyCodeChangeSourcePatch CC=41 fan=35\n WHY: CC=41 exceeds 15\n EFFORT: ~1h IMPACT: 1435\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n\nMETRICS-TARGET:\n CC̄: 3.7 → ≤2.6\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 79 → ≤39\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.7 → now CC̄=3.7\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "153.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 251f 39151L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:143,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.03s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3683 func | 0 cls | 251 mod | CC̄=3.6 | critical:90 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64\n# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; diffUiHtml fan=42; compareWorkspaceIntent fan=40\n# evolution: CC̄ 3.7→3.6 (improved -0.1)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[251]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,935\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,177\n src/core/record.ts,183\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,306\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,517\n src/core/types/index.ts,4\n src/core/types/code-change.ts,221\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,258\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,296\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,175\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,256\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,537\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,210\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,200\n src/semantic/reranker/result.ts,264\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,737\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,204\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,48\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n file()\n text()\n analysis()\n records()\n graph()\n graph()\n diagnostics()\n graph()\n diagnostics()\n result()\n output()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n planSet()\n review()\n patchPath()\n auditPath()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n patch()\n receiptPath()\n result()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n beforePath()\n afterPath()\n diff()\n result()\n graph()\n diagnostics()\n view()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/web/diff-ui.ts:\n e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs\n diffUiHtml()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/synthesis/code-change-plan/implementation.ts:\n i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n CreateCodeChangeReviewOptions:\n CreatedCodeChangeReview:\n CreateCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n PreparedSourceEdit:\n IMPLEMENTATION_DIAGNOSTIC_CODES()\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n conclusions()\n proposals()\n recordsById()\n proposalsByDiagnostic()\n conclusionsByDiagnostic()\n candidates()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n generation()\n planHash()\n createRepositoryPathProbe()\n base()\n absolute()\n implementationDiagnosticRank()\n evaluateCodeChangeAcceptance()\n afterDiagnostics()\n beforeIds()\n afterById()\n targeted()\n clearedDiagnosticIds()\n remainingDiagnosticIds()\n newBlockingDiagnosticIds()\n accepted()\n evaluatedAt()\n closeCodeChanges()\n evaluatedAt()\n afterDiagnostics()\n planIds()\n acceptances()\n acceptedCount()\n indexProposalsByDiagnostic()\n index()\n list()\n indexConclusionsByDiagnostic()\n index()\n list()\n collectTarget()\n paths()\n symbols()\n tickets()\n versions()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n titleFor()\n record()\n object()\n startsWithImperative()\n descriptionFor()\n acceptanceCriteriaFor()\n priorityFor()\n confidenceFor()\n riskFor()\n level()\n rollbackFor()\n deterministicGeneration()\n uniqueSorted()\n createCodeChangeReviewPatch()\n createdAt()\n markdown()\n renderCodeChangeReviewMarkdown()\n symbols()\n assertCodeChangeReviewPatch()\n artifact()\n generation()\n priorityRank()\n inline()\n renderIds()\n createCodeChangeSourcePatch()\n plan()\n graphFingerprint()\n createdAt()\n allowed()\n diffs()\n normalized()\n path()\n rawDiff()\n unifiedDiff()\n patchHash()\n createCodeChangeSourcePatchSet()\n generatedAt()\n assertCodeChangeSourcePatch()\n patch()\n paths()\n path()\n expectedHash()\n allowed()\n expectedChanges()\n editPath()\n assertCodeChangeSourcePatchSet()\n set()\n plansById()\n patchIds()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n instructionFor()\n symbols()\n criteria()\n normalizeUnifiedDiff()\n normalized()\n path()\n bare()\n stripped()\n applyCodeChangeSourcePatch()\n root()\n receiptPath()\n existing()\n relative()\n absolute()\n exists()\n before()\n after()\n now()\n fileHashesAfter()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n expectedPaths()\n hashPaths()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n normalizedDiff()\n baseLines()\n diffLines()\n cursor()\n oldIndex()\n oldCount()\n newCount()\n mark()\n body()\n splitKeep()\n lines()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n lowerBasename()\n dot()\n ext()\n isUsefulCodeChangePath()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n result()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n src/semantic/reranker/candidate.ts:\n i: ../../core/schema.js,../../core/types.js,./validation.js\n e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair\n createSemanticCandidateSet()\n grouped()\n values()\n assertSemanticCandidateSet()\n records()\n seenIds()\n seenPairs()\n byDeclaration()\n declaration()\n module()\n existing()\n expectedHash()\n comparePair()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/semantic/reranker-llm.ts:\n i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util\n e: SemanticRerankerOptions,SemanticRerankerRequiredError\n SemanticRerankerOptions:\n SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1)\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n src/semantic/reranker/result.ts:\n i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js\n e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons\n createSemanticRerankResult()\n decisions()\n assertSemanticRerankResult()\n candidates()\n records()\n seenDecisions()\n acceptedDeclarations()\n candidate()\n citations()\n record()\n expectedHash()\n applyAcceptedSemanticRelations()\n candidates()\n added()\n candidate()\n assertSemanticVerdictReason()\n allowedVerdicts()\n allowedReasons()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,declaredRole,declaredA2aAgentId,declaredGitAuthors,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n declaredRole()\n declaredA2aAgentId()\n declaredGitAuthors()\n rawTimestamp()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n seed()\n buildRecordSeed()\n buildRecordStatement()\n buildRecordSource()\n buildRecordEpistemic()\n withRecordGeneration()\n generationMetadata()\n generationIdentity()\n separator()\n clamp()\n sourcePrefix()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n ignored()\n extensions()\n maxFiles()\n matcher()\n base()\n visit()\n entries()\n absolute()\n relative()\n extension()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTarget()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskStore()\n removeTemporaryFile()\n prepareTask()\n key()\n indexedTask()\n taskForMessage()\n indexedTaskId()\n task()\n continueTask()\n existing()\n continuationError()\n message()\n createTask()\n taskId()\n contextId()\n executeMessage()\n command()\n result()\n domainResult()\n rejectTask()\n protobuf()\n diagnostic()\n message()\n currentTaskState()\n completeTask()\n protobuf()\n message()\n protobufResult()\n intakeDomainResult()\n record()\n failTask()\n message()\n agentMessage()\n listTasks()\n contextId()\n status()\n pageSize()\n historyLength()\n includeArtifacts()\n statusTimestampAfter()\n filter()\n filtered()\n pageCursor()\n start()\n page()\n last()\n filteredTasks()\n compareTasksByUpdate()\n timestampOrder()\n indexAfterCursor()\n exact()\n cursorTime()\n next()\n taskTime()\n encodeCursor()\n decodeCursor()\n decoded()\n taskView()\n effectiveHistoryLength()\n history()\n cloneArtifact()\n ownedTask()\n task()\n messageKey()\n errorMessage()\n src/communication/intake-store.ts:\n i: ../core/io.js,../core/security.js,node:crypto,node:fs,node:path\n e: IntakeEvent,StreamSnapshot,IntakeEventStore\n IntakeEvent:\n StreamSnapshot:\n IntakeEventStore: read(-1),names(-1),name(-1),eventPath(-1),stat(-1),event(-1),lockPath(-1),stream(-1),existing(-1),writeRegistry(-1),projectionPath(-1),slug(-1),atomicWrite(-1),safe(-1),temp(-1),assertSafe(-1),hashEvent(-1),broken(-1),unsafe(-1)\n scripts/verify-workflow-yaml.mjs:\n i: node:fs,node:path\n e: explicit,files,body,seen,match,key,previous,workflowFiles,directory\n explicit()\n files()\n body()\n seen()\n match()\n key()\n previous()\n workflowFiles()\n directory()\n scripts/research/audit-changelog-sample.mjs:\n i: node:child_process,node:fs,node:path\n e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,classification,labelCounts,labelRepositories,stratifiedSample,groups,values,added,record,targetClass,target,classify,text,file,exactFileUpdate,match,candidate,basename,pathOwners,file,countBy,item,readJson,parseArgs,value,index,limitIndex,limit,intentDirectoryIndex,intentDirectory\n options()\n entries()\n root()\n latest()\n runDirectory()\n diagnostics()\n graph()\n recordsById()\n findings()\n selected()\n trackedFiles()\n classification()\n labelCounts()\n labelRepositories()\n stratifiedSample()\n groups()\n values()\n added()\n record()\n targetClass()\n target()\n classify()\n text()\n file()\n exactFileUpdate()\n match()\n candidate()\n basename()\n pathOwners()\n file()\n countBy()\n item()\n readJson()\n parseArgs()\n value()\n index()\n limitIndex()\n limit()\n intentDirectoryIndex()\n intentDirectory()\n sdk/php/src/Client.php:\n e: Client\n Client:\n sdk/python/examples/basic.py:\n e: main\n main()\n examples/backend/src/validation.ts:\n e: ValidationResult,ALLOWED_ACTIONS,validateEventPayload,invalid,record,agent,action,object\n ValidationResult:\n ALLOWED_ACTIONS()\n validateEventPayload()\n invalid()\n record(\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "190.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.17s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)'\n description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:466`\n with cyclomatic complexity 34 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)'\n description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:467`\n with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n (CC=25)'\n description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates`\n at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker-llm.ts\n dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet\n (CC=27)'\n description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet`\n at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)'\n description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)'\n description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS`\n at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES`\n at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES`\n at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS`\n at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES`\n at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath`\n at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n (CC=41)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity\n 41 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText`\n at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor\n (CC=25)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor`\n at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity\n 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)'\n description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1`\n with cyclomatic complexity 52 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml\n- signal: code2llm_god\n title: 'Split god module: src/graph/linker.ts'\n description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines,\n 4 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/graph/linker.ts\n dedupe_key: code2llm:god:src/graph/linker.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts`\n as a large module (1310 lines, 10 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation`\n in `src/synthesis/code-change-plan/implementation.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions,\n 10 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God\n Module: src.synthesis.code-change-plan.implementation'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)'\n description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/io.ts\n dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication-file-helpers.buildLocalWarnings\n (CC=18)'\n description: 'code2llm reports `src.extractors.communication-file-helpers.buildLocalWarnings`\n at `src/extractors/communication-file-helpers.ts:254` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: code2llm:cc:src/extractors/communication-file-helpers.ts:src.extractors.communication-file-helpers.buildLocalWarnings\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations`\n at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult\n (CC=21)'\n description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult`\n at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n (CC=23)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch`\n at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity\n 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n (CC=18)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet`\n at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff`\n at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths\n (CC=16)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths`\n at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity\n 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans`\n at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: action, self, payload'\n description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n action, self, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: action, self, payload'\n description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n action, self, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: excludes, self, patterns, root'\n description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (excludes, self, patterns, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n excludes, self, patterns, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: excludes, self, patterns, root'\n description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (excludes, self, patterns, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n excludes, self, patterns, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, nl_mode, self, root'\n description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (file, nl_mode, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n file, nl_mode, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, nl_mode, self, root'\n description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (file, nl_mode, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n file, nl_mode, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo'\n description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root,\n todo` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n markdown_mode, changelog, self, root, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo'\n description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root,\n todo` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n markdown_mode, changelog, self, root, todo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:369`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:369:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:179`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertSourceApplyReceipt'\n description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`.\n\n\n Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God\n Function: assertSourceApplyReceipt'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: base'\n description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`.\n\n\n Function ''base'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/io.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:92:God Function: base'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byDeclaration'\n description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`.\n\n\n Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God\n Function: byDeclaration'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: candidates'\n description: 'code2llm reports `God Function: candidates` in `src/synthesis/code-change-plan/implementation.ts:124`.\n\n\n Function ''candidates'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:124:God\n Function: candidates'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: closeCodeChanges'\n description: 'code2llm reports `God Function: closeCodeChanges` in `src/synthesis/code-change-plan/implementation.ts:298`.\n\n\n Function ''closeCodeChanges'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:298:God\n Function: closeCodeChanges'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: conclusions'\n description: 'code2llm reports `God Function: conclusions` in `src/synthesis/code-change-plan/implementation.ts:118`.\n\n\n Function ''conclusions'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:118:God\n Function: conclusions'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: conclusionsByDiagnostic'\n description: 'code2llm reports `God Function: conclusionsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:122`.\n\n\n Function ''conclusionsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:122:God\n Function: conclusionsByDiagnostic'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeReviewPatch'\n description: 'code2llm reports `God Function: createCodeChangeReviewPatch` in `src/synthesis/code-change-plan/implementation.ts:547`.\n\n\n Function ''createCodeChangeReviewPatch'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:547:God\n Function: createCodeChangeReviewPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: createCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation.ts:698`.\n\n\n Function ''createCodeChangeSourcePatch'' is oversized: CC=13, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:698:God\n Function: createCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeSourcePatchSet'\n description: 'code2llm reports `God Function: createCodeChangeSourcePatchSet` in\n `src/synthesis/code-change-plan/implementation.ts:759`.\n\n\n Function ''createCodeChangeSourcePatchSet'' is oversized: CC=8, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:759:God\n Function: createCodeChangeSourcePatchSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_f\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3683 func | 171f | 39185L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.6 critical=256 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded executeAction = 83 (limit:15)\n !!! cc_exceeded root = 83 (limit:15)\n !!! high_fan_out executeAction = 65 (limit:10)\n !!! high_fan_out root = 64 (limit:10)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded diffUiHtml = 52 (limit:15)\n !!! cc_exceeded analyzeCommunication = 48 (limit:15)\n\nMODULES[251] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/services/actions.ts] 737L C:1 F:79 CC↑83 D:0 (typescript)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[src/core/text.ts] 517L C:0 F:57 CC↑34 D:0 (typescript)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript)\n M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript)\n LANGS: typescript:143/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ executeAction fan=65 // Orchestrates 65 calls\n ★ root fan=64 // Orchestrates 64 calls\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ diffUiHtml fan=42 // Orchestrates 42 calls\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n\nREFACTOR[15]:\n [1] H/L Split executeAction (CC=83)\n [2] H/L Split root (CC=83)\n [3] H/L Split normalized (CC=30)\n [4] H/L Split inferObject (CC=34)\n [5] H/L Split diffUiHtml (CC=52)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.6 crit=256 39185L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; let currentFile = null; function renderFileList(filter = '') { diff --git a/project/map.toon.yaml b/project/map.toon.yaml index 5a1ec50..05f8759 100644 --- a/project/map.toon.yaml +++ b/project/map.toon.yaml @@ -1,12 +1,12 @@ -# todo2code | 252f 41875L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:144,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 +# todo2code | 251f 39151L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:143,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 # generated in 0.03s # producer: code2llm | artifact: map.toon.yaml | schema: 1 -# stats: 3900 func | 0 cls | 252 mod | CC̄=3.3 | critical:64 | cycles:0 -# alerts[5]: CC assertOperationPlan=84; CC parseCommand=63; CC runPipeline=56; fan-out runPipeline=56; CC analyzeCommunication=48 -# hotspots[5]: runPipeline fan=56; compareWorkspaceIntent fan=40; assertSemanticRerankResult fan=37; Client.parse_http_response fan=37; diffUiScriptMarkup fan=36 -# evolution: CC̄ 3.7→3.3 (improved -0.4) +# stats: 3683 func | 0 cls | 251 mod | CC̄=3.6 | critical:90 | cycles:0 +# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64 +# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; diffUiHtml fan=42; compareWorkspaceIntent fan=40 +# evolution: CC̄ 3.7→3.6 (improved -0.1) # Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods -M[252]: +M[251]: Dockerfile,45 Makefile,132 adapters/tensorflow/package.json,14 @@ -131,7 +131,7 @@ M[252]: src/core/grounding.ts,24 src/core/id.ts,167 src/core/ignore.ts,200 - src/core/io.ts,211 + src/core/io.ts,177 src/core/record.ts,183 src/core/schema/index.ts,4 src/core/schema/code-change.ts,322 @@ -141,7 +141,7 @@ M[252]: src/core/schema/utils.ts,239 src/core/security.ts,55 src/core/target.ts,57 - src/core/text.ts,530 + src/core/text.ts,517 src/core/types/index.ts,4 src/core/types/code-change.ts,221 src/core/types/diagnostics.ts,45 @@ -173,7 +173,7 @@ M[252]: src/extractors/ast/unsupported.ts,30 src/extractors/changelog.ts,99 src/extractors/communication.ts,63 - src/extractors/communication-file-helpers.ts,342 + src/extractors/communication-file-helpers.ts,296 src/extractors/communication-helpers.ts,320 src/extractors/configuration.ts,208 src/extractors/docs-chunks.ts,147 @@ -234,20 +234,19 @@ M[252]: src/pipeline/run.ts,617 src/sdk/typescript.ts,172 src/semantic/reranker/index.ts,8 - src/semantic/reranker-llm.ts,291 + src/semantic/reranker-llm.ts,210 src/semantic/reranker-response.ts,42 - src/semantic/reranker/candidate.ts,250 - src/semantic/reranker/result.ts,312 + src/semantic/reranker/candidate.ts,200 + src/semantic/reranker/result.ts,264 src/semantic/reranker/types.ts,106 src/semantic/reranker/validation.ts,111 - src/services/actions.ts,803 + src/services/actions.ts,737 src/summary/payload.ts,65 src/summary/render.ts,61 src/summary/summarizer.ts,333 - src/synthesis/code-change-path.ts,232 + src/synthesis/code-change-path.ts,204 src/synthesis/code-change-plan/index.ts,1 src/synthesis/code-change-plan/implementation.ts,1 - src/synthesis/code-change-plan/implementation-helpers.ts,2239 src/synthesis/task-synthesis-contract.ts,66 src/synthesis/task-synthesis-materialize.ts,172 src/synthesis/task-synthesis-payload.ts,70 @@ -257,7 +256,7 @@ M[252]: src/tf/classifier.ts,135 src/version.ts,2 src/watch/watcher.ts,243 - src/web/diff-ui.ts,167 + src/web/diff-ui.ts,48 tsconfig.json,23 D: src/operations/validation.ts: @@ -310,6 +309,128 @@ D: decision() verification() expectedHash() + src/services/actions.ts: + i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path + e: CommunicationGraphFilter,executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest + CommunicationGraphFilter: + executeAction() + root() + file() + text() + analysis() + records() + graph() + graph() + diagnostics() + graph() + diagnostics() + result() + output() + graph() + diagnostics() + synthesis() + todoPath() + patchPath() + auditPath() + todoContent() + rendered() + todoPath() + patchPath() + auditPath() + receiptPath() + result() + graph() + diagnostics() + conclusions() + proposals() + result() + output() + planSet() + review() + patchPath() + auditPath() + plan() + unifiedDiffs() + patch() + output() + planSet() + result() + output() + patch() + receiptPath() + result() + plan() + beforeGraph() + beforeDiagnostics() + afterGraph() + afterDiagnostics() + result() + output() + beforeGraph() + beforeDiagnostics() + afterGraph() + afterDiagnostics() + value() + planSet() + result() + output() + beforeInput() + afterInput() + before() + after() + diff() + svg() + beforePath() + afterPath() + diff() + result() + graph() + diagnostics() + view() + filterCommunicationGraph() + filter() + records() + parseCommunicationGraphFilter() + participant() + role() + ticket() + communicationOnly() + matchesCommunicationFilter() + matchesParticipant() + matchesRole() + matchesTicket() + nlModeValue() + llmModeValue() + taskSynthesisMode() + summaryModeValue() + pipelineTaskMode() + withTextDiffViews() + title() + readGraphInput() + safePath() + readActionObject() + safePath() + resolveRoot() + requested() + scopedPath() + selected() + nullableScopedPath() + selected() + readRecords() + files() + safeFile() + stringValue() + nullableString() + stringList() + numberValue() + number() + hasInputValue() + objectMapOfStrings() + booleanValue() + objectValue() + registerRunArtifacts() + manifestPath() + manifest() src/interfaces/a2a-message.ts: i: ../communication/intake-protobuf.js e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage @@ -419,6 +540,17 @@ D: failureCode() skippedAudit() appendLlmNotConfigured() + src/web/diff-ui.ts: + e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs + diffUiHtml() + byId() + requestHeaders() + formatBytes() + selectedRun() + updateMeta() + fillSelect() + loadRuns() + compareGraphs() src/communication/analyzer.ts: i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex @@ -504,130 +636,327 @@ D: severityRank() escapeCell() escapeRegex() - src/web/diff-ui.ts: - e: diffUiStyles,diffUiRunPanel,diffUiFiltersPanel,diffUiBodyMarkup,diffUiScriptMarkup,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs,diffUiTemplate,diffUiHtml - diffUiStyles() - diffUiRunPanel() - diffUiFiltersPanel() - diffUiBodyMarkup() - diffUiScriptMarkup() - byId() - requestHeaders() - formatBytes() - selectedRun() - updateMeta() - fillSelect() - loadRuns() - compareGraphs() - diffUiTemplate() - diffUiHtml() - php/ast_extract.php: - e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile - argumentValue() - normalizedToken() - significant() - qualifiedName() - sourceExcerpt() - addFact() - parseFile() - src/evaluation/gold-types.ts: - e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules - GoldRecordProjection: - GoldDocumentModelRecord: - GoldExtractionCase: - GoldFixtureRecord: - GoldExpectedRelation: - GoldRerankerDecisionFixture: - GoldRerankerFixture: - GoldLinkingCase: - GoldProposalFixture: - GoldDsl2TodoCase: - GoldExpectedDiagnostic: - GoldDiagnosticsCase: - GoldDataset: - BinaryMetric: - GoldEvaluationReport: - assertGoldDataset() - dataset() - assertDatasetObject() - assertDatasetMetadata() - assertDatasetCollections() - assertUniqueCaseIds() - assertExtractionCoverage() - channels() - assertLinkingCohorts() - labels() - modules() - src/llm/openrouter.ts: - i: ../config/env.js,../core/types.js,./structured-schema.js - e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient - ChatMessage: - OpenRouterChoice: - OpenRouterResponse: - OpenRouterResult: - OpenRouterModelsResponse: - OpenRouterModelError: super(-1) - OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1) - src/communication/identity.ts: - i: ../core/io.js,../core/security.js,./intake-contract.js,node:path - e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra - ParticipantIdentityEntry: - ParticipantIdentityRegistry: - LoadedParticipantIdentityRegistry: - loadParticipantIdentityRegistry() - v2Path() - v1Path() - registryPath() - normalized() - normalizeParticipantIdentityRegistry() - registry() - participants() - ids() - principals() - key() - normalizeV2Entry() - principals() - kind() - assertParticipantIdentityRegistry() - registry() - ids() - external() - entry() - values() - normalized() - owner() - exactKeys() - allowed() - missing() - extra() - src/semantic/reranker/result.ts: - i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js - e: createSemanticRerankResult,decisions,assertSemanticRerankResult,seenDecisions,acceptedDeclarations,candidate,assertSemanticRerankHeader,createCandidateAndRecordIndex,validateSemanticDecisionCandidate,candidate,validateSemanticDecisionDecision,validateSemanticDecisionEvidence,citations,record,validateDecisionEvidenceScope,validateSemanticDecisionVerdict,assertRerankResultHash,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons - createSemanticRerankResult() - decisions() - assertSemanticRerankResult() - seenDecisions() - acceptedDeclarations() - candidate() - assertSemanticRerankHeader() - createCandidateAndRecordIndex() - validateSemanticDecisionCandidate() - candidate() - validateSemanticDecisionDecision() - validateSemanticDecisionEvidence() - citations() - record() - validateDecisionEvidenceScope() - validateSemanticDecisionVerdict() - assertRerankResultHash() - expectedHash() - applyAcceptedSemanticRelations() + src/synthesis/code-change-plan/implementation.ts: + i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path + e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines + ProposeCodeChangePlansOptions: + ProposeCodeChangePlansResult: + EvaluateCodeChangeAcceptanceOptions: + CloseCodeChangesOptions: + CreateCodeChangeReviewOptions: + CreatedCodeChangeReview: + CreateCodeChangeSourcePatchOptions: + ApplyCodeChangeSourcePatchOptions: + ApplyCodeChangeSourcePatchResult: + PreparedSourceEdit: + IMPLEMENTATION_DIAGNOSTIC_CODES() + proposeCodeChangePlans() + generatedAt() + maxPlans() + conclusions() + proposals() + recordsById() + proposalsByDiagnostic() + conclusionsByDiagnostic() candidates() - added() - candidate() - assertSemanticVerdictReason() - allowedVerdicts() - allowedReasons() + relatedRecords() + matchingProposals() + matchingConclusions() + target() + changes() + generation() + planHash() + createRepositoryPathProbe() + base() + absolute() + implementationDiagnosticRank() + evaluateCodeChangeAcceptance() + afterDiagnostics() + beforeIds() + afterById() + targeted() + clearedDiagnosticIds() + remainingDiagnosticIds() + newBlockingDiagnosticIds() + accepted() + evaluatedAt() + closeCodeChanges() + evaluatedAt() + afterDiagnostics() + planIds() + acceptances() + acceptedCount() + indexProposalsByDiagnostic() + index() + list() + indexConclusionsByDiagnostic() + index() + list() + collectTarget() + paths() + symbols() + tickets() + versions() + buildChanges() + symbols() + sourceIntents() + rationale() + normalized() + exists() + titleFor() + record() + object() + startsWithImperative() + descriptionFor() + acceptanceCriteriaFor() + priorityFor() + confidenceFor() + riskFor() + level() + rollbackFor() + deterministicGeneration() + uniqueSorted() + createCodeChangeReviewPatch() + createdAt() + markdown() + renderCodeChangeReviewMarkdown() + symbols() + assertCodeChangeReviewPatch() + artifact() + generation() + priorityRank() + inline() + renderIds() + createCodeChangeSourcePatch() + plan() + graphFingerprint() + createdAt() + allowed() + diffs() + normalized() + path() + rawDiff() + unifiedDiff() + patchHash() + createCodeChangeSourcePatchSet() + generatedAt() + assertCodeChangeSourcePatch() + patch() + paths() + path() + expectedHash() + allowed() + expectedChanges() + editPath() + assertCodeChangeSourcePatchSet() + set() + plansById() + patchIds() + exactSourcePatchKeys() + actual() + assertSourcePatchIds() + assertSourcePatchStrings() + exactSourcePatchSet() + instructionFor() + symbols() + criteria() + normalizeUnifiedDiff() + normalized() + path() + bare() + stripped() + applyCodeChangeSourcePatch() + root() + receiptPath() + existing() + relative() + absolute() + exists() + before() + after() + now() + fileHashesAfter() + assertExistingSourceReceipt() + relative() + absolute() + exists() + current() + assertSourceApplyReceipt() + expectedPaths() + hashPaths() + atomicWriteRaw() + applyUnifiedDiffToText() + normalizedDiff() + baseLines() + diffLines() + cursor() + oldIndex() + oldCount() + newCount() + mark() + body() + splitKeep() + lines() + src/synthesis/code-change-path.ts: + e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath + NON_SOURCE_DIR_SEGMENTS() + BINARY_EXTENSIONS() + GENERATED_ANALYSIS_BASENAMES() + T2C_ARTIFACT_BASENAMES() + EXTENSIONLESS_SOURCE_BASENAMES() + isPlannablePath() + normalized() + segments() + lowerSegments() + basename() + lowerBasename() + dot() + ext() + isUsefulCodeChangePath() + php/ast_extract.php: + e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile + argumentValue() + normalizedToken() + significant() + qualifiedName() + sourceExcerpt() + addFact() + parseFile() + src/core/text.ts: + i: ./types.js + e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value + STOP_WORDS() + buildStopWords() + classifyActionHeuristically() + conventionalAction() + prose() + searchable() + matchedByPattern() + extractConventionalAction() + conventional() + findActionInText() + removeInlineCode() + detectModality() + prose() + searchable() + matches() + detectPolarity() + prose() + stripped() + normalized() + normalizeToken() + keywords() + GENERIC_TOPICS() + topicKeywords() + separated() + foldTopicToken() + aliased() + singular() + similarity() + left() + right() + intersection() + extractBacktickValues() + value() + extractPaths() + FILE_EXTENSIONS() + hasFileExtension() + last() + dot() + PATH_ROOTS() + isPathLike() + segments() + HOST_TLDS() + isHostname() + parts() + tld() + extractSymbols() + repositoryPaths() + backticks() + camel() + ticketPrefixes() + extractTickets() + values() + extractVersions() + inferObject() + normalized() + result() + splitIntentLines() + lines() + raw() + cleaned() + pieces() + value() + src/evaluation/gold-types.ts: + e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules + GoldRecordProjection: + GoldDocumentModelRecord: + GoldExtractionCase: + GoldFixtureRecord: + GoldExpectedRelation: + GoldRerankerDecisionFixture: + GoldRerankerFixture: + GoldLinkingCase: + GoldProposalFixture: + GoldDsl2TodoCase: + GoldExpectedDiagnostic: + GoldDiagnosticsCase: + GoldDataset: + BinaryMetric: + GoldEvaluationReport: + assertGoldDataset() + dataset() + assertDatasetObject() + assertDatasetMetadata() + assertDatasetCollections() + assertUniqueCaseIds() + assertExtractionCoverage() + channels() + assertLinkingCohorts() + labels() + modules() + src/llm/openrouter.ts: + i: ../config/env.js,../core/types.js,./structured-schema.js + e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient + ChatMessage: + OpenRouterChoice: + OpenRouterResponse: + OpenRouterResult: + OpenRouterModelsResponse: + OpenRouterModelError: super(-1) + OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1) + src/communication/identity.ts: + i: ../core/io.js,../core/security.js,./intake-contract.js,node:path + e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra + ParticipantIdentityEntry: + ParticipantIdentityRegistry: + LoadedParticipantIdentityRegistry: + loadParticipantIdentityRegistry() + v2Path() + v1Path() + registryPath() + normalized() + normalizeParticipantIdentityRegistry() + registry() + participants() + ids() + principals() + key() + normalizeV2Entry() + principals() + kind() + assertParticipantIdentityRegistry() + registry() + ids() + external() + entry() + values() + normalized() + owner() + exactKeys() + allowed() + missing() + extra() scripts/verify-env-contract.mjs: i: node:fs,node:path e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute @@ -649,6 +978,22 @@ D: absolute() collect() absolute() + src/semantic/reranker/candidate.ts: + i: ../../core/schema.js,../../core/types.js,./validation.js + e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair + createSemanticCandidateSet() + grouped() + values() + assertSemanticCandidateSet() + records() + seenIds() + seenPairs() + byDeclaration() + declaration() + module() + existing() + expectedHash() + comparePair() scripts/research/rank-intent-graph-embeddings.py: e: parse_args,projection_text,main parse_args() @@ -745,6 +1090,11 @@ D: envOr() truncate() joinedIDs() + src/semantic/reranker-llm.ts: + i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util + e: SemanticRerankerOptions,SemanticRerankerRequiredError + SemanticRerankerOptions: + SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1) src/diff/git.ts: i: ./text.js,node:child_process,node:fs,node:path,node:util e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result @@ -772,6 +1122,27 @@ D: readWorkingFile() runGit() result() + src/semantic/reranker/result.ts: + i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js + e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons + createSemanticRerankResult() + decisions() + assertSemanticRerankResult() + candidates() + records() + seenDecisions() + acceptedDeclarations() + candidate() + citations() + record() + expectedHash() + applyAcceptedSemanticRelations() + candidates() + added() + candidate() + assertSemanticVerdictReason() + allowedVerdicts() + allowedReasons() sdk/rust/examples/basic.rs: i: serde_json::json,std::env,todo2code::Client e: main,run,joined_ids @@ -880,6 +1251,54 @@ D: timer() onAbort() finish() + src/extractors/communication-file-helpers.ts: + i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path + e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,declaredRole,declaredA2aAgentId,declaredGitAuthors,rawTimestamp + CommunicationFileOutcome: + CommunicationMetadata: + extractCommunicationFile() + scope() + readResult() + envelope() + inferred() + extracted() + localWarnings() + segmentResult() + records() + shouldSkipCommunicationFile() + explicitEnvelope() + hasExplicitEnvelopeMetadata() + buildCommunicationSegments() + inferredRole() + segments() + resolveFileScope() + relativeToProject() + segments() + pathTicket() + readCommunicationBody() + collectCommunicationMetadata() + declaredParticipant() + declaredRole() + declaredParticipantId() + identity() + participant() + role() + displayName() + explicitMessageType() + messageType() + ticket() + recipient() + rawTimestamp() + timestamp() + declaredGitAuthors() + gitAuthors() + explicitPaths() + explicitSymbols() + buildLocalWarnings() + declaredRole() + declaredA2aAgentId() + declaredGitAuthors() + rawTimestamp() src/interfaces/a2a-history.ts: i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath @@ -1029,24 +1448,6 @@ D: i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super:: e: Client Client: - src/core/record.ts: - i: ./id.js,./target.js,./version.js - e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix - BuildRecordGenerationInput: - BuildRecordInput: - buildRecord() - rawExcerpt() - seed() - buildRecordSeed() - buildRecordStatement() - buildRecordSource() - buildRecordEpistemic() - withRecordGeneration() - generationMetadata() - generationIdentity() - separator() - clamp() - sourcePrefix() sdk/typescript/examples/basic.ts: i: ../src/index.js e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison @@ -1069,6 +1470,24 @@ D: reality() gitDiff() comparison() + src/core/record.ts: + i: ./id.js,./target.js,./version.js + e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix + BuildRecordGenerationInput: + BuildRecordInput: + buildRecord() + rawExcerpt() + seed() + buildRecordSeed() + buildRecordStatement() + buildRecordSource() + buildRecordEpistemic() + withRecordGeneration() + generationMetadata() + generationIdentity() + separator() + clamp() + sourcePrefix() examples/backend/src/server.ts: i: ./store.js,./validation.js,node:http e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host @@ -1100,6 +1519,46 @@ D: is_module_entrypoint(node) iter_python_files(root;files_from) main() + src/core/io.ts: + i: ./types.js,node:fs,node:path + e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix + WalkOptions: + DEFAULT_IGNORED_DIRS() + ensureDir() + readText() + stat() + pathExists() + writeJson() + writeText() + writeJsonl() + readJsonl() + body() + readJson() + walkFiles() + ignored() + extensions() + maxFiles() + matcher() + base() + visit() + entries() + absolute() + relative() + extension() + escapeRegex() + globToRegExp() + normalized() + char() + next() + after() + matchesAnyGlob() + normalized() + resolveGlobs() + files() + absolute() + relative() + relative() + relativePosix() scripts/verify-no-llm-imports.mjs: i: node:fs,node:path e: visited,visit,body,resolved,resolveSource,raw @@ -1171,168 +1630,47 @@ D: line() parseEnvelope() lines() - end() - match() - inferIdentity() - parts() - basename() - governanceIdentity() - inferGovernanceIdentityFromFilename() - governance() - inferIdentityFromPathAndFilename() - fileParts() - nestedRoleIndex() - nestedRole() - nestedParticipant() - isTicketEvidenceFile() - basename() - communicationSegments() - lines() - flush() - item() - raw() - heading() - cleaned() - looksLikeTicket() - normalizeRole() - normalizeType() - normalized() - isCommunicationType() - first() - listValue() - stripped() - validTimestamp() - parsed() - resolveIdentity() - sameStrings() - normalize() - isCommunicationNoise() - normalized() - governanceSectionType() - normalized() - semanticsFor() - unquote() - src/extractors/communication-file-helpers.ts: - i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path - e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp - CommunicationFileOutcome: - CommunicationMetadata: - extractCommunicationFile() - scope() - readResult() - envelope() - inferred() - extracted() - localWarnings() - segmentResult() - records() - shouldSkipCommunicationFile() - explicitEnvelope() - hasExplicitEnvelopeMetadata() - buildCommunicationSegments() - inferredRole() - segments() - resolveFileScope() - relativeToProject() - segments() - pathTicket() - readCommunicationBody() - collectCommunicationMetadata() - declaredParticipant() - declaredRole() - declaredParticipantId() - identity() - participant() - role() - displayName() - explicitMessageType() - messageType() - ticket() - recipient() - rawTimestamp() - timestamp() - declaredGitAuthors() - gitAuthors() - explicitPaths() - explicitSymbols() - buildLocalWarnings() - appendRoleAndParticipantWarnings() - appendIdentityWarnings() - appendRegistryAlignmentWarnings() - appendA2aAgentWarnings() - declaredA2aAgentId() - hasRegistryEntry() - appendTimestampWarnings() - rawTimestamp() - src/core/text.ts: - i: ./types.js - e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value - STOP_WORDS() - buildStopWords() - classifyActionHeuristically() - conventionalAction() - prose() - searchable() - matchedByPattern() - extractConventionalAction() - conventional() - findActionInText() - removeInlineCode() - detectModality() - prose() - searchable() - matches() - detectPolarity() - prose() - stripped() - normalized() - normalizeToken() - keywords() - GENERIC_TOPICS() - topicKeywords() - separated() - foldTopicToken() - aliased() - singular() - similarity() - left() - right() - intersection() - extractBacktickValues() - value() - extractPaths() - FILE_EXTENSIONS() - hasFileExtension() - last() - dot() - PATH_ROOTS() - isPathLike() - segments() - HOST_TLDS() - isHostname() - parts() - tld() - extractSymbols() - repositoryPaths() - backticks() - camel() - ticketPrefixes() - extractTickets() - values() - extractVersions() - inferObject() - normalized() - withoutAction() - result() - normalizeForObject() - removeObjectAction() - stripObjectConnector() - splitIntentLines() - lines() + end() + match() + inferIdentity() + parts() + basename() + governanceIdentity() + inferGovernanceIdentityFromFilename() + governance() + inferIdentityFromPathAndFilename() + fileParts() + nestedRoleIndex() + nestedRole() + nestedParticipant() + isTicketEvidenceFile() + basename() + communicationSegments() + lines() + flush() + item() raw() + heading() cleaned() - pieces() - value() + looksLikeTicket() + normalizeRole() + normalizeType() + normalized() + isCommunicationType() + first() + listValue() + stripped() + validTimestamp() + parsed() + resolveIdentity() + sameStrings() + normalize() + isCommunicationNoise() + normalized() + governanceSectionType() + normalized() + semanticsFor() + unquote() src/evaluation/gold.ts: i: ../core/id.js,./gold-extraction.js,node:fs e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result @@ -1473,808 +1811,323 @@ D: parseArgs() values() key() - value() - required() - value() - top() - src/cli.ts: - i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util - e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath - ParsedArgs: - execFileAsync() - main() - parsed() - command() - config() - handler() - commandHandlers() - resolveMainCommand() - handleLink() - files() - records() - graph() - handleDiagnose() - graphFile() - graph() - handleSummarize() - graphFile() - graph() - diagnosticsPath() - diagnostics() - result() - out() - handleProposeTodo() - graphPath() - diagnosticsPath() - output() - result() - handleRenderTodo() - synthesisPath() - graphPath() - diagnosticsPath() - patch() - audit() - result() - handleApplyTodo() - patch() - audit() - receipt() - actor() - approvalHash() - result() - handleProposeCodeChange() - graphPath() - diagnosticsPath() - output() - result() - handleRenderCodeChange() - plansPath() - patch() - audit() - result() - handleProposeSourcePatch() - inputPath() - output() - isPlanSet() - result() - handleApplySourcePatch() - patchPath() - actor() - approvalHash() - receipt() - result() - handleEvaluateCodeChange() - planPath() - beforeGraphPath() - afterGraphPath() - output() - result() - handleCloseCodeChange() - inputPath() - beforeGraphPath() - afterGraphPath() - output() - result() - handleCompareWorkspace() - root() - result() - handlePipeline() - root() - options() - result() - handleWatch() - root() - taskFile() - pipeline() - controller() - stop() - resolvePipelineRoot() - buildPipelineOptions() - buildCommonPipelineOptions() - resolveWatchTaskFile() - buildWorkspaceComparisonOptions() - formatWatchEvent() - stamp() - handleDiff() - mode() - out() - svg() - html() - maxRows() - parseDiffMode() - mode() - handleGraphDiff() - beforeFile() - afterFile() - diff() - out() - svg() - buildDiffPayload() - buildFileDiff() - beforeFile() - afterFile() - context() - buildGitDiff() - context() - root() - result() - handleReality() - graphFile() - graph() - diagnosticsPath() - diagnostics() - view() - out() - svg() - markdown() - handleExtract() - extractor() - root() - out() - handler() - handleExtractNl() - file() - inline() - result() - handleExtractGit() - result() - handleExtractAst() - result() - handleExtractConfig() - result() - handleExtractRuntime() - cycle() - result() - handleExtractMarkdown() - result() - handleExtractDocs() - result() - handleExtractCommunication() - result() - handleCommunication() - root() - graph() - analysis() - out() - markdown() - graphOut() - emitExtraction() - emitJson() - handleIntake() - operation() - inputPath() - absolute() - result() - intakeExitCode() - initProject() - moduleRoot() - sourceEnv() - targetEnv() - task() - sourceIgnore() - targetIgnore() - doctor() - result() - parseArgs() - options() - value() - next() - name() - next() - optionString() - value() - optionNullableString() - value() - optionBoolean() - value() - optionNumber() - value() - number() - optionList() - value() - optionNlMode() - optionLlmMode() - value() - optionTaskMode() - value() - optionSummaryMode() - optionPipelineTaskMode() - value() - reportPipelineDegradation() - printHelp() - invokedPath() - src/services/actions.ts: - i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path - e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest - CommunicationGraphFilter: - executeAction() - root() + value() + required() + value() + top() + src/cli.ts: + i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util + e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath + ParsedArgs: + execFileAsync() + main() + parsed() + command() + config() handler() - executeExtractNlAction() - file() - text() - executeExtractGitAction() - executeExtractAstAction() - executeExtractConfigAction() - executeExtractMarkdownAction() - executeExtractDocsAction() - executeExtractCommunicationAction() - executeAnalyzeCommunicationAction() - analysis() - executeLinkAction() + commandHandlers() + resolveMainCommand() + handleLink() + files() records() - executeDiagnoseAction() graph() - executeSummarizeAction() + handleDiagnose() + graphFile() graph() - diagnostics() - executeProposeTodoAction() + handleSummarize() + graphFile() graph() + diagnosticsPath() diagnostics() result() + out() + handleProposeTodo() + graphPath() + diagnosticsPath() output() - executeRenderTodoAction() - graph() - diagnostics() - synthesis() - todoPath() - patchPath() - auditPath() - todoContent() - rendered() - executeApplyTodoAction() - todoPath() - patchPath() - auditPath() - receiptPath() result() - executeProposeCodeChangeAction() - graph() - diagnostics() - conclusions() - proposals() + handleRenderTodo() + synthesisPath() + graphPath() + diagnosticsPath() + patch() + audit() result() - output() - executeRenderCodeChangeAction() - planSet() - review() - patchPath() - auditPath() - executeProposeSourcePatchAction() - plan() - unifiedDiffs() + handleApplyTodo() patch() - output() - planSet() + audit() + receipt() + actor() + approvalHash() result() + handleProposeCodeChange() + graphPath() + diagnosticsPath() output() - executeApplySourcePatchAction() - patch() - receiptPath() result() - executeEvaluateCodeChangeAction() - plan() - beforeGraph() - beforeDiagnostics() - afterGraph() - afterDiagnostics() + handleRenderCodeChange() + plansPath() + patch() + audit() result() + handleProposeSourcePatch() + inputPath() output() - executeCloseCodeChangeAction() - beforeGraph() - beforeDiagnostics() - afterGraph() - afterDiagnostics() - value() - planSet() + isPlanSet() + result() + handleApplySourcePatch() + patchPath() + actor() + approvalHash() + receipt() result() + handleEvaluateCodeChange() + planPath() + beforeGraphPath() + afterGraphPath() output() - executeDiffAction() - beforeInput() - afterInput() - before() - after() - diff() - svg() - executeDiffFilesAction() - beforePath() - afterPath() - diff() - executeDiffGitAction() result() - executeRealityAction() - graph() - diagnostics() - view() - executeCompareWorkspaceAction() - executePipelineAction() - filterCommunicationGraph() - filter() - records() - parseCommunicationGraphFilter() - participant() - role() - ticket() - communicationOnly() - matchesCommunicationFilter() - matchesParticipant() - matchesRole() - matchesTicket() - nlModeValue() - llmModeValue() - taskSynthesisMode() - summaryModeValue() - pipelineTaskMode() - withTextDiffViews() - title() - readGraphInput() - safePath() - readActionObject() - safePath() - resolveRoot() - requested() - scopedPath() - selected() - nullableScopedPath() - selected() - readRecords() - files() - safeFile() - stringValue() - nullableString() - stringList() - numberValue() - number() - hasInputValue() - objectMapOfStrings() - booleanValue() - objectValue() - registerRunArtifacts() - manifestPath() - manifest() - src/config/env.ts: - i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path - e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter - T2CConfig: - loadEnvFile() - explicit() - candidates() - content() - trimmed() - separator() - key() - value() - envString() - value() - envOptional() - value() - envNumber() - raw() - value() - envBoolean() - raw() - envList() - raw() - envLlmMode() - value() - getConfig() - model() - root() - configForDisplay() - hasOpenRouter() - src/diff/text-render.ts: - i: ./text-types.js - e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number - TextDiffSvgOptions: - SideBySideRow: - renderUnifiedDiff() - marker() - toSideBySideRows() - index() - line() - pairs() - renderTextDiffSvg() - theme() - maxRows() - maxColumns() - title() - charWidth() - rowHeight() - gutterWidth() - columnWidth() - width() - totals() - y() - rendered() - skipped() - summarizeDiffs() - diffHeading() - svgBody() - sideBySideRowMarkup() - changed() - number() - renderTextDiffHtml() - title() - sections() - renderHtmlSection() - hunks() - rows() - htmlCell() - cssClass() - number() - src/operations/subactor.ts: - i: ../core/types.js,./validation.js - e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding - CompileSubactorEnvelopeOptions: - valueMatchesType() - assertBinding() - ageSeconds() - compileSubactorProcessEnvelope() - variableById() - referenced() - variable() - binding() - humanApproval() - binding() - src/communication/intake-service.ts: - i: ./intake-store.js,node:crypto,node:fs,node:path - e: IntakeState,GovernedIntakeService - IntakeState: - GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) - scripts/live-model-comparison.mjs: - i: node:fs,node:path,node:url - e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile - REPO_ROOT() - main() - probe() - timeoutMs() - models() + handleCloseCodeChange() + inputPath() + beforeGraphPath() + afterGraphPath() + output() + result() + handleCompareWorkspace() root() - config() result() - comparison() - rendered() - jsonTarget() - markdownTarget() - failedAudit() - message() - writeFile() - src/synthesis/code-change-plan/implementation-helpers.ts: - i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path - e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,PlanContext,CodeChangePlanSemanticDraft,AcceptanceContext,CloseCodeChangeContext,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CodeChangeReviewContext,CreateCodeChangeSourcePatchOptions,SourcePatchCreationContext,SourcePatchSetBuildContext,SourcePatchEditValidationContext,SourcePatchSetValidationContext,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,context,candidates,plans,buildPlansForCandidates,plan,buildPlanSetResult,parseIsoDateTime,generatedAt,parseMaxPlans,maxPlans,buildPlanContext,conclusions,proposals,collectImplementationDiagnostics,findRelatedRecords,createPlanForDiagnostic,relatedRecords,matchingProposals,matchingConclusions,target,changes,evidence,confidence,semantic,confidenceForDiagnostic,buildPlanEvidence,buildPlanSemantic,buildPlanResult,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,context,reasons,accepted,acceptance,buildAcceptanceContext,evaluatedAt,afterDiagnostics,beforeDiagnosticIds,afterById,targetedDiagnosticIds,buildAcceptanceReasons,isAcceptancePassed,appendAcceptanceGateReason,buildAcceptanceResult,closeCodeChanges,context,acceptances,acceptedCount,buildCloseCodeChangeContext,evaluatedAt,afterDiagnostics,ensureClosePlanIdsAreUnique,planIds,buildCloseResult,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,target,collectTargetComponents,paths,symbols,tickets,versions,addTargetEntries,finalizeTarget,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,context,markdown,artifact,buildCodeChangeReviewContext,createdAt,sortCodeChangeReviewPlans,buildCodeChangeReviewMarkdown,buildCodeChangeReviewArtifact,renderCodeChangeReviewMarkdown,lines,buildCodeChangeReviewMarkdownLines,appendPriorityHeader,appendPlanDetails,appendPlanChanges,symbols,appendAfterImplementationSection,assertCodeChangeReviewPatch,artifact,validateReviewPatchKeys,assertCodeChangeReviewPatchSchema,assertReviewPatchSchemaVersion,assertReviewPatchDateFields,assertReviewPatchIds,assertCodeChangeReviewPatchPlanCollections,assertCodeChangeReviewPatchGeneration,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,context,edits,semantic,patchHash,buildSourcePatchContext,graphFingerprint,createdAt,allowedPaths,collectPlanTargetPaths,validateUnifiedDiffsBelongToPlan,normalizedPath,buildSourcePatchEdits,buildSourcePatchEdit,path,rawDiff,unifiedDiff,buildSourcePatchSemantic,createCodeChangeSourcePatchSet,context,patches,result,normalizePatchSetOptions,generatedAt,buildPatchesForSet,buildSourcePatchSet,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchObject,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,normalizeUnifiedDiffText,normalized,validateUnifiedDiffBody,validateUnifiedDiffPathHeaders,extractUnifiedDiffHeaders,validateUnifiedDiffHeaderPath,normalizedPath,normalizeUnifiedDiffHeaderPath,assertUnifiedDiffHeaderPathSafety,bare,stripped,isUnifiedDiffTraversalHeader,matchesUnifiedDiffExpectedHeader,normalizedHeaderPathCandidate,stripLeadingDiffPrefix,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertCodeChangeSourcePatchAndActorAndEdits,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines - ProposeCodeChangePlansOptions: - ProposeCodeChangePlansResult: - EvaluateCodeChangeAcceptanceOptions: - CloseCodeChangesOptions: - PlanContext: - CodeChangePlanSemanticDraft: - AcceptanceContext: - CloseCodeChangeContext: - CreateCodeChangeReviewOptions: - CreatedCodeChangeReview: - CodeChangeReviewContext: - CreateCodeChangeSourcePatchOptions: - SourcePatchCreationContext: - SourcePatchSetBuildContext: - SourcePatchEditValidationContext: - SourcePatchSetValidationContext: - ApplyCodeChangeSourcePatchOptions: - ApplyCodeChangeSourcePatchResult: - NormalizedApplyCodeChangeSourcePatchRequest: - SourcePatchApplyLock: - SourcePatchEditTarget: - PreparedSourceEdit: - ParsedUnifiedDiffHunk: - UnifiedDiffParsingContext: - UnifiedDiffCursor: - IMPLEMENTATION_DIAGNOSTIC_CODES() - proposeCodeChangePlans() - generatedAt() - maxPlans() - context() - candidates() - plans() - buildPlansForCandidates() - plan() - buildPlanSetResult() - parseIsoDateTime() - generatedAt() - parseMaxPlans() - maxPlans() - buildPlanContext() - conclusions() - proposals() - collectImplementationDiagnostics() - findRelatedRecords() - createPlanForDiagnostic() - relatedRecords() - matchingProposals() - matchingConclusions() - target() - changes() - evidence() - confidence() - semantic() - confidenceForDiagnostic() - buildPlanEvidence() - buildPlanSemantic() - buildPlanResult() - createRepositoryPathProbe() - base() - absolute() - implementationDiagnosticRank() - evaluateCodeChangeAcceptance() - context() - reasons() - accepted() - acceptance() - buildAcceptanceContext() - evaluatedAt() - afterDiagnostics() - beforeDiagnosticIds() - afterById() - targetedDiagnosticIds() - buildAcceptanceReasons() - isAcceptancePassed() - appendAcceptanceGateReason() - buildAcceptanceResult() - closeCodeChanges() + handlePipeline() + root() + options() + result() + handleWatch() + root() + taskFile() + pipeline() + controller() + stop() + resolvePipelineRoot() + buildPipelineOptions() + buildCommonPipelineOptions() + resolveWatchTaskFile() + buildWorkspaceComparisonOptions() + formatWatchEvent() + stamp() + handleDiff() + mode() + out() + svg() + html() + maxRows() + parseDiffMode() + mode() + handleGraphDiff() + beforeFile() + afterFile() + diff() + out() + svg() + buildDiffPayload() + buildFileDiff() + beforeFile() + afterFile() context() - acceptances() - acceptedCount() - buildCloseCodeChangeContext() - evaluatedAt() - afterDiagnostics() - ensureClosePlanIdsAreUnique() - planIds() - buildCloseResult() - indexProposalsByDiagnostic() - index() - list() - indexConclusionsByDiagnostic() - index() - list() - collectTarget() - target() - collectTargetComponents() - paths() - symbols() - tickets() - versions() - addTargetEntries() - finalizeTarget() - buildChanges() - symbols() - sourceIntents() - rationale() - normalized() - exists() - titleFor() - record() - object() - startsWithImperative() - descriptionFor() - acceptanceCriteriaFor() - priorityFor() - confidenceFor() - riskFor() - level() - rollbackFor() - deterministicGeneration() - uniqueSorted() - createCodeChangeReviewPatch() + buildGitDiff() context() + root() + result() + handleReality() + graphFile() + graph() + diagnosticsPath() + diagnostics() + view() + out() + svg() markdown() - artifact() - buildCodeChangeReviewContext() - createdAt() - sortCodeChangeReviewPlans() - buildCodeChangeReviewMarkdown() - buildCodeChangeReviewArtifact() - renderCodeChangeReviewMarkdown() - lines() - buildCodeChangeReviewMarkdownLines() - appendPriorityHeader() - appendPlanDetails() - appendPlanChanges() - symbols() - appendAfterImplementationSection() - assertCodeChangeReviewPatch() - artifact() - validateReviewPatchKeys() - assertCodeChangeReviewPatchSchema() - assertReviewPatchSchemaVersion() - assertReviewPatchDateFields() - assertReviewPatchIds() - assertCodeChangeReviewPatchPlanCollections() - assertCodeChangeReviewPatchGeneration() - generation() - priorityRank() + handleExtract() + extractor() + root() + out() + handler() + handleExtractNl() + file() inline() - renderIds() - createCodeChangeSourcePatch() - context() - edits() - semantic() - patchHash() - buildSourcePatchContext() - graphFingerprint() - createdAt() - allowedPaths() - collectPlanTargetPaths() - validateUnifiedDiffsBelongToPlan() - normalizedPath() - buildSourcePatchEdits() - buildSourcePatchEdit() - path() - rawDiff() - unifiedDiff() - buildSourcePatchSemantic() - createCodeChangeSourcePatchSet() - context() - patches() result() - normalizePatchSetOptions() - generatedAt() - buildPatchesForSet() - buildSourcePatchSet() - assertCodeChangeSourcePatch() - patch() - editPaths() - assertCodeChangeSourcePatchObject() - patch() - validateSourcePatchSchema() - validateSourcePatchIdentifiers() - validateSourcePatchEdits() - collectSourcePatchEditPathActions() - paths() - editContext() - validateSourcePatchEdit() - normalizedEdit() - normalizedPath() - assertSourcePatchEditObject() - validateSourcePatchEditBody() - validateSourcePatchEditDiff() - assertUniqueSourcePatchEditPathAction() - normalizeSourcePatchEditPath() - normalizedPath() - ensureSourcePatchEditAction() - ensureSourcePatchEditInstruction() - validateSourcePatchHashAndId() - expectedHash() - validateSourcePatchGeneration() - validateSourcePatchAgainstPlan() - expectedChanges() - assertSourcePatchPlanBinding() - collectExpectedPlanChanges() - validateSourcePatchEditsAgainstPlan() - allowed() - editPath() - validateSourcePatchEvidence() - assertCodeChangeSourcePatchSet() - set() - context() - createSourcePatchSetValidationContext() - expectedPlanIds() - assertSourcePatchObject() - assertSourcePatchSetObject() - set() - validateSourcePatchSetSchema() - validateSourcePatchSetPatches() - patchIds() - validateSetPatchAndTrackDuplicates() - expectedPlan() - validateSetPatchGraphFingerprint() - assertUniqueSetPatchId() - validateSetPatchesPlanCoverage() - validateSourcePatchSetGeneration() - exactSourcePatchKeys() - actual() - assertSourcePatchIds() - assertSourcePatchStrings() - exactSourcePatchSet() - instructionFor() - symbols() - criteria() - normalizeUnifiedDiff() - normalized() - normalizeUnifiedDiffText() - normalized() - validateUnifiedDiffBody() - validateUnifiedDiffPathHeaders() - extractUnifiedDiffHeaders() - validateUnifiedDiffHeaderPath() - normalizedPath() - normalizeUnifiedDiffHeaderPath() - assertUnifiedDiffHeaderPathSafety() - bare() - stripped() - isUnifiedDiffTraversalHeader() - matchesUnifiedDiffExpectedHeader() - normalizedHeaderPathCandidate() - stripLeadingDiffPrefix() - applyCodeChangeSourcePatch() - request() + handleExtractGit() + result() + handleExtractAst() + result() + handleExtractConfig() + result() + handleExtractRuntime() + cycle() + result() + handleExtractMarkdown() + result() + handleExtractDocs() + result() + handleExtractCommunication() + result() + handleCommunication() + root() + graph() + analysis() + out() + markdown() + graphOut() + emitExtraction() + emitJson() + handleIntake() + operation() + inputPath() + absolute() + result() + intakeExitCode() + initProject() + moduleRoot() + sourceEnv() + targetEnv() + task() + sourceIgnore() + targetIgnore() + doctor() + result() + parseArgs() + options() + value() + next() + name() + next() + optionString() + value() + optionNullableString() + value() + optionBoolean() + value() + optionNumber() + value() + number() + optionList() + value() + optionNlMode() + optionLlmMode() + value() + optionTaskMode() + value() + optionSummaryMode() + optionPipelineTaskMode() + value() + reportPipelineDegradation() + printHelp() + invokedPath() + src/config/env.ts: + i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path + e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter + T2CConfig: + loadEnvFile() + explicit() + candidates() + content() + trimmed() + separator() + key() + value() + envString() + value() + envOptional() + value() + envNumber() + raw() + value() + envBoolean() + raw() + envList() + raw() + envLlmMode() + value() + getConfig() + model() root() - receiptPath() - lock() - idempotentResult() - prepared() - now() - receipt() - readExistingReceipt() - existing() - assertPatchApplicationRequest() - patch() - assertCodeChangeSourcePatchAndActorAndEdits() - assertPatchApprovalActor() - assertPatchApprovalHash() - assertPatchEditsContainDiffs() - acquireApplyLock() - lock() - prepareSourceEdits() - target() - before() - after() - prepareSourceEditTarget() - relative() - absolute() - existed() - assertSourcePatchTargetNotSymlink() - assertDeleteEditClearsAll() - validatePatchTargetForEdit() - applyPreparedEdits() - receipt() - rollbackErrors() - writePreparedEdits() - buildPatchApplyReceipt() - fileHashesAfter() - rollbackPreparedEdits() - assertExistingSourceReceipt() - relative() - absolute() - exists() - current() - assertSourceApplyReceipt() - validateSourceApplyReceiptShape() - validateSourceApplyReceiptIdentity() - validateSourceApplyReceiptTimestamps() - validateSourceApplyReceiptPathHashes() - expectedPaths() - hashPaths() - validateSourceApplyReceiptGeneration() - atomicWriteRaw() - applyUnifiedDiffToText() - baseLines() + configForDisplay() + hasOpenRouter() + src/diff/text-render.ts: + i: ./text-types.js + e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number + TextDiffSvgOptions: + SideBySideRow: + renderUnifiedDiff() + marker() + toSideBySideRows() + index() + line() + pairs() + renderTextDiffSvg() + theme() + maxRows() + maxColumns() + title() + charWidth() + rowHeight() + gutterWidth() + columnWidth() + width() + totals() + y() + rendered() + skipped() + summarizeDiffs() + diffHeading() + svgBody() + sideBySideRowMarkup() + changed() + number() + renderTextDiffHtml() + title() + sections() + renderHtmlSection() hunks() - output() - joinAppliedText() - parseUnifiedDiffIntoHunks() - normalizedDiff() - context() - createEmptyUnifiedDiffContext() - parseUnifiedDiffLines() - finalizeUnifiedDiffContext() - applyUnifiedDiffLineToContext() - header() - parseUnifiedDiffHeader() - buildParsedUnifiedDiffHunk() - applyUnifiedDiffHunks() - applyUnifiedDiffHunk() - oldIndex() - copyBaseLinesToCursor() - appendRemainingBaseLines() - validateHunkCounts() - oldCount() - newCount() - applyUnifiedDiffLine() - mark() - body() - applyUnifiedDiffContextLine() - applyUnifiedDiffDeletionLine() - applyUnifiedDiffAdditionLine() - splitKeep() - lines() + rows() + htmlCell() + cssClass() + number() + src/operations/subactor.ts: + i: ../core/types.js,./validation.js + e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding + CompileSubactorEnvelopeOptions: + valueMatchesType() + assertBinding() + ageSeconds() + compileSubactorProcessEnvelope() + variableById() + referenced() + variable() + binding() + humanApproval() + binding() + src/communication/intake-service.ts: + i: ./intake-store.js,node:crypto,node:fs,node:path + e: IntakeState,GovernedIntakeService + IntakeState: + GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) + scripts/live-model-comparison.mjs: + i: node:fs,node:path,node:url + e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile + REPO_ROOT() + main() + probe() + timeoutMs() + models() + root() + config() + result() + comparison() + rendered() + jsonTarget() + markdownTarget() + failedAudit() + message() + writeFile() src/extractors/ast.ts: i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result @@ -2336,56 +2189,6 @@ D: RawNlRecord: NlResponse: NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1) - src/core/schema/intent.ts: - i: ../id.js - e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation - GroundedValidationContext: - TodoProposalValidationContext: - CodeChangePlanValidationContext: - CodeChangeAcceptanceValidationContext: - assertIntentRecord() - record() - statement() - lifecycle() - source() - epistemic() - metadata() - assertIntentStatement() - statement() - assertIntentTarget() - target() - assertIntentLifecycle() - lifecycle() - assertIntentSource() - source() - lines() - assertIntentEpistemic() - epistemic() - assertIntentMetadata() - typedMetadata() - generation() - assertGenerationMatchesExtractor() - generation() - separator() - expectedGenerator() - assertIntentGenerationMetadata() - generation() - assertIntentRecords() - assertIntentGraph() - graph() - recordIds() - relationIds() - stats() - records() - expectedFingerprint() - assertIntentGraphDiff() - diff() - records() - change() - relations() - summary() - assertRelation() - relation() src/synthesis/todo-patch.ts: i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings @@ -2543,31 +2346,81 @@ D: measureLiveModelRun() responses() records() - enrichedRecords() - costUsd() - isLlmEnriched() - sourceKey() - lines() - compareLiveModelOutputs() - rightBySource() - pairs() - agreeing() - buildLiveModelComparison() - models() - passing() - pick() - measured() - renderLiveModelComparison() - sumUsage() - values() - round() - src/communication/llm/implementation.ts: - i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js - e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError - ParticipantCommunicationSynthesis: - AuditedCommunicationExtractionResult: - CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1) - CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1) + enrichedRecords() + costUsd() + isLlmEnriched() + sourceKey() + lines() + compareLiveModelOutputs() + rightBySource() + pairs() + agreeing() + buildLiveModelComparison() + models() + passing() + pick() + measured() + renderLiveModelComparison() + sumUsage() + values() + round() + src/communication/llm/implementation.ts: + i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js + e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError + ParticipantCommunicationSynthesis: + AuditedCommunicationExtractionResult: + CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1) + CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1) + src/core/schema/intent.ts: + i: ../id.js + e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation + GroundedValidationContext: + TodoProposalValidationContext: + CodeChangePlanValidationContext: + CodeChangeAcceptanceValidationContext: + assertIntentRecord() + record() + statement() + lifecycle() + source() + epistemic() + metadata() + assertIntentStatement() + statement() + assertIntentTarget() + target() + assertIntentLifecycle() + lifecycle() + assertIntentSource() + source() + lines() + assertIntentEpistemic() + epistemic() + assertIntentMetadata() + typedMetadata() + generation() + assertGenerationMatchesExtractor() + generation() + separator() + expectedGenerator() + assertIntentGenerationMetadata() + generation() + assertIntentRecords() + assertIntentGraph() + graph() + recordIds() + relationIds() + stats() + records() + expectedFingerprint() + assertIntentGraphDiff() + diff() + records() + change() + relations() + summary() + assertRelation() + relation() src/extractors/changelog.ts: i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower @@ -2819,45 +2672,6 @@ D: isImportantRecord() makeDiagnostic() severityRank() - src/core/io.ts: - i: ./types.js,node:fs,node:path - e: WalkOptions,WalkState,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,state,createWalkState,walkDirectory,entries,walkEntry,absolute,relative,isTargetFile,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix - WalkOptions: - WalkState: - DEFAULT_IGNORED_DIRS() - ensureDir() - readText() - stat() - pathExists() - writeJson() - writeText() - writeJsonl() - readJsonl() - body() - readJson() - walkFiles() - state() - createWalkState() - walkDirectory() - entries() - walkEntry() - absolute() - relative() - isTargetFile() - escapeRegex() - globToRegExp() - normalized() - char() - next() - after() - matchesAnyGlob() - normalized() - resolveGlobs() - files() - absolute() - relative() - relative() - relativePosix() src/core/schema/code-change.ts: i: ../id.js,../types.js e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch @@ -2905,31 +2719,6 @@ D: proposal() proposalIds() assertStringSetMatch() - src/synthesis/code-change-path.ts: - e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isUsefulCodeChangePath,isPlannablePath,normalized,segments,lowerSegments,basename,normalizePlannablePath,isCandidatePathSyntax,splitPathSegments,isInvalidSegmentShape,isConcretePath,hasShellPattern,isDisallowedSegment,isPlannableBasename,lowerBasename,dot,ext,isGeneratedArtifactPath - NON_SOURCE_DIR_SEGMENTS() - BINARY_EXTENSIONS() - GENERATED_ANALYSIS_BASENAMES() - T2C_ARTIFACT_BASENAMES() - EXTENSIONLESS_SOURCE_BASENAMES() - isUsefulCodeChangePath() - isPlannablePath() - normalized() - segments() - lowerSegments() - basename() - normalizePlannablePath() - isCandidatePathSyntax() - splitPathSegments() - isInvalidSegmentShape() - isConcretePath() - hasShellPattern() - isDisallowedSegment() - isPlannableBasename() - lowerBasename() - dot() - ext() - isGeneratedArtifactPath() src/synthesis/validation.ts: i: ../core/schema.js,../core/types.js e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values @@ -3230,35 +3019,6 @@ D: readListBlock() cursor() line() - src/graph/symbol-resolution.ts: - i: ../core/target.js,../core/types.js - e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,collectAstCandidates,byAlias,candidate,values,buildAstCandidate,uniqueSymbols,sortCandidates,collectNlResolutions,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration - AstSymbolCandidate: - NlSymbolResolution: - SymbolResolutionIndex: - buildSymbolResolutionIndex() - byAlias() - collectAstCandidates() - byAlias() - candidate() - values() - buildAstCandidate() - uniqueSymbols() - sortCandidates() - collectNlResolutions() - byNlRecord() - hasResolvedNlAstSymbolPair() - nl() - ast() - resolveSymbol() - matched() - selected() - paths() - pathSelects() - normalized() - candidatePath() - uniquePaths() - isAstDeclaration() src/graph/linker.ts: i: ../core/id.js,../core/schema.js,../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js,./symbol-resolution.js e: PairEvidence,RecordKeywords,DirectedRelation,SourceRelationRule,indexKeywords,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,isSuppressedConfigurationPair,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,objectSimilarity,scoreSharedTickets,scoreSharedSymbol,hasResolvedSymbol,hasSharedAlias,scoreSharedPath,points,capabilityOverlap,scoreSameAction,scoreObjectSimilarity,objectSimilarity,scoreSharedTopics,sharedTopics,scoreSourceKindPenalty,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation,intersects,set,intersectsAliases,set,countBy,key @@ -3531,6 +3291,35 @@ D: COMMUNICATION_ENRICHMENT_CONTRACT() PARTICIPANT_SYNTHESIS_CONTRACT() COMMUNICATION_RESPONSE_CONTRACT() + src/graph/symbol-resolution.ts: + i: ../core/target.js,../core/types.js + e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,collectAstCandidates,byAlias,candidate,values,buildAstCandidate,uniqueSymbols,sortCandidates,collectNlResolutions,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration + AstSymbolCandidate: + NlSymbolResolution: + SymbolResolutionIndex: + buildSymbolResolutionIndex() + byAlias() + collectAstCandidates() + byAlias() + candidate() + values() + buildAstCandidate() + uniqueSymbols() + sortCandidates() + collectNlResolutions() + byNlRecord() + hasResolvedNlAstSymbolPair() + nl() + ast() + resolveSymbol() + matched() + selected() + paths() + pathSelects() + normalized() + candidatePath() + uniquePaths() + isAstDeclaration() rust-ast/src/main.rs: i: proc_macro2::Span,quote::ToTokens,serde::Serialize,serde_json::,std::collections::BTreeSet,std::env,std::fs,std::path::,syn::spanned::Spanned,syn::visit:: e: Fact,Output,Collector,main,arguments,collect_files,new,qualified,add,excerpt,modifiers,visit_item_mod,visit_item_use,visit_item_struct,visit_item_enum,visit_item_trait,visit_item_type,visit_item_const,visit_item_static,visit_item_fn,visit_item_impl,visit_impl_item_fn,visit_expr_call,visit_expr_method_call @@ -3661,11 +3450,6 @@ D: diagnostic() validateTodoProposalContext() known() - src/semantic/reranker-llm.ts: - i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util - e: SemanticRerankerOptions,SemanticRerankerRequiredError - SemanticRerankerOptions: - SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),validateCandidateSetSize(-1),model(-1),modelRevision(-1),cached(-1),client(-1),payload(-1),response(-1),validateCandidateSetSize(-1),resolveRerankerModel(-1),resolveModelRevision(-1),revision(-1),resolveCachedResult(-1),assertSemanticRerankResult(-1),assertRerankerClient(-1),client(-1),assertTrackedSnapshotAvailable(-1),buildRerankerPayload(-1),records(-1),messagesForCandidates(-1),callReranker(-1),metadata(-1),buildRerankResult(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1) src/interfaces/mcp.ts: i: ../config/env.js,./mcp-errors.js,./mcp-resources.js,./mcp-tools.js,node:path,node:readline,node:url e: JsonRpcRequest,McpConnectionState,DISCOVERY_TTL_MS,LIST_TTL_MS,RESOURCE_TTL_MS,createMcpConnectionState,startMcpServer,resolvedConfig,state,input,parsed,request,result,handleMcpRequest,initializeLegacy,params,requested,protocolVersion,handleModernRequest,params,responseMeta,handleLegacyRequest,params,validateModernRequest,params,meta,validateModernMetadata,requested,capabilities,hasModernMetadata,meta,parseRequestLine,completePublic,serverInfo,serverMeta,serverInstructions,isLegacyProtocol,isJsonRpcRequest,candidate,requestId,id,rpcError,sendError,send,invokedPath @@ -3872,74 +3656,6 @@ D: isGeneratedAnalysisPath() segments() basename() - src/core/schema/utils.ts: - i: ../types.js - e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation,assertGroundedLlMMode,assertModeRequirements,assertDeterministicGeneration,assertDegradedRequirements - objectValue() - exactKeys() - expectedSet() - missing() - extra() - nonEmptyString() - nonBlankString() - nullableString() - enumValue() - stringArray() - nonEmptyUniqueStringArray() - repositoryPath() - normalized() - exactStringSet() - uniqueIdArray() - nonEmptyUniqueIdArray() - knownReferences() - unknown() - confidence() - assertAcyclicProposalDependencies() - byId() - visiting() - visited() - visit() - start() - dateString() - nullableDate() - fingerprint() - nonNegativeInteger() - countMap() - map() - countRecords() - key() - exactCounts() - actual() - isJsonValue() - assertGroundedGenerationMetadata() - generation() - assertGroundedLlMMode() - assertModeRequirements() - assertDeterministicGeneration() - assertDegradedRequirements() - src/semantic/reranker/candidate.ts: - i: ../../core/schema.js,../../core/types.js,./validation.js - e: CandidateValidationState,createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,state,assertCandidateSetHeader,createCandidateValidationState,addValidatedCandidate,validateCandidateId,validateCandidateRecords,declaration,module,validateCandidateRank,registerCandidate,existing,assertBoundedRanks,assertCandidateSetHash,expectedHash,comparePair - CandidateValidationState: - createSemanticCandidateSet() - grouped() - values() - assertSemanticCandidateSet() - state() - assertCandidateSetHeader() - createCandidateValidationState() - addValidatedCandidate() - validateCandidateId() - validateCandidateRecords() - declaration() - module() - validateCandidateRank() - registerCandidate() - existing() - assertBoundedRanks() - assertCandidateSetHash() - expectedHash() - comparePair() scripts/verify-structured-responses.mjs: i: node:fs,node:path e: root,sourceRoot,files,structuredCalls,source,typescriptFiles,absolute @@ -3985,6 +3701,51 @@ D: ClientOptions: T2CClient: health(-1),agentCard(-1),send(-1),result(-1),call(-1),task(-1),detail(-1),part(-1),getTask(-1),cancelTask(-1),listTasks(-1),extractNl(-1),extractGit(-1),extractAst(-1),extractConfig(-1),link(-1),diagnose(-1),summarize(-1),compareWorkspace(-1),diffGraphs(-1),response(-1),body(-1),message(-1),diffFiles(-1),diffGit(-1),reality(-1),pipeline(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),rpc(-1),body(-1),response(-1),payload(-1),getJson(-1),response(-1),request(-1),controller(-1),timer(-1),clearTimeout(-1) unwrapTask() + src/core/schema/utils.ts: + i: ../types.js + e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation,assertGroundedLlMMode,assertModeRequirements,assertDeterministicGeneration,assertDegradedRequirements + objectValue() + exactKeys() + expectedSet() + missing() + extra() + nonEmptyString() + nonBlankString() + nullableString() + enumValue() + stringArray() + nonEmptyUniqueStringArray() + repositoryPath() + normalized() + exactStringSet() + uniqueIdArray() + nonEmptyUniqueIdArray() + knownReferences() + unknown() + confidence() + assertAcyclicProposalDependencies() + byId() + visiting() + visited() + visit() + start() + dateString() + nullableDate() + fingerprint() + nonNegativeInteger() + countMap() + map() + countRecords() + key() + exactCounts() + actual() + isJsonValue() + assertGroundedGenerationMetadata() + generation() + assertGroundedLlMMode() + assertModeRequirements() + assertDeterministicGeneration() + assertDegradedRequirements() src/extractors/communication.ts: i: ../communication/identity.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,./communication-file-helpers.js,node:path e: CommunicationExtractionOptions,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,fileResult @@ -4774,7 +4535,6 @@ Graph compar... SemanticRerankResult: SemanticRerankGenerationInput: src/synthesis/code-change-plan/index.ts: - src/synthesis/code-change-plan/implementation.ts: src/interfaces/governed-intake.proto: src/interfaces/intake-schemas/command-v1.schema.json: src/interfaces/intake-schemas/result-v1.schema.json: diff --git a/project/mermaid.export b/project/mermaid.export index 564227b..b18415d 100644 --- a/project/mermaid.export +++ b/project/mermaid.export @@ -870,7 +870,7 @@ flowchart TD src__core__text__matches["matches"] src__core__text__detectPolarity("detectPolarity CC=8") src__core__text__stripped["stripped"] - src__core__text__normalized["normalized"] + src__core__text__normalized{{normalized CC=30}} src__core__text__normalizeToken["normalizeToken"] src__core__text__keywords["keywords"] src__core__text__GENERIC_TOPICS["GENERIC_TOPICS"] @@ -1129,28 +1129,28 @@ flowchart TD src__graph__diff__metricCard["metricCard"] src__graph__diff__escapeXml["escapeXml"] src__graph__diff__truncate["truncate"] - src__graph__symbol_resolution__buildSymbolResolutionIndex["buildSymbolResolutionIndex"] - src__graph__symbol_resolution__byAlias("byAlias CC=8") - src__graph__symbol_resolution__collectAstCandidates("collectAstCandidates CC=8") - src__graph__symbol_resolution__candidate["candidate"] - src__graph__symbol_resolution__values["values"] - src__graph__symbol_resolution__buildAstCandidate["buildAstCandidate"] - src__graph__symbol_resolution__uniqueSymbols["uniqueSymbols"] - src__graph__symbol_resolution__sortCandidates["sortCandidates"] - src__graph__symbol_resolution__collectNlResolutions["collectNlResolutions"] - src__graph__symbol_resolution__byNlRecord["byNlRecord"] - src__graph__symbol_resolution__hasResolvedNlAstSymbolPair("hasResolvedNlAstSymbolPair CC=10") - src__graph__symbol_resolution__nl["nl"] - src__graph__symbol_resolution__ast["ast"] - src__graph__symbol_resolution__resolveSymbol("resolveSymbol CC=8") - src__graph__symbol_resolution__matched["matched"] - src__graph__symbol_resolution__selected["selected"] - src__graph__symbol_resolution__paths["paths"] - src__graph__symbol_resolution__pathSelects["pathSelects"] - src__graph__symbol_resolution__normalized["normalized"] - src__graph__symbol_resolution__candidatePath["candidatePath"] - src__graph__symbol_resolution__uniquePaths["uniquePaths"] - src__graph__symbol_resolution__isAstDeclaration["isAstDeclaration"] + src__graph__linker__indexKeywords["indexKeywords"] + src__graph__linker__jaccard["jaccard"] + src__graph__linker__intersection["intersection"] + src__graph__linker__linkIntentRecords["linkIntentRecords"] + src__graph__linker__records["records"] + src__graph__linker__byId["byId"] + src__graph__linker__keywordIndex["keywordIndex"] + src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"] + src__graph__linker__candidatePairs["candidatePairs"] + src__graph__linker__resolvableBasenames["resolvableBasenames"] + src__graph__linker__left["left"] + src__graph__linker__right["right"] + src__graph__linker__evidence["evidence"] + src__graph__linker__directed["directed"] + src__graph__linker__deduplicateRecords["deduplicateRecords"] + src__graph__linker__existing["existing"] + src__graph__linker__collectCandidatePairs("collectCandidatePairs CC=10") + src__graph__linker__buckets("buckets CC=10") + src__graph__linker__astIds("astIds CC=10") + src__graph__linker__moduleAstIds("moduleAstIds CC=10") + src__graph__linker__declarationAstIds("declarationAstIds CC=10") + src__graph__linker__configurationIds("configurationIds CC=10") end subgraph src__interfaces src__interfaces__a2a_card__sendAgentCard["sendAgentCard"] @@ -1482,32 +1482,21 @@ flowchart TD end subgraph src__semantic src__semantic__reranker_llm__SemanticRerankerRequiredError__super["super"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates["rerankSemanticCandidates"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates{{rerankSemanticCandidates CC=25}} src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticCandidateSet["assertSemanticCandidateSet"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__validateCandidateSetSize["validateCandidateSetSize"] src__semantic__reranker_llm__SemanticRerankerRequiredError__model["model"] src__semantic__reranker_llm__SemanticRerankerRequiredError__modelRevision["modelRevision"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__cached["cached"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__client["client"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__payload["payload"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__response["response"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__resolveRerankerModel["resolveRerankerModel"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__resolveModelRevision["resolveModelRevision"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__revision["revision"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__resolveCachedResult["resolveCachedResult"] src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult["assertSemanticRerankResult"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__assertRerankerClient["assertRerankerClient"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshotAvailable["assertTrackedSnapshotAvailable"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__buildRerankerPayload["buildRerankerPayload"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__client["client"] src__semantic__reranker_llm__SemanticRerankerRequiredError__records("records CC=9") - src__semantic__reranker_llm__SemanticRerankerRequiredError__messagesForCandidates["messagesForCandidates"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__callReranker["callReranker"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__payload["payload"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__response("response CC=8") src__semantic__reranker_llm__SemanticRerankerRequiredError__metadata["metadata"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__buildRerankResult["buildRerankResult"] src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankerResponse["assertSemanticRerankerResponse"] src__semantic__reranker_llm__SemanticRerankerRequiredError__execFileAsync["execFileAsync"] src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshot["assertTrackedSnapshot"] src__semantic__reranker_llm__SemanticRerankerRequiredError__root["root"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__revision["revision"] src__semantic__reranker_llm__SemanticRerankerRequiredError__head["head"] src__semantic__reranker_llm__SemanticRerankerRequiredError__resolvedRevision["resolvedRevision"] src__semantic__reranker_llm__SemanticRerankerRequiredError__tracked("tracked CC=9") @@ -1523,86 +1512,97 @@ flowchart TD src__semantic__reranker_response__response["response"] src__semantic__reranker__result__createSemanticRerankResult["createSemanticRerankResult"] src__semantic__reranker__result__decisions["decisions"] - src__semantic__reranker__result__assertSemanticRerankResult{{assertSemanticRerankResult CC=29}} - src__semantic__reranker__result__seenDecisions["seenDecisions"] - src__semantic__reranker__result__acceptedDeclarations["acceptedDeclarations"] + src__semantic__reranker__result__assertSemanticRerankResult{{assertSemanticRerankResult CC=21}} + src__semantic__reranker__result__candidates["candidates"] + src__semantic__reranker__result__records{{records CC=16}} + src__semantic__reranker__result__seenDecisions{{seenDecisions CC=16}} + src__semantic__reranker__result__acceptedDeclarations{{acceptedDeclarations CC=16}} src__semantic__reranker__result__candidate["candidate"] - src__semantic__reranker__result__assertSemanticRerankHeader["assertSemanticRerankHeader"] - src__semantic__reranker__result__createCandidateAndRecordIndex["createCandidateAndRecordIndex"] - src__semantic__reranker__result__validateSemanticDecisionCandidate["validateSemanticDecisionCandidate"] - src__semantic__reranker__result__validateSemanticDecisionDecision["validateSemanticDecisionDecision"] - src__semantic__reranker__result__validateSemanticDecisionEvidence["validateSemanticDecisionEvidence"] src__semantic__reranker__result__citations["citations"] src__semantic__reranker__result__record["record"] - src__semantic__reranker__result__validateDecisionEvidenceScope["validateDecisionEvidenceScope"] - src__semantic__reranker__result__validateSemanticDecisionVerdict["validateSemanticDecisionVerdict"] - src__semantic__reranker__result__assertRerankResultHash["assertRerankResultHash"] src__semantic__reranker__result__expectedHash["expectedHash"] src__semantic__reranker__result__applyAcceptedSemanticRelations["applyAcceptedSemanticRelations"] - src__semantic__reranker__result__candidates["candidates"] src__semantic__reranker__result__added["added"] + src__semantic__reranker__result__assertSemanticVerdictReason["assertSemanticVerdictReason"] + src__semantic__reranker__result__allowedVerdicts["allowedVerdicts"] + src__semantic__reranker__result__allowedReasons["allowedReasons"] + src__semantic__reranker__candidate__createSemanticCandidateSet("createSemanticCandidateSet CC=8") + src__semantic__reranker__candidate__grouped["grouped"] + src__semantic__reranker__candidate__values["values"] + src__semantic__reranker__candidate__assertSemanticCandidateSet{{assertSemanticCandidateSet CC=27}} + src__semantic__reranker__candidate__records("records CC=14") + src__semantic__reranker__candidate__seenIds("seenIds CC=14") + src__semantic__reranker__candidate__seenPairs("seenPairs CC=14") + src__semantic__reranker__candidate__byDeclaration("byDeclaration CC=14") + src__semantic__reranker__candidate__declaration["declaration"] + src__semantic__reranker__candidate__module["module"] + src__semantic__reranker__candidate__existing["existing"] + src__semantic__reranker__candidate__expectedHash["expectedHash"] + src__semantic__reranker__candidate__comparePair["comparePair"] + src__semantic__reranker__validation__requiredText["requiredText"] + src__semantic__reranker__validation__validateRetrieval["validateRetrieval"] end subgraph src__services - src__services__actions__executeAction["executeAction"] - src__services__actions__root["root"] - src__services__actions__handler["handler"] - src__services__actions__executeExtractNlAction["executeExtractNlAction"] + src__services__actions__executeAction{{executeAction CC=83}} + src__services__actions__root{{root CC=83}} src__services__actions__file["file"] src__services__actions__text["text"] - src__services__actions__executeExtractGitAction["executeExtractGitAction"] - src__services__actions__executeExtractAstAction["executeExtractAstAction"] - src__services__actions__executeExtractConfigAction["executeExtractConfigAction"] - src__services__actions__executeExtractMarkdownAction["executeExtractMarkdownAction"] - src__services__actions__executeExtractDocsAction["executeExtractDocsAction"] - src__services__actions__executeExtractCommunicationAction["executeExtractCommunicationAction"] - src__services__actions__executeAnalyzeCommunicationAction["executeAnalyzeCommunicationAction"] src__services__actions__analysis["analysis"] - src__services__actions__executeLinkAction["executeLinkAction"] src__services__actions__records["records"] - src__services__actions__executeDiagnoseAction["executeDiagnoseAction"] src__services__actions__graph["graph"] - src__services__actions__executeSummarizeAction["executeSummarizeAction"] src__services__actions__diagnostics["diagnostics"] - src__services__actions__executeProposeTodoAction["executeProposeTodoAction"] src__services__actions__result["result"] src__services__actions__output["output"] - src__services__actions__executeRenderTodoAction["executeRenderTodoAction"] src__services__actions__synthesis["synthesis"] src__services__actions__todoPath["todoPath"] src__services__actions__patchPath["patchPath"] src__services__actions__auditPath["auditPath"] src__services__actions__todoContent["todoContent"] src__services__actions__rendered["rendered"] - src__services__actions__executeApplyTodoAction["executeApplyTodoAction"] src__services__actions__receiptPath["receiptPath"] - src__services__actions__executeProposeCodeChangeAction("executeProposeCodeChangeAction CC=10") src__services__actions__conclusions["conclusions"] src__services__actions__proposals["proposals"] - src__services__actions__executeRenderCodeChangeAction("executeRenderCodeChangeAction CC=8") src__services__actions__planSet["planSet"] src__services__actions__review["review"] - src__services__actions__executeProposeSourcePatchAction["executeProposeSourcePatchAction"] src__services__actions__plan["plan"] src__services__actions__unifiedDiffs["unifiedDiffs"] src__services__actions__patch["patch"] - src__services__actions__executeApplySourcePatchAction["executeApplySourcePatchAction"] - src__services__actions__executeEvaluateCodeChangeAction["executeEvaluateCodeChangeAction"] src__services__actions__beforeGraph("beforeGraph CC=8") src__services__actions__beforeDiagnostics("beforeDiagnostics CC=8") src__services__actions__afterGraph("afterGraph CC=8") src__services__actions__afterDiagnostics("afterDiagnostics CC=8") - src__services__actions__executeCloseCodeChangeAction("executeCloseCodeChangeAction CC=13") src__services__actions__value["value"] - src__services__actions__executeDiffAction["executeDiffAction"] src__services__actions__beforeInput["beforeInput"] src__services__actions__afterInput["afterInput"] src__services__actions__before["before"] src__services__actions__after["after"] src__services__actions__diff["diff"] src__services__actions__svg["svg"] - src__services__actions__executeDiffFilesAction["executeDiffFilesAction"] src__services__actions__beforePath["beforePath"] src__services__actions__afterPath["afterPath"] + src__services__actions__view["view"] + src__services__actions__filterCommunicationGraph["filterCommunicationGraph"] + src__services__actions__filter["filter"] + src__services__actions__parseCommunicationGraphFilter["parseCommunicationGraphFilter"] + src__services__actions__participant["participant"] + src__services__actions__role["role"] + src__services__actions__ticket["ticket"] + src__services__actions__communicationOnly["communicationOnly"] + src__services__actions__matchesCommunicationFilter["matchesCommunicationFilter"] + src__services__actions__matchesParticipant["matchesParticipant"] + src__services__actions__matchesRole["matchesRole"] + src__services__actions__matchesTicket["matchesTicket"] + src__services__actions__nlModeValue["nlModeValue"] + src__services__actions__llmModeValue["llmModeValue"] + src__services__actions__taskSynthesisMode["taskSynthesisMode"] + src__services__actions__summaryModeValue["summaryModeValue"] + src__services__actions__pipelineTaskMode["pipelineTaskMode"] + src__services__actions__withTextDiffViews["withTextDiffViews"] + src__services__actions__title["title"] + src__services__actions__readGraphInput["readGraphInput"] + src__services__actions__safePath["safePath"] + src__services__actions__readActionObject["readActionObject"] + src__services__actions__resolveRoot["resolveRoot"] end subgraph src__summary src__summary__payload__compactSummaryPayload("compactSummaryPayload CC=12") @@ -1663,29 +1663,20 @@ flowchart TD src__synthesis__task_synthesis_payload__groundedDiagnostics["groundedDiagnostics"] src__synthesis__task_synthesis_payload__compactRecord["compactRecord"] src__synthesis__task_synthesis_payload__compareDiagnostics["compareDiagnostics"] - src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS["NON_SOURCE_DIR_SEGMENTS"] - src__synthesis__code_change_path__BINARY_EXTENSIONS["BINARY_EXTENSIONS"] - src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES["GENERATED_ANALYSIS_BASENAMES"] - src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES["T2C_ARTIFACT_BASENAMES"] - src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES["EXTENSIONLESS_SOURCE_BASENAMES"] - src__synthesis__code_change_path__isUsefulCodeChangePath["isUsefulCodeChangePath"] - src__synthesis__code_change_path__isPlannablePath["isPlannablePath"] + src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS{{NON_SOURCE_DIR_SEGMENTS CC=38}} + src__synthesis__code_change_path__BINARY_EXTENSIONS{{BINARY_EXTENSIONS CC=38}} + src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES{{GENERATED_ANALYSIS_BASENAMES CC=38}} + src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES{{T2C_ARTIFACT_BASENAMES CC=38}} + src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES{{EXTENSIONLESS_SOURCE_BASENAMES CC=38}} + src__synthesis__code_change_path__isPlannablePath{{isPlannablePath CC=38}} src__synthesis__code_change_path__normalized["normalized"] src__synthesis__code_change_path__segments["segments"] src__synthesis__code_change_path__lowerSegments["lowerSegments"] src__synthesis__code_change_path__basename["basename"] - src__synthesis__code_change_path__normalizePlannablePath["normalizePlannablePath"] - src__synthesis__code_change_path__isCandidatePathSyntax["isCandidatePathSyntax"] - src__synthesis__code_change_path__splitPathSegments["splitPathSegments"] - src__synthesis__code_change_path__isInvalidSegmentShape["isInvalidSegmentShape"] - src__synthesis__code_change_path__isConcretePath["isConcretePath"] - src__synthesis__code_change_path__hasShellPattern["hasShellPattern"] - src__synthesis__code_change_path__isDisallowedSegment["isDisallowedSegment"] - src__synthesis__code_change_path__isPlannableBasename("isPlannableBasename CC=11") src__synthesis__code_change_path__lowerBasename["lowerBasename"] src__synthesis__code_change_path__dot["dot"] src__synthesis__code_change_path__ext["ext"] - src__synthesis__code_change_path__isGeneratedArtifactPath("isGeneratedArtifactPath CC=10") + src__synthesis__code_change_path__isUsefulCodeChangePath["isUsefulCodeChangePath"] src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse["materializeTaskSynthesisResponse"] src__synthesis__task_synthesis_materialize__parsed["parsed"] src__synthesis__task_synthesis_materialize__conclusionKeys["conclusionKeys"] @@ -1715,6 +1706,15 @@ flowchart TD src__synthesis__task_synthesis_materialize__target["target"] src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria["normalizeAcceptanceCriteria"] src__synthesis__task_synthesis_materialize__criteria["criteria"] + src__synthesis__task_synthesis_materialize__source["source"] + src__synthesis__task_synthesis_materialize__assertProposalEvidenceMatchesConclusions["assertProposalEvidenceMatchesConclu"] + src__synthesis__task_synthesis_materialize__byId["byId"] + src__synthesis__task_synthesis_materialize__cited["cited"] + src__synthesis__task_synthesis_materialize__diagnostics["diagnostics"] + src__synthesis__task_synthesis_materialize__records["records"] + src__synthesis__todo_patch__diagnosticReportFingerprint["diagnosticReportFingerprint"] + src__synthesis__todo_patch__createTodoPatch("createTodoPatch CC=8") + src__synthesis__todo_patch__expectedValidation["expectedValidation"] end subgraph src__tf src__tf__classifier__dynamicImport["dynamicImport"] @@ -1790,11 +1790,7 @@ flowchart TD src__watch__watcher__finish["finish"] end subgraph src__web - src__web__diff_ui__diffUiStyles["diffUiStyles"] - src__web__diff_ui__diffUiRunPanel["diffUiRunPanel"] - src__web__diff_ui__diffUiFiltersPanel["diffUiFiltersPanel"] - src__web__diff_ui__diffUiBodyMarkup["diffUiBodyMarkup"] - src__web__diff_ui__diffUiScriptMarkup{{diffUiScriptMarkup CC=46}} + src__web__diff_ui__diffUiHtml{{diffUiHtml CC=52}} src__web__diff_ui__byId["byId"] src__web__diff_ui__requestHeaders["requestHeaders"] src__web__diff_ui__formatBytes["formatBytes"] @@ -1803,8 +1799,6 @@ flowchart TD src__web__diff_ui__fillSelect["fillSelect"] src__web__diff_ui__loadRuns("loadRuns CC=12") src__web__diff_ui__compareGraphs{{compareGraphs CC=15}} - src__web__diff_ui__diffUiTemplate["diffUiTemplate"] - src__web__diff_ui__diffUiHtml["diffUiHtml"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -2300,11 +2294,6 @@ flowchart TD src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings - src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText @@ -2390,24 +2379,29 @@ flowchart TD src__graph__diff__changedFieldPaths --> src__graph__diff__isObject src__graph__diff__compareRelations --> src__graph__diff__relationKey src__graph__diff__metricCard --> src__graph__diff__escapeXml - src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectAstCandidates - src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__sortCandidates - src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectNlResolutions - src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__uniqueSymbols - src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__buildAstCandidate - src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__uniqueSymbols - src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__buildAstCandidate - src__graph__symbol_resolution__sortCandidates --> src__graph__symbol_resolution__values - src__graph__symbol_resolution__collectNlResolutions --> src__graph__symbol_resolution__resolveSymbol - src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol - src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects - src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths - src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths + src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords + src__graph__linker__linkIntentRecords --> src__graph__linker__indexKeywords + src__graph__linker__linkIntentRecords --> src__graph__linker__collectCandidatePairs + src__graph__linker__linkIntentRecords --> src__graph__linker__indexResolvableBasenames + src__graph__linker__linkIntentRecords --> src__graph__linker__scorePair + src__graph__linker__linkIntentRecords --> src__graph__linker__determineRelation + src__graph__linker__records --> src__graph__linker__scorePair + src__graph__linker__records --> src__graph__linker__determineRelation + src__graph__linker__byId --> src__graph__linker__set + src__graph__linker__keywordIndex --> src__graph__linker__scorePair + src__graph__linker__keywordIndex --> src__graph__linker__determineRelation + src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair + src__graph__linker__symbolResolutionIndex --> src__graph__linker__determineRelation + src__graph__linker__candidatePairs --> src__graph__linker__scorePair + src__graph__linker__candidatePairs --> src__graph__linker__determineRelation + src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair + src__graph__linker__resolvableBasenames --> src__graph__linker__determineRelation + src__graph__linker__deduplicateRecords --> src__graph__linker__set + src__graph__linker__deduplicateRecords --> src__graph__linker__values + src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTargetBuckets + src__graph__linker__collectCandidatePairs --> src__graph__linker__indexKeywordBuckets classDef highCC fill:#ff6b6b,stroke:#c92a2a,color:#fff classDef medCC fill:#ffd43b,stroke:#f08c00,color:#000 - class examples__backend__src__server__handleRequest,src__core__record__generationMetadata,src__web__diff_ui__diffUiScriptMarkup,src__web__diff_ui__compareGraphs,src__semantic__reranker__result__assertSemanticRerankResult,src__llm__openrouter__OpenRouterClient__timeout,src__llm__openrouter__OpenRouterClient__request,src__interfaces__a2a_message__parseCommand,src__interfaces__a2a_history__runListItem,src__diff__text__myers,src__diff__text__n,src__diff__text__m,src__diff__text__max,src__diff__text__offset,src__diff__text__y,src__diff__text__backtrack,src__diff__text__x,src__diff__reality__buildRealityView,src__diff__reality__resolveStatus,src__diff__reality__renderRealitySvg,src__diff__git__BINARY_EXTENSIONS,src__diff__git__collectGitDiff,src__pipeline__run__runPipeline,src__pipeline__run__persistFailedRun,src__evaluation__gold_types__assertLinkingCohorts,src__evaluation__gold_types__labels,src__evaluation__gold_types__modules,src__evaluation__gold_cases__evaluateRerankingCase,src__evaluation__gold_cases__buildFixtureRecords,src__evaluation__gold_cases__labels highCC + class examples__backend__src__server__handleRequest,src__extractors__communication_file_helpers__buildLocalWarnings,src__services__actions__executeAction,src__services__actions__root,src__core__text__normalized,src__core__text__inferObject,src__core__io__walkFiles,src__web__diff_ui__diffUiHtml,src__web__diff_ui__compareGraphs,src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates,src__semantic__reranker__result__assertSemanticRerankResult,src__semantic__reranker__result__records,src__semantic__reranker__result__seenDecisions,src__semantic__reranker__result__acceptedDeclarations,src__semantic__reranker__candidate__assertSemanticCandidateSet,src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS,src__synthesis__code_change_path__BINARY_EXTENSIONS,src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES,src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES,src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES,src__synthesis__code_change_path__isPlannablePath,src__synthesis__code_change_plan__implementation__proposeCodeChangePlans,src__synthesis__code_change_plan__implementation__paths,src__synthesis__code_change_plan__implementation__assertCodeChangeReviewPatch,src__synthesis__code_change_plan__implementation__assertCodeChangeSourcePatch,src__synthesis__code_change_plan__implementation__assertCodeChangeSourcePatchSet,src__synthesis__code_change_plan__implementation__normalizeUnifiedDiff,src__synthesis__code_change_plan__implementation__applyCodeChangeSourcePatch,src__synthesis__code_change_plan__implementation__applyUnifiedDiffToText,src__synthesis__code_change_plan__implementation__cursor highCC class rust_ast__src__main__collect_files,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__cli__main,src__cli__handleRenderTodo,src__cli__handleApplyTodo,src__cli__options,src__cli__formatWatchEvent,src__cli__stamp,src__cli__handleDiff,src__cli__handleReality,src__cli__handleCommunication,src__cli__handleIntake,src__cli__intakeExitCode,src__cli__parseArgs,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk,src__extractors__changelog__extractChangelog,src__extractors__changelog__changelogAction medCC diff --git a/project/planfile-tickets.yaml b/project/planfile-tickets.yaml index 812442a..b43fc0f 100644 --- a/project/planfile-tickets.yaml +++ b/project/planfile-tickets.yaml @@ -1,5 +1,5 @@ source: code2llm -# generated in 0.15s +# generated in 0.17s schema: code2llm.planfile_tickets.v1 project_root: /home/tom/github/semcod/todo2code tickets: @@ -160,6 +160,40 @@ tickets: files: - src/communication/identity.ts dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)' + description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:466` + with cyclomatic complexity 34 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/core/text.ts + dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)' + description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:467` + with cyclomatic complexity 30 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/core/text.ts + dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)' description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153` @@ -370,10 +404,10 @@ tickets: - src/pipeline/run.ts dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult - (CC=29)' - description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult` - at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 29 (limit 15). + title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates + (CC=25)' + description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates` + at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -385,12 +419,255 @@ tickets: - complexity - refactor files: - - src/semantic/reranker/result.ts - dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult + - src/semantic/reranker-llm.ts + dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet + (CC=27)' + description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet` + at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit + 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/semantic/reranker/candidate.ts + dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)' + description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72` + with cyclomatic complexity 83 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/services/actions.ts + dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)' + description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73` + with cyclomatic complexity 83 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/services/actions.ts + dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS + (CC=38)' + description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS` + at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit + 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-path.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES + (CC=38)' + description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES` + at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit + 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-path.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES + (CC=38)' + description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES` + at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit + 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-path.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS + (CC=38)' + description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS` + at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit + 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-path.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES + (CC=38)' + description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES` + at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit + 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-path.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath + (CC=38)' + description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath` + at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit + 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-path.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch + (CC=41)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` + at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity + 41 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText + (CC=47)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText` + at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity + 47 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch + (CC=47)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` + at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity + 47 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor + (CC=25)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor` + at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity + 25 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: high + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiScriptMarkup (CC=46)' - description: 'code2llm reports `src.web.diff-ui.diffUiScriptMarkup` at `src/web/diff-ui.ts:127` - with cyclomatic complexity 46 (limit 15). + title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)' + description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1` + with cyclomatic complexity 52 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -403,7 +680,7 @@ tickets: - refactor files: - src/web/diff-ui.ts - dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiScriptMarkup + dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml - signal: code2llm_god title: 'Split god module: src/graph/linker.ts' description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines, @@ -422,9 +699,9 @@ tickets: - src/graph/linker.ts dedupe_key: code2llm:god:src/graph/linker.ts - signal: code2llm_god - title: 'Split god module: src/synthesis/code-change-plan/implementation-helpers.ts' - description: 'code2llm reports `src/synthesis/code-change-plan/implementation-helpers.ts` - as a large module (2239 lines, 25 classes). + title: 'Split god module: src/synthesis/code-change-plan/implementation.ts' + description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts` + as a large module (1310 lines, 10 classes). Split it by responsibility, keep public imports stable, and add focused tests @@ -436,8 +713,8 @@ tickets: - god-module - refactor files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-helpers.ts + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts - signal: code2llm_smell_god_function title: 'Address code smell: God Function: decode_envelope' description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`. @@ -534,13 +811,13 @@ tickets: - src/cli.ts dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-helpers' - description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-helpers` - in `src/synthesis/code-change-plan/implementation-helpers.ts:1`. + title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation' + description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation` + in `src/synthesis/code-change-plan/implementation.ts:1`. - Module ''src.synthesis.code-change-plan.implementation-helpers'' is too large - (308 functions, 25 classes). Consider splitting into sub-modules. + Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions, + 10 classes). Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -551,9 +828,9 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1:God - Module: src.synthesis.code-change-plan.implementation-helpers' + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God + Module: src.synthesis.code-change-plan.implementation' - signal: code2llm_cc title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest (CC=16)' @@ -782,6 +1059,23 @@ tickets: files: - src/communication/intake-protobuf.ts dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)' + description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with + cyclomatic complexity 15 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/core/io.ts + dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)' description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141` @@ -1124,6 +1418,25 @@ tickets: files: - src/evaluation/gold-types.ts dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.extractors.communication-file-helpers.buildLocalWarnings + (CC=18)' + description: 'code2llm reports `src.extractors.communication-file-helpers.buildLocalWarnings` + at `src/extractors/communication-file-helpers.ts:254` with cyclomatic complexity + 18 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/extractors/communication-file-helpers.ts + dedupe_key: code2llm:cc:src/extractors/communication-file-helpers.ts:src.extractors.communication-file-helpers.buildLocalWarnings - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)' description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107` @@ -1195,10 +1508,11 @@ tickets: - src/pipeline/run.ts dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - (CC=19)' - description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144` - with cyclomatic complexity 19 (limit 15). + title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations + (CC=16)' + description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations` + at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit + 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1210,13 +1524,13 @@ tickets: - complexity - refactor files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS + - src/semantic/reranker/result.ts + dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - (CC=19)' - description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145` - with cyclomatic complexity 19 (limit 15). + title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult + (CC=21)' + description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult` + at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1228,12 +1542,12 @@ tickets: - complexity - refactor files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS + - src/semantic/reranker/result.ts + dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)' - description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147` - with cyclomatic complexity 19 (limit 15). + title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)' + description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110` + with cyclomatic complexity 16 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1245,12 +1559,178 @@ tickets: - complexity - refactor files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository + - src/semantic/reranker/result.ts + dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)' - description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:139` - with cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions + (CC=16)' + description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111` + with cyclomatic complexity 16 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/semantic/reranker/result.ts + dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch + (CC=23)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch` + at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity + 23 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet + (CC=18)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet` + at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity + 18 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff + (CC=17)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff` + at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity + 17 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths + (CC=16)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths` + at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity + 16 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans + (CC=17)' + description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` + at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity + 17 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS + (CC=19)' + description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144` + with cyclomatic complexity 19 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/watch/watcher.ts + dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS + (CC=19)' + description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145` + with cyclomatic complexity 19 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/watch/watcher.ts + dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)' + description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147` + with cyclomatic complexity 19 (limit 15). + + + Extract smaller functions, flatten conditionals, or split strategy branches. Re-run + code2llm after the change and keep tests green.' + priority: normal + labels: + - llm-ready + - code2llm + - complexity + - refactor + files: + - src/watch/watcher.ts + dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository +- signal: code2llm_cc + title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)' + description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45` + with cyclomatic complexity 15 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1265,13 +1745,12 @@ tickets: - src/web/diff-ui.ts dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, changelog, self, todo, markdown_mode' - description: 'code2llm reports `Data Clump: root, changelog, self, todo, markdown_mode` - in `sdk/python/todo2code/client.py:332`. + title: 'Address code smell: Data Clump: action, self, payload' + description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:249`. - Arguments (root, changelog, self, todo, markdown_mode) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + sdk.python.todo2code.client.T2CClient.call. Make the smallest refactor that removes the smell and run local tests.' @@ -1283,16 +1762,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: - root, changelog, self, todo, markdown_mode' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: + action, self, payload' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, changelog, self, todo, markdown_mode' - description: 'code2llm reports `Data Clump: root, changelog, self, todo, markdown_mode` - in `sdk/python/todo2code/client.py:341`. + title: 'Address code smell: Data Clump: action, self, payload' + description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:261`. - Arguments (root, changelog, self, todo, markdown_mode) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + sdk.python.todo2code.client.T2CClient.call. Make the smallest refactor that removes the smell and run local tests.' @@ -1304,14 +1782,14 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: - root, changelog, self, todo, markdown_mode' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: + action, self, payload' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, excludes, self, patterns' - description: 'code2llm reports `Data Clump: root, excludes, self, patterns` in `sdk/python/todo2code/client.py:354`. + title: 'Address code smell: Data Clump: excludes, self, patterns, root' + description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:354`. - Arguments (root, excludes, self, patterns) are used together in multiple functions: + Arguments (excludes, self, patterns, root) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. @@ -1325,13 +1803,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: - root, excludes, self, patterns' + excludes, self, patterns, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, excludes, self, patterns' - description: 'code2llm reports `Data Clump: root, excludes, self, patterns` in `sdk/python/todo2code/client.py:362`. + title: 'Address code smell: Data Clump: excludes, self, patterns, root' + description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:362`. - Arguments (root, excludes, self, patterns) are used together in multiple functions: + Arguments (excludes, self, patterns, root) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. @@ -1345,13 +1823,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: - root, excludes, self, patterns' + excludes, self, patterns, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, file, self, nl_mode' - description: 'code2llm reports `Data Clump: root, file, self, nl_mode` in `sdk/python/todo2code/client.py:307`. + title: 'Address code smell: Data Clump: file, nl_mode, self, root' + description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:307`. - Arguments (root, file, self, nl_mode) are used together in multiple functions: + Arguments (file, nl_mode, self, root) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. @@ -1365,13 +1843,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: - root, file, self, nl_mode' + file, nl_mode, self, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, file, self, nl_mode' - description: 'code2llm reports `Data Clump: root, file, self, nl_mode` in `sdk/python/todo2code/client.py:312`. + title: 'Address code smell: Data Clump: file, nl_mode, self, root' + description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:312`. - Arguments (root, file, self, nl_mode) are used together in multiple functions: + Arguments (file, nl_mode, self, root) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. @@ -1385,14 +1863,15 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: - root, file, self, nl_mode' + file, nl_mode, self, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, action, payload' - description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`. + title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo' + description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root, + todo` in `sdk/python/todo2code/client.py:332`. - Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, - sdk.python.todo2code.client.T2CClient.call. + Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1404,15 +1883,16 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: - self, action, payload' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: + markdown_mode, changelog, self, root, todo' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, action, payload' - description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`. + title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo' + description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root, + todo` in `sdk/python/todo2code/client.py:341`. - Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, - sdk.python.todo2code.client.T2CClient.call. + Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1424,8 +1904,8 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: - self, action, payload' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: + markdown_mode, changelog, self, root, todo' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: MAX_PER_SECTION' description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`. @@ -1466,7 +1946,7 @@ tickets: OBJECT_PLACEHOLDERS' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: PATH_ROOTS' - description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`. + description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:369`. Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0. @@ -1481,7 +1961,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:369:God Function: PATH_ROOTS' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: RPC' description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`. @@ -1579,7 +2059,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyAcceptedSemanticRelations' description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in - `src/semantic/reranker/result.ts:227`. + `src/semantic/reranker/result.ts:179`. Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0. @@ -1594,27 +2074,8 @@ tickets: - god-function files: - src/semantic/reranker/result.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:227:God + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God Function: applyAcceptedSemanticRelations' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: applyCodeChangeSourcePatch' - description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-helpers.ts:1663`. - - - Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1663:God - Function: applyCodeChangeSourcePatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyTodoPatch' description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`. @@ -1809,6 +2270,25 @@ tickets: - src/communication/intake-service.ts dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God Function: assertProjectionWritable' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: assertSourceApplyReceipt' + description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`. + + + Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God + Function: assertSourceApplyReceipt' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertTodoPatchArtifact' description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`. @@ -1866,6 +2346,24 @@ tickets: - src/synthesis/todo-patch.ts dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function: atomicWrite' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: base' + description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`. + + + Function ''base'' is oversized: CC=11, fan-out=16, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/io.ts + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:92:God Function: base' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: baseWorktree' description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`. @@ -1961,11 +2459,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function: body' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: buildAcceptanceContext' - description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers.ts:376`. + title: 'Address code smell: God Function: byDeclaration' + description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`. - Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0. + Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -1976,9 +2474,9 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:376:God - Function: buildAcceptanceContext' + - src/semantic/reranker/candidate.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God + Function: byDeclaration' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: byKey' description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`. @@ -1998,6 +2496,25 @@ tickets: - src/communication/llm/implementation-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God Function: byKey' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: candidates' + description: 'code2llm reports `God Function: candidates` in `src/synthesis/code-change-plan/implementation.ts:124`. + + + Function ''candidates'' is oversized: CC=7, fan-out=18, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:124:God + Function: candidates' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: changePaths' description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`. @@ -2055,6 +2572,25 @@ tickets: - src/extractors/todo.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function: classified' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: closeCodeChanges' + description: 'code2llm reports `God Function: closeCodeChanges` in `src/synthesis/code-change-plan/implementation.ts:298`. + + + Function ''closeCodeChanges'' is oversized: CC=6, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:298:God + Function: closeCodeChanges' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: collect' description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`. @@ -2094,11 +2630,107 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God Function: collectCommunicationMetadata' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: collectRecordDiagnostics' - description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`. + title: 'Address code smell: God Function: collectRecordDiagnostics' + description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`. + + + Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/graph/diagnostics.ts + dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function: + collectRecordDiagnostics' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: collect_files' + description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`. + + + Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - rust-ast/src/main.rs + dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function: + collect_files' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: communicationSegments' + description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`. + + + Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/extractors/communication-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God + Function: communicationSegments' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: compareWorkspaceIntent' + description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`. + + + Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/comparison/workspace.ts + dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function: + compareWorkspaceIntent' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: compileSubactorProcessEnvelope' + description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in + `src/operations/subactor.ts:41`. + + + Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/operations/subactor.ts + dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function: + compileSubactorProcessEnvelope' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: conclusions' + description: 'code2llm reports `God Function: conclusions` in `src/synthesis/code-change-plan/implementation.ts:118`. - Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0. + Function ''conclusions'' is oversized: CC=7, fan-out=18, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2109,15 +2741,15 @@ tickets: - code-smell - god-function files: - - src/graph/diagnostics.ts - dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function: - collectRecordDiagnostics' + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:118:God + Function: conclusions' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: collect_files' - description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`. + title: 'Address code smell: God Function: conclusionsByDiagnostic' + description: 'code2llm reports `God Function: conclusionsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:122`. - Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0. + Function ''conclusionsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2128,15 +2760,15 @@ tickets: - code-smell - god-function files: - - rust-ast/src/main.rs - dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function: - collect_files' + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:122:God + Function: conclusionsByDiagnostic' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: communicationSegments' - description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`. + title: 'Address code smell: God Function: configurationRecords' + description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`. - Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0. + Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2147,15 +2779,15 @@ tickets: - code-smell - god-function files: - - src/extractors/communication-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God - Function: communicationSegments' + - src/extractors/configuration.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God + Function: configurationRecords' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: compareWorkspaceIntent' - description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`. + title: 'Address code smell: God Function: createCodeChangeReviewPatch' + description: 'code2llm reports `God Function: createCodeChangeReviewPatch` in `src/synthesis/code-change-plan/implementation.ts:547`. - Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0. + Function ''createCodeChangeReviewPatch'' is oversized: CC=6, fan-out=15, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2166,16 +2798,15 @@ tickets: - code-smell - god-function files: - - src/comparison/workspace.ts - dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function: - compareWorkspaceIntent' + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:547:God + Function: createCodeChangeReviewPatch' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: compileSubactorProcessEnvelope' - description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in - `src/operations/subactor.ts:41`. + title: 'Address code smell: God Function: createCodeChangeSourcePatch' + description: 'code2llm reports `God Function: createCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation.ts:698`. - Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0. + Function ''createCodeChangeSourcePatch'' is oversized: CC=13, fan-out=20, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2186,15 +2817,16 @@ tickets: - code-smell - god-function files: - - src/operations/subactor.ts - dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function: - compileSubactorProcessEnvelope' + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:698:God + Function: createCodeChangeSourcePatch' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: configurationRecords' - description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`. + title: 'Address code smell: God Function: createCodeChangeSourcePatchSet' + description: 'code2llm reports `God Function: createCodeChangeSourcePatchSet` in + `src/synthesis/code-change-plan/implementation.ts:759`. - Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0. + Function ''createCodeChangeSourcePatchSet'' is oversized: CC=8, fan-out=11, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2205,9 +2837,9 @@ tickets: - code-smell - god-function files: - - src/extractors/configuration.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God - Function: configurationRecords' + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:759:God + Function: createCodeChangeSourcePatchSet' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createMarkdownPathResolver' description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`. @@ -2416,6 +3048,25 @@ tickets: - src/extractors/markdown-llm-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God Function: enrichRecord' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: evaluateCodeChangeAcceptance' + description: 'code2llm reports `God Function: evaluateCodeChangeAcceptance` in `src/synthesis/code-change-plan/implementation.ts:224`. + + + Function ''evaluateCodeChangeAcceptance'' is oversized: CC=9, fan-out=18, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:224:God + Function: evaluateCodeChangeAcceptance' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: evaluateDiagnosticsCase' description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:182`. @@ -2474,51 +3125,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function: exchange' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: executeAnalyzeCommunicationAction' - description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction` - in `src/services/actions.ts:155`. - - - Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18, - mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:155:God Function: - executeAnalyzeCommunicationAction' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: executeCloseCodeChangeAction' - description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:410`. - - - Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:410:God Function: - executeCloseCodeChangeAction' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: executePipelineAction' - description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:553`. + title: 'Address code smell: God Function: extensions' + description: 'code2llm reports `God Function: extensions` in `src/core/io.ts:89`. - Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0. + Function ''extensions'' is oversized: CC=11, fan-out=16, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2529,9 +3140,8 @@ tickets: - code-smell - god-function files: - - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:553:God Function: - executePipelineAction' + - src/core/io.ts + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:89:God Function: extensions' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractAstIntent' description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`. @@ -2593,7 +3203,7 @@ tickets: Function: extractCommunicationIntentAudited' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractConventionalAction' - description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`. + description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:62`. Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0. @@ -2608,7 +3218,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:62:God Function: extractConventionalAction' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractDocumentationIntent' description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`. @@ -2762,7 +3372,7 @@ tickets: Function: extractRuntimeCycleIntent' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractSymbols' - description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`. + description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:438`. Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0. @@ -2777,7 +3387,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:438:God Function: extractSymbols' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractTodo' description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`. @@ -2962,6 +3572,24 @@ tickets: files: - src/cli.ts dedupe_key: 'code2llm:smell:god_function:src/cli.ts:342:God Function: handleWatch' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: ignored' + description: 'code2llm reports `God Function: ignored` in `src/core/io.ts:88`. + + + Function ''ignored'' is oversized: CC=11, fan-out=16, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/io.ts + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:88:God Function: ignored' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: index' description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`. @@ -3019,7 +3647,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:298:God Function: indexResolvableBasenames' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: isPathLike' - description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:408`. + description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:387`. Function ''isPathLike'' is oversized: CC=13, fan-out=12, mutations=0. @@ -3034,7 +3662,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:408:God Function: isPathLike' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:387:God Function: isPathLike' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: lines' description: 'code2llm reports `God Function: lines` in `src/extractors/changelog.ts:30`. @@ -3187,7 +3815,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/config/env.ts:76:God Function: loadEnvFile' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: loadRuns' - description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui.ts:137`. + description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui.ts:43`. Function ''loadRuns'' is oversized: CC=12, fan-out=14, mutations=0. @@ -3202,7 +3830,7 @@ tickets: - god-function files: - src/web/diff-ui.ts - dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui.ts:137:God Function: loadRuns' + dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui.ts:43:God Function: loadRuns' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: local' description: 'code2llm reports `God Function: local` in `scripts/verify-env-contract.mjs:52`. @@ -3372,6 +4000,24 @@ tickets: - python/ast_extract.py dedupe_key: 'code2llm:smell:god_function:python/ast_extract.py:195:God Function: main' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: matcher' + description: 'code2llm reports `God Function: matcher` in `src/core/io.ts:91`. + + + Function ''matcher'' is oversized: CC=11, fan-out=16, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/io.ts + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:91:God Function: matcher' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: matchesRunFilters' description: 'code2llm reports `God Function: matchesRunFilters` in `src/interfaces/a2a-history.ts:192`. @@ -3431,6 +4077,24 @@ tickets: - src/synthesis/task-synthesis-materialize.ts dedupe_key: 'code2llm:smell:god_function:src/synthesis/task-synthesis-materialize.ts:14:God Function: materializeTaskSynthesisResponse' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: maxFiles' + description: 'code2llm reports `God Function: maxFiles` in `src/core/io.ts:90`. + + + Function ''maxFiles'' is oversized: CC=11, fan-out=16, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/core/io.ts + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:90:God Function: maxFiles' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: maxFiles' description: 'code2llm reports `God Function: maxFiles` in `src/watch/watcher.ts:38`. @@ -3695,6 +4359,44 @@ tickets: files: - src/diff/reality.ts dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:386:God Function: primaryTargetKey' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: proposals' + description: 'code2llm reports `God Function: proposals` in `src/synthesis/code-change-plan/implementation.ts:119`. + + + Function ''proposals'' is oversized: CC=7, fan-out=18, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:119:God + Function: proposals' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: proposalsByDiagnostic' + description: 'code2llm reports `God Function: proposalsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:121`. + + + Function ''proposalsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:121:God + Function: proposalsByDiagnostic' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: read' description: 'code2llm reports `God Function: read` in `src/communication/intake-store.ts:60`. @@ -3733,9 +4435,47 @@ tickets: - src/interfaces/a2a-history.ts dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:155:God Function: readCommunicationSummary' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: records' + description: 'code2llm reports `God Function: records` in `src/semantic/reranker/candidate.ts:120`. + + + Function ''records'' is oversized: CC=14, fan-out=9, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/semantic/reranker/candidate.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:120:God + Function: records' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: recordsById' + description: 'code2llm reports `God Function: recordsById` in `src/synthesis/code-change-plan/implementation.ts:120`. + + + Function ''recordsById'' is oversized: CC=7, fan-out=18, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:120:God + Function: recordsById' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: registerRunArtifacts' - description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:789`. + description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:723`. Function ''registerRunArtifacts'' is oversized: CC=7, fan-out=12, mutations=0. @@ -3750,7 +4490,7 @@ tickets: - god-function files: - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:789:God Function: + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:723:God Function: registerRunArtifacts' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: relative' @@ -3884,28 +4624,9 @@ tickets: - sdk/php/src/Client.php dedupe_key: 'code2llm:smell:god_function:sdk/php/src/Client.php:331:God Function: request' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: rerankSemanticCandidates' - description: 'code2llm reports `God Function: rerankSemanticCandidates` in `src/semantic/reranker-llm.ts:39`. - - - Function ''rerankSemanticCandidates'' is oversized: CC=2, fan-out=11, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/semantic/reranker-llm.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker-llm.ts:39:God Function: - rerankSemanticCandidates' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: resolveGlobs' - description: 'code2llm reports `God Function: resolveGlobs` in `src/core/io.ts:186`. + description: 'code2llm reports `God Function: resolveGlobs` in `src/core/io.ts:152`. Function ''resolveGlobs'' is oversized: CC=4, fan-out=14, mutations=0. @@ -3920,7 +4641,7 @@ tickets: - god-function files: - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:186:God Function: resolveGlobs' + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:152:God Function: resolveGlobs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: resolvedPaths' description: 'code2llm reports `God Function: resolvedPaths` in `src/extractors/todo.ts:51`. @@ -4052,6 +4773,44 @@ tickets: - src/communication/llm/implementation-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:147:God Function: seen' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: seenIds' + description: 'code2llm reports `God Function: seenIds` in `src/semantic/reranker/candidate.ts:121`. + + + Function ''seenIds'' is oversized: CC=14, fan-out=9, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/semantic/reranker/candidate.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:121:God + Function: seenIds' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: seenPairs' + description: 'code2llm reports `God Function: seenPairs` in `src/semantic/reranker/candidate.ts:122`. + + + Function ''seenPairs'' is oversized: CC=14, fan-out=9, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/semantic/reranker/candidate.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:122:God + Function: seenPairs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: sourcePath' description: 'code2llm reports `God Function: sourcePath` in `src/extractors/nl.ts:42`. @@ -4338,11 +5097,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:278:God Function: validateCodeChangePlanContext' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: validatePatchTargetForEdit' - description: 'code2llm reports `God Function: validatePatchTargetForEdit` in `src/synthesis/code-change-plan/implementation-helpers.ts:1820`. + title: 'Address code smell: God Function: validateProjection' + description: 'code2llm reports `God Function: validateProjection` in `src/communication/intake-service.ts:183`. - Function ''validatePatchTargetForEdit'' is oversized: CC=13, fan-out=3, mutations=0. + Function ''validateProjection'' is oversized: CC=9, fan-out=20, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4353,15 +5112,15 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1820:God - Function: validatePatchTargetForEdit' + - src/communication/intake-service.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:183:God + Function: validateProjection' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: validateProjection' - description: 'code2llm reports `God Function: validateProjection` in `src/communication/intake-service.ts:183`. + title: 'Address code smell: God Function: visit' + description: 'code2llm reports `God Function: visit` in `src/core/io.ts:95`. - Function ''validateProjection'' is oversized: CC=9, fan-out=20, mutations=0. + Function ''visit'' is oversized: CC=11, fan-out=15, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4372,9 +5131,8 @@ tickets: - code-smell - god-function files: - - src/communication/intake-service.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:183:God - Function: validateProjection' + - src/core/io.ts + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:95:God Function: visit' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: visit' description: 'code2llm reports `God Function: visit` in `src/watch/watcher.ts:42`. @@ -4694,7 +5452,7 @@ tickets: description: 'code2llm reports `God Module: src.core.text` in `src/core/text.ts:1`. - Module ''src.core.text'' is too large (66 functions, 0 classes). Consider splitting + Module ''src.core.text'' is too large (62 functions, 0 classes). Consider splitting into sub-modules. @@ -4832,7 +5590,7 @@ tickets: in `src/extractors/communication-file-helpers.ts:1`. - Module ''src.extractors.communication-file-helpers'' is too large (47 functions, + Module ''src.extractors.communication-file-helpers'' is too large (43 functions, 2 classes). Consider splitting into sub-modules. @@ -5063,26 +5821,6 @@ tickets: files: - src/pipeline/run.ts dedupe_key: 'code2llm:smell:god_function:src/pipeline/run.ts:1:God Module: src.pipeline.run' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.semantic.reranker-llm' - description: 'code2llm reports `God Module: src.semantic.reranker-llm` in `src/semantic/reranker-llm.ts:1`. - - - Module ''src.semantic.reranker-llm'' is too large (43 functions, 2 classes). Consider - splitting into sub-modules. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/semantic/reranker-llm.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker-llm.ts:1:God Module: - src.semantic.reranker-llm' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.semantic.reranker.types' description: 'code2llm reports `God Module: src.semantic.reranker.types` in `src/semantic/reranker/types.ts:1`. @@ -5108,7 +5846,7 @@ tickets: description: 'code2llm reports `God Module: src.services.actions` in `src/services/actions.ts:1`. - Module ''src.services.actions'' is too large (145 functions, 1 classes). Consider + Module ''src.services.actions'' is too large (118 functions, 1 classes). Consider splitting into sub-modules. diff --git a/project/project.toon.yaml b/project/project.toon.yaml index ed11d81..784f88a 100644 --- a/project/project.toon.yaml +++ b/project/project.toon.yaml @@ -1,52 +1,52 @@ -# todo2code | 3900 func | 171f | 41875L | typescript | 2026-08-04 +# todo2code | 3683 func | 171f | 39185L | typescript | 2026-08-04 # generated in 0.00s HEALTH: - CC̄=3.3 critical=221 (limit:10) dup=28 cycles=0 + CC̄=3.6 critical=256 (limit:10) dup=28 cycles=0 ALERTS[20]: !!! cc_exceeded assertOperationPlan = 84 (limit:15) + !!! cc_exceeded executeAction = 83 (limit:15) + !!! cc_exceeded root = 83 (limit:15) + !!! high_fan_out executeAction = 65 (limit:10) + !!! high_fan_out root = 64 (limit:10) !!! cc_exceeded parseCommand = 63 (limit:15) !!! cc_exceeded runPipeline = 56 (limit:15) !!! high_fan_out runPipeline = 56 (limit:10) + !!! cc_exceeded diffUiHtml = 52 (limit:15) !!! cc_exceeded analyzeCommunication = 48 (limit:15) - !!! cc_exceeded diffUiScriptMarkup = 46 (limit:15) - !!! cc_exceeded variables = 44 (limit:15) - !!! cc_exceeded variableById = 44 (limit:15) - !!! cc_exceeded steps = 44 (limit:15) - !!! cc_exceeded stepIds = 44 (limit:15) -MODULES[252] (top by size): +MODULES[251] (top by size): M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json) - M[src/synthesis/code-change-plan/implementation-helpers.ts] 2239L C:25 F:270 CC↑13 D:3 (typescript) M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript) - M[src/services/actions.ts] 803L C:1 F:106 CC↑13 D:0 (typescript) M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json) + M[src/services/actions.ts] 737L C:1 F:79 CC↑83 D:0 (typescript) M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript) M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript) M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json) M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript) M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript) M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript) - M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript) M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml) + M[src/core/text.ts] 517L C:0 F:57 CC↑34 D:0 (typescript) M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python) M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript) - LANGS: typescript:144/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 + M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript) + LANGS: typescript:143/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 HOTSPOTS[10]: + ★ executeAction fan=65 // Orchestrates 65 calls + ★ root fan=64 // Orchestrates 64 calls ★ runPipeline fan=56 // Orchestrates 56 calls + ★ diffUiHtml fan=42 // Orchestrates 42 calls ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls - ★ assertSemanticRerankResult fan=37 // Orchestrates 37 calls - ★ Client.parse_http_response fan=37 // Orchestrates 37 calls - ★ diffUiScriptMarkup fan=36 // Orchestrates 36 calls REFACTOR[15]: - [1] H/L Split diffUiScriptMarkup (CC=46) - [2] H/L Split assertSemanticRerankResult (CC=29) - [3] H/L Split OpenRouterClient.timeout (CC=26) - [4] H/L Split OpenRouterClient.request (CC=31) - [5] H/L Split parseCommand (CC=63) + [1] H/L Split executeAction (CC=83) + [2] H/L Split root (CC=83) + [3] H/L Split normalized (CC=30) + [4] H/L Split inferObject (CC=34) + [5] H/L Split diffUiHtml (CC=52) EVOLUTION: - 2026-08-04 CC̄=3.3 crit=221 41875L // Automated analysis + 2026-08-04 CC̄=3.6 crit=256 39185L // Automated analysis diff --git a/project/prompt.txt b/project/prompt.txt index 1e0186b..25bf7fc 100644 --- a/project/prompt.txt +++ b/project/prompt.txt @@ -9,7 +9,7 @@ Files for analysis: Note: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup) - analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB] -- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [166KB] +- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [153KB] - evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB] - project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB] - context.md (LLM narrative - architecture summary and project context) [34KB] From f71cd673fa6f9b1d113671fc37781ba83edb34ba Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 11:54:34 +0200 Subject: [PATCH 19/43] fix: close optionNumber call in cli graph diff --- src/cli.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli.ts b/src/cli.ts index 79f0316..899199b 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -501,7 +501,7 @@ async function handleGraphDiff(parsed: ParsedArgs, config: ReturnType Date: Tue, 4 Aug 2026 13:45:14 +0200 Subject: [PATCH 20/43] refactor: split source patch apply logic into dedicated module --- README.md | 6 +- project/README.md | 6 +- project/analysis.toon.yaml | 100 +- project/calls.mmd | 697 +-- project/calls.png | Bin 100449 -> 98580 bytes project/calls.toon.yaml | 50 +- project/calls.yaml | 4803 +++++++++-------- project/compact_flow.mmd | 6 +- project/compact_flow.png | Bin 37242 -> 37211 bytes project/context.md | 204 +- project/evolution.toon.yaml | 58 +- project/flow.mmd | 4 +- project/flow.png | Bin 14246 -> 14204 bytes project/index.html | 2 +- project/map.toon.yaml | 1864 ++++--- project/mermaid.export | 236 +- project/planfile-tickets.yaml | 1331 +---- project/project.toon.yaml | 46 +- project/prompt.txt | 4 +- src/cli.ts | 11 +- .../llm/implementation-helpers.ts | 4 +- src/core/types/intent.ts | 46 - src/core/types/pipeline.ts | 2 +- src/extractors/markdown-llm.ts | 3 + src/graph/linker-candidates.ts | 163 + src/graph/linker-relations.ts | 83 + src/graph/linker.ts | 267 +- src/semantic/reranker-llm.ts | 2 +- src/services/actions.ts | 5 +- .../implementation-diagnostics.ts | 17 + .../implementation-helpers.ts | 1779 +----- .../implementation-indexing.ts | 25 + .../code-change-plan/implementation-review.ts | 269 + .../implementation-semantic.ts | 125 + .../implementation-source-patch-apply.ts | 663 +++ .../implementation-source-patch-diff.ts | 74 + .../implementation-source-patch.ts | 613 +++ .../implementation-targets.ts | 61 + 38 files changed, 6686 insertions(+), 6943 deletions(-) create mode 100644 src/graph/linker-candidates.ts create mode 100644 src/graph/linker-relations.ts create mode 100644 src/synthesis/code-change-plan/implementation-diagnostics.ts create mode 100644 src/synthesis/code-change-plan/implementation-indexing.ts create mode 100644 src/synthesis/code-change-plan/implementation-review.ts create mode 100644 src/synthesis/code-change-plan/implementation-semantic.ts create mode 100644 src/synthesis/code-change-plan/implementation-source-patch-apply.ts create mode 100644 src/synthesis/code-change-plan/implementation-source-patch-diff.ts create mode 100644 src/synthesis/code-change-plan/implementation-source-patch.ts create mode 100644 src/synthesis/code-change-plan/implementation-targets.ts diff --git a/README.md b/README.md index b6364fd..5b1f86a 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ ## AI Cost Tracking ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.2-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green) -![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.00-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-44.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) +![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.81-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-47.8h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) -- 🤖 **LLM usage:** $3.9955 (119 commits) -- 👤 **Human dev:** ~$4463 (44.6h @ $100/h, 30min dedup) +- 🤖 **LLM usage:** $7.8085 (125 commits) +- 👤 **Human dev:** ~$4778 (47.8h @ $100/h, 30min dedup) Generated on 2026-08-04 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next) diff --git a/project/README.md b/project/README.md index f04a395..b53ff19 100644 --- a/project/README.md +++ b/project/README.md @@ -333,8 +333,8 @@ code2llm ./ -f yaml --separate-orphans **Generated by**: `code2llm ./ -f all --readme` **Analysis Date**: 2026-08-04 -**Total Functions**: 3683 -**Total Classes**: 373 -**Modules**: 251 +**Total Functions**: 3918 +**Total Classes**: 392 +**Modules**: 260 For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm diff --git a/project/analysis.toon.yaml b/project/analysis.toon.yaml index 4f9eb57..693340a 100644 --- a/project/analysis.toon.yaml +++ b/project/analysis.toon.yaml @@ -1,34 +1,35 @@ -# code2llm | 251f 39151L | typescript:143,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 -# generated in 0.26s -# CC̅=3.6 | critical:90/3683 | dups:0 | cycles:0 +# code2llm | 260f 41965L | typescript:152,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 +# generated in 0.32s +# CC̅=3.3 | critical:63/3918 | dups:0 | cycles:0 HEALTH[20]: - 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10 + 🔴 GOD src/synthesis/code-change-plan/implementation-helpers.ts = 1148L, 16 classes, 133m, max CC=13 + 🔴 GOD src/synthesis/code-change-plan/implementation-source-patch.ts = 694L, 5 classes, 95m, max CC=11 🟡 CC handleRequest CC=16 (limit:15) - 🟡 CC buildLocalWarnings CC=18 (limit:15) - 🟡 CC executeAction CC=83 (limit:15) - 🟡 CC root CC=83 (limit:15) - 🟡 CC normalized CC=30 (limit:15) - 🟡 CC inferObject CC=34 (limit:15) - 🟡 CC walkFiles CC=15 (limit:15) - 🟡 CC diffUiHtml CC=52 (limit:15) + 🟡 CC generationMetadata CC=17 (limit:15) + 🟡 CC diffUiScriptMarkup CC=46 (limit:15) 🟡 CC compareGraphs CC=15 (limit:15) - 🟡 CC rerankSemanticCandidates CC=25 (limit:15) - 🟡 CC assertSemanticRerankResult CC=21 (limit:15) - 🟡 CC records CC=16 (limit:15) - 🟡 CC seenDecisions CC=16 (limit:15) - 🟡 CC acceptedDeclarations CC=16 (limit:15) - 🟡 CC assertSemanticCandidateSet CC=27 (limit:15) - 🟡 CC NON_SOURCE_DIR_SEGMENTS CC=38 (limit:15) - 🟡 CC BINARY_EXTENSIONS CC=38 (limit:15) - 🟡 CC GENERATED_ANALYSIS_BASENAMES CC=38 (limit:15) - 🟡 CC T2C_ARTIFACT_BASENAMES CC=38 (limit:15) + 🟡 CC timeout CC=26 (limit:15) + 🟡 CC request CC=31 (limit:15) + 🟡 CC parseCommand CC=63 (limit:15) + 🟡 CC runListItem CC=18 (limit:15) + 🟡 CC myers CC=19 (limit:15) + 🟡 CC n CC=15 (limit:15) + 🟡 CC m CC=15 (limit:15) + 🟡 CC max CC=15 (limit:15) + 🟡 CC offset CC=15 (limit:15) + 🟡 CC y CC=15 (limit:15) + 🟡 CC backtrack CC=18 (limit:15) + 🟡 CC x CC=15 (limit:15) + 🟡 CC buildRealityView CC=26 (limit:15) + 🟡 CC resolveStatus CC=15 (limit:15) -REFACTOR[2]: - 1. split src/graph/linker.ts (god module) - 2. split 19 high-CC methods (CC>15) +REFACTOR[3]: + 1. split src/synthesis/code-change-plan/implementation-helpers.ts (god module) + 2. split src/synthesis/code-change-plan/implementation-source-patch.ts (god module) + 3. split 18 high-CC methods (CC>15) -PIPELINES[2061]: +PIPELINES[2088]: [1] Src [main]: main → arguments PURITY: 100% pure [2] Src [new]: new @@ -141,15 +142,16 @@ LAYERS: │ !! ast_extract 221L 1C 18m CC=16 ←0 │ requirements.txt 1L 0C 0m CC=0.0 ←0 │ - src/ CC̄=3.8 ←in:0 →out:0 - │ !! cli.ts 935L 1C 124m CC=13 ←0 - │ !! actions.ts 737L 1C 79m CC=83 ←0 + src/ CC̄=3.4 ←in:0 →out:0 + │ !! implementation-helpers.ts 1148L 16C 133m CC=13 ←0 + │ !! cli.ts 942L 1C 124m CC=13 ←0 + │ !! actions.ts 806L 1C 106m CC=13 ←0 + │ !! implementation-source-patch.ts 694L 5C 95m CC=11 ←0 │ !! reality.ts 619L 3C 74m CC=26 ←0 │ !! run.ts 617L 1C 65m CC=56 ←0 │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0 │ !! analyzer.ts 542L 3C 72m CC=48 ←0 - │ !! linker.ts 537L 4C 81m CC=10 ←3 - │ !! text.ts 517L 0C 57m CC=34 ←0 + │ !! text.ts 530L 0C 61m CC=14 ←0 │ diagnostics.ts 459L 1C 58m CC=11 ←0 │ git.ts 397L 6C 57m CC=11 ←0 │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0 @@ -158,6 +160,7 @@ LAYERS: │ docs-deterministic.ts 369L 3C 43m CC=11 ←0 │ !! gold-cases.ts 366L 4C 42m CC=18 ←0 │ implementation-helpers.ts 357L 5C 33m CC=10 ←0 + │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0 │ workspace.ts 342L 3C 54m CC=12 ←0 │ !! openrouter.ts 338L 7C 39m CC=31 ←0 │ summarizer.ts 333L 5C 27m CC=10 ←0 @@ -167,60 +170,64 @@ LAYERS: │ code-change.ts 322L 0C 35m CC=11 ←0 │ communication-helpers.ts 320L 3C 45m CC=14 ←0 │ contract-check.ts 317L 6C 39m CC=14 ←2 + │ result.ts 311L 0C 23m CC=7 ←0 │ runtime-cycle.ts 306L 1C 35m CC=9 ←0 │ intent.ts 306L 4C 36m CC=12 ←0 - │ !! communication-file-helpers.ts 296L 2C 39m CC=18 ←0 + │ reranker-llm.ts 291L 2C 35m CC=9 ←0 │ intake-service.ts 291L 2C 48m CC=13 ←0 + │ linker.ts 286L 1C 52m CC=8 ←3 │ !! validation.ts 281L 0C 47m CC=84 ←0 │ !! intake-contract.ts 273L 7C 30m CC=18 ←0 │ docs-llm.ts 269L 1C 28m CC=12 ←0 + │ implementation-review.ts 269L 3C 31m CC=7 ←0 │ typescript.ts 266L 1C 26m CC=8 ←0 │ tasks-llm.ts 266L 4C 22m CC=11 ←0 - │ !! result.ts 264L 0C 16m CC=21 ←0 │ mcp.ts 261L 2C 38m CC=9 ←0 - │ intent.ts 258L 15C 0m CC=0.0 ←0 │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0 │ text-render.ts 251L 2C 33m CC=13 ←0 + │ candidate.ts 250L 1C 19m CC=8 ←0 + │ code-change.ts 250L 19C 0m CC=0.0 ←0 │ !! watcher.ts 243L 4C 37m CC=19 ←0 - │ !! text.ts 239L 1C 48m CC=19 ←2 │ utils.ts 239L 0C 42m CC=8 ←0 + │ !! text.ts 239L 1C 48m CC=19 ←2 │ diff.ts 235L 1C 38m CC=11 ←0 + │ code-change-path.ts 232L 0C 23m CC=11 ←0 │ env.ts 231L 1C 20m CC=13 ←0 │ !! a2a-history.ts 226L 3C 37m CC=18 ←0 - │ code-change.ts 221L 16C 0m CC=0.0 ←0 │ structured-schema.ts 218L 5C 25m CC=10 ←0 │ model-comparison.ts 218L 4C 21m CC=12 ←0 + │ intent.ts 212L 13C 0m CC=0.0 ←0 + │ io.ts 211L 2C 30m CC=11 ←0 │ conclusions.ts 210L 0C 21m CC=9 ←0 - │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0 │ configuration.ts 208L 1C 38m CC=10 ←0 │ implementation.ts 208L 4C 21m CC=12 ←0 - │ !! code-change-path.ts 204L 0C 14m CC=38 ←0 │ ignore.ts 200L 3C 23m CC=10 ←0 - │ !! candidate.ts 200L 0C 13m CC=27 ←0 │ !! a2a-message.ts 197L 0C 35m CC=63 ←1 │ docs-record.ts 193L 0C 34m CC=14 ←0 │ !! record.ts 183L 2C 13m CC=17 ←0 │ a2a-card.ts 181L 0C 7m CC=3 ←0 - │ !! io.ts 177L 1C 32m CC=15 ←0 - │ markdown-llm.ts 175L 2C 11m CC=9 ←0 + │ markdown-llm.ts 178L 2C 11m CC=9 ←0 │ pipeline.ts 173L 7C 0m CC=0.0 ←0 │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0 │ typescript.ts 172L 6C 16m CC=2 ←0 │ ast.ts 167L 2C 15m CC=12 ←0 │ id.ts 167L 0C 16m CC=5 ←0 + │ !! diff-ui.ts 167L 0C 15m CC=46 ←0 │ a2a-types.ts 164L 9C 14m CC=10 ←0 │ nl-llm.ts 163L 2C 19m CC=10 ←0 + │ linker-candidates.ts 163L 1C 23m CC=10 ←0 │ !! git.ts 161L 3C 21m CC=22 ←0 │ intake-store.ts 161L 3C 19m CC=11 ←0 │ markdown-paths.ts 158L 2C 22m CC=12 ←0 │ intake_cli 156L 0C 6m CC=10 ←0 │ types.ts 155L 8C 0m CC=0.0 ←0 │ docs-chunks.ts 147L 0C 29m CC=8 ←0 - │ !! identity.ts 146L 3C 22m CC=30 ←0 │ symbol-resolution.ts 146L 3C 22m CC=10 ←0 + │ !! identity.ts 146L 3C 22m CC=30 ←0 │ content-cache.ts 139L 4C 12m CC=5 ←0 │ classifier.ts 135L 4C 32m CC=6 ←0 │ gold-extraction.ts 127L 0C 13m CC=5 ←0 + │ implementation-semantic.ts 125L 1C 13m CC=9 ←0 │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0 │ subactor.ts 122L 1C 9m CC=13 ←0 │ validation.ts 113L 2C 28m CC=11 ←0 @@ -234,6 +241,7 @@ LAYERS: │ changelog-signal.ts 89L 0C 12m CC=8 ←0 │ mcp-resources.ts 88L 0C 13m CC=6 ←0 │ contract.ts 84L 0C 7m CC=1 ←0 + │ linker-relations.ts 83L 3C 7m CC=7 ←0 │ governed-intake.proto 78L 0C 0m CC=0.0 ←0 │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0 │ docs-types.ts 68L 7C 0m CC=0.0 ←0 @@ -243,13 +251,13 @@ LAYERS: │ payload.ts 65L 0C 8m CC=12 ←0 │ communication.ts 63L 1C 7m CC=7 ←0 │ capability-evidence.ts 62L 0C 14m CC=10 ←0 + │ implementation-targets.ts 61L 0C 9m CC=5 ←0 │ render.ts 61L 0C 13m CC=10 ←0 │ target.ts 57L 0C 12m CC=9 ←0 │ security.ts 55L 0C 11m CC=7 ←0 │ index.ts 53L 0C 0m CC=0.0 ←0 │ gold-metrics.ts 50L 1C 11m CC=4 ←0 │ external.ts 48L 1C 5m CC=9 ←0 - │ !! diff-ui.ts 48L 0C 9m CC=52 ←0 │ diagnostics.ts 45L 2C 0m CC=0.0 ←0 │ gold-cli.ts 44L 0C 10m CC=12 ←0 │ docs-schema.ts 43L 0C 5m CC=1 ←0 @@ -263,6 +271,7 @@ LAYERS: │ compile-cli.ts 34L 0C 7m CC=10 ←0 │ constants.ts 31L 0C 14m CC=1 ←0 │ unsupported.ts 30L 0C 4m CC=5 ←0 + │ implementation-indexing.ts 25L 0C 4m CC=4 ←3 │ failure.ts 25L 1C 3m CC=7 ←0 │ grounding.ts 24L 0C 5m CC=5 ←0 │ rust.ts 20L 0C 2m CC=1 ←0 @@ -272,6 +281,7 @@ LAYERS: │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0 │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0 │ audit.ts 19L 0C 1m CC=1 ←0 + │ implementation-diagnostics.ts 17L 0C 2m CC=2 ←0 │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0 │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0 │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0 @@ -282,8 +292,8 @@ LAYERS: │ index.ts 4L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 - │ !! implementation.ts 1L 10C 127m CC=47 ←3 │ index.ts 1L 0C 0m CC=0.0 ←0 + │ implementation.ts 1L 0C 0m CC=0.0 ←0 │ llm.ts 1L 0C 0m CC=0.0 ←0 │ scripts/ CC̄=3.4 ←in:0 →out:0 @@ -422,10 +432,10 @@ COUPLING: examples.frontend ←1 ── CYCLES: none HUB: src.diff/ (fan-in=6) - HUB: src.synthesis/ (fan-in=5) HUB: src.live/ (fan-in=7) - SMELL: scripts.research/ fan-out=11 → split needed + HUB: src.synthesis/ (fan-in=5) SMELL: sdk.python/ fan-out=8 → split needed + SMELL: scripts.research/ fan-out=11 → split needed EXTERNAL: validation: run `vallm batch .` → validation.toon diff --git a/project/calls.mmd b/project/calls.mmd index a001c05..9263900 100644 --- a/project/calls.mmd +++ b/project/calls.mmd @@ -1,419 +1,420 @@ flowchart LR -%% generated in 0.04s +%% generated in 0.09s subgraph examples__backend + examples__backend__src__server__readBody["readBody"] examples__backend__src__server__createBackend["createBackend"] - examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] examples__backend__src__validation__action["action"] - examples__backend__src__validation__object["object"] - examples__backend__src__server__readBody["readBody"] + examples__backend__src__validation__agent["agent"] examples__backend__src__server__sendJson["sendJson"] - examples__backend__src__server__offset["offset"] - examples__backend__src__validation__invalid["invalid"] - examples__backend__src__server__validation["validation"] - examples__backend__src__validation__validateEventPayload["validateEventPayload"] - examples__backend__src__server__size["size"] examples__backend__src__server__startBackend["startBackend"] + examples__backend__src__server__size["size"] examples__backend__src__server__server["server"] - examples__backend__src__server__event["event"] + examples__backend__src__validation__object["object"] + examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] examples__backend__src__server__store["store"] - examples__backend__src__server__handleRequest["handleRequest"] + examples__backend__src__validation__invalid["invalid"] examples__backend__src__validation__record["record"] + examples__backend__src__server__handleRequest["handleRequest"] + examples__backend__src__server__event["event"] + examples__backend__src__validation__validateEventPayload["validateEventPayload"] + examples__backend__src__server__offset["offset"] + examples__backend__src__server__validation["validation"] examples__backend__src__server__limit["limit"] - examples__backend__src__validation__agent["agent"] end subgraph examples__frontend - examples__frontend__src__app__state["state"] - examples__frontend__src__render__toRows["toRows"] - examples__frontend__src__render__headerRow["headerRow"] examples__frontend__src__app__reload["reload"] - examples__frontend__src__app__createState["createState"] + examples__frontend__src__app__refresh["refresh"] + examples__frontend__src__app__mountPanel["mountPanel"] + examples__frontend__src__render__toRows["toRows"] examples__frontend__src__render__classifyEvent["classifyEvent"] + examples__frontend__src__app__state["state"] + examples__frontend__src__render__headerRow["headerRow"] examples__frontend__src__render__renderTable["renderTable"] - examples__frontend__src__app__mountPanel["mountPanel"] - examples__frontend__src__app__refresh["refresh"] + examples__frontend__src__app__createState["createState"] end subgraph examples__src examples__src__runtime__validateContract["validateContract"] examples__src__runtime__executeContract["executeContract"] end subgraph java__JavaAstExtract + java__JavaAstExtract__JavaAstExtract__add["add"] + java__JavaAstExtract__JavaAstExtract__emit["emit"] + java__JavaAstExtract__JavaAstExtract__escape["escape"] + java__JavaAstExtract__JavaAstExtract__json["json"] java__JavaAstExtract__JavaAstExtract__try["try"] + java__JavaAstExtract__JavaAstExtract__main["main"] + java__JavaAstExtract__JavaAstExtract__slash["slash"] java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] java__JavaAstExtract__JavaAstExtract__collect["collect"] - java__JavaAstExtract__JavaAstExtract__emit["emit"] - java__JavaAstExtract__JavaAstExtract__add["add"] java__JavaAstExtract__JavaAstExtract__map["map"] - java__JavaAstExtract__JavaAstExtract__json["json"] - java__JavaAstExtract__JavaAstExtract__slash["slash"] - java__JavaAstExtract__JavaAstExtract__main["main"] - java__JavaAstExtract__JavaAstExtract__escape["escape"] end subgraph rust_ast__src - rust_ast__src__main__visit_item_struct["visit_item_struct"] - rust_ast__src__main__visit_item_fn["visit_item_fn"] - rust_ast__src__main__visit_item_use["visit_item_use"] - rust_ast__src__main__visit_item_trait["visit_item_trait"] - rust_ast__src__main__collect_files["collect_files"] - rust_ast__src__main__arguments["arguments"] - rust_ast__src__main__main["main"] - rust_ast__src__main__visit_expr_call["visit_expr_call"] - rust_ast__src__main__qualified["qualified"] - rust_ast__src__main__modifiers["modifiers"] - rust_ast__src__main__excerpt["excerpt"] - rust_ast__src__main__visit_item_mod["visit_item_mod"] rust_ast__src__main__visit_item_type["visit_item_type"] - rust_ast__src__main__visit_item_const["visit_item_const"] - rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] + rust_ast__src__main__visit_item_static["visit_item_static"] + rust_ast__src__main__visit_item_mod["visit_item_mod"] + rust_ast__src__main__type_item["type_item"] + rust_ast__src__main__excerpt["excerpt"] rust_ast__src__main__visit_item_enum["visit_item_enum"] + rust_ast__src__main__qualified["qualified"] rust_ast__src__main__slash["slash"] - rust_ast__src__main__visit_item_static["visit_item_static"] rust_ast__src__main__add["add"] - rust_ast__src__main__type_item["type_item"] + rust_ast__src__main__visit_item_use["visit_item_use"] rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] + rust_ast__src__main__collect_files["collect_files"] + rust_ast__src__main__modifiers["modifiers"] + rust_ast__src__main__visit_item_const["visit_item_const"] + rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] + rust_ast__src__main__main["main"] + rust_ast__src__main__visit_item_struct["visit_item_struct"] + rust_ast__src__main__arguments["arguments"] + rust_ast__src__main__visit_item_trait["visit_item_trait"] + rust_ast__src__main__visit_item_fn["visit_item_fn"] + rust_ast__src__main__visit_expr_call["visit_expr_call"] end subgraph src__cli - src__cli__handleExtractDocs["handleExtractDocs"] - src__cli__absolute["absolute"] - src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] - src__cli__stamp["stamp"] - src__cli__diagnostics["diagnostics"] - src__cli__svg["svg"] - src__cli__taskFile["taskFile"] - src__cli__diff["diff"] - src__cli__handleReality["handleReality"] - src__cli__invokedPath["invokedPath"] - src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] - src__cli__optionNumber["optionNumber"] - src__cli__optionBoolean["optionBoolean"] - src__cli__controller["controller"] + src__cli__optionNlMode["optionNlMode"] src__cli__result["result"] - src__cli__handleCloseCodeChange["handleCloseCodeChange"] - src__cli__buildDiffPayload["buildDiffPayload"] - src__cli__execFileAsync["execFileAsync"] - src__cli__command["command"] - src__cli__handleCompareWorkspace["handleCompareWorkspace"] - src__cli__handleApplySourcePatch["handleApplySourcePatch"] src__cli__parseDiffMode["parseDiffMode"] - src__cli__handleExtractNl["handleExtractNl"] - src__cli__diagnosticsPath["diagnosticsPath"] - src__cli__optionNlMode["optionNlMode"] - src__cli__pipeline["pipeline"] - src__cli__optionTaskMode["optionTaskMode"] - src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] - src__cli__handleRenderCodeChange["handleRenderCodeChange"] - src__cli__commandHandlers["commandHandlers"] - src__cli__resolveMainCommand["resolveMainCommand"] - src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] - src__cli__handleRenderTodo["handleRenderTodo"] - src__cli__buildPipelineOptions["buildPipelineOptions"] - src__cli__reportPipelineDegradation["reportPipelineDegradation"] - src__cli__optionString["optionString"] - src__cli__handleExtract["handleExtract"] - src__cli__context["context"] - src__cli__handleSummarize["handleSummarize"] - src__cli__buildGitDiff["buildGitDiff"] - src__cli__handleLink["handleLink"] - src__cli__optionLlmMode["optionLlmMode"] - src__cli__handleWatch["handleWatch"] - src__cli__handleProposeSourcePatch["handleProposeSourcePatch"] - src__cli__handleIntake["handleIntake"] - src__cli__handleExtractMarkdown["handleExtractMarkdown"] src__cli__handleProposeCodeChange["handleProposeCodeChange"] - src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] - src__cli__resolvePipelineRoot["resolvePipelineRoot"] - src__cli__initProject["initProject"] - src__cli__handleApplyTodo["handleApplyTodo"] - src__cli__file["file"] src__cli__formatWatchEvent["formatWatchEvent"] - src__cli__handleExtractAst["handleExtractAst"] - src__cli__handleExtractRuntime["handleExtractRuntime"] - src__cli__handlePipeline["handlePipeline"] - src__cli__handleExtractConfig["handleExtractConfig"] - src__cli__main["main"] + src__cli__handleProposeSourcePatch["handleProposeSourcePatch"] src__cli__isPlanSet["isPlanSet"] - src__cli__emitExtraction["emitExtraction"] + src__cli__reportPipelineDegradation["reportPipelineDegradation"] src__cli__emitJson["emitJson"] - src__cli__root["root"] + src__cli__optionLlmMode["optionLlmMode"] src__cli__printHelp["printHelp"] - src__cli__handler["handler"] + src__cli__execFileAsync["execFileAsync"] + src__cli__handleDiagnose["handleDiagnose"] + src__cli__handleDiff["handleDiff"] + src__cli__parseArgs["parseArgs"] + src__cli__handleExtractRuntime["handleExtractRuntime"] + src__cli__handleExtractNl["handleExtractNl"] src__cli__parsed["parsed"] - src__cli__stop["stop"] - src__cli__doctor["doctor"] + src__cli__optionTaskMode["optionTaskMode"] + src__cli__handler["handler"] + src__cli__commandHandlers["commandHandlers"] + src__cli__view["view"] + src__cli__handleExtractConfig["handleExtractConfig"] src__cli__buildFileDiff["buildFileDiff"] + src__cli__absolute["absolute"] + src__cli__buildPipelineOptions["buildPipelineOptions"] + src__cli__handleSummarize["handleSummarize"] + src__cli__resolveMainCommand["resolveMainCommand"] src__cli__handleExtractCommunication["handleExtractCommunication"] - src__cli__optionList["optionList"] - src__cli__handleProposeTodo["handleProposeTodo"] - src__cli__parseArgs["parseArgs"] - src__cli__handleDiagnose["handleDiagnose"] - src__cli__handleExtractGit["handleExtractGit"] - src__cli__handleDiff["handleDiff"] - src__cli__handleGraphDiff["handleGraphDiff"] + src__cli__context["context"] + src__cli__handleRenderTodo["handleRenderTodo"] + src__cli__diagnosticsPath["diagnosticsPath"] + src__cli__handleReality["handleReality"] src__cli__optionSummaryMode["optionSummaryMode"] - src__cli__view["view"] + src__cli__handleRenderCodeChange["handleRenderCodeChange"] + src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] src__cli__handleCommunication["handleCommunication"] src__cli__optionNullableString["optionNullableString"] + src__cli__diagnostics["diagnostics"] + src__cli__main["main"] + src__cli__handleExtractGit["handleExtractGit"] + src__cli__optionNumber["optionNumber"] + src__cli__handleExtractAst["handleExtractAst"] + src__cli__pipeline["pipeline"] + src__cli__buildDiffPayload["buildDiffPayload"] + src__cli__handleExtractDocs["handleExtractDocs"] + src__cli__handleLink["handleLink"] + src__cli__handleExtractMarkdown["handleExtractMarkdown"] + src__cli__handleExtract["handleExtract"] + src__cli__root["root"] + src__cli__optionBoolean["optionBoolean"] + src__cli__handleCompareWorkspace["handleCompareWorkspace"] + src__cli__svg["svg"] + src__cli__handleApplyTodo["handleApplyTodo"] + src__cli__controller["controller"] + src__cli__initProject["initProject"] + src__cli__handleWatch["handleWatch"] + src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] + src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] + src__cli__handleCloseCodeChange["handleCloseCodeChange"] + src__cli__handleGraphDiff["handleGraphDiff"] + src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] + src__cli__handlePipeline["handlePipeline"] + src__cli__diff["diff"] + src__cli__stamp["stamp"] + src__cli__file["file"] + src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] + src__cli__command["command"] + src__cli__handleApplySourcePatch["handleApplySourcePatch"] + src__cli__handleProposeTodo["handleProposeTodo"] + src__cli__doctor["doctor"] + src__cli__taskFile["taskFile"] + src__cli__handleIntake["handleIntake"] + src__cli__invokedPath["invokedPath"] + src__cli__emitExtraction["emitExtraction"] + src__cli__optionList["optionList"] + src__cli__optionString["optionString"] + src__cli__buildGitDiff["buildGitDiff"] + src__cli__stop["stop"] + src__cli__resolvePipelineRoot["resolvePipelineRoot"] end subgraph src__extractors - src__extractors__todo__classified["classified"] - src__extractors__runtime_cycle__violationRecord["violationRecord"] - src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] - src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] - src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] - src__extractors__runtime_cycle__factsMetadata["factsMetadata"] - src__extractors__git__result["result"] - src__extractors__nl__absolute["absolute"] - src__extractors__runtime_cycle__tags["tags"] - src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] - src__extractors__configuration__configurationFormat["configurationFormat"] - src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] src__extractors__docs_record__isPlaceholder["isPlaceholder"] - src__extractors__docs_record__modality["modality"] - src__extractors__docs_record__fallback["fallback"] - src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] - src__extractors__docs_chunks__flush["flush"] - src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] - src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__git__readChangedFiles["readChangedFiles"] - src__extractors__todo__body["body"] - src__extractors__markdown_paths__headingScopes["headingScopes"] - src__extractors__todo__extractExplicitId["extractExplicitId"] - src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"] - src__extractors__docs_chunks__splitLongSection["splitLongSection"] - src__extractors__docs_deterministic__heading["heading"] - src__extractors__nl_llm_helpers__NlAttemptError__action["action"] - src__extractors__todo__inferOwner["inferOwner"] - src__extractors__configuration__parsed["parsed"] - src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"] - src__extractors__ast__typescript__scriptKind["scriptKind"] - src__extractors__docs_deterministic__resolver["resolver"] - src__extractors__nl_llm__NlLlmRequiredError__client["client"] + src__extractors__communication_helpers__listValue["listValue"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] + src__extractors__communication_helpers__normalize["normalize"] + src__extractors__ast__records__end["end"] src__extractors__docs_deterministic__match["match"] - src__extractors__runtime_cycle__label["label"] - src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] - src__extractors__ast__records__adapterRecords["adapterRecords"] - src__extractors__communication_helpers__flush["flush"] - src__extractors__git__mapWithConcurrency["mapWithConcurrency"] - src__extractors__ast__records__capabilities["capabilities"] - src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] - src__extractors__docs_chunks__index["index"] - src__extractors__runtime_cycle__text["text"] - src__extractors__docs_record__resolveModality["resolveModality"] - src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] - src__extractors__ast__records__end["end"] - src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] - src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__markdown_paths__headingDirectories["headingDirectories"] - src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] - src__extractors__ast__typescript__context["context"] - src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] - src__extractors__docs_record__anchorToSource["anchorToSource"] - src__extractors__communication_helpers__communicationSegments["communicationSegments"] - src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] - src__extractors__runtime_cycle__parseCycle["parseCycle"] - src__extractors__docs_chunks__needles["needles"] - src__extractors__git__count["count"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] - src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] - src__extractors__docs_deterministic__action["action"] - src__extractors__markdown_paths__index["index"] + src__extractors__git__execFileAsync["execFileAsync"] + src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] + src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] + src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"] + src__extractors__nl__missing["missing"] src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] - src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] - src__extractors__todo__resolvedPaths["resolvedPaths"] - src__extractors__nl__action["action"] - src__extractors__docs_record__target["target"] - src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] - src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] - src__extractors__configuration__match["match"] - src__extractors__docs_schema__documentRecord["documentRecord"] - src__extractors__markdown_paths__state["state"] - src__extractors__docs_record__resolveAction["resolveAction"] - src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] - src__extractors__communication_helpers__unquote["unquote"] + src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] src__extractors__communication_helpers__match["match"] + src__extractors__nl__body["body"] + src__extractors__docs_record__hasTarget["hasTarget"] + src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] + src__extractors__todo__body["body"] + src__extractors__todo__heading["heading"] + src__extractors__configuration__dockerEntries["dockerEntries"] + src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] + src__extractors__todo__classified["classified"] + src__extractors__todo__extractTodo["extractTodo"] + src__extractors__docs_schema__strings["strings"] + src__extractors__runtime_cycle__parseCycle["parseCycle"] + src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] + src__extractors__runtime_cycle__results["results"] + src__extractors__ast__records__moduleTopicText["moduleTopicText"] + src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] + src__extractors__nl_llm__NlLlmRequiredError__client["client"] + src__extractors__docs_record__allowedModality["allowedModality"] + src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] + src__extractors__git__finishDiscovery["finishDiscovery"] + src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] + src__extractors__configuration__line["line"] + src__extractors__nl__classified["classified"] + src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] + src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"] + src__extractors__communication_helpers__communicationSegments["communicationSegments"] + src__extractors__docs_chunks__needles["needles"] + src__extractors__docs_record__anchorToSource["anchorToSource"] + src__extractors__docs_deterministic__root["root"] + src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] + src__extractors__nl__detectMissingFields["detectMissingFields"] + src__extractors__docs_record__resolveTarget["resolveTarget"] + src__extractors__docs_record__action["action"] + src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] + src__extractors__docs_chunks__item["item"] + src__extractors__docs_deterministic__readParagraph["readParagraph"] + src__extractors__markdown_paths__basenames["basenames"] + src__extractors__runtime_cycle__tags["tags"] + src__extractors__ast__isExtractionResult["isExtractionResult"] + src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] + src__extractors__configuration__isConfigurationPath["isConfigurationPath"] + src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"] src__extractors__configuration__tomlEntries["tomlEntries"] - src__extractors__git__state["state"] - src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] + src__extractors__runtime_cycle__label["label"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] + src__extractors__docs_deterministic__primePathMapper["primePathMapper"] + src__extractors__markdown_paths__headingScopes["headingScopes"] + src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"] + src__extractors__ast__external__result["result"] + src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"] + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] + src__extractors__runtime_cycle__jsonScalar["jsonScalar"] + src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] + src__extractors__docs_deterministic__resolver["resolver"] + src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] + src__extractors__communication_helpers__fileParts["fileParts"] + src__extractors__docs_record__fallback["fallback"] + src__extractors__ast__typescript__scriptKind["scriptKind"] + src__extractors__ast__records__adapterRecords["adapterRecords"] + src__extractors__configuration__files["files"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] + src__extractors__git__count["count"] + src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] + src__extractors__configuration__uniqueEntries["uniqueEntries"] + src__extractors__docs_chunks__sectionLines["sectionLines"] + src__extractors__docs_schema__documentResponseContract["documentResponseContract"] src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] - src__extractors__git__gitMarkerState["gitMarkerState"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] + src__extractors__docs_record__modality["modality"] + src__extractors__docs_deterministic__heading["heading"] + src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"] + src__extractors__git__mapWithConcurrency["mapWithConcurrency"] + src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] + src__extractors__communication_helpers__heading["heading"] + src__extractors__todo__task["task"] + src__extractors__ast__external__execFileAsync["execFileAsync"] + src__extractors__docs_schema__target["target"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] + src__extractors__runtime_cycle__text["text"] + src__extractors__ast__records__start["start"] + src__extractors__git__discoverGitRepositories["discoverGitRepositories"] + src__extractors__docs_chunks__sectionText["sectionText"] + src__extractors__nl__absolute["absolute"] + src__extractors__configuration__entries["entries"] + src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] + src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] + src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] + src__extractors__configuration__configurationFormat["configurationFormat"] + src__extractors__todo__raw["raw"] + src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] + src__extractors__nl__inferActor["inferActor"] + src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] + src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] src__extractors__configuration__entry["entry"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] + src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] + src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] + src__extractors__git__readCommits["readCommits"] + src__extractors__docs_record__target["target"] + src__extractors__docs_chunks__workerCount["workerCount"] + src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] + src__extractors__communication_helpers__unquote["unquote"] + src__extractors__runtime_cycle__boundedArray["boundedArray"] + src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] + src__extractors__docs_record__resolveAction["resolveAction"] + src__extractors__ast__typescript__recordModuleFact["recordModuleFact"] + src__extractors__markdown_paths__index["index"] + src__extractors__git__isGitWorkTree["isGitWorkTree"] + src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] + src__extractors__changelog__body["body"] + src__extractors__changelog__relative["relative"] src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] - src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] - src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] - src__extractors__changelog__extractChangelog["extractChangelog"] + src__extractors__configuration__heading["heading"] + src__extractors__todo__text["text"] + src__extractors__docs_record__clampLine["clampLine"] + src__extractors__nl__confidence["confidence"] + src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] + src__extractors__configuration__parsed["parsed"] + src__extractors__todo__checked["checked"] + src__extractors__docs_deterministic__statementRecord["statementRecord"] + src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] + src__extractors__nl_llm_helpers__NlAttemptError__action["action"] + src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] + src__extractors__configuration__bounded["bounded"] + src__extractors__todo__block["block"] src__extractors__configuration__relative["relative"] - src__extractors__git__isGitWorkTree["isGitWorkTree"] - src__extractors__git__runGit["runGit"] - src__extractors__docs_chunks__worker["worker"] + src__extractors__communication_file_helpers__inferred["inferred"] + src__extractors__configuration__fileAggregate["fileAggregate"] + src__extractors__docs_chunks__markdownSections["markdownSections"] + src__extractors__docs_record__statementText["statementText"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] + src__extractors__communication_helpers__inferIdentity["inferIdentity"] + src__extractors__todo__match["match"] + src__extractors__docs_record__keywordOverlap["keywordOverlap"] + src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] + src__extractors__runtime_cycle__factsMetadata["factsMetadata"] + src__extractors__nl__extractNlIntent["extractNlIntent"] + src__extractors__docs_record__allowedAction["allowedAction"] + src__extractors__todo__resolvedPaths["resolvedPaths"] + src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] + src__extractors__docs_chunks__flush["flush"] + src__extractors__runtime_cycle__watched["watched"] src__extractors__changelog__changelogAction["changelogAction"] + src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] + src__extractors__docs_record__resolveModality["resolveModality"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] + src__extractors__runtime_cycle__proposalAction["proposalAction"] + src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] src__extractors__communication_helpers__basename["basename"] - src__extractors__todo__action["action"] - src__extractors__git__readStats["readStats"] - src__extractors__docs_record__resolveObject["resolveObject"] - src__extractors__communication_helpers__item["item"] - src__extractors__docs_deterministic__targetsOf["targetsOf"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] - src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"] - src__extractors__docs_schema__strings["strings"] + src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] src__extractors__configuration__pair["pair"] - src__extractors__git__execFileAsync["execFileAsync"] - src__extractors__docs_record__statementText["statementText"] - src__extractors__configuration__configurationRecords["configurationRecords"] - src__extractors__docs_chunks__chunkPriority["chunkPriority"] - src__extractors__git__discoverGitRepositories["discoverGitRepositories"] - src__extractors__git__root["root"] - src__extractors__nl__body["body"] - src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] - src__extractors__ast__typescript__recordModuleFact["recordModuleFact"] - src__extractors__docs_chunks__sectionText["sectionText"] - src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] - src__extractors__configuration__findKeyLine["findKeyLine"] - src__extractors__docs_deterministic__convertDocument["convertDocument"] - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] src__extractors__configuration__lines["lines"] - src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] + src__extractors__git__runGit["runGit"] + src__extractors__markdown_paths__headingDirectories["headingDirectories"] + src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] + src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] - src__extractors__docs_deterministic__readParagraph["readParagraph"] - src__extractors__todo__raw["raw"] - src__extractors__ast__records__moduleRecords["moduleRecords"] - src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] - src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] - src__extractors__configuration__heading["heading"] - src__extractors__git__finishDiscovery["finishDiscovery"] - src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] - src__extractors__git__readCommits["readCommits"] - src__extractors__communication_helpers__heading["heading"] - src__extractors__todo__heading["heading"] - src__extractors__communication_file_helpers__envelope["envelope"] - src__extractors__docs_schema__target["target"] - src__extractors__ast__external__execFileAsync["execFileAsync"] - src__extractors__runtime_cycle__proposalAction["proposalAction"] - src__extractors__configuration__fileAggregate["fileAggregate"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] src__extractors__nl__object["object"] - src__extractors__docs_schema__documentResponseContract["documentResponseContract"] - src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] - src__extractors__todo__checked["checked"] - src__extractors__todo__block["block"] - src__extractors__docs_record__clampLine["clampLine"] - src__extractors__configuration__dockerEntries["dockerEntries"] - src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] + src__extractors__todo__relative["relative"] + src__extractors__changelog__extractChangelog["extractChangelog"] + src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] + src__extractors__docs_chunks__worker["worker"] + src__extractors__docs_deterministic__targetsOf["targetsOf"] + src__extractors__docs_chunks__splitLongSection["splitLongSection"] + src__extractors__git__extractChangedSymbols["extractChangedSymbols"] + src__extractors__markdown_paths__state["state"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] + src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] + src__extractors__configuration__findKeyLine["findKeyLine"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] + src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] + src__extractors__git__extractGitIntent["extractGitIntent"] + src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] + src__extractors__docs_deterministic__convertDocument["convertDocument"] + src__extractors__todo__inferOwner["inferOwner"] src__extractors__git__createDiscoveryState["createDiscoveryState"] - src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] - src__extractors__docs_record__linesFromChunk["linesFromChunk"] - src__extractors__docs_deterministic__root["root"] - src__extractors__todo__text["text"] - src__extractors__docs_record__action["action"] - src__extractors__docs_deterministic__statementRecord["statementRecord"] - src__extractors__nl__detectMissingFields["detectMissingFields"] - src__extractors__communication_helpers__fileParts["fileParts"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] + src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] + src__extractors__docs_record__resolveObject["resolveObject"] + src__extractors__communication_file_helpers__envelope["envelope"] + src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] + src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] + src__extractors__git__readChangedFiles["readChangedFiles"] + src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] + src__extractors__runtime_cycle__proposalRecord["proposalRecord"] + src__extractors__ast__records__moduleRecords["moduleRecords"] src__extractors__ast__isIntentRecords["isIntentRecords"] + src__extractors__docs_schema__documentRecord["documentRecord"] + src__extractors__communication_helpers__nestedRole["nestedRole"] + src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] + src__extractors__configuration__jsonEntries["jsonEntries"] src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] - src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] - src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"] - src__extractors__changelog__relative["relative"] - src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] + src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"] + src__extractors__communication_helpers__item["item"] + src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] + src__extractors__runtime_cycle__probeRecord["probeRecord"] src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"] - src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"] - src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] - src__extractors__ast__records__start["start"] - src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] - src__extractors__nl__missing["missing"] - src__extractors__runtime_cycle__watched["watched"] - src__extractors__todo__lines["lines"] - src__extractors__communication_helpers__normalizeType["normalizeType"] - src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] + src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] + src__extractors__ast__records__capabilities["capabilities"] + src__extractors__todo__action["action"] src__extractors__nl__sourcePath["sourcePath"] - src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] - src__extractors__docs_chunks__markdownSections["markdownSections"] - src__extractors__communication_helpers__listValue["listValue"] - src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] - src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] - src__extractors__configuration__line["line"] - src__extractors__ast__external__result["result"] - src__extractors__nl__classified["classified"] - src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] + src__extractors__changelog__lines["lines"] + src__extractors__docs_deterministic__action["action"] + src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] + src__extractors__git__gitMarkerState["gitMarkerState"] + src__extractors__ast__typescript__context["context"] + src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] + src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] - src__extractors__communication_helpers__nestedRole["nestedRole"] - src__extractors__configuration__jsonEntries["jsonEntries"] - src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] - src__extractors__git__extractGitIntent["extractGitIntent"] - src__extractors__nl__confidence["confidence"] - src__extractors__communication_helpers__normalize["normalize"] - src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] - src__extractors__configuration__bounded["bounded"] - src__extractors__ast__typescript__handleNode["handleNode"] - src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] - src__extractors__docs_record__keywordOverlap["keywordOverlap"] - src__extractors__docs_chunks__item["item"] - src__extractors__communication_helpers__sameStrings["sameStrings"] - src__extractors__communication_helpers__raw["raw"] - src__extractors__communication_helpers__inferIdentity["inferIdentity"] - src__extractors__configuration__isConfigurationPath["isConfigurationPath"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] - src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] - src__extractors__runtime_cycle__results["results"] - src__extractors__changelog__body["body"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] - src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] - src__extractors__nl__extractNlIntent["extractNlIntent"] - src__extractors__markdown_paths__basenames["basenames"] - src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] - src__extractors__todo__match["match"] + src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] + src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] + src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"] + src__extractors__runtime_cycle__violationRecord["violationRecord"] + src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] + src__extractors__todo__lines["lines"] + src__extractors__runtime_cycle__driftRecord["driftRecord"] + src__extractors__docs_record__linesFromChunk["linesFromChunk"] + src__extractors__configuration__configurationRecords["configurationRecords"] + src__extractors__configuration__match["match"] + src__extractors__nl__action["action"] + src__extractors__git__result["result"] src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] - src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] + src__extractors__communication_helpers__sameStrings["sameStrings"] + src__extractors__git__state["state"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] + src__extractors__communication_helpers__flush["flush"] src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] - src__extractors__docs_deterministic__marker["marker"] - src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] - src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] - src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] - src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] - src__extractors__runtime_cycle__jsonScalar["jsonScalar"] - src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] - src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] - src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] - src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] - src__extractors__changelog__lines["lines"] - src__extractors__configuration__uniqueEntries["uniqueEntries"] - src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] + src__extractors__communication_helpers__raw["raw"] + src__extractors__todo__extractExplicitId["extractExplicitId"] src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"] - src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] - src__extractors__todo__relative["relative"] - src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] - src__extractors__docs_record__hasTarget["hasTarget"] - src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"] - src__extractors__configuration__files["files"] - src__extractors__runtime_cycle__driftRecord["driftRecord"] - src__extractors__runtime_cycle__proposalRecord["proposalRecord"] - src__extractors__todo__task["task"] - src__extractors__ast__records__moduleTopicText["moduleTopicText"] - src__extractors__runtime_cycle__probeRecord["probeRecord"] - src__extractors__configuration__entries["entries"] - src__extractors__docs_chunks__sectionLines["sectionLines"] - src__extractors__docs_chunks__workerCount["workerCount"] - src__extractors__todo__extractTodo["extractTodo"] - src__extractors__docs_deterministic__primePathMapper["primePathMapper"] - src__extractors__nl__inferActor["inferActor"] - src__extractors__docs_record__allowedAction["allowedAction"] - src__extractors__runtime_cycle__boundedArray["boundedArray"] - src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] - src__extractors__communication_file_helpers__inferred["inferred"] - src__extractors__ast__isExtractionResult["isExtractionResult"] - src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] - src__extractors__docs_record__allowedModality["allowedModality"] - src__extractors__docs_record__resolveTarget["resolveTarget"] - src__extractors__git__extractChangedSymbols["extractChangedSymbols"] - src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] + src__extractors__git__root["root"] + src__extractors__communication_helpers__normalizeType["normalizeType"] + src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] + src__extractors__docs_deterministic__marker["marker"] + src__extractors__docs_chunks__index["index"] + src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] + src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] + src__extractors__docs_chunks__chunkPriority["chunkPriority"] + src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] + src__extractors__git__readStats["readStats"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -882,6 +883,11 @@ flowchart LR src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText @@ -910,8 +916,3 @@ flowchart LR src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind - src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode - src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration - src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration - src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration - src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration diff --git a/project/calls.png b/project/calls.png index 211a7055ff53e09eea88299439549c1ef8f85eb5..311e8bd560f1ae6426fc58d6d017b0dffb54b17e 100644 GIT binary patch literal 98580 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 )bc|RVv2AXo;rFs||(x%8DFvE^f-TtceCMwp& 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 literal 100449 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 funcs"] java__JavaAstExtract["java.JavaAstExtract
12 funcs"] python__ast_extract["python.ast_extract
18 funcs"] scripts__research["scripts.research
71 funcs"] sdk__python["sdk.python
68 funcs"] src__diff["src.diff
183 funcs"] - src__graph["src.graph
225 funcs"] + src__graph["src.graph
226 funcs"] src__live["src.live
60 funcs"] - src__synthesis["src.synthesis
292 funcs"] + src__synthesis["src.synthesis
461 funcs"] scripts__research ==>|7| src__live python__ast_extract ==>|4| src__diff sdk__python ==>|4| src__synthesis diff --git a/project/compact_flow.png b/project/compact_flow.png index 9b23ee509d033da3ed736ccd38bfff5e107b825c..edddffb81fb4da5f281c9f87a989ee404ee425b7 100644 GIT binary patch delta 34478 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 Lt4P&Ln1ud6=;b-I delta 34616 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 Iltsk<118EgCjbBd diff --git a/project/context.md b/project/context.md index d13adb8..0207a49 100644 --- a/project/context.md +++ b/project/context.md @@ -5,12 +5,12 @@ - **Project**: /home/tom/github/semcod/todo2code - **Primary Language**: typescript -- **Languages**: typescript: 143, json: 40, python: 16, javascript: 15, shell: 8 +- **Languages**: typescript: 152, json: 40, python: 16, javascript: 15, shell: 8 - **Analysis Mode**: static -- **Total Functions**: 3683 -- **Total Classes**: 373 -- **Modules**: 251 -- **Entry Points**: 2620 +- **Total Functions**: 3918 +- **Total Classes**: 392 +- **Modules**: 260 +- **Entry Points**: 2687 ## Architecture by Module @@ -19,26 +19,26 @@ - **Classes**: 1 - **File**: `cli.ts` -### src.synthesis.code-change-plan.implementation -- **Functions**: 148 -- **Classes**: 10 -- **File**: `implementation.ts` +### src.synthesis.code-change-plan.implementation-helpers +- **Functions**: 147 +- **Classes**: 16 +- **File**: `implementation-helpers.ts` ### src.services.actions -- **Functions**: 118 +- **Functions**: 145 - **Classes**: 1 - **File**: `actions.ts` +### src.synthesis.code-change-plan.implementation-source-patch +- **Functions**: 103 +- **Classes**: 5 +- **File**: `implementation-source-patch.ts` + ### src.interfaces.a2a-task-store - **Functions**: 101 - **Classes**: 3 - **File**: `a2a-task-store.ts` -### src.graph.linker -- **Functions**: 85 -- **Classes**: 4 -- **File**: `linker.ts` - ### src.communication.intake-service - **Functions**: 82 - **Classes**: 2 @@ -54,6 +54,10 @@ - **Classes**: 3 - **File**: `reality.ts` +### src.core.text +- **Functions**: 66 +- **File**: `text.ts` + ### src.pipeline.run - **Functions**: 65 - **Classes**: 1 @@ -64,10 +68,6 @@ - **Classes**: 6 - **File**: `git.ts` -### src.core.text -- **Functions**: 62 -- **File**: `text.ts` - ### src.graph.diagnostics - **Functions**: 61 - **Classes**: 1 @@ -83,6 +83,11 @@ - **Classes**: 3 - **File**: `workspace.ts` +### src.graph.linker +- **Functions**: 55 +- **Classes**: 1 +- **File**: `linker.ts` + ### src.synthesis.todo-patch - **Functions**: 53 - **Classes**: 5 @@ -107,21 +112,10 @@ - **Functions**: 48 - **File**: `a2a.ts` -### sdk.typescript.src -- **Functions**: 48 -- **Classes**: 14 -- **File**: `index.ts` - ## Key Entry Points Main execution flows into the system: -### src.services.actions.executeAction -- **Calls**: src.services.actions.resolveRoot, src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent - -### src.services.actions.root -- **Calls**: src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent, src.services.actions.extractMarkdownIntentAudited - ### sdk.python.examples.basic.main - **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result @@ -131,32 +125,17 @@ Main execution flows into the system: ### scripts.research.rank-intent-graph-embeddings.main - **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode -### src.web.diff-ui.diffUiHtml -- **Calls**: src.web.diff-ui.gradient, src.web.diff-ui.min, src.web.diff-ui.clamp, src.web.diff-ui.not, src.web.diff-ui.media, src.web.diff-ui.token, src.web.diff-ui.getElementById, src.web.diff-ui.byId - ### src.comparison.workspace.compareWorkspaceIntent - **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory -### src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch -- **Calls**: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.implementation.trim, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.resolve, src.synthesis.code-change-plan.implementation.assertPathWithinRoot, src.synthesis.code-change-plan.implementation.ensureDir, src.synthesis.code-change-plan.implementation.dirname, src.synthesis.code-change-plan.implementation.open - ### src.communication.analyzer.analyzeCommunication - **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set -### src.synthesis.code-change-plan.implementation.proposeCodeChangePlans -- **Calls**: src.synthesis.code-change-plan.implementation.assertIntentGraph, src.synthesis.code-change-plan.implementation.assertConclusions, src.synthesis.code-change-plan.implementation.Date, src.synthesis.code-change-plan.implementation.toISOString, src.synthesis.code-change-plan.implementation.isNaN, src.synthesis.code-change-plan.implementation.parse, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.isInteger - ### src.interfaces.a2a-message.parseCommand - **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim -### src.core.text.inferObject -- **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa - ### scripts.research.evaluate-embedding-pairs.main -- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text - -### src.core.text.normalized -- **Calls**: src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa, src.core.text.napraw, src.core.text.popraw +- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation-indexing.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text ### src.interfaces.intake_cli.main - **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument @@ -206,66 +185,87 @@ Main execution flows into the system: ### sdk.typescript.examples.basic.main - **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error +### sdk.python.todo2code.runtime.TypeScriptRuntime.reality +- **Calls**: tempfile.TemporaryDirectory, self.invoke, Path, Path, Path, str, str, str + +### src.extractors.nl.extractNlIntent +- **Calls**: src.extractors.nl.assertNlExtractionOptions, src.extractors.nl.resolve, src.extractors.nl.readText, src.extractors.nl.isAbsolute, src.extractors.nl.relativePosix, src.extractors.nl.replace, src.extractors.nl.splitIntentLines, src.extractors.nl.classifyAction + +### src.extractors.ast.extractAstIntent +- **Calls**: src.extractors.ast.resolve, src.extractors.ast.ContentCache, src.extractors.ast.loadIgnoreMatcher, src.extractors.ast.walkFiles, src.extractors.ast.readText, src.extractors.ast.relativePosix, src.extractors.ast.getOrCompute, src.extractors.ast.sha256 + +### src.extractors.todo.body +- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths + +### src.extractors.todo.relative +- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths + +### src.extractors.todo.lines +- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths + +### src.synthesis.todo-patch.applyTodoPatch +- **Calls**: src.synthesis.todo-patch.all, src.synthesis.todo-patch.readText, src.synthesis.todo-patch.assertTodoPatchArtifact, src.synthesis.todo-patch.sha256, src.synthesis.todo-patch.Error, src.synthesis.todo-patch.assertApproval, src.synthesis.todo-patch.ensureDir, src.synthesis.todo-patch.dirname + ## Process Flows Key execution flows identified: -### Flow 1: executeAction +### Flow 1: main ``` -executeAction [src.services.actions] - └─> resolveRoot - └─> scopedPath - └─> stringValue +main [sdk.python.examples.basic] ``` -### Flow 2: root +### Flow 2: runPipeline ``` -root [src.services.actions] - └─> scopedPath - └─> stringValue +runPipeline [src.pipeline.run] ``` -### Flow 3: main +### Flow 3: compareWorkspaceIntent ``` -main [sdk.python.examples.basic] +compareWorkspaceIntent [src.comparison.workspace] + └─> git + └─> execFileAsync ``` -### Flow 4: runPipeline +### Flow 4: analyzeCommunication ``` -runPipeline [src.pipeline.run] +analyzeCommunication [src.communication.analyzer] ``` -### Flow 5: diffUiHtml +### Flow 5: parseCommand ``` -diffUiHtml [src.web.diff-ui] +parseCommand [src.interfaces.a2a-message] ``` -### Flow 6: compareWorkspaceIntent +### Flow 6: assertOperationPlan ``` -compareWorkspaceIntent [src.comparison.workspace] - └─> git - └─> execFileAsync +assertOperationPlan [src.operations.validation] + └─> objectValue + └─> exactKeys ``` -### Flow 7: applyCodeChangeSourcePatch +### Flow 7: temporaryParent ``` -applyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation] - └─> assertCodeChangeSourcePatch +temporaryParent [src.comparison.workspace] + └─> git + └─> execFileAsync ``` -### Flow 8: analyzeCommunication +### Flow 8: baseWorktree ``` -analyzeCommunication [src.communication.analyzer] +baseWorktree [src.comparison.workspace] + └─> git + └─> execFileAsync ``` -### Flow 9: proposeCodeChangePlans +### Flow 9: extractTodo ``` -proposeCodeChangePlans [src.synthesis.code-change-plan.implementation] +extractTodo [src.extractors.todo] ``` -### Flow 10: parseCommand +### Flow 10: makefile ``` -parseCommand [src.interfaces.a2a-message] +makefile [scripts.verify-env-contract] ``` ## Key Classes @@ -286,6 +286,10 @@ parseCommand [src.interfaces.a2a-message] - **Methods**: 44 - **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base +### src.semantic.reranker-llm.SemanticRerankerRequiredError +- **Methods**: 43 +- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response + ### src.llm.structured-schema.StructuredResponseError - **Methods**: 37 - **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number @@ -306,10 +310,6 @@ Example: - **Methods**: 29 - **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results -### src.semantic.reranker-llm.SemanticRerankerRequiredError -- **Methods**: 29 -- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response - ### src.extractors.nl-llm-helpers.NlAttemptError - **Methods**: 28 - **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit @@ -448,25 +448,18 @@ Key functions that process and transform data: Functions exposed as public API (no underscore prefix): -- `src.services.actions.executeAction` - 65 calls -- `src.services.actions.root` - 64 calls - `sdk.python.examples.basic.main` - 62 calls - `src.pipeline.run.runPipeline` - 56 calls - `scripts.research.rank-intent-graph-embeddings.main` - 43 calls -- `src.web.diff-ui.diffUiHtml` - 42 calls - `src.comparison.workspace.compareWorkspaceIntent` - 40 calls - `sdk.rust.src.client.parse_http_response` - 37 calls -- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls +- `src.web.diff-ui.diffUiScriptMarkup` - 36 calls - `src.communication.analyzer.analyzeCommunication` - 35 calls -- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls - `src.interfaces.a2a-message.parseCommand` - 33 calls - `sdk.rust.examples.basic.run` - 33 calls -- `src.core.text.inferObject` - 31 calls - `scripts.research.evaluate-embedding-pairs.main` - 30 calls -- `src.core.text.normalized` - 29 calls - `src.interfaces.intake_cli.main` - 29 calls - `src.operations.validation.assertOperationPlan` - 28 calls -- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls - `src.comparison.workspace.temporaryParent` - 25 calls - `src.comparison.workspace.baseWorktree` - 25 calls - `sdk.go.examples.basic.main.run` - 25 calls @@ -479,7 +472,6 @@ Functions exposed as public API (no underscore prefix): - `scripts.live-model-comparison.main` - 22 calls - `rust-ast.src.main.main` - 21 calls - `src.extractors.git.extractRepositoryGitIntent` - 21 calls -- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls - `python.ast_extract.iter_python_files` - 21 calls - `sdk.typescript.examples.basic.baseUrl` - 21 calls - `sdk.typescript.examples.basic.token` - 21 calls @@ -488,6 +480,14 @@ Functions exposed as public API (no underscore prefix): - `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls - `rust-ast.src.main.collect_files` - 20 calls - `src.extractors.nl.extractNlIntent` - 20 calls +- `src.extractors.ast.extractAstIntent` - 20 calls +- `src.extractors.todo.body` - 20 calls +- `src.extractors.todo.relative` - 20 calls +- `src.extractors.todo.lines` - 20 calls +- `src.synthesis.todo-patch.createTodoPatch` - 20 calls +- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls +- `src.llm.openrouter.OpenRouterClient.request` - 20 calls +- `src.diff.reality.buildRealityView` - 20 calls ## System Interactions @@ -495,16 +495,6 @@ How components interact: ```mermaid graph TD - executeAction --> resolveRoot - executeAction --> scopedPath - executeAction --> extractNlIntentAudit - executeAction --> nlModeValue - executeAction --> extractGitIntent - root --> scopedPath - root --> extractNlIntentAudit - root --> nlModeValue - root --> extractGitIntent - root --> numberValue main --> get main --> T2CClient main --> print @@ -517,14 +507,24 @@ graph TD main --> read_bytes main --> loads main --> sorted - diffUiHtml --> gradient - diffUiHtml --> min - diffUiHtml --> clamp - diffUiHtml --> not - diffUiHtml --> media compareWorkspaceInte --> resolve compareWorkspaceInte --> git compareWorkspaceInte --> trim + compareWorkspaceInte --> relative + compareWorkspaceInte --> startsWith + analyzeCommunication --> assertIntentGraph + analyzeCommunication --> filter + analyzeCommunication --> validateSyntheses + analyzeCommunication --> evidenceNeighbors + analyzeCommunication --> participantOf + parseCommand --> find + parseCommand --> from + parseCommand --> decodeIntakeEnvelope + parseCommand --> isRecord + parseCommand --> commandFromData + main --> list + main --> monotonic + main --> SentenceTransformer ``` ## Reverse Engineering Guidelines diff --git a/project/evolution.toon.yaml b/project/evolution.toon.yaml index a424d60..d460002 100644 --- a/project/evolution.toon.yaml +++ b/project/evolution.toon.yaml @@ -1,58 +1,58 @@ -# code2llm/evolution | 3374 func | 137f | 2026-08-04 +# code2llm/evolution | 3609 func | 145f | 2026-08-04 # generated in 0.01s NEXT[10] (ranked by impact): - [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts - WHY: 1310L, 10 classes, max CC=47 - EFFORT: ~4h IMPACT: 61570 + [1] !! SPLIT src/synthesis/code-change-plan/implementation-helpers.ts + WHY: 1148L, 16 classes, max CC=13 + EFFORT: ~4h IMPACT: 14924 [2] !! SPLIT src/cli.ts - WHY: 935L, 1 classes, max CC=13 - EFFORT: ~4h IMPACT: 12155 + WHY: 942L, 1 classes, max CC=13 + EFFORT: ~4h IMPACT: 12246 - [3] !! SPLIT-FUNC executeAction CC=83 fan=65 - WHY: CC=83 exceeds 15 - EFFORT: ~1h IMPACT: 5395 - - [4] !! SPLIT-FUNC root CC=83 fan=64 - WHY: CC=83 exceeds 15 - EFFORT: ~1h IMPACT: 5312 - - [5] !! SPLIT-FUNC runPipeline CC=56 fan=56 + [3] !! SPLIT-FUNC runPipeline CC=56 fan=56 WHY: CC=56 exceeds 15 EFFORT: ~1h IMPACT: 3136 - [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28 + [4] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28 WHY: CC=84 exceeds 15 EFFORT: ~1h IMPACT: 2352 - [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42 - WHY: CC=52 exceeds 15 - EFFORT: ~1h IMPACT: 2184 - - [8] !! SPLIT-FUNC parseCommand CC=63 fan=33 + [5] !! SPLIT-FUNC parseCommand CC=63 fan=33 WHY: CC=63 exceeds 15 EFFORT: ~1h IMPACT: 2079 - [9] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 + [6] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 WHY: CC=48 exceeds 15 EFFORT: ~1h IMPACT: 1680 - [10] !! SPLIT-FUNC applyCodeChangeSourcePatch CC=41 fan=35 - WHY: CC=41 exceeds 15 - EFFORT: ~1h IMPACT: 1435 + [7] !! SPLIT-FUNC diffUiScriptMarkup CC=46 fan=36 + WHY: CC=46 exceeds 15 + EFFORT: ~1h IMPACT: 1656 + + [8] !! SPLIT-FUNC parseFile CC=38 fan=19 + WHY: CC=38 exceeds 15 + EFFORT: ~1h IMPACT: 722 + + [9] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37 + WHY: CC=18 exceeds 15 + EFFORT: ~1h IMPACT: 666 + + [10] !! SPLIT-FUNC OpenRouterClient.request CC=31 fan=20 + WHY: CC=31 exceeds 15 + EFFORT: ~1h IMPACT: 620 RISKS[3]: ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths - ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths + ⚠ Splitting src/synthesis/code-change-plan/implementation-helpers.ts may break 133 import paths ⚠ Splitting src/cli.ts may break 124 import paths METRICS-TARGET: - CC̄: 3.7 → ≤2.6 + CC̄: 3.3 → ≤2.3 max-CC: 84 → ≤20 god-modules: 13 → 0 - high-CC(≥15): 79 → ≤39 + high-CC(≥15): 52 → ≤26 hub-types: 0 → ≤0 PATTERNS (language parser shared logic): @@ -80,4 +80,4 @@ PATTERNS (language parser shared logic): - Standardized FunctionInfo/ClassInfo models HISTORY: - prev CC̄=3.7 → now CC̄=3.7 + prev CC̄=3.3 → now CC̄=3.3 diff --git a/project/flow.mmd b/project/flow.mmd index 1f1894b..1350e9a 100644 --- a/project/flow.mmd +++ b/project/flow.mmd @@ -1,5 +1,5 @@ flowchart TD -%% generated in 0.04s +%% generated in 0.09s %% Entry points (blue) classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff @@ -39,7 +39,7 @@ flowchart TD rust_ast__src__main__visit_item_static["visit_item_static"] rust_ast__src__main__visit_item_fn["visit_item_fn"] rust_ast__src__main__visit_item_impl["visit_item_impl"] - ...["+2378 more"] + ...["+2443 more"] end subgraph Exporters diff --git a/project/flow.png b/project/flow.png index cfe954a0877de7cade2053824c4b3e45d6f729b5..c80d0cc8b94b37a40e1c5f20031f2071c013fc79 100644 GIT binary patch literal 14204 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 Results // Initialize mermaid mermaid.initialize({ startOnLoad: false, theme: 'dark' }); - const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "98.1KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.4KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3683 \n**Total Classes**: 373 \n**Modules**: 251 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "34.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 143, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3683\n- **Total Classes**: 373\n- **Modules**: 251\n- **Entry Points**: 2620\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.synthesis.code-change-plan.implementation\n- **Functions**: 148\n- **Classes**: 10\n- **File**: `implementation.ts`\n\n### src.services.actions\n- **Functions**: 118\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.graph.linker\n- **Functions**: 85\n- **Classes**: 4\n- **File**: `linker.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.core.text\n- **Functions**: 62\n- **File**: `text.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### src.services.actions.executeAction\n- **Calls**: src.services.actions.resolveRoot, src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent\n\n### src.services.actions.root\n- **Calls**: src.services.actions.scopedPath, src.services.actions.extractNlIntentAudited, src.services.actions.nlModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.extractAstIntent, src.services.actions.extractConfigurationIntent, src.services.actions.extractMarkdownIntentAudited\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.web.diff-ui.diffUiHtml\n- **Calls**: src.web.diff-ui.gradient, src.web.diff-ui.min, src.web.diff-ui.clamp, src.web.diff-ui.not, src.web.diff-ui.media, src.web.diff-ui.token, src.web.diff-ui.getElementById, src.web.diff-ui.byId\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- **Calls**: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch, src.synthesis.code-change-plan.implementation.trim, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.resolve, src.synthesis.code-change-plan.implementation.assertPathWithinRoot, src.synthesis.code-change-plan.implementation.ensureDir, src.synthesis.code-change-plan.implementation.dirname, src.synthesis.code-change-plan.implementation.open\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- **Calls**: src.synthesis.code-change-plan.implementation.assertIntentGraph, src.synthesis.code-change-plan.implementation.assertConclusions, src.synthesis.code-change-plan.implementation.Date, src.synthesis.code-change-plan.implementation.toISOString, src.synthesis.code-change-plan.implementation.isNaN, src.synthesis.code-change-plan.implementation.parse, src.synthesis.code-change-plan.implementation.Error, src.synthesis.code-change-plan.implementation.isInteger\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### src.core.text.inferObject\n- **Calls**: src.core.text.replace, src.core.text.trim, src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.core.text.normalized\n- **Calls**: src.core.text.b, src.core.text.utworzy, src.core.text.doda, src.core.text.zaimplementowa, src.core.text.stworzy, src.core.text.zbudowa, src.core.text.napraw, src.core.text.popraw\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: executeAction\n```\nexecuteAction [src.services.actions]\n └─> resolveRoot\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 2: root\n```\nroot [src.services.actions]\n └─> scopedPath\n └─> stringValue\n```\n\n### Flow 3: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 4: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 5: diffUiHtml\n```\ndiffUiHtml [src.web.diff-ui]\n```\n\n### Flow 6: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 7: applyCodeChangeSourcePatch\n```\napplyCodeChangeSourcePatch [src.synthesis.code-change-plan.implementation]\n └─> assertCodeChangeSourcePatch\n```\n\n### Flow 8: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 9: proposeCodeChangePlans\n```\nproposeCodeChangePlans [src.synthesis.code-change-plan.implementation]\n```\n\n### Flow 10: parseCommand\n```\nparseCommand [src.interfaces.a2a-message]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 29\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticRerankResult, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.records, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 28\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `src.services.actions.executeAction` - 65 calls\n- `src.services.actions.root` - 64 calls\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.web.diff-ui.diffUiHtml` - 42 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - 35 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - 34 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `src.core.text.inferObject` - 31 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.core.text.normalized` - 29 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - 26 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `src.semantic.reranker.result.assertSemanticRerankResult` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n executeAction --> resolveRoot\n executeAction --> scopedPath\n executeAction --> extractNlIntentAudit\n executeAction --> nlModeValue\n executeAction --> extractGitIntent\n root --> scopedPath\n root --> extractNlIntentAudit\n root --> nlModeValue\n root --> extractGitIntent\n root --> numberValue\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n diffUiHtml --> gradient\n diffUiHtml --> min\n diffUiHtml --> clamp\n diffUiHtml --> not\n diffUiHtml --> media\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "70.4KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__offset["offset"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__server["server"]\n examples__backend__src__server__event["event"]\n examples__backend__src__server__store["store"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__server__limit["limit"]\n examples__backend__src__validation__agent["agent"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__app__createState["createState"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__app__refresh["refresh"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n end\n subgraph src__cli\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__absolute["absolute"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__stamp["stamp"]\n src__cli__diagnostics["diagnostics"]\n src__cli__svg["svg"]\n src__cli__taskFile["taskFile"]\n src__cli__diff["diff"]\n src__cli__handleReality["handleReality"]\n src__cli__invokedPath["invokedPath"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__optionNumber["optionNumber"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__controller["controller"]\n src__cli__result["result"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__command["command"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__optionNlMode["optionNlMode"]\n src__cli__pipeline["pipeline"]\n src__cli__optionTaskMode["optionTaskMode"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__optionString["optionString"]\n src__cli__handleExtract["handleExtract"]\n src__cli__context["context"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__handleLink["handleLink"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__handleIntake["handleIntake"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n src__cli__initProject["initProject"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__file["file"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__main["main"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__emitJson["emitJson"]\n src__cli__root["root"]\n src__cli__printHelp["printHelp"]\n src__cli__handler["handler"]\n src__cli__parsed["parsed"]\n src__cli__stop["stop"]\n src__cli__doctor["doctor"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__optionList["optionList"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__handleDiff["handleDiff"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__view["view"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__optionNullableString["optionNullableString"]\n end\n subgraph src__extractors\n src__extractors__todo__classified["classified"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__git__result["result"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__todo__body["body"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__ast__typescript__context["context"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__git__count["count"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__nl__action["action"]\n src__extractors__docs_record__target["target"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__configuration__match["match"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__git__state["state"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__configuration__entry["entry"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__configuration__relative["relative"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__git__runGit["runGit"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__todo__action["action"]\n src__extractors__git__readStats["readStats"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__configuration__pair["pair"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__git__root["root"]\n src__extractors__nl__body["body"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__ast__typescript__recordModuleFact["recordModuleFact"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__configuration__lines["lines"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__todo__raw["raw"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__configuration__heading["heading"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__todo__heading["heading"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__docs_schema__target["target"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__nl__object["object"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__todo__checked["checked"]\n src__extractors__todo__block["block"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__todo__text["text"]\n src__extractors__docs_record__action["action"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"]\n src__extractors__changelog__relative["relative"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__ast__records__start["start"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__nl__missing["missing"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__todo__lines["lines"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__configuration__line["line"]\n src__extractors__ast__external__result["result"]\n src__extractors__nl__classified["classified"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__ast__typescript__handleNode["handleNode"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__changelog__body["body"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__todo__match["match"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__changelog__lines["lines"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__todo__relative["relative"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"]\n src__extractors__configuration__files["files"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__todo__task["task"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__configuration__entries["entries"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>225 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>292 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2378 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [153KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [34KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "163.3KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "23.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 251f 39151L | typescript:143,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.26s\n# CC̅=3.6 | critical:90/3683 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/graph/linker.ts = 537L, 4 classes, 81m, max CC=10\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC buildLocalWarnings CC=18 (limit:15)\n 🟡 CC executeAction CC=83 (limit:15)\n 🟡 CC root CC=83 (limit:15)\n 🟡 CC normalized CC=30 (limit:15)\n 🟡 CC inferObject CC=34 (limit:15)\n 🟡 CC walkFiles CC=15 (limit:15)\n 🟡 CC diffUiHtml CC=52 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC rerankSemanticCandidates CC=25 (limit:15)\n 🟡 CC assertSemanticRerankResult CC=21 (limit:15)\n 🟡 CC records CC=16 (limit:15)\n 🟡 CC seenDecisions CC=16 (limit:15)\n 🟡 CC acceptedDeclarations CC=16 (limit:15)\n 🟡 CC assertSemanticCandidateSet CC=27 (limit:15)\n 🟡 CC NON_SOURCE_DIR_SEGMENTS CC=38 (limit:15)\n 🟡 CC BINARY_EXTENSIONS CC=38 (limit:15)\n 🟡 CC GENERATED_ANALYSIS_BASENAMES CC=38 (limit:15)\n 🟡 CC T2C_ARTIFACT_BASENAMES CC=38 (limit:15)\n\nREFACTOR[2]:\n 1. split src/graph/linker.ts (god module)\n 2. split 19 high-CC methods (CC>15)\n\nPIPELINES[2061]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.8 ←in:0 →out:0\n │ !! cli.ts 935L 1C 124m CC=13 ←0\n │ !! actions.ts 737L 1C 79m CC=83 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! linker.ts 537L 4C 81m CC=10 ←3\n │ !! text.ts 517L 0C 57m CC=34 ←0\n │ diagnostics.ts 459L 1C 58m CC=11 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intent.ts 306L 4C 36m CC=12 ←0\n │ !! communication-file-helpers.ts 296L 2C 39m CC=18 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ !! result.ts 264L 0C 16m CC=21 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ intent.ts 258L 15C 0m CC=0.0 ←0\n │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ code-change.ts 221L 16C 0m CC=0.0 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ !! reranker-llm.ts 210L 2C 24m CC=25 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ !! code-change-path.ts 204L 0C 14m CC=38 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! candidate.ts 200L 0C 13m CC=27 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ !! record.ts 183L 2C 13m CC=17 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ !! io.ts 177L 1C 32m CC=15 ←0\n │ markdown-llm.ts 175L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ !! diff-ui.ts 48L 0C 9m CC=52 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ !! implementation.ts 1L 10C 127m CC=47 ←3\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.diff/ (fan-in=6)\n HUB: src.synthesis/ (fan-in=5)\n HUB: src.live/ (fan-in=7)\n SMELL: scripts.research/ fan-out=11 → split needed\n SMELL: sdk.python/ fan-out=8 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.2KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 401 | edges: 500 | modules: 30\n# CC̄=3.6\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.ast.records.moduleRecords\n CC=6 in:1 out:14 total:15\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.body\n CC=7 in:0 out:15 total:15\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [11 funcs]\n context CC=1 out:4\n createTypeScriptExtractionContext CC=1 out:0\n extractTypeScriptFile CC=1 out:7\n handleExportDeclaration CC=4 out:3\n handleImportDeclaration CC=5 out:4\n handleNode CC=6 out:5\n handleSymbolDeclaration CC=4 out:9\n handleVariableDeclaration CC=8 out:7\n recordModuleFact CC=1 out:2\n scriptKind CC=4 out:3\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [4 funcs]\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [15 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n nonEmptyText CC=3 out:1\n normalizedText CC=1 out:1\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "251.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 401\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 639\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 92\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 705\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 869\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.handleVariableDeclaration:\n name: handleVariableDeclaration\n module: src.extractors.ast.typescript\n line: 111\n cyclomatic_complexity: 8\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 194\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 445\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 554\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.cli.svg:\n name: svg\n module: src.cli\n line: 560\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 344\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.diff:\n name: diff\n module: src.cli\n line: 500\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 547\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 929\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 405\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 830\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 823\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.cli.controller:\n name: controller\n module: src.cli\n line: 347\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.extractors.ast.typescript.handleSymbolDeclaration:\n name: handleSymbolDeclaration\n module: src.extractors.ast.typescript\n line: 87\n cyclomatic_complexity: 4\n calls_out: 9\n calls_in: 1\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.result:\n name: result\n module: src.cli\n line: 763\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 306\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 255\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 508\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 31\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 326\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 268\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 484\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 158\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.ast.typescript.context:\n name: context\n module: src.extractors.ast.typescript\n line: 12\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 594\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 553\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 843\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 345\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 853\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 410\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 237\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 121\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 380\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 176\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 367\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 875\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 811\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 573\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.cli.context:\n name: context\n module: src.cli\n line: 531\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 168\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 142\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 87\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 530\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 127\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.ast.typescript.handleExportDeclaration:\n name: handleExportDeclaration\n module: src.extractors.ast.typescript\n line: 74\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 847\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 342\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 253\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 699\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.ast.typescript.recordModuleFact:\n name: recordModuleFact\n module: src.extractors.ast.typescript\n line: 229\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 629\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 237\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 218\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 286\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 363\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 75\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 729\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 197\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.file:\n name: file\n module: src.cli\n line: 595\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 185\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 444\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 612\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 622\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 617\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.ast.typescript.createTypeScriptExtractionContext:\n name: createTypeScriptExtractionContext\n module: src.extractors.ast.typescript\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 219\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.ast.typescript.visitTypeScriptNode:\n name: visitTypeScriptNode\n module: src.extractors.ast.typescript\n line: 46\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 259\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 684\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 694\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.root:\n name: root\n module: src.cli\n line: 660\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 883\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.handler:\n name: handler\n module: src.cli\n line: 587\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 189\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.cli.stop:\n name: stop\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.ast.typescript.handleNode:\n name: handleNode\n module: src.extractors.ast.typescript\n line: 52\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 750\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 513\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 649\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 90\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 838\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 215\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 159\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 772\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 607\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 464\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 490\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 859\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.extractors.ast.typescript.handleImportDeclaration:\n name: handleImportDeclaration\n module: src.extractors.ast.typescript\n line: 61\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.cli.view:\n name: view\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 659\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 816\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.docs-schema.target\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.target\n c\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3374 func | 137f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation.ts\n WHY: 1310L, 10 classes, max CC=47\n EFFORT: ~4h IMPACT: 61570\n\n [2] !! SPLIT src/cli.ts\n WHY: 935L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12155\n\n [3] !! SPLIT-FUNC executeAction CC=83 fan=65\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5395\n\n [4] !! SPLIT-FUNC root CC=83 fan=64\n WHY: CC=83 exceeds 15\n EFFORT: ~1h IMPACT: 5312\n\n [5] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [6] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [7] !! SPLIT-FUNC diffUiHtml CC=52 fan=42\n WHY: CC=52 exceeds 15\n EFFORT: ~1h IMPACT: 2184\n\n [8] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [9] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n [10] !! SPLIT-FUNC applyCodeChangeSourcePatch CC=41 fan=35\n WHY: CC=41 exceeds 15\n EFFORT: ~1h IMPACT: 1435\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation.ts may break 127 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n\nMETRICS-TARGET:\n CC̄: 3.7 → ≤2.6\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 79 → ≤39\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.7 → now CC̄=3.7\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "153.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 251f 39151L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:143,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.03s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3683 func | 0 cls | 251 mod | CC̄=3.6 | critical:90 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64\n# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; diffUiHtml fan=42; compareWorkspaceIntent fan=40\n# evolution: CC̄ 3.7→3.6 (improved -0.1)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[251]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,935\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,177\n src/core/record.ts,183\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,306\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,517\n src/core/types/index.ts,4\n src/core/types/code-change.ts,221\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,258\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,296\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,175\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,256\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,537\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,210\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,200\n src/semantic/reranker/result.ts,264\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,737\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,204\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,48\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n file()\n text()\n analysis()\n records()\n graph()\n graph()\n diagnostics()\n graph()\n diagnostics()\n result()\n output()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n planSet()\n review()\n patchPath()\n auditPath()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n patch()\n receiptPath()\n result()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n beforePath()\n afterPath()\n diff()\n result()\n graph()\n diagnostics()\n view()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/web/diff-ui.ts:\n e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs\n diffUiHtml()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/synthesis/code-change-plan/implementation.ts:\n i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n CreateCodeChangeReviewOptions:\n CreatedCodeChangeReview:\n CreateCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n PreparedSourceEdit:\n IMPLEMENTATION_DIAGNOSTIC_CODES()\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n conclusions()\n proposals()\n recordsById()\n proposalsByDiagnostic()\n conclusionsByDiagnostic()\n candidates()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n generation()\n planHash()\n createRepositoryPathProbe()\n base()\n absolute()\n implementationDiagnosticRank()\n evaluateCodeChangeAcceptance()\n afterDiagnostics()\n beforeIds()\n afterById()\n targeted()\n clearedDiagnosticIds()\n remainingDiagnosticIds()\n newBlockingDiagnosticIds()\n accepted()\n evaluatedAt()\n closeCodeChanges()\n evaluatedAt()\n afterDiagnostics()\n planIds()\n acceptances()\n acceptedCount()\n indexProposalsByDiagnostic()\n index()\n list()\n indexConclusionsByDiagnostic()\n index()\n list()\n collectTarget()\n paths()\n symbols()\n tickets()\n versions()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n titleFor()\n record()\n object()\n startsWithImperative()\n descriptionFor()\n acceptanceCriteriaFor()\n priorityFor()\n confidenceFor()\n riskFor()\n level()\n rollbackFor()\n deterministicGeneration()\n uniqueSorted()\n createCodeChangeReviewPatch()\n createdAt()\n markdown()\n renderCodeChangeReviewMarkdown()\n symbols()\n assertCodeChangeReviewPatch()\n artifact()\n generation()\n priorityRank()\n inline()\n renderIds()\n createCodeChangeSourcePatch()\n plan()\n graphFingerprint()\n createdAt()\n allowed()\n diffs()\n normalized()\n path()\n rawDiff()\n unifiedDiff()\n patchHash()\n createCodeChangeSourcePatchSet()\n generatedAt()\n assertCodeChangeSourcePatch()\n patch()\n paths()\n path()\n expectedHash()\n allowed()\n expectedChanges()\n editPath()\n assertCodeChangeSourcePatchSet()\n set()\n plansById()\n patchIds()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n instructionFor()\n symbols()\n criteria()\n normalizeUnifiedDiff()\n normalized()\n path()\n bare()\n stripped()\n applyCodeChangeSourcePatch()\n root()\n receiptPath()\n existing()\n relative()\n absolute()\n exists()\n before()\n after()\n now()\n fileHashesAfter()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n expectedPaths()\n hashPaths()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n normalizedDiff()\n baseLines()\n diffLines()\n cursor()\n oldIndex()\n oldCount()\n newCount()\n mark()\n body()\n splitKeep()\n lines()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n lowerBasename()\n dot()\n ext()\n isUsefulCodeChangePath()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n result()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n src/semantic/reranker/candidate.ts:\n i: ../../core/schema.js,../../core/types.js,./validation.js\n e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair\n createSemanticCandidateSet()\n grouped()\n values()\n assertSemanticCandidateSet()\n records()\n seenIds()\n seenPairs()\n byDeclaration()\n declaration()\n module()\n existing()\n expectedHash()\n comparePair()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/semantic/reranker-llm.ts:\n i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util\n e: SemanticRerankerOptions,SemanticRerankerRequiredError\n SemanticRerankerOptions:\n SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1)\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n src/semantic/reranker/result.ts:\n i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js\n e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons\n createSemanticRerankResult()\n decisions()\n assertSemanticRerankResult()\n candidates()\n records()\n seenDecisions()\n acceptedDeclarations()\n candidate()\n citations()\n record()\n expectedHash()\n applyAcceptedSemanticRelations()\n candidates()\n added()\n candidate()\n assertSemanticVerdictReason()\n allowedVerdicts()\n allowedReasons()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,declaredRole,declaredA2aAgentId,declaredGitAuthors,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n declaredRole()\n declaredA2aAgentId()\n declaredGitAuthors()\n rawTimestamp()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n seed()\n buildRecordSeed()\n buildRecordStatement()\n buildRecordSource()\n buildRecordEpistemic()\n withRecordGeneration()\n generationMetadata()\n generationIdentity()\n separator()\n clamp()\n sourcePrefix()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n ignored()\n extensions()\n maxFiles()\n matcher()\n base()\n visit()\n entries()\n absolute()\n relative()\n extension()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTarget()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskStore()\n removeTemporaryFile()\n prepareTask()\n key()\n indexedTask()\n taskForMessage()\n indexedTaskId()\n task()\n continueTask()\n existing()\n continuationError()\n message()\n createTask()\n taskId()\n contextId()\n executeMessage()\n command()\n result()\n domainResult()\n rejectTask()\n protobuf()\n diagnostic()\n message()\n currentTaskState()\n completeTask()\n protobuf()\n message()\n protobufResult()\n intakeDomainResult()\n record()\n failTask()\n message()\n agentMessage()\n listTasks()\n contextId()\n status()\n pageSize()\n historyLength()\n includeArtifacts()\n statusTimestampAfter()\n filter()\n filtered()\n pageCursor()\n start()\n page()\n last()\n filteredTasks()\n compareTasksByUpdate()\n timestampOrder()\n indexAfterCursor()\n exact()\n cursorTime()\n next()\n taskTime()\n encodeCursor()\n decodeCursor()\n decoded()\n taskView()\n effectiveHistoryLength()\n history()\n cloneArtifact()\n ownedTask()\n task()\n messageKey()\n errorMessage()\n src/communication/intake-store.ts:\n i: ../core/io.js,../core/security.js,node:crypto,node:fs,node:path\n e: IntakeEvent,StreamSnapshot,IntakeEventStore\n IntakeEvent:\n StreamSnapshot:\n IntakeEventStore: read(-1),names(-1),name(-1),eventPath(-1),stat(-1),event(-1),lockPath(-1),stream(-1),existing(-1),writeRegistry(-1),projectionPath(-1),slug(-1),atomicWrite(-1),safe(-1),temp(-1),assertSafe(-1),hashEvent(-1),broken(-1),unsafe(-1)\n scripts/verify-workflow-yaml.mjs:\n i: node:fs,node:path\n e: explicit,files,body,seen,match,key,previous,workflowFiles,directory\n explicit()\n files()\n body()\n seen()\n match()\n key()\n previous()\n workflowFiles()\n directory()\n scripts/research/audit-changelog-sample.mjs:\n i: node:child_process,node:fs,node:path\n e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,classification,labelCounts,labelRepositories,stratifiedSample,groups,values,added,record,targetClass,target,classify,text,file,exactFileUpdate,match,candidate,basename,pathOwners,file,countBy,item,readJson,parseArgs,value,index,limitIndex,limit,intentDirectoryIndex,intentDirectory\n options()\n entries()\n root()\n latest()\n runDirectory()\n diagnostics()\n graph()\n recordsById()\n findings()\n selected()\n trackedFiles()\n classification()\n labelCounts()\n labelRepositories()\n stratifiedSample()\n groups()\n values()\n added()\n record()\n targetClass()\n target()\n classify()\n text()\n file()\n exactFileUpdate()\n match()\n candidate()\n basename()\n pathOwners()\n file()\n countBy()\n item()\n readJson()\n parseArgs()\n value()\n index()\n limitIndex()\n limit()\n intentDirectoryIndex()\n intentDirectory()\n sdk/php/src/Client.php:\n e: Client\n Client:\n sdk/python/examples/basic.py:\n e: main\n main()\n examples/backend/src/validation.ts:\n e: ValidationResult,ALLOWED_ACTIONS,validateEventPayload,invalid,record,agent,action,object\n ValidationResult:\n ALLOWED_ACTIONS()\n validateEventPayload()\n invalid()\n record(\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "190.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.17s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)'\n description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:466`\n with cyclomatic complexity 34 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)'\n description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:467`\n with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/text.ts\n dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n (CC=25)'\n description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates`\n at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker-llm.ts\n dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet\n (CC=27)'\n description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet`\n at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)'\n description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)'\n description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73`\n with cyclomatic complexity 83 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/services/actions.ts\n dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS`\n at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES`\n at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES`\n at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS`\n at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES`\n at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath\n (CC=38)'\n description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath`\n at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-path.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n (CC=41)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity\n 41 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText`\n at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n (CC=47)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch`\n at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity\n 47 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor\n (CC=25)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor`\n at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity\n 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)'\n description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1`\n with cyclomatic complexity 52 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml\n- signal: code2llm_god\n title: 'Split god module: src/graph/linker.ts'\n description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines,\n 4 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/graph/linker.ts\n dedupe_key: code2llm:god:src/graph/linker.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts`\n as a large module (1310 lines, 10 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation`\n in `src/synthesis/code-change-plan/implementation.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions,\n 10 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God\n Module: src.synthesis.code-change-plan.implementation'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)'\n description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/io.ts\n dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.extractors.communication-file-helpers.buildLocalWarnings\n (CC=18)'\n description: 'code2llm reports `src.extractors.communication-file-helpers.buildLocalWarnings`\n at `src/extractors/communication-file-helpers.ts:254` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: code2llm:cc:src/extractors/communication-file-helpers.ts:src.extractors.communication-file-helpers.buildLocalWarnings\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations`\n at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult\n (CC=21)'\n description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult`\n at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions\n (CC=16)'\n description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n (CC=23)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch`\n at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity\n 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n (CC=18)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet`\n at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity\n 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff`\n at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths\n (CC=16)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths`\n at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity\n 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n (CC=17)'\n description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans`\n at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity\n 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: action, self, payload'\n description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n action, self, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: action, self, payload'\n description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n action, self, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: excludes, self, patterns, root'\n description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (excludes, self, patterns, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n excludes, self, patterns, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: excludes, self, patterns, root'\n description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (excludes, self, patterns, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n excludes, self, patterns, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, nl_mode, self, root'\n description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (file, nl_mode, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n file, nl_mode, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, nl_mode, self, root'\n description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (file, nl_mode, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n file, nl_mode, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo'\n description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root,\n todo` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n markdown_mode, changelog, self, root, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo'\n description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root,\n todo` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n markdown_mode, changelog, self, root, todo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:369`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:369:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:179`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertSourceApplyReceipt'\n description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`.\n\n\n Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God\n Function: assertSourceApplyReceipt'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: base'\n description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`.\n\n\n Function ''base'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/io.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:92:God Function: base'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byDeclaration'\n description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`.\n\n\n Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God\n Function: byDeclaration'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: candidates'\n description: 'code2llm reports `God Function: candidates` in `src/synthesis/code-change-plan/implementation.ts:124`.\n\n\n Function ''candidates'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:124:God\n Function: candidates'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: closeCodeChanges'\n description: 'code2llm reports `God Function: closeCodeChanges` in `src/synthesis/code-change-plan/implementation.ts:298`.\n\n\n Function ''closeCodeChanges'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:298:God\n Function: closeCodeChanges'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: conclusions'\n description: 'code2llm reports `God Function: conclusions` in `src/synthesis/code-change-plan/implementation.ts:118`.\n\n\n Function ''conclusions'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:118:God\n Function: conclusions'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: conclusionsByDiagnostic'\n description: 'code2llm reports `God Function: conclusionsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:122`.\n\n\n Function ''conclusionsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:122:God\n Function: conclusionsByDiagnostic'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeReviewPatch'\n description: 'code2llm reports `God Function: createCodeChangeReviewPatch` in `src/synthesis/code-change-plan/implementation.ts:547`.\n\n\n Function ''createCodeChangeReviewPatch'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:547:God\n Function: createCodeChangeReviewPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: createCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation.ts:698`.\n\n\n Function ''createCodeChangeSourcePatch'' is oversized: CC=13, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:698:God\n Function: createCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createCodeChangeSourcePatchSet'\n description: 'code2llm reports `God Function: createCodeChangeSourcePatchSet` in\n `src/synthesis/code-change-plan/implementation.ts:759`.\n\n\n Function ''createCodeChangeSourcePatchSet'' is oversized: CC=8, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:759:God\n Function: createCodeChangeSourcePatchSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_f\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3683 func | 171f | 39185L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.6 critical=256 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded executeAction = 83 (limit:15)\n !!! cc_exceeded root = 83 (limit:15)\n !!! high_fan_out executeAction = 65 (limit:10)\n !!! high_fan_out root = 64 (limit:10)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded diffUiHtml = 52 (limit:15)\n !!! cc_exceeded analyzeCommunication = 48 (limit:15)\n\nMODULES[251] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/services/actions.ts] 737L C:1 F:79 CC↑83 D:0 (typescript)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[src/core/text.ts] 517L C:0 F:57 CC↑34 D:0 (typescript)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript)\n M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript)\n LANGS: typescript:143/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ executeAction fan=65 // Orchestrates 65 calls\n ★ root fan=64 // Orchestrates 64 calls\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ diffUiHtml fan=42 // Orchestrates 42 calls\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n\nREFACTOR[15]:\n [1] H/L Split executeAction (CC=83)\n [2] H/L Split root (CC=83)\n [3] H/L Split normalized (CC=30)\n [4] H/L Split inferObject (CC=34)\n [5] H/L Split diffUiHtml (CC=52)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.6 crit=256 39185L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; + const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "96.3KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.3KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3918 \n**Total Classes**: 392 \n**Modules**: 260 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "34.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 152, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3918\n- **Total Classes**: 392\n- **Modules**: 260\n- **Entry Points**: 2687\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.synthesis.code-change-plan.implementation-helpers\n- **Functions**: 147\n- **Classes**: 16\n- **File**: `implementation-helpers.ts`\n\n### src.services.actions\n- **Functions**: 145\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.synthesis.code-change-plan.implementation-source-patch\n- **Functions**: 103\n- **Classes**: 5\n- **File**: `implementation-source-patch.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.core.text\n- **Functions**: 66\n- **File**: `text.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.graph.linker\n- **Functions**: 55\n- **Classes**: 1\n- **File**: `linker.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation-indexing.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.python.todo2code.runtime.TypeScriptRuntime.reality\n- **Calls**: tempfile.TemporaryDirectory, self.invoke, Path, Path, Path, str, str, str\n\n### src.extractors.nl.extractNlIntent\n- **Calls**: src.extractors.nl.assertNlExtractionOptions, src.extractors.nl.resolve, src.extractors.nl.readText, src.extractors.nl.isAbsolute, src.extractors.nl.relativePosix, src.extractors.nl.replace, src.extractors.nl.splitIntentLines, src.extractors.nl.classifyAction\n\n### src.extractors.ast.extractAstIntent\n- **Calls**: src.extractors.ast.resolve, src.extractors.ast.ContentCache, src.extractors.ast.loadIgnoreMatcher, src.extractors.ast.walkFiles, src.extractors.ast.readText, src.extractors.ast.relativePosix, src.extractors.ast.getOrCompute, src.extractors.ast.sha256\n\n### src.extractors.todo.body\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.relative\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.lines\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.synthesis.todo-patch.applyTodoPatch\n- **Calls**: src.synthesis.todo-patch.all, src.synthesis.todo-patch.readText, src.synthesis.todo-patch.assertTodoPatchArtifact, src.synthesis.todo-patch.sha256, src.synthesis.todo-patch.Error, src.synthesis.todo-patch.assertApproval, src.synthesis.todo-patch.ensureDir, src.synthesis.todo-patch.dirname\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 2: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 3: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 4: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 5: parseCommand\n```\nparseCommand [src.interfaces.a2a-message]\n```\n\n### Flow 6: assertOperationPlan\n```\nassertOperationPlan [src.operations.validation]\n └─> objectValue\n └─> exactKeys\n```\n\n### Flow 7: temporaryParent\n```\ntemporaryParent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 8: baseWorktree\n```\nbaseWorktree [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 9: extractTodo\n```\nextractTodo [src.extractors.todo]\n```\n\n### Flow 10: makefile\n```\nmakefile [scripts.verify-env-contract]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 43\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 28\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.web.diff-ui.diffUiScriptMarkup` - 36 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n- `src.extractors.ast.extractAstIntent` - 20 calls\n- `src.extractors.todo.body` - 20 calls\n- `src.extractors.todo.relative` - 20 calls\n- `src.extractors.todo.lines` - 20 calls\n- `src.synthesis.todo-patch.createTodoPatch` - 20 calls\n- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls\n- `src.llm.openrouter.OpenRouterClient.request` - 20 calls\n- `src.diff.reality.buildRealityView` - 20 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n compareWorkspaceInte --> relative\n compareWorkspaceInte --> startsWith\n analyzeCommunication --> assertIntentGraph\n analyzeCommunication --> filter\n analyzeCommunication --> validateSyntheses\n analyzeCommunication --> evidenceNeighbors\n analyzeCommunication --> participantOf\n parseCommand --> find\n parseCommand --> from\n parseCommand --> decodeIntakeEnvelope\n parseCommand --> isRecord\n parseCommand --> commandFromData\n main --> list\n main --> monotonic\n main --> SentenceTransformer\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "70.7KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.09s\n subgraph examples__backend\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__validation__agent["agent"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__server["server"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__server__store["store"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__server__event["event"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__offset["offset"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__server__limit["limit"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__app__refresh["refresh"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__createState["createState"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n end\n subgraph src__cli\n src__cli__optionNlMode["optionNlMode"]\n src__cli__result["result"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__emitJson["emitJson"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__printHelp["printHelp"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__handleDiff["handleDiff"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__parsed["parsed"]\n src__cli__optionTaskMode["optionTaskMode"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__view["view"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__absolute["absolute"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__context["context"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__handleReality["handleReality"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__optionNullableString["optionNullableString"]\n src__cli__diagnostics["diagnostics"]\n src__cli__main["main"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__optionNumber["optionNumber"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__pipeline["pipeline"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__handleLink["handleLink"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__handleExtract["handleExtract"]\n src__cli__root["root"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__svg["svg"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__controller["controller"]\n src__cli__initProject["initProject"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__diff["diff"]\n src__cli__stamp["stamp"]\n src__cli__file["file"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__command["command"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__doctor["doctor"]\n src__cli__taskFile["taskFile"]\n src__cli__handleIntake["handleIntake"]\n src__cli__invokedPath["invokedPath"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__optionList["optionList"]\n src__cli__optionString["optionString"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__stop["stop"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n end\n subgraph src__extractors\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"]\n src__extractors__nl__missing["missing"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__nl__body["body"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__todo__body["body"]\n src__extractors__todo__heading["heading"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__todo__classified["classified"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__configuration__line["line"]\n src__extractors__nl__classified["classified"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__docs_record__action["action"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"]\n src__extractors__ast__external__result["result"]\n src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__configuration__files["files"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__git__count["count"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__todo__task["task"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__docs_schema__target["target"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__ast__records__start["start"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__configuration__entries["entries"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__todo__raw["raw"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__configuration__entry["entry"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__docs_record__target["target"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__ast__typescript__recordModuleFact["recordModuleFact"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__changelog__body["body"]\n src__extractors__changelog__relative["relative"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__configuration__heading["heading"]\n src__extractors__todo__text["text"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__todo__checked["checked"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__todo__block["block"]\n src__extractors__configuration__relative["relative"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__todo__match["match"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__configuration__pair["pair"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__configuration__lines["lines"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__git__runGit["runGit"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__nl__object["object"]\n src__extractors__todo__relative["relative"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__todo__action["action"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__changelog__lines["lines"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__ast__typescript__context["context"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__todo__lines["lines"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__configuration__match["match"]\n src__extractors__nl__action["action"]\n src__extractors__git__result["result"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__git__state["state"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__git__root["root"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__git__readStats["readStats"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.09s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>226 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>461 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.09s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2443 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [24KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [168KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [34KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "165.1KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "24.6KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 260f 41965L | typescript:152,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.32s\n# CC̅=3.3 | critical:63/3918 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/synthesis/code-change-plan/implementation-helpers.ts = 1148L, 16 classes, 133m, max CC=13\n 🔴 GOD src/synthesis/code-change-plan/implementation-source-patch.ts = 694L, 5 classes, 95m, max CC=11\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC generationMetadata CC=17 (limit:15)\n 🟡 CC diffUiScriptMarkup CC=46 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC timeout CC=26 (limit:15)\n 🟡 CC request CC=31 (limit:15)\n 🟡 CC parseCommand CC=63 (limit:15)\n 🟡 CC runListItem CC=18 (limit:15)\n 🟡 CC myers CC=19 (limit:15)\n 🟡 CC n CC=15 (limit:15)\n 🟡 CC m CC=15 (limit:15)\n 🟡 CC max CC=15 (limit:15)\n 🟡 CC offset CC=15 (limit:15)\n 🟡 CC y CC=15 (limit:15)\n 🟡 CC backtrack CC=18 (limit:15)\n 🟡 CC x CC=15 (limit:15)\n 🟡 CC buildRealityView CC=26 (limit:15)\n 🟡 CC resolveStatus CC=15 (limit:15)\n\nREFACTOR[3]:\n 1. split src/synthesis/code-change-plan/implementation-helpers.ts (god module)\n 2. split src/synthesis/code-change-plan/implementation-source-patch.ts (god module)\n 3. split 18 high-CC methods (CC>15)\n\nPIPELINES[2088]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.4 ←in:0 →out:0\n │ !! implementation-helpers.ts 1148L 16C 133m CC=13 ←0\n │ !! cli.ts 942L 1C 124m CC=13 ←0\n │ !! actions.ts 806L 1C 106m CC=13 ←0\n │ !! implementation-source-patch.ts 694L 5C 95m CC=11 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! text.ts 530L 0C 61m CC=14 ←0\n │ diagnostics.ts 459L 1C 58m CC=11 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ result.ts 311L 0C 23m CC=7 ←0\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intent.ts 306L 4C 36m CC=12 ←0\n │ reranker-llm.ts 291L 2C 35m CC=9 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ linker.ts 286L 1C 52m CC=8 ←3\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ implementation-review.ts 269L 3C 31m CC=7 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ candidate.ts 250L 1C 19m CC=8 ←0\n │ code-change.ts 250L 19C 0m CC=0.0 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ code-change-path.ts 232L 0C 23m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ intent.ts 212L 13C 0m CC=0.0 ←0\n │ io.ts 211L 2C 30m CC=11 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ !! record.ts 183L 2C 13m CC=17 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ markdown-llm.ts 178L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ !! diff-ui.ts 167L 0C 15m CC=46 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ linker-candidates.ts 163L 1C 23m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ implementation-semantic.ts 125L 1C 13m CC=9 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ linker-relations.ts 83L 3C 7m CC=7 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ implementation-targets.ts 61L 0C 9m CC=5 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ implementation-indexing.ts 25L 0C 4m CC=4 ←3\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ implementation-diagnostics.ts 17L 0C 2m CC=2 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ implementation.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.diff/ (fan-in=6)\n HUB: src.live/ (fan-in=7)\n HUB: src.synthesis/ (fan-in=5)\n SMELL: sdk.python/ fan-out=8 → split needed\n SMELL: scripts.research/ fan-out=11 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.33s\n# nodes: 402 | edges: 500 | modules: 30\n# CC̄=3.3\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n src.extractors.changelog.body\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n examples.backend.src.server.handleRequest\n CC=16 in:3 out:12 total:15\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [6 funcs]\n context CC=1 out:4\n createTypeScriptExtractionContext CC=1 out:0\n extractTypeScriptFile CC=1 out:7\n recordModuleFact CC=1 out:2\n scriptKind CC=4 out:3\n visitTypeScriptNode CC=2 out:2\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [10 funcs]\n appendA2aAgentWarnings CC=5 out:4\n appendIdentityWarnings CC=4 out:2\n appendRegistryAlignmentWarnings CC=7 out:2\n appendRoleAndParticipantWarnings CC=3 out:2\n appendTimestampWarnings CC=3 out:2\n buildLocalWarnings CC=3 out:5\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [15 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n nonEmptyText CC=3 out:1\n normalizedText CC=1 out:1\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "256.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 402\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 850\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.result:\n name: result\n module: src.cli\n line: 770\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 488\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.createTypeScriptExtractionContext:\n name: createTypeScriptExtractionContext\n module: src.extractors.ast.typescript\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 222\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 448\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 194\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 257\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 263\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 882\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 701\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 854\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 890\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.communication-file-helpers.appendRoleAndParticipantWarnings:\n name: appendRoleAndParticipantWarnings\n module: src.extractors.communication-file-helpers\n line: 273\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 139\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 468\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 779\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.ast.typescript.visitTypeScriptNode:\n name: visitTypeScriptNode\n module: src.extractors.ast.typescript\n line: 46\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 629\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 168\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.communication-file-helpers.appendIdentityWarnings:\n name: appendIdentityWarnings\n module: src.extractors.communication-file-helpers\n line: 282\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.extractors.communication-file-helpers.appendA2aAgentWarnings:\n name: appendA2aAgentWarnings\n module: src.extractors.communication-file-helpers\n line: 314\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 0\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 601\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 255\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 860\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.handler:\n name: handler\n module: src.cli\n line: 594\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.cli.view:\n name: view\n module: src.cli\n line: 561\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 624\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 517\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 712\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 371\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-file-helpers.buildLocalWarnings:\n name: buildLocalWarnings\n module: src.extractors.communication-file-helpers\n line: 254\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 146\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 237\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 125\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 656\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.cli.context:\n name: context\n module: src.cli\n line: 535\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 180\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 551\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 866\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 241\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 409\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 666\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 823\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 158\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 90\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 558\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 614\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.ast.typescript.recordModuleFact:\n name: recordModuleFact\n module: src.extractors.ast.typescript\n line: 229\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 87\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 837\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 619\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 349\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 512\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 646\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 131\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 636\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 577\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.root:\n name: root\n module: src.cli\n line: 667\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 830\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 330\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.cli.svg:\n name: svg\n module: src.cli\n line: 564\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 201\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.cli.controller:\n name: controller\n module: src.cli\n line: 351\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 736\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 185\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 346\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 189\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 290\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 78\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 414\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 310\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 494\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 34\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 92\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 876\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 338\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n src.cli.diff:\n name: diff\n module: src.cli\n line: 504\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 449\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.cli.file:\n name: file\n module: src.cli\n line: 602\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 384\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 272\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.communication-file-helpers.appendTimestampWarnings:\n name: appendTimestampWarnings\n module: src.extractors.communication-file-helpers\n line: 328\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 163\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 219\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 757\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.ast.typescript.context:\n name: context\n module: src.extractors.ast.typescript\n line: 12\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 215\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 706\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 936\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 691\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n src.extractors.communication-file-helpers.appendRegistryAlignmentWarnings:\n name: appendRegistryAlignmentWarnings\n module: src.extractors.communication-file-helpers\n line: 299\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 1\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 845\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 818\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 534\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.cli.stop:\n name: stop\n module: src.cli\n line: 352\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 367\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntri\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3609 func | 145f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation-helpers.ts\n WHY: 1148L, 16 classes, max CC=13\n EFFORT: ~4h IMPACT: 14924\n\n [2] !! SPLIT src/cli.ts\n WHY: 942L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12246\n\n [3] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [4] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [5] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [6] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n [7] !! SPLIT-FUNC diffUiScriptMarkup CC=46 fan=36\n WHY: CC=46 exceeds 15\n EFFORT: ~1h IMPACT: 1656\n\n [8] !! SPLIT-FUNC parseFile CC=38 fan=19\n WHY: CC=38 exceeds 15\n EFFORT: ~1h IMPACT: 722\n\n [9] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37\n WHY: CC=18 exceeds 15\n EFFORT: ~1h IMPACT: 666\n\n [10] !! SPLIT-FUNC OpenRouterClient.request CC=31 fan=20\n WHY: CC=31 exceeds 15\n EFFORT: ~1h IMPACT: 620\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation-helpers.ts may break 133 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n\nMETRICS-TARGET:\n CC̄: 3.3 → ≤2.3\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 52 → ≤26\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.3 → now CC̄=3.3\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "168.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 260f 41965L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:152,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.04s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3918 func | 0 cls | 260 mod | CC̄=3.3 | critical:63 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC parseCommand=63; CC runPipeline=56; fan-out runPipeline=56; CC analyzeCommunication=48\n# hotspots[5]: runPipeline fan=56; compareWorkspaceIntent fan=40; Client.parse_http_response fan=37; diffUiScriptMarkup fan=36; analyzeCommunication fan=35\n# evolution: CC̄ 3.3→3.3 (flat 0.0)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[260]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,942\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,211\n src/core/record.ts,183\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,306\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,530\n src/core/types/index.ts,4\n src/core/types/code-change.ts,250\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,212\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,342\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,178\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,256\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,286\n src/graph/linker-candidates.ts,163\n src/graph/linker-relations.ts,83\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,291\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,250\n src/semantic/reranker/result.ts,311\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,806\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,232\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/code-change-plan/implementation-diagnostics.ts,17\n src/synthesis/code-change-plan/implementation-helpers.ts,1148\n src/synthesis/code-change-plan/implementation-indexing.ts,25\n src/synthesis/code-change-plan/implementation-review.ts,269\n src/synthesis/code-change-plan/implementation-semantic.ts,125\n src/synthesis/code-change-plan/implementation-source-patch.ts,694\n src/synthesis/code-change-plan/implementation-targets.ts,61\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,167\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/web/diff-ui.ts:\n e: diffUiStyles,diffUiRunPanel,diffUiFiltersPanel,diffUiBodyMarkup,diffUiScriptMarkup,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs,diffUiTemplate,diffUiHtml\n diffUiStyles()\n diffUiRunPanel()\n diffUiFiltersPanel()\n diffUiBodyMarkup()\n diffUiScriptMarkup()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n diffUiTemplate()\n diffUiHtml()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n seed()\n buildRecordSeed()\n buildRecordStatement()\n buildRecordSource()\n buildRecordEpistemic()\n withRecordGeneration()\n generationMetadata()\n generationIdentity()\n separator()\n clamp()\n sourcePrefix()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n appendRoleAndParticipantWarnings()\n appendIdentityWarnings()\n appendRegistryAlignmentWarnings()\n appendA2aAgentWarnings()\n declaredA2aAgentId()\n hasRegistryEntry()\n appendTimestampWarnings()\n rawTimestamp()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n withoutAction()\n result()\n normalizeForObject()\n removeObjectAction()\n stripObjectConnector()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n handler()\n executeExtractNlAction()\n file()\n text()\n executeExtractGitAction()\n executeExtractAstAction()\n executeExtractConfigAction()\n executeExtractMarkdownAction()\n executeExtractDocsAction()\n executeExtractCommunicationAction()\n executeAnalyzeCommunicationAction()\n analysis()\n executeLinkAction()\n records()\n executeDiagnoseAction()\n graph()\n executeSummarizeAction()\n graph()\n diagnostics()\n executeProposeTodoAction()\n graph()\n diagnostics()\n result()\n output()\n executeRenderTodoAction()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n executeApplyTodoAction()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n executeProposeCodeChangeAction()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n executeRenderCodeChangeAction()\n planSet()\n review()\n patchPath()\n auditPath()\n executeProposeSourcePatchAction()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n executeApplySourcePatchAction()\n patch()\n receiptPath()\n result()\n executeEvaluateCodeChangeAction()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n executeCloseCodeChangeAction()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n executeDiffAction()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n executeDiffFilesAction()\n beforePath()\n afterPath()\n diff()\n executeDiffGitAction()\n result()\n executeRealityAction()\n graph()\n diagnostics()\n view()\n executeCompareWorkspaceAction()\n executePipelineAction()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/synthesis/code-change-plan/implementation-helpers.ts:\n i: ../../core/io.js,../../core/security.js,../../graph/diagnostics.js,../../version.js,./implementation-source-patch.js,./implementation-targets.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,PlanContext,AcceptanceContext,CloseCodeChangeContext,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,proposeCodeChangePlans,generatedAt,maxPlans,context,candidates,plans,buildPlansForCandidates,plan,buildPlanSetResult,parseIsoDateTime,generatedAt,parseMaxPlans,maxPlans,buildPlanContext,conclusions,proposals,findRelatedRecords,createPlanForDiagnostic,relatedRecords,matchingProposals,matchingConclusions,target,changes,evidence,confidence,semantic,confidenceForDiagnostic,buildPlanResult,createRepositoryPathProbe,base,absolute,evaluateCodeChangeAcceptance,context,reasons,accepted,acceptance,buildAcceptanceContext,evaluatedAt,afterDiagnostics,beforeDiagnosticIds,afterById,targetedDiagnosticIds,buildAcceptanceReasons,isAcceptancePassed,appendAcceptanceGateReason,buildAcceptanceResult,closeCodeChanges,context,acceptances,acceptedCount,buildCloseCodeChangeContext,evaluatedAt,afterDiagnostics,ensureClosePlanIdsAreUnique,planIds,buildCloseResult,buildChanges,symbols,sourceIntents,rationale,normalized,exists,confidenceFor,uniqueSorted,deterministicGeneration,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertCodeChangeSourcePatchAndActorAndEdits,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n PlanContext:\n AcceptanceContext:\n CloseCodeChangeContext:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n NormalizedApplyCodeChangeSourcePatchRequest:\n SourcePatchApplyLock:\n SourcePatchEditTarget:\n PreparedSourceEdit:\n ParsedUnifiedDiffHunk:\n UnifiedDiffParsingContext:\n UnifiedDiffCursor:\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n context()\n candidates()\n plans()\n buildPlansForCandidates()\n plan()\n buildPlanSetResult()\n parseIsoDateTime()\n generatedAt()\n parseMaxPlans()\n maxPlans()\n buildPlanContext()\n conclusions()\n proposals()\n findRelatedRecords()\n createPlanForDiagnostic()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n evidence()\n confidence()\n semantic()\n confidenceForDiagnostic()\n buildPlanResult()\n createRepositoryPathProbe()\n base()\n absolute()\n evaluateCodeChangeAcceptance()\n context()\n reasons()\n accepted()\n acceptance()\n buildAcceptanceContext()\n evaluatedAt()\n afterDiagnostics()\n beforeDiagnosticIds()\n afterById()\n targetedDiagnosticIds()\n buildAcceptanceReasons()\n isAcceptancePassed()\n appendAcceptanceGateReason()\n buildAcceptanceResult()\n closeCodeChanges()\n context()\n acceptances()\n acceptedCount()\n buildCloseCodeChangeContext()\n evaluatedAt()\n afterDiagnostics()\n ensureClosePlanIdsAreUnique()\n planIds()\n buildCloseResult()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n confidenceFor()\n uniqueSorted()\n deterministicGeneration()\n applyCodeChangeSourcePatch()\n request()\n root()\n receiptPath()\n lock()\n idempotentResult()\n prepared()\n now()\n receipt()\n readExistingReceipt()\n existing()\n assertPatchApplicationRequest()\n patch()\n assertCodeChangeSourcePatchAndActorAndEdits()\n assertPatchApprovalActor()\n assertPatchApprovalHash()\n assertPatchEditsContainDiffs()\n acquireApplyLock()\n lock()\n prepareSourceEdits()\n target()\n before()\n after()\n prepareSourceEditTarget()\n relative()\n absolute()\n existed()\n assertSourcePatchTargetNotSymlink()\n assertDeleteEditClearsAll()\n validatePatchTargetForEdit()\n applyPreparedEdits()\n receipt()\n rollbackErrors()\n writePreparedEdits()\n buildPatchApplyReceipt()\n fileHashesAfter()\n rollbackPreparedEdits()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n validateSourceApplyReceiptShape()\n validateSourceApplyReceiptIdentity()\n validateSourceApplyReceiptTimestamps()\n validateSourceApplyReceiptPathHashes()\n expectedPaths()\n hashPaths()\n validateSourceApplyReceiptGeneration()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n baseLines()\n hunks()\n output()\n joinAppliedText()\n parseUnifiedDiffIntoHunks()\n normalizedDiff()\n context()\n createEmptyUnifiedDiffContext()\n parseUnifiedDiffLines()\n finalizeUnifiedDiffContext()\n applyUnifiedDiffLineToContext()\n header()\n parseUnifiedDiffHeader()\n buildParsedUnifiedDiffHunk()\n applyUnifiedDiffHunks()\n applyUnifiedDiffHunk()\n oldIndex()\n copyBaseLinesToCursor()\n appendRemainingBaseLines()\n validateHunkCounts()\n oldCount()\n newCount()\n applyUnifiedDiffLine()\n mark()\n body()\n applyUnifiedDiffContextLine()\n applyUnifiedDiffDeletionLine()\n applyUnifiedDiffAdditionLine()\n splitKeep()\n lines()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTarget()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,WalkState,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,state,createWalkState,walkDirectory,entries,walkEntry,absolute,relative,isTargetFile,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n WalkState:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n state()\n createWalkState()\n walkDirectory()\n entries()\n walkEntry()\n absolute()\n relative()\n isTargetFile()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isUsefulCodeChangePath,isPlannablePath,normalized,segments,lowerSegments,basename,normalizePlannablePath,isCandidatePathSyntax,splitPathSegments,isInvalidSegmentShape,isConcretePath,hasShellPattern,isDisallowedSegment,isPlannableBasename,lowerBasename,dot,ext,isGeneratedArtifactPath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isUsefulCodeChangePath()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n normalizePlannablePath()\n isCandidatePathSyntax()\n splitPathSegments()\n isInvalidSegmentShape()\n isConcretePath()\n hasShellPattern()\n isDisallowedSegment()\n isPlannableBasename()\n lowerBasename()\n dot()\n ext()\n isGeneratedArtifactPath()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskStore()\n removeTemporaryFile()\n prepareTask()\n key()\n indexedTask()\n taskForMessage()\n indexedTaskId()\n task()\n continueTask()\n existing()\n continuationError()\n message()\n createTask()\n taskId()\n contextId()\n executeMessage()\n command()\n result()\n domainResult()\n rejectTask()\n protobuf()\n diagnostic()\n message()\n currentTaskState()\n completeTask()\n protobuf()\n message()\n protobufResult()\n intakeDomainResult()\n record()\n failTask()\n message()\n agentMessage()\n listTasks()\n contextId()\n status()\n pageSize()\n historyLength()\n includeArtifacts()\n statusTimestampAfter()\n filter()\n filtered()\n pageCursor()\n start()\n page()\n last()\n filteredTasks()\n compareTasksByUpdate()\n timestampOrder()\n indexAfterCursor()\n exact()\n cursorTime()\n next()\n taskTime()\n \n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "165.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.18s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiScriptMarkup (CC=46)'\n description: 'code2llm reports `src.web.diff-ui.diffUiScriptMarkup` at `src/web/diff-ui.ts:127`\n with cyclomatic complexity 46 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiScriptMarkup\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation-helpers.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation-helpers.ts`\n as a large module (1148 lines, 16 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-helpers.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation-source-patch.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation-source-patch.ts`\n as a large module (694 lines, 5 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation-source-patch.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-source-patch.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-helpers'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-helpers`\n in `src/synthesis/code-change-plan/implementation-helpers.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation-helpers'' is too large\n (147 functions, 16 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1:God\n Module: src.synthesis.code-change-plan.implementation-helpers'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:139`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, self, excludes, patterns'\n description: 'code2llm reports `Data Clump: root, self, excludes, patterns` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (root, self, excludes, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n root, self, excludes, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, self, excludes, patterns'\n description: 'code2llm reports `Data Clump: root, self, excludes, patterns` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (root, self, excludes, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n root, self, excludes, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, self, file, nl_mode'\n description: 'code2llm reports `Data Clump: root, self, file, nl_mode` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (root, self, file, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n root, self, file, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, self, file, nl_mode'\n description: 'code2llm reports `Data Clump: root, self, file, nl_mode` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (root, self, file, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n root, self, file, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, changelog, markdown_mode, todo'\n description: 'code2llm reports `Data Clump: self, root, changelog, markdown_mode,\n todo` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (self, root, changelog, markdown_mode, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n self, root, changelog, markdown_mode, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, changelog, markdown_mode, todo'\n description: 'code2llm reports `Data Clump: self, root, changelog, markdown_mode,\n todo` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (self, root, changelog, markdown_mode, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n self, root, changelog, markdown_mode, todo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:226`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:226:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-helpers.ts:572`.\n\n\n Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:572:God\n Function: applyCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildAcceptanceContext'\n description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers.ts:325`.\n\n\n Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:325:God\n Function: buildAcceptanceContext'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:16:God\n Function: createSemanticCandidateSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticRerankResult'\n description: 'code2llm reports `God Function: createSemanticRerankResult` in `src/semantic/reranker/result.ts:23`.\n\n\n Function ''createSemanticRerankResult'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:23:God\n Function: createSemanticRerankResult'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createTodoPatch'\n description: 'code2llm reports `God Function: createTodoPatch` in `src/synthesis/todo-patch.ts:69`.\n\n\n Function ''createTodoPatch'' is oversized: CC=8, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:69:God Function:\n createTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_chunked'\n description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:189`.\n\n\n Function ''decode_chunked'' is oversized: CC=7, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:189:God Function:\n decode_chunked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diagnoseGraph'\n description: 'code2llm reports `God Function: diagnoseGraph` in `src/graph/diagnostics.ts:16`.\n\n\n Function ''diagnoseGraph'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:16:God Function:\n diagnoseGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diffIntentGraphs'\n description: 'code2llm reports `God Function: diffIntentGraphs` in `src/graph/diff.ts:16`.\n\n\n Function ''diffIntentGraphs'' is oversized: CC=11, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diff.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diff.ts:16:God Function: diffIntentGraphs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: encode_envelope'\n description: 'code2llm reports `God Function: encode_envelope` in `src/interfaces/intake_cli.py:55`.\n\n\n Function ''encode_envelope'' is oversized: CC=6, fan-out=11, mutations=11.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:55:God Function:\n encode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichBatchCovering'\n description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm-helpers.ts:112`.\n\n\n Function ''enrichBatchCovering'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:112:God\n Function: enrichBatchCovering'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichMarkdownRecords'\n description: 'code2llm reports `God Function: enrichMarkdownRecords` in `src/extractors/markdown-llm-helpers.ts:57`.\n\n\n Function ''enrichMarkdownRecords'' is oversized: CC=13, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:57:God\n Function: enrichMarkdownRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichRecord'\n description: 'code2llm reports `God Function: enrichRecord` in `src/extractors/markdown-llm-helpers.ts:274`.\n\n\n Function ''enrichRecord'' is oversized: CC=14, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God\n Function: enrichRecord'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDiagnosticsCase'\n description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:182`.\n\n\n Function ''evaluateDiagnosticsCase'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:182:God Function:\n evaluateDiagnosticsCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDsl2TodoCase'\n description: 'code2llm reports `God Function: evaluateDsl2TodoCase` in `src/evaluation/gold-cases.ts:210`.\n\n\n Function ''evaluateDsl2TodoCase'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:210:God Function:\n evaluateDsl2TodoCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: exchange'\n description: 'code2llm reports `God Function: exchange` in `sdk/rust/src/client.rs:125`.\n\n\n Function ''exchange'' is oversized: CC=10, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function:\n exchange'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeAnalyzeCommunicationAction'\n description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction`\n in `src/services/actions.ts:158`.\n\n\n Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:158:God Function:\n executeAnalyzeCommunicationAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeCloseCodeChangeAction'\n description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:413`.\n\n\n Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:413:God Function:\n executeCloseCodeChangeAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executePipelineAction'\n description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:556`.\n\n\n Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:556:God Function:\n executePipelineAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractAstIntent'\n description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`.\n\n\n Function ''extractAstIntent'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast.ts:23:God Function:\n extractAstIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractChangelog'\n description: 'code2llm reports `God Function: extractChangelog` in `src/extractors/changelog.ts:18`.\n\n\n Function ''extractChangelog'' is oversized: CC=10, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:18:God Function:\n extractChangelog'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractCommunicationIntentAudited'\n description: 'code2llm reports `God Function: extractCommunicationIntentAudited`\n in `src/communication/llm/implementation.ts:63`.\n\n\n Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:63:God\n Function: extractCommunicationIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractConventionalAction'\n description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`.\n\n\n Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractDocumentationIntent'\n description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`.\n\n\n Function ''extractDocumentationIntent'' is oversized: CC=3, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-llm.ts:45:God Function:\n extractDocumentationIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractMarkdownIntentAudited'\n description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:34`.\n\n\n Function ''extractMarkdownIntentAudited'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:34:God Function:\n extractMarkdownIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntent'\n description: 'code2llm reports `God Function: extractNlIntent` in `src/extractors/nl.ts:38`.\n\n\n Function ''extractNlIntent'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:38:God Function: extractNlIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntentAudited'\n description: 'code2llm reports `God Function: extractNlIntentAudited` in `src/extractors/nl-llm.ts:33`.\n\n\n Function ''extractNlIntentAudited'' is oversized: CC=10, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:33:God Function:\n extractNlIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPhpAst'\n description: 'code2llm reports `God Function: extractPhpAst` in `src/extractors/ast/php.ts:11`.\n\n\n Function ''extractPhpAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/php.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/php.ts:11:God Function:\n extractPhpAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPythonAst'\n description: 'code2llm reports `God Function: extractPythonAst` in `src/extractors/ast/python.ts:11`.\n\n\n Function ''extractPythonAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/python.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/python.ts:11:God Function:\n extractPythonAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRepositoryGitIntent'\n description: 'code2llm reports `God Function: extractRepositoryGitIntent` in `src/extractors/git.ts:74`.\n\n\n Function ''extractRepositoryGitIntent'' is oversized: CC=11, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/git.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:74:God Function:\n extractRepositoryGitIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRuntimeCycleIntent'\n description: 'code2llm reports `God Function: extractRuntimeCycleIntent` in `src/extractors/runtime-cycle.ts:29`.\n\n\n Function ''extractRuntimeCycleIntent'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:29:God\n Function: extractRuntimeCycleIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractSymbols'\n description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`.\n\n\n Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractTodo'\n description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`.\n\n\n Function ''extractTodo'' is oversized: CC=5, fan-out=24, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:19:God Function:\n extractTodo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `scripts/verify-module-boundaries.mjs:6`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:6:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: goldReportIsPerfect'\n description: 'code2llm reports `God Function: goldReportIsPerfect` in `src/evaluation/gold.ts:100`.\n\n\n Function ''goldReportIsPerfect'' is oversized: CC=14, fan-out=0, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold.ts:100:God Function:\n goldReportIsPerfect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: graph'\n description: 'code2llm reports `God Function: graph` in `scripts/verify-module-boundaries.mjs:7`.\n\n\n Function ''graph'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:7:God\n Function: graph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleCommunication'\n description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:666`.\n\n\n Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:666:God Function: handleCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleDiff'\n description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:468`.\n\n\n Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:468:God Function: handleDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleGraphDiff'\n description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:494`.\n\n\n Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:494:God Function: handleGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleIntake'\n description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:706`.\n\n\n Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:706:God Function: handleIntake'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleReality'\n description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:551`.\n\n\n Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:551:God Function: handleReality'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleWatch'\n description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:346`.\n\n\n Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:346:God Function: handleWatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: index'\n description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`.\n\n\n Function ''index'' is oversized: CC=13, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/text-render.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/text-render.ts:43:God Function:\n index'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: indexModuleAnchors'\n description: 'code2llm reports `God Function: indexModuleAnchors` in `src/diff/reality.ts:308`.\n\n\n Function ''indexModuleAnchors'' is oversized: CC=12, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3918 func | 179f | 41965L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.3 critical=220 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded analyzeCommunication = 48 (limit:15)\n !!! cc_exceeded diffUiScriptMarkup = 46 (limit:15)\n !!! cc_exceeded variables = 44 (limit:15)\n !!! cc_exceeded variableById = 44 (limit:15)\n !!! cc_exceeded steps = 44 (limit:15)\n !!! cc_exceeded stepIds = 44 (limit:15)\n\nMODULES[260] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/synthesis/code-change-plan/implementation-helpers.ts] 1148L C:16 F:133 CC↑13 D:0 (typescript)\n M[src/cli.ts] 942L C:1 F:124 CC↑13 D:0 (typescript)\n M[src/services/actions.ts] 806L C:1 F:106 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/synthesis/code-change-plan/implementation-source-patch.ts] 694L C:5 F:95 CC↑11 D:0 (typescript)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript)\n LANGS: typescript:152/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n ★ Client.parse_http_response fan=37 // Orchestrates 37 calls\n ★ diffUiScriptMarkup fan=36 // Orchestrates 36 calls\n ★ analyzeCommunication fan=35 // Analysis pipeline, 35 stages\n\nREFACTOR[15]:\n [1] H/L Split diffUiScriptMarkup (CC=46)\n [2] H/L Split OpenRouterClient.timeout (CC=26)\n [3] H/L Split OpenRouterClient.request (CC=31)\n [4] H/L Split parseCommand (CC=63)\n [5] H/L Split buildRealityView (CC=26)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.3 crit=220 41965L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; let currentFile = null; function renderFileList(filter = '') { diff --git a/project/map.toon.yaml b/project/map.toon.yaml index 05f8759..127367b 100644 --- a/project/map.toon.yaml +++ b/project/map.toon.yaml @@ -1,12 +1,12 @@ -# todo2code | 251f 39151L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:143,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 -# generated in 0.03s +# todo2code | 260f 41965L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:152,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 +# generated in 0.04s # producer: code2llm | artifact: map.toon.yaml | schema: 1 -# stats: 3683 func | 0 cls | 251 mod | CC̄=3.6 | critical:90 | cycles:0 -# alerts[5]: CC assertOperationPlan=84; CC executeAction=83; CC root=83; fan-out executeAction=65; fan-out root=64 -# hotspots[5]: executeAction fan=65; root fan=64; runPipeline fan=56; diffUiHtml fan=42; compareWorkspaceIntent fan=40 -# evolution: CC̄ 3.7→3.6 (improved -0.1) +# stats: 3918 func | 0 cls | 260 mod | CC̄=3.3 | critical:63 | cycles:0 +# alerts[5]: CC assertOperationPlan=84; CC parseCommand=63; CC runPipeline=56; fan-out runPipeline=56; CC analyzeCommunication=48 +# hotspots[5]: runPipeline fan=56; compareWorkspaceIntent fan=40; Client.parse_http_response fan=37; diffUiScriptMarkup fan=36; analyzeCommunication fan=35 +# evolution: CC̄ 3.3→3.3 (flat 0.0) # Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods -M[251]: +M[260]: Dockerfile,45 Makefile,132 adapters/tensorflow/package.json,14 @@ -115,7 +115,7 @@ M[251]: sdk/typescript/src/index.ts,420 sdk/typescript/tsconfig.json,20 src/index.ts,53 - src/cli.ts,935 + src/cli.ts,942 src/communication/analyzer.ts,542 src/communication/identity.ts,146 src/communication/intake-contract.ts,273 @@ -131,7 +131,7 @@ M[251]: src/core/grounding.ts,24 src/core/id.ts,167 src/core/ignore.ts,200 - src/core/io.ts,177 + src/core/io.ts,211 src/core/record.ts,183 src/core/schema/index.ts,4 src/core/schema/code-change.ts,322 @@ -141,11 +141,11 @@ M[251]: src/core/schema/utils.ts,239 src/core/security.ts,55 src/core/target.ts,57 - src/core/text.ts,517 + src/core/text.ts,530 src/core/types/index.ts,4 - src/core/types/code-change.ts,221 + src/core/types/code-change.ts,250 src/core/types/diagnostics.ts,45 - src/core/types/intent.ts,258 + src/core/types/intent.ts,212 src/core/types/pipeline.ts,173 src/core/version.ts,2 src/diff/git.ts,161 @@ -173,7 +173,7 @@ M[251]: src/extractors/ast/unsupported.ts,30 src/extractors/changelog.ts,99 src/extractors/communication.ts,63 - src/extractors/communication-file-helpers.ts,296 + src/extractors/communication-file-helpers.ts,342 src/extractors/communication-helpers.ts,320 src/extractors/configuration.ts,208 src/extractors/docs-chunks.ts,147 @@ -185,7 +185,7 @@ M[251]: src/extractors/git.ts,397 src/extractors/markdown.ts,35 src/extractors/markdown-block.ts,67 - src/extractors/markdown-llm.ts,175 + src/extractors/markdown-llm.ts,178 src/extractors/markdown-llm-helpers.ts,383 src/extractors/markdown-paths.ts,158 src/extractors/nl.ts,107 @@ -197,7 +197,9 @@ M[251]: src/graph/changelog-signal.ts,89 src/graph/diagnostics.ts,459 src/graph/diff.ts,235 - src/graph/linker.ts,537 + src/graph/linker.ts,286 + src/graph/linker-candidates.ts,163 + src/graph/linker-relations.ts,83 src/graph/symbol-resolution.ts,146 src/interfaces/a2a.ts,332 src/interfaces/a2a-card.ts,181 @@ -234,19 +236,26 @@ M[251]: src/pipeline/run.ts,617 src/sdk/typescript.ts,172 src/semantic/reranker/index.ts,8 - src/semantic/reranker-llm.ts,210 + src/semantic/reranker-llm.ts,291 src/semantic/reranker-response.ts,42 - src/semantic/reranker/candidate.ts,200 - src/semantic/reranker/result.ts,264 + src/semantic/reranker/candidate.ts,250 + src/semantic/reranker/result.ts,311 src/semantic/reranker/types.ts,106 src/semantic/reranker/validation.ts,111 - src/services/actions.ts,737 + src/services/actions.ts,806 src/summary/payload.ts,65 src/summary/render.ts,61 src/summary/summarizer.ts,333 - src/synthesis/code-change-path.ts,204 + src/synthesis/code-change-path.ts,232 src/synthesis/code-change-plan/index.ts,1 src/synthesis/code-change-plan/implementation.ts,1 + src/synthesis/code-change-plan/implementation-diagnostics.ts,17 + src/synthesis/code-change-plan/implementation-helpers.ts,1148 + src/synthesis/code-change-plan/implementation-indexing.ts,25 + src/synthesis/code-change-plan/implementation-review.ts,269 + src/synthesis/code-change-plan/implementation-semantic.ts,125 + src/synthesis/code-change-plan/implementation-source-patch.ts,694 + src/synthesis/code-change-plan/implementation-targets.ts,61 src/synthesis/task-synthesis-contract.ts,66 src/synthesis/task-synthesis-materialize.ts,172 src/synthesis/task-synthesis-payload.ts,70 @@ -256,7 +265,7 @@ M[251]: src/tf/classifier.ts,135 src/version.ts,2 src/watch/watcher.ts,243 - src/web/diff-ui.ts,48 + src/web/diff-ui.ts,167 tsconfig.json,23 D: src/operations/validation.ts: @@ -309,128 +318,6 @@ D: decision() verification() expectedHash() - src/services/actions.ts: - i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path - e: CommunicationGraphFilter,executeAction,root,file,text,analysis,records,graph,graph,diagnostics,graph,diagnostics,result,output,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,todoPath,patchPath,auditPath,receiptPath,result,graph,diagnostics,conclusions,proposals,result,output,planSet,review,patchPath,auditPath,plan,unifiedDiffs,patch,output,planSet,result,output,patch,receiptPath,result,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,beforeInput,afterInput,before,after,diff,svg,beforePath,afterPath,diff,result,graph,diagnostics,view,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest - CommunicationGraphFilter: - executeAction() - root() - file() - text() - analysis() - records() - graph() - graph() - diagnostics() - graph() - diagnostics() - result() - output() - graph() - diagnostics() - synthesis() - todoPath() - patchPath() - auditPath() - todoContent() - rendered() - todoPath() - patchPath() - auditPath() - receiptPath() - result() - graph() - diagnostics() - conclusions() - proposals() - result() - output() - planSet() - review() - patchPath() - auditPath() - plan() - unifiedDiffs() - patch() - output() - planSet() - result() - output() - patch() - receiptPath() - result() - plan() - beforeGraph() - beforeDiagnostics() - afterGraph() - afterDiagnostics() - result() - output() - beforeGraph() - beforeDiagnostics() - afterGraph() - afterDiagnostics() - value() - planSet() - result() - output() - beforeInput() - afterInput() - before() - after() - diff() - svg() - beforePath() - afterPath() - diff() - result() - graph() - diagnostics() - view() - filterCommunicationGraph() - filter() - records() - parseCommunicationGraphFilter() - participant() - role() - ticket() - communicationOnly() - matchesCommunicationFilter() - matchesParticipant() - matchesRole() - matchesTicket() - nlModeValue() - llmModeValue() - taskSynthesisMode() - summaryModeValue() - pipelineTaskMode() - withTextDiffViews() - title() - readGraphInput() - safePath() - readActionObject() - safePath() - resolveRoot() - requested() - scopedPath() - selected() - nullableScopedPath() - selected() - readRecords() - files() - safeFile() - stringValue() - nullableString() - stringList() - numberValue() - number() - hasInputValue() - objectMapOfStrings() - booleanValue() - objectValue() - registerRunArtifacts() - manifestPath() - manifest() src/interfaces/a2a-message.ts: i: ../communication/intake-protobuf.js e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage @@ -540,17 +427,6 @@ D: failureCode() skippedAudit() appendLlmNotConfigured() - src/web/diff-ui.ts: - e: diffUiHtml,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs - diffUiHtml() - byId() - requestHeaders() - formatBytes() - selectedRun() - updateMeta() - fillSelect() - loadRuns() - compareGraphs() src/communication/analyzer.ts: i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex @@ -636,183 +512,23 @@ D: severityRank() escapeCell() escapeRegex() - src/synthesis/code-change-plan/implementation.ts: - i: ../../core/io.js,../../core/security.js,../../core/target.js,../../graph/diagnostics.js,../../version.js,../code-change-path.js,node:crypto,node:fs,node:path - e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CreateCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,PreparedSourceEdit,IMPLEMENTATION_DIAGNOSTIC_CODES,proposeCodeChangePlans,generatedAt,maxPlans,conclusions,proposals,recordsById,proposalsByDiagnostic,conclusionsByDiagnostic,candidates,relatedRecords,matchingProposals,matchingConclusions,target,changes,generation,planHash,createRepositoryPathProbe,base,absolute,implementationDiagnosticRank,evaluateCodeChangeAcceptance,afterDiagnostics,beforeIds,afterById,targeted,clearedDiagnosticIds,remainingDiagnosticIds,newBlockingDiagnosticIds,accepted,evaluatedAt,closeCodeChanges,evaluatedAt,afterDiagnostics,planIds,acceptances,acceptedCount,indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list,collectTarget,paths,symbols,tickets,versions,buildChanges,symbols,sourceIntents,rationale,normalized,exists,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,confidenceFor,riskFor,level,rollbackFor,deterministicGeneration,uniqueSorted,createCodeChangeReviewPatch,createdAt,markdown,renderCodeChangeReviewMarkdown,symbols,assertCodeChangeReviewPatch,artifact,generation,priorityRank,inline,renderIds,createCodeChangeSourcePatch,plan,graphFingerprint,createdAt,allowed,diffs,normalized,path,rawDiff,unifiedDiff,patchHash,createCodeChangeSourcePatchSet,generatedAt,assertCodeChangeSourcePatch,patch,paths,path,expectedHash,allowed,expectedChanges,editPath,assertCodeChangeSourcePatchSet,set,plansById,patchIds,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,path,bare,stripped,applyCodeChangeSourcePatch,root,receiptPath,existing,relative,absolute,exists,before,after,now,fileHashesAfter,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,expectedPaths,hashPaths,atomicWriteRaw,applyUnifiedDiffToText,normalizedDiff,baseLines,diffLines,cursor,oldIndex,oldCount,newCount,mark,body,splitKeep,lines - ProposeCodeChangePlansOptions: - ProposeCodeChangePlansResult: - EvaluateCodeChangeAcceptanceOptions: - CloseCodeChangesOptions: - CreateCodeChangeReviewOptions: - CreatedCodeChangeReview: - CreateCodeChangeSourcePatchOptions: - ApplyCodeChangeSourcePatchOptions: - ApplyCodeChangeSourcePatchResult: - PreparedSourceEdit: - IMPLEMENTATION_DIAGNOSTIC_CODES() - proposeCodeChangePlans() - generatedAt() - maxPlans() - conclusions() - proposals() - recordsById() - proposalsByDiagnostic() - conclusionsByDiagnostic() - candidates() - relatedRecords() - matchingProposals() - matchingConclusions() - target() - changes() - generation() - planHash() - createRepositoryPathProbe() - base() - absolute() - implementationDiagnosticRank() - evaluateCodeChangeAcceptance() - afterDiagnostics() - beforeIds() - afterById() - targeted() - clearedDiagnosticIds() - remainingDiagnosticIds() - newBlockingDiagnosticIds() - accepted() - evaluatedAt() - closeCodeChanges() - evaluatedAt() - afterDiagnostics() - planIds() - acceptances() - acceptedCount() - indexProposalsByDiagnostic() - index() - list() - indexConclusionsByDiagnostic() - index() - list() - collectTarget() - paths() - symbols() - tickets() - versions() - buildChanges() - symbols() - sourceIntents() - rationale() - normalized() - exists() - titleFor() - record() - object() - startsWithImperative() - descriptionFor() - acceptanceCriteriaFor() - priorityFor() - confidenceFor() - riskFor() - level() - rollbackFor() - deterministicGeneration() - uniqueSorted() - createCodeChangeReviewPatch() - createdAt() - markdown() - renderCodeChangeReviewMarkdown() - symbols() - assertCodeChangeReviewPatch() - artifact() - generation() - priorityRank() - inline() - renderIds() - createCodeChangeSourcePatch() - plan() - graphFingerprint() - createdAt() - allowed() - diffs() - normalized() - path() - rawDiff() - unifiedDiff() - patchHash() - createCodeChangeSourcePatchSet() - generatedAt() - assertCodeChangeSourcePatch() - patch() - paths() - path() - expectedHash() - allowed() - expectedChanges() - editPath() - assertCodeChangeSourcePatchSet() - set() - plansById() - patchIds() - exactSourcePatchKeys() - actual() - assertSourcePatchIds() - assertSourcePatchStrings() - exactSourcePatchSet() - instructionFor() - symbols() - criteria() - normalizeUnifiedDiff() - normalized() - path() - bare() - stripped() - applyCodeChangeSourcePatch() - root() - receiptPath() - existing() - relative() - absolute() - exists() - before() - after() - now() - fileHashesAfter() - assertExistingSourceReceipt() - relative() - absolute() - exists() - current() - assertSourceApplyReceipt() - expectedPaths() - hashPaths() - atomicWriteRaw() - applyUnifiedDiffToText() - normalizedDiff() - baseLines() - diffLines() - cursor() - oldIndex() - oldCount() - newCount() - mark() - body() - splitKeep() - lines() - src/synthesis/code-change-path.ts: - e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isPlannablePath,normalized,segments,lowerSegments,basename,lowerBasename,dot,ext,isUsefulCodeChangePath - NON_SOURCE_DIR_SEGMENTS() - BINARY_EXTENSIONS() - GENERATED_ANALYSIS_BASENAMES() - T2C_ARTIFACT_BASENAMES() - EXTENSIONLESS_SOURCE_BASENAMES() - isPlannablePath() - normalized() - segments() - lowerSegments() - basename() - lowerBasename() - dot() - ext() - isUsefulCodeChangePath() + src/web/diff-ui.ts: + e: diffUiStyles,diffUiRunPanel,diffUiFiltersPanel,diffUiBodyMarkup,diffUiScriptMarkup,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs,diffUiTemplate,diffUiHtml + diffUiStyles() + diffUiRunPanel() + diffUiFiltersPanel() + diffUiBodyMarkup() + diffUiScriptMarkup() + byId() + requestHeaders() + formatBytes() + selectedRun() + updateMeta() + fillSelect() + loadRuns() + compareGraphs() + diffUiTemplate() + diffUiHtml() php/ast_extract.php: e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile argumentValue() @@ -822,71 +538,6 @@ D: sourceExcerpt() addFact() parseFile() - src/core/text.ts: - i: ./types.js - e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,result,splitIntentLines,lines,raw,cleaned,pieces,value - STOP_WORDS() - buildStopWords() - classifyActionHeuristically() - conventionalAction() - prose() - searchable() - matchedByPattern() - extractConventionalAction() - conventional() - findActionInText() - removeInlineCode() - detectModality() - prose() - searchable() - matches() - detectPolarity() - prose() - stripped() - normalized() - normalizeToken() - keywords() - GENERIC_TOPICS() - topicKeywords() - separated() - foldTopicToken() - aliased() - singular() - similarity() - left() - right() - intersection() - extractBacktickValues() - value() - extractPaths() - FILE_EXTENSIONS() - hasFileExtension() - last() - dot() - PATH_ROOTS() - isPathLike() - segments() - HOST_TLDS() - isHostname() - parts() - tld() - extractSymbols() - repositoryPaths() - backticks() - camel() - ticketPrefixes() - extractTickets() - values() - extractVersions() - inferObject() - normalized() - result() - splitIntentLines() - lines() - raw() - cleaned() - pieces() - value() src/evaluation/gold-types.ts: e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules GoldRecordProjection: @@ -978,22 +629,6 @@ D: absolute() collect() absolute() - src/semantic/reranker/candidate.ts: - i: ../../core/schema.js,../../core/types.js,./validation.js - e: createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,records,seenIds,seenPairs,byDeclaration,declaration,module,existing,expectedHash,comparePair - createSemanticCandidateSet() - grouped() - values() - assertSemanticCandidateSet() - records() - seenIds() - seenPairs() - byDeclaration() - declaration() - module() - existing() - expectedHash() - comparePair() scripts/research/rank-intent-graph-embeddings.py: e: parse_args,projection_text,main parse_args() @@ -1090,11 +725,6 @@ D: envOr() truncate() joinedIDs() - src/semantic/reranker-llm.ts: - i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util - e: SemanticRerankerOptions,SemanticRerankerRequiredError - SemanticRerankerOptions: - SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),model(-1),modelRevision(-1),assertSemanticRerankResult(-1),client(-1),records(-1),payload(-1),response(-1),metadata(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1) src/diff/git.ts: i: ./text.js,node:child_process,node:fs,node:path,node:util e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result @@ -1122,27 +752,6 @@ D: readWorkingFile() runGit() result() - src/semantic/reranker/result.ts: - i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js - e: createSemanticRerankResult,decisions,assertSemanticRerankResult,candidates,records,seenDecisions,acceptedDeclarations,candidate,citations,record,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons - createSemanticRerankResult() - decisions() - assertSemanticRerankResult() - candidates() - records() - seenDecisions() - acceptedDeclarations() - candidate() - citations() - record() - expectedHash() - applyAcceptedSemanticRelations() - candidates() - added() - candidate() - assertSemanticVerdictReason() - allowedVerdicts() - allowedReasons() sdk/rust/examples/basic.rs: i: serde_json::json,std::env,todo2code::Client e: main,run,joined_ids @@ -1251,54 +860,6 @@ D: timer() onAbort() finish() - src/extractors/communication-file-helpers.ts: - i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path - e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,declaredRole,declaredA2aAgentId,declaredGitAuthors,rawTimestamp - CommunicationFileOutcome: - CommunicationMetadata: - extractCommunicationFile() - scope() - readResult() - envelope() - inferred() - extracted() - localWarnings() - segmentResult() - records() - shouldSkipCommunicationFile() - explicitEnvelope() - hasExplicitEnvelopeMetadata() - buildCommunicationSegments() - inferredRole() - segments() - resolveFileScope() - relativeToProject() - segments() - pathTicket() - readCommunicationBody() - collectCommunicationMetadata() - declaredParticipant() - declaredRole() - declaredParticipantId() - identity() - participant() - role() - displayName() - explicitMessageType() - messageType() - ticket() - recipient() - rawTimestamp() - timestamp() - declaredGitAuthors() - gitAuthors() - explicitPaths() - explicitSymbols() - buildLocalWarnings() - declaredRole() - declaredA2aAgentId() - declaredGitAuthors() - rawTimestamp() src/interfaces/a2a-history.ts: i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath @@ -1448,28 +1009,6 @@ D: i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super:: e: Client Client: - sdk/typescript/examples/basic.ts: - i: ../src/index.js - e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison - baseUrl() - token() - root() - main() - client() - health() - card() - nl() - ast() - markdown() - graph() - diagnostics() - synthesis() - validation() - rendered() - artifact() - reality() - gitDiff() - comparison() src/core/record.ts: i: ./id.js,./target.js,./version.js e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix @@ -1488,6 +1027,28 @@ D: separator() clamp() sourcePrefix() + sdk/typescript/examples/basic.ts: + i: ../src/index.js + e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison + baseUrl() + token() + root() + main() + client() + health() + card() + nl() + ast() + markdown() + graph() + diagnostics() + synthesis() + validation() + rendered() + artifact() + reality() + gitDiff() + comparison() examples/backend/src/server.ts: i: ./store.js,./validation.js,node:http e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host @@ -1519,46 +1080,6 @@ D: is_module_entrypoint(node) iter_python_files(root;files_from) main() - src/core/io.ts: - i: ./types.js,node:fs,node:path - e: WalkOptions,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,ignored,extensions,maxFiles,matcher,base,visit,entries,absolute,relative,extension,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix - WalkOptions: - DEFAULT_IGNORED_DIRS() - ensureDir() - readText() - stat() - pathExists() - writeJson() - writeText() - writeJsonl() - readJsonl() - body() - readJson() - walkFiles() - ignored() - extensions() - maxFiles() - matcher() - base() - visit() - entries() - absolute() - relative() - extension() - escapeRegex() - globToRegExp() - normalized() - char() - next() - after() - matchesAnyGlob() - normalized() - resolveGlobs() - files() - absolute() - relative() - relative() - relativePosix() scripts/verify-no-llm-imports.mjs: i: node:fs,node:path e: visited,visit,body,resolved,resolveSource,raw @@ -1671,6 +1192,127 @@ D: normalized() semanticsFor() unquote() + src/extractors/communication-file-helpers.ts: + i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path + e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp + CommunicationFileOutcome: + CommunicationMetadata: + extractCommunicationFile() + scope() + readResult() + envelope() + inferred() + extracted() + localWarnings() + segmentResult() + records() + shouldSkipCommunicationFile() + explicitEnvelope() + hasExplicitEnvelopeMetadata() + buildCommunicationSegments() + inferredRole() + segments() + resolveFileScope() + relativeToProject() + segments() + pathTicket() + readCommunicationBody() + collectCommunicationMetadata() + declaredParticipant() + declaredRole() + declaredParticipantId() + identity() + participant() + role() + displayName() + explicitMessageType() + messageType() + ticket() + recipient() + rawTimestamp() + timestamp() + declaredGitAuthors() + gitAuthors() + explicitPaths() + explicitSymbols() + buildLocalWarnings() + appendRoleAndParticipantWarnings() + appendIdentityWarnings() + appendRegistryAlignmentWarnings() + appendA2aAgentWarnings() + declaredA2aAgentId() + hasRegistryEntry() + appendTimestampWarnings() + rawTimestamp() + src/core/text.ts: + i: ./types.js + e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value + STOP_WORDS() + buildStopWords() + classifyActionHeuristically() + conventionalAction() + prose() + searchable() + matchedByPattern() + extractConventionalAction() + conventional() + findActionInText() + removeInlineCode() + detectModality() + prose() + searchable() + matches() + detectPolarity() + prose() + stripped() + normalized() + normalizeToken() + keywords() + GENERIC_TOPICS() + topicKeywords() + separated() + foldTopicToken() + aliased() + singular() + similarity() + left() + right() + intersection() + extractBacktickValues() + value() + extractPaths() + FILE_EXTENSIONS() + hasFileExtension() + last() + dot() + PATH_ROOTS() + isPathLike() + segments() + HOST_TLDS() + isHostname() + parts() + tld() + extractSymbols() + repositoryPaths() + backticks() + camel() + ticketPrefixes() + extractTickets() + values() + extractVersions() + inferObject() + normalized() + withoutAction() + result() + normalizeForObject() + removeObjectAction() + stripObjectConnector() + splitIntentLines() + lines() + raw() + cleaned() + pieces() + value() src/evaluation/gold.ts: i: ../core/id.js,./gold-extraction.js,node:fs e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result @@ -2008,19 +1650,168 @@ D: optionNumber() value() number() - optionList() - value() - optionNlMode() - optionLlmMode() - value() - optionTaskMode() - value() - optionSummaryMode() - optionPipelineTaskMode() - value() - reportPipelineDegradation() - printHelp() - invokedPath() + optionList() + value() + optionNlMode() + optionLlmMode() + value() + optionTaskMode() + value() + optionSummaryMode() + optionPipelineTaskMode() + value() + reportPipelineDegradation() + printHelp() + invokedPath() + src/services/actions.ts: + i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path + e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest + CommunicationGraphFilter: + executeAction() + root() + handler() + executeExtractNlAction() + file() + text() + executeExtractGitAction() + executeExtractAstAction() + executeExtractConfigAction() + executeExtractMarkdownAction() + executeExtractDocsAction() + executeExtractCommunicationAction() + executeAnalyzeCommunicationAction() + analysis() + executeLinkAction() + records() + executeDiagnoseAction() + graph() + executeSummarizeAction() + graph() + diagnostics() + executeProposeTodoAction() + graph() + diagnostics() + result() + output() + executeRenderTodoAction() + graph() + diagnostics() + synthesis() + todoPath() + patchPath() + auditPath() + todoContent() + rendered() + executeApplyTodoAction() + todoPath() + patchPath() + auditPath() + receiptPath() + result() + executeProposeCodeChangeAction() + graph() + diagnostics() + conclusions() + proposals() + result() + output() + executeRenderCodeChangeAction() + planSet() + review() + patchPath() + auditPath() + executeProposeSourcePatchAction() + plan() + unifiedDiffs() + patch() + output() + planSet() + result() + output() + executeApplySourcePatchAction() + patch() + receiptPath() + result() + executeEvaluateCodeChangeAction() + plan() + beforeGraph() + beforeDiagnostics() + afterGraph() + afterDiagnostics() + result() + output() + executeCloseCodeChangeAction() + beforeGraph() + beforeDiagnostics() + afterGraph() + afterDiagnostics() + value() + planSet() + result() + output() + executeDiffAction() + beforeInput() + afterInput() + before() + after() + diff() + svg() + executeDiffFilesAction() + beforePath() + afterPath() + diff() + executeDiffGitAction() + result() + executeRealityAction() + graph() + diagnostics() + view() + executeCompareWorkspaceAction() + executePipelineAction() + filterCommunicationGraph() + filter() + records() + parseCommunicationGraphFilter() + participant() + role() + ticket() + communicationOnly() + matchesCommunicationFilter() + matchesParticipant() + matchesRole() + matchesTicket() + nlModeValue() + llmModeValue() + taskSynthesisMode() + summaryModeValue() + pipelineTaskMode() + withTextDiffViews() + title() + readGraphInput() + safePath() + readActionObject() + safePath() + resolveRoot() + requested() + scopedPath() + selected() + nullableScopedPath() + selected() + readRecords() + files() + safeFile() + stringValue() + nullableString() + stringList() + numberValue() + number() + hasInputValue() + objectMapOfStrings() + booleanValue() + objectValue() + registerRunArtifacts() + manifestPath() + manifest() src/config/env.ts: i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter @@ -2128,6 +1919,172 @@ D: failedAudit() message() writeFile() + src/synthesis/code-change-plan/implementation-helpers.ts: + i: ../../core/io.js,../../core/security.js,../../graph/diagnostics.js,../../version.js,./implementation-source-patch.js,./implementation-targets.js,node:crypto,node:fs,node:path + e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,PlanContext,AcceptanceContext,CloseCodeChangeContext,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,proposeCodeChangePlans,generatedAt,maxPlans,context,candidates,plans,buildPlansForCandidates,plan,buildPlanSetResult,parseIsoDateTime,generatedAt,parseMaxPlans,maxPlans,buildPlanContext,conclusions,proposals,findRelatedRecords,createPlanForDiagnostic,relatedRecords,matchingProposals,matchingConclusions,target,changes,evidence,confidence,semantic,confidenceForDiagnostic,buildPlanResult,createRepositoryPathProbe,base,absolute,evaluateCodeChangeAcceptance,context,reasons,accepted,acceptance,buildAcceptanceContext,evaluatedAt,afterDiagnostics,beforeDiagnosticIds,afterById,targetedDiagnosticIds,buildAcceptanceReasons,isAcceptancePassed,appendAcceptanceGateReason,buildAcceptanceResult,closeCodeChanges,context,acceptances,acceptedCount,buildCloseCodeChangeContext,evaluatedAt,afterDiagnostics,ensureClosePlanIdsAreUnique,planIds,buildCloseResult,buildChanges,symbols,sourceIntents,rationale,normalized,exists,confidenceFor,uniqueSorted,deterministicGeneration,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertCodeChangeSourcePatchAndActorAndEdits,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines + ProposeCodeChangePlansOptions: + ProposeCodeChangePlansResult: + EvaluateCodeChangeAcceptanceOptions: + CloseCodeChangesOptions: + PlanContext: + AcceptanceContext: + CloseCodeChangeContext: + ApplyCodeChangeSourcePatchOptions: + ApplyCodeChangeSourcePatchResult: + NormalizedApplyCodeChangeSourcePatchRequest: + SourcePatchApplyLock: + SourcePatchEditTarget: + PreparedSourceEdit: + ParsedUnifiedDiffHunk: + UnifiedDiffParsingContext: + UnifiedDiffCursor: + proposeCodeChangePlans() + generatedAt() + maxPlans() + context() + candidates() + plans() + buildPlansForCandidates() + plan() + buildPlanSetResult() + parseIsoDateTime() + generatedAt() + parseMaxPlans() + maxPlans() + buildPlanContext() + conclusions() + proposals() + findRelatedRecords() + createPlanForDiagnostic() + relatedRecords() + matchingProposals() + matchingConclusions() + target() + changes() + evidence() + confidence() + semantic() + confidenceForDiagnostic() + buildPlanResult() + createRepositoryPathProbe() + base() + absolute() + evaluateCodeChangeAcceptance() + context() + reasons() + accepted() + acceptance() + buildAcceptanceContext() + evaluatedAt() + afterDiagnostics() + beforeDiagnosticIds() + afterById() + targetedDiagnosticIds() + buildAcceptanceReasons() + isAcceptancePassed() + appendAcceptanceGateReason() + buildAcceptanceResult() + closeCodeChanges() + context() + acceptances() + acceptedCount() + buildCloseCodeChangeContext() + evaluatedAt() + afterDiagnostics() + ensureClosePlanIdsAreUnique() + planIds() + buildCloseResult() + buildChanges() + symbols() + sourceIntents() + rationale() + normalized() + exists() + confidenceFor() + uniqueSorted() + deterministicGeneration() + applyCodeChangeSourcePatch() + request() + root() + receiptPath() + lock() + idempotentResult() + prepared() + now() + receipt() + readExistingReceipt() + existing() + assertPatchApplicationRequest() + patch() + assertCodeChangeSourcePatchAndActorAndEdits() + assertPatchApprovalActor() + assertPatchApprovalHash() + assertPatchEditsContainDiffs() + acquireApplyLock() + lock() + prepareSourceEdits() + target() + before() + after() + prepareSourceEditTarget() + relative() + absolute() + existed() + assertSourcePatchTargetNotSymlink() + assertDeleteEditClearsAll() + validatePatchTargetForEdit() + applyPreparedEdits() + receipt() + rollbackErrors() + writePreparedEdits() + buildPatchApplyReceipt() + fileHashesAfter() + rollbackPreparedEdits() + assertExistingSourceReceipt() + relative() + absolute() + exists() + current() + assertSourceApplyReceipt() + validateSourceApplyReceiptShape() + validateSourceApplyReceiptIdentity() + validateSourceApplyReceiptTimestamps() + validateSourceApplyReceiptPathHashes() + expectedPaths() + hashPaths() + validateSourceApplyReceiptGeneration() + atomicWriteRaw() + applyUnifiedDiffToText() + baseLines() + hunks() + output() + joinAppliedText() + parseUnifiedDiffIntoHunks() + normalizedDiff() + context() + createEmptyUnifiedDiffContext() + parseUnifiedDiffLines() + finalizeUnifiedDiffContext() + applyUnifiedDiffLineToContext() + header() + parseUnifiedDiffHeader() + buildParsedUnifiedDiffHunk() + applyUnifiedDiffHunks() + applyUnifiedDiffHunk() + oldIndex() + copyBaseLinesToCursor() + appendRemainingBaseLines() + validateHunkCounts() + oldCount() + newCount() + applyUnifiedDiffLine() + mark() + body() + applyUnifiedDiffContextLine() + applyUnifiedDiffDeletionLine() + applyUnifiedDiffAdditionLine() + splitKeep() + lines() src/extractors/ast.ts: i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result @@ -2189,6 +2146,56 @@ D: RawNlRecord: NlResponse: NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1) + src/core/schema/intent.ts: + i: ../id.js + e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation + GroundedValidationContext: + TodoProposalValidationContext: + CodeChangePlanValidationContext: + CodeChangeAcceptanceValidationContext: + assertIntentRecord() + record() + statement() + lifecycle() + source() + epistemic() + metadata() + assertIntentStatement() + statement() + assertIntentTarget() + target() + assertIntentLifecycle() + lifecycle() + assertIntentSource() + source() + lines() + assertIntentEpistemic() + epistemic() + assertIntentMetadata() + typedMetadata() + generation() + assertGenerationMatchesExtractor() + generation() + separator() + expectedGenerator() + assertIntentGenerationMetadata() + generation() + assertIntentRecords() + assertIntentGraph() + graph() + recordIds() + relationIds() + stats() + records() + expectedFingerprint() + assertIntentGraphDiff() + diff() + records() + change() + relations() + summary() + assertRelation() + relation() src/synthesis/todo-patch.ts: i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings @@ -2371,56 +2378,6 @@ D: AuditedCommunicationExtractionResult: CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1) CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1) - src/core/schema/intent.ts: - i: ../id.js - e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation - GroundedValidationContext: - TodoProposalValidationContext: - CodeChangePlanValidationContext: - CodeChangeAcceptanceValidationContext: - assertIntentRecord() - record() - statement() - lifecycle() - source() - epistemic() - metadata() - assertIntentStatement() - statement() - assertIntentTarget() - target() - assertIntentLifecycle() - lifecycle() - assertIntentSource() - source() - lines() - assertIntentEpistemic() - epistemic() - assertIntentMetadata() - typedMetadata() - generation() - assertGenerationMatchesExtractor() - generation() - separator() - expectedGenerator() - assertIntentGenerationMetadata() - generation() - assertIntentRecords() - assertIntentGraph() - graph() - recordIds() - relationIds() - stats() - records() - expectedFingerprint() - assertIntentGraphDiff() - diff() - records() - change() - relations() - summary() - assertRelation() - relation() src/extractors/changelog.ts: i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower @@ -2672,6 +2629,45 @@ D: isImportantRecord() makeDiagnostic() severityRank() + src/core/io.ts: + i: ./types.js,node:fs,node:path + e: WalkOptions,WalkState,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,state,createWalkState,walkDirectory,entries,walkEntry,absolute,relative,isTargetFile,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix + WalkOptions: + WalkState: + DEFAULT_IGNORED_DIRS() + ensureDir() + readText() + stat() + pathExists() + writeJson() + writeText() + writeJsonl() + readJsonl() + body() + readJson() + walkFiles() + state() + createWalkState() + walkDirectory() + entries() + walkEntry() + absolute() + relative() + isTargetFile() + escapeRegex() + globToRegExp() + normalized() + char() + next() + after() + matchesAnyGlob() + normalized() + resolveGlobs() + files() + absolute() + relative() + relative() + relativePosix() src/core/schema/code-change.ts: i: ../id.js,../types.js e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch @@ -2719,6 +2715,31 @@ D: proposal() proposalIds() assertStringSetMatch() + src/synthesis/code-change-path.ts: + e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isUsefulCodeChangePath,isPlannablePath,normalized,segments,lowerSegments,basename,normalizePlannablePath,isCandidatePathSyntax,splitPathSegments,isInvalidSegmentShape,isConcretePath,hasShellPattern,isDisallowedSegment,isPlannableBasename,lowerBasename,dot,ext,isGeneratedArtifactPath + NON_SOURCE_DIR_SEGMENTS() + BINARY_EXTENSIONS() + GENERATED_ANALYSIS_BASENAMES() + T2C_ARTIFACT_BASENAMES() + EXTENSIONLESS_SOURCE_BASENAMES() + isUsefulCodeChangePath() + isPlannablePath() + normalized() + segments() + lowerSegments() + basename() + normalizePlannablePath() + isCandidatePathSyntax() + splitPathSegments() + isInvalidSegmentShape() + isConcretePath() + hasShellPattern() + isDisallowedSegment() + isPlannableBasename() + lowerBasename() + dot() + ext() + isGeneratedArtifactPath() src/synthesis/validation.ts: i: ../core/schema.js,../core/types.js e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values @@ -2934,6 +2955,117 @@ D: sdk/python/examples/basic.py: e: main main() + src/synthesis/code-change-plan/implementation-source-patch.ts: + i: ../../core/schema.js,../../version.js,./implementation-diagnostics.js + e: CreateCodeChangeSourcePatchOptions,SourcePatchCreationContext,SourcePatchSetBuildContext,SourcePatchEditValidationContext,SourcePatchSetValidationContext,createCodeChangeSourcePatch,context,edits,semantic,patchHash,buildSourcePatchContext,graphFingerprint,createdAt,allowedPaths,collectPlanTargetPaths,validateUnifiedDiffsBelongToPlan,normalizedPath,buildSourcePatchEdits,buildSourcePatchEdit,path,rawDiff,unifiedDiff,buildSourcePatchSemantic,createCodeChangeSourcePatchSet,context,patches,result,normalizePatchSetOptions,generatedAt,buildPatchesForSet,buildSourcePatchSet,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,normalizeUnifiedDiffText,normalized,validateUnifiedDiffBody,validateUnifiedDiffPathHeaders,extractUnifiedDiffHeaders,validateUnifiedDiffHeaderPath,normalizedPath,normalizeUnifiedDiffHeaderPath,assertUnifiedDiffHeaderPathSafety,bare,stripped,isUnifiedDiffTraversalHeader,matchesUnifiedDiffExpectedHeader,normalizedHeaderPathCandidate,stripLeadingDiffPrefix,deterministicGeneration,uniqueSorted,assertSourcePatchObject + CreateCodeChangeSourcePatchOptions: + SourcePatchCreationContext: + SourcePatchSetBuildContext: + SourcePatchEditValidationContext: + SourcePatchSetValidationContext: + createCodeChangeSourcePatch() + context() + edits() + semantic() + patchHash() + buildSourcePatchContext() + graphFingerprint() + createdAt() + allowedPaths() + collectPlanTargetPaths() + validateUnifiedDiffsBelongToPlan() + normalizedPath() + buildSourcePatchEdits() + buildSourcePatchEdit() + path() + rawDiff() + unifiedDiff() + buildSourcePatchSemantic() + createCodeChangeSourcePatchSet() + context() + patches() + result() + normalizePatchSetOptions() + generatedAt() + buildPatchesForSet() + buildSourcePatchSet() + assertCodeChangeSourcePatch() + patch() + editPaths() + assertCodeChangeSourcePatchObject() + patch() + validateSourcePatchSchema() + validateSourcePatchIdentifiers() + validateSourcePatchEdits() + collectSourcePatchEditPathActions() + paths() + editContext() + validateSourcePatchEdit() + normalizedEdit() + normalizedPath() + assertSourcePatchEditObject() + validateSourcePatchEditBody() + validateSourcePatchEditDiff() + assertUniqueSourcePatchEditPathAction() + normalizeSourcePatchEditPath() + normalizedPath() + ensureSourcePatchEditAction() + ensureSourcePatchEditInstruction() + validateSourcePatchHashAndId() + expectedHash() + validateSourcePatchGeneration() + validateSourcePatchAgainstPlan() + expectedChanges() + assertSourcePatchPlanBinding() + collectExpectedPlanChanges() + validateSourcePatchEditsAgainstPlan() + allowed() + editPath() + validateSourcePatchEvidence() + assertCodeChangeSourcePatchSet() + set() + context() + createSourcePatchSetValidationContext() + expectedPlanIds() + assertSourcePatchSetObject() + set() + validateSourcePatchSetSchema() + validateSourcePatchSetPatches() + patchIds() + validateSetPatchAndTrackDuplicates() + expectedPlan() + validateSetPatchGraphFingerprint() + assertUniqueSetPatchId() + validateSetPatchesPlanCoverage() + validateSourcePatchSetGeneration() + exactSourcePatchKeys() + actual() + assertSourcePatchIds() + assertSourcePatchStrings() + exactSourcePatchSet() + instructionFor() + symbols() + criteria() + normalizeUnifiedDiff() + normalized() + normalizeUnifiedDiffText() + normalized() + validateUnifiedDiffBody() + validateUnifiedDiffPathHeaders() + extractUnifiedDiffHeaders() + validateUnifiedDiffHeaderPath() + normalizedPath() + normalizeUnifiedDiffHeaderPath() + assertUnifiedDiffHeaderPathSafety() + bare() + stripped() + isUnifiedDiffTraversalHeader() + matchesUnifiedDiffExpectedHeader() + normalizedHeaderPathCandidate() + stripLeadingDiffPrefix() + deterministicGeneration() + uniqueSorted() + assertSourcePatchObject() examples/backend/src/validation.ts: e: ValidationResult,ALLOWED_ACTIONS,validateEventPayload,invalid,record,agent,action,object ValidationResult: @@ -3019,30 +3151,57 @@ D: readListBlock() cursor() line() - src/graph/linker.ts: - i: ../core/id.js,../core/schema.js,../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js,./symbol-resolution.js - e: PairEvidence,RecordKeywords,DirectedRelation,SourceRelationRule,indexKeywords,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,isSuppressedConfigurationPair,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,objectSimilarity,scoreSharedTickets,scoreSharedSymbol,hasResolvedSymbol,hasSharedAlias,scoreSharedPath,points,capabilityOverlap,scoreSameAction,scoreObjectSimilarity,objectSimilarity,scoreSharedTopics,sharedTopics,scoreSourceKindPenalty,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation,intersects,set,intersectsAliases,set,countBy,key - PairEvidence: + src/graph/symbol-resolution.ts: + i: ../core/target.js,../core/types.js + e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,collectAstCandidates,byAlias,candidate,values,buildAstCandidate,uniqueSymbols,sortCandidates,collectNlResolutions,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration + AstSymbolCandidate: + NlSymbolResolution: + SymbolResolutionIndex: + buildSymbolResolutionIndex() + byAlias() + collectAstCandidates() + byAlias() + candidate() + values() + buildAstCandidate() + uniqueSymbols() + sortCandidates() + collectNlResolutions() + byNlRecord() + hasResolvedNlAstSymbolPair() + nl() + ast() + resolveSymbol() + matched() + selected() + paths() + pathSelects() + normalized() + candidatePath() + uniquePaths() + isAstDeclaration() + src/graph/capability-evidence.ts: + i: ../core/text.js,../core/types.js + e: STRUCTURAL_TOPICS,declaredCapabilityTopics,topics,locationTopics,aggregateCapabilityTopics,values,aggregateCapabilityOverlap,aggregate,declaration,requested,implemented,overlap,hasCapabilityClaim,isFileAggregate + STRUCTURAL_TOPICS() + declaredCapabilityTopics() + topics() + locationTopics() + aggregateCapabilityTopics() + values() + aggregateCapabilityOverlap() + aggregate() + declaration() + requested() + implemented() + overlap() + hasCapabilityClaim() + isFileAggregate() + src/graph/linker-candidates.ts: + i: ../core/target.js,../core/text.js,../core/types.js,./capability-evidence.js + e: RecordKeywords,indexKeywords,collectCandidatePairs,buckets,astIds,moduleAstIds,declarationAstIds,configurationIds,isModuleTopicSource,indexTargetBuckets,indexAliases,indexKeywordBuckets,indexTopicBuckets,addToBucket,values,pairsFromBuckets,output,leftId,rightId,isSuppressedAstPair,leftAst,rightAst,astId,isSuppressedConfigurationPair RecordKeywords: - DirectedRelation: - SourceRelationRule: indexKeywords() - jaccard() - intersection() - linkIntentRecords() - records() - byId() - keywordIndex() - symbolResolutionIndex() - candidatePairs() - resolvableBasenames() - left() - right() - evidence() - directed() - deduplicateRecords() - byId() - existing() collectCandidatePairs() buckets() astIds() @@ -3056,7 +3215,6 @@ D: indexTopicBuckets() addToBucket() values() - isSuppressedConfigurationPair() pairsFromBuckets() output() leftId() @@ -3065,69 +3223,7 @@ D: leftAst() rightAst() astId() - indexResolvableBasenames() - owners() - normalized() - basename() - paths() - pathsIntersect() - expand() - output() - aliases() - full() - leftSet() - scorePair() - score() - leftKeywords() - rightKeywords() - objectSimilarity() - scoreSharedTickets() - scoreSharedSymbol() - hasResolvedSymbol() - hasSharedAlias() - scoreSharedPath() - points() - capabilityOverlap() - scoreSameAction() - scoreObjectSimilarity() - objectSimilarity() - scoreSharedTopics() - sharedTopics() - scoreSourceKindPenalty() - intersectionSize() - size() - isFileAggregateEvidencePair() - isModuleTopicEvidencePair() - determineRelation() - textScore() - sourceRelation() - relationForSourceKinds() - relation() - matchSourceRule() - orientRelation() - intersects() - set() - intersectsAliases() - set() - countBy() - key() - src/graph/capability-evidence.ts: - i: ../core/text.js,../core/types.js - e: STRUCTURAL_TOPICS,declaredCapabilityTopics,topics,locationTopics,aggregateCapabilityTopics,values,aggregateCapabilityOverlap,aggregate,declaration,requested,implemented,overlap,hasCapabilityClaim,isFileAggregate - STRUCTURAL_TOPICS() - declaredCapabilityTopics() - topics() - locationTopics() - aggregateCapabilityTopics() - values() - aggregateCapabilityOverlap() - aggregate() - declaration() - requested() - implemented() - overlap() - hasCapabilityClaim() - isFileAggregate() + isSuppressedConfigurationPair() src/core/ignore.ts: i: node:fs,node:path e: IgnoreRule,IgnoreMatcher,LoadIgnoreOptions,compileIgnorePattern,pattern,negated,directoryOnly,anchored,body,prefix,translateGlob,char,next,close,body,escapeLiteral,parseIgnoreFile,createIgnoreMatcher,normalize,decide,target,segments,ancestor,loadIgnoreMatcher,files,absolute,rule @@ -3250,7 +3346,7 @@ D: main() args() src/communication/llm/implementation-helpers.ts: - i: ../../core/id.js,../../core/io.js,../../core/record.js,../../llm/audit.js,../../llm/structured-schema.js,../../version.js,../extractors/communication.js,node:fs,node:path,node:url + i: ../../config/env.js,../../core/id.js,../../core/io.js,../../core/record.js,../../extractors/communication.js,../../llm/audit.js,../../llm/structured-schema.js,../../version.js,node:fs,node:path,node:url e: RawCommunicationEnrichment,RawParticipantSynthesis,RawCommunicationResponse,ParticipantGroup,ParticipantCommunicationSynthesisInput,participantGroups,grouped,participant,role,key,values,promptPayload,validateEnrichments,expected,output,materializeSyntheses,byKey,seen,output,group,permitted,recordIds,enrichRecord,deterministicSyntheses,markDeterministic,marked,deterministicGeneration,fallbackGeneration,llmGeneration,audit,readPrompt,promptPath,synthesis,sortedUnique,roleOf,communicationStrings,COMMUNICATION_ENRICHMENT_CONTRACT,PARTICIPANT_SYNTHESIS_CONTRACT,COMMUNICATION_RESPONSE_CONTRACT RawCommunicationEnrichment: RawParticipantSynthesis: @@ -3274,52 +3370,23 @@ D: group() permitted() recordIds() - enrichRecord() - deterministicSyntheses() - markDeterministic() - marked() - deterministicGeneration() - fallbackGeneration() - llmGeneration() - audit() - readPrompt() - promptPath() - synthesis() - sortedUnique() - roleOf() - communicationStrings() - COMMUNICATION_ENRICHMENT_CONTRACT() - PARTICIPANT_SYNTHESIS_CONTRACT() - COMMUNICATION_RESPONSE_CONTRACT() - src/graph/symbol-resolution.ts: - i: ../core/target.js,../core/types.js - e: AstSymbolCandidate,NlSymbolResolution,SymbolResolutionIndex,buildSymbolResolutionIndex,byAlias,collectAstCandidates,byAlias,candidate,values,buildAstCandidate,uniqueSymbols,sortCandidates,collectNlResolutions,byNlRecord,hasResolvedNlAstSymbolPair,nl,ast,resolveSymbol,matched,selected,paths,pathSelects,normalized,candidatePath,uniquePaths,isAstDeclaration - AstSymbolCandidate: - NlSymbolResolution: - SymbolResolutionIndex: - buildSymbolResolutionIndex() - byAlias() - collectAstCandidates() - byAlias() - candidate() - values() - buildAstCandidate() - uniqueSymbols() - sortCandidates() - collectNlResolutions() - byNlRecord() - hasResolvedNlAstSymbolPair() - nl() - ast() - resolveSymbol() - matched() - selected() - paths() - pathSelects() - normalized() - candidatePath() - uniquePaths() - isAstDeclaration() + enrichRecord() + deterministicSyntheses() + markDeterministic() + marked() + deterministicGeneration() + fallbackGeneration() + llmGeneration() + audit() + readPrompt() + promptPath() + synthesis() + sortedUnique() + roleOf() + communicationStrings() + COMMUNICATION_ENRICHMENT_CONTRACT() + PARTICIPANT_SYNTHESIS_CONTRACT() + COMMUNICATION_RESPONSE_CONTRACT() rust-ast/src/main.rs: i: proc_macro2::Span,quote::ToTokens,serde::Serialize,serde_json::,std::collections::BTreeSet,std::env,std::fs,std::path::,syn::spanned::Spanned,syn::visit:: e: Fact,Output,Collector,main,arguments,collect_files,new,qualified,add,excerpt,modifiers,visit_item_mod,visit_item_use,visit_item_struct,visit_item_enum,visit_item_trait,visit_item_type,visit_item_const,visit_item_static,visit_item_fn,visit_item_impl,visit_impl_item_fn,visit_expr_call,visit_expr_method_call @@ -3450,6 +3517,28 @@ D: diagnostic() validateTodoProposalContext() known() + src/semantic/reranker-llm.ts: + i: ../config/env.js,../core/id.js,../core/types.js,../llm/openrouter.js,../llm/structured-schema.js,node:child_process,node:path,node:util + e: SemanticRerankerOptions,SemanticRerankerRequiredError + SemanticRerankerOptions: + SemanticRerankerRequiredError: super(-1),rerankSemanticCandidates(-1),assertSemanticCandidateSet(-1),validateCandidateSetSize(-1),model(-1),modelRevision(-1),cached(-1),client(-1),payload(-1),response(-1),validateCandidateSetSize(-1),resolveRerankerModel(-1),resolveModelRevision(-1),revision(-1),resolveCachedResult(-1),assertSemanticRerankResult(-1),assertRerankerClient(-1),client(-1),assertTrackedSnapshotAvailable(-1),buildRerankerPayload(-1),records(-1),messagesForCandidates(-1),callReranker(-1),metadata(-1),buildRerankResult(-1),assertSemanticRerankerResponse(-1),execFileAsync(-1),assertTrackedSnapshot(-1),root(-1),revision(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),execFileAsync(-1),head(-1),resolvedRevision(-1),tracked(-1),records(-1),recordIds(-1),record(-1),sourcePath(-1),semanticRerankCacheKey(-1),projectRecord(-1) + src/synthesis/code-change-plan/implementation-semantic.ts: + i: ../../core/types.js + e: CodeChangePlanSemanticDraft,buildPlanEvidence,buildPlanSemantic,titleFor,record,object,startsWithImperative,descriptionFor,acceptanceCriteriaFor,priorityFor,riskFor,level,rollbackFor,uniqueSorted + CodeChangePlanSemanticDraft: + buildPlanEvidence() + buildPlanSemantic() + titleFor() + record() + object() + startsWithImperative() + descriptionFor() + acceptanceCriteriaFor() + priorityFor() + riskFor() + level() + rollbackFor() + uniqueSorted() src/interfaces/mcp.ts: i: ../config/env.js,./mcp-errors.js,./mcp-resources.js,./mcp-tools.js,node:path,node:readline,node:url e: JsonRpcRequest,McpConnectionState,DISCOVERY_TTL_MS,LIST_TTL_MS,RESOURCE_TTL_MS,createMcpConnectionState,startMcpServer,resolvedConfig,state,input,parsed,request,result,handleMcpRequest,initializeLegacy,params,requested,protocolVersion,handleModernRequest,params,responseMeta,handleLegacyRequest,params,validateModernRequest,params,meta,validateModernMetadata,requested,capabilities,hasModernMetadata,meta,parseRequestLine,completePublic,serverInfo,serverMeta,serverInstructions,isLegacyProtocol,isJsonRpcRequest,candidate,requestId,id,rpcError,sendError,send,invokedPath @@ -3640,6 +3729,65 @@ D: extension() languageName() extension() + src/graph/linker.ts: + i: ../core/id.js,../core/schema.js,../core/target.js,../core/types.js,./capability-evidence.js,./linker-relations.js,./symbol-resolution.js + e: PairEvidence,jaccard,intersection,linkIntentRecords,records,byId,keywordIndex,symbolResolutionIndex,candidatePairs,resolvableBasenames,left,right,evidence,directed,deduplicateRecords,byId,existing,indexResolvableBasenames,owners,normalized,basename,paths,pathsIntersect,expand,output,aliases,full,leftSet,scorePair,score,leftKeywords,rightKeywords,objectSimilarity,scoreSharedTickets,scoreSharedSymbol,hasResolvedSymbol,hasSharedAlias,scoreSharedPath,points,capabilityOverlap,scoreSameAction,scoreObjectSimilarity,objectSimilarity,scoreSharedTopics,sharedTopics,scoreSourceKindPenalty,intersectionSize,size,isFileAggregateEvidencePair,isModuleTopicEvidencePair,intersects,set,intersectsAliases,set,countBy,key + PairEvidence: + jaccard() + intersection() + linkIntentRecords() + records() + byId() + keywordIndex() + symbolResolutionIndex() + candidatePairs() + resolvableBasenames() + left() + right() + evidence() + directed() + deduplicateRecords() + byId() + existing() + indexResolvableBasenames() + owners() + normalized() + basename() + paths() + pathsIntersect() + expand() + output() + aliases() + full() + leftSet() + scorePair() + score() + leftKeywords() + rightKeywords() + objectSimilarity() + scoreSharedTickets() + scoreSharedSymbol() + hasResolvedSymbol() + hasSharedAlias() + scoreSharedPath() + points() + capabilityOverlap() + scoreSameAction() + scoreObjectSimilarity() + objectSimilarity() + scoreSharedTopics() + sharedTopics() + scoreSourceKindPenalty() + intersectionSize() + size() + isFileAggregateEvidencePair() + isModuleTopicEvidencePair() + intersects() + set() + intersectsAliases() + set() + countBy() + key() src/graph/changelog-signal.ts: i: ../core/types.js e: GENERATED_ANALYSIS_BASENAMES,isActionableChangelogRecord,text,paths,isPlaceholder,isFileSummary,isFileOnlyUpdate,match,candidate,basename,isGeneratedAnalysisPath,segments,basename @@ -3656,51 +3804,6 @@ D: isGeneratedAnalysisPath() segments() basename() - scripts/verify-structured-responses.mjs: - i: node:fs,node:path - e: root,sourceRoot,files,structuredCalls,source,typescriptFiles,absolute - root() - sourceRoot() - files() - structuredCalls() - source() - typescriptFiles() - absolute() - scripts/verify-generated-analysis.mjs: - i: node:child_process,node:fs,node:path,node:util - e: execFileAsync,root,projectDirectory,textExtensions,untracked,tracked,generatedRelative,trackedReferences,relative,content,normalizePath,referencesAlreadyInTrackedSources,referenced,content,text - execFileAsync() - root() - projectDirectory() - textExtensions() - untracked() - tracked() - generatedRelative() - trackedReferences() - relative() - content() - normalizePath() - referencesAlreadyInTrackedSources() - referenced() - content() - text() - sdk/typescript/src/index.ts: - e: IntentTarget,IntentStatement,IntentGenerationMetadata,IntentRecord,IntentGraph,DiagnosticReport,ExtractionAudit,ExtractionResult,A2APart,A2AMessage,A2ATask,T2CError,ClientOptions,T2CClient,unwrapTask - IntentTarget: - IntentStatement: - IntentGenerationMetadata: - IntentRecord: - IntentGraph: - DiagnosticReport: - ExtractionAudit: - ExtractionResult: - A2APart: - A2AMessage: - A2ATask: - T2CError: super(-1) - ClientOptions: - T2CClient: health(-1),agentCard(-1),send(-1),result(-1),call(-1),task(-1),detail(-1),part(-1),getTask(-1),cancelTask(-1),listTasks(-1),extractNl(-1),extractGit(-1),extractAst(-1),extractConfig(-1),link(-1),diagnose(-1),summarize(-1),compareWorkspace(-1),diffGraphs(-1),response(-1),body(-1),message(-1),diffFiles(-1),diffGit(-1),reality(-1),pipeline(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),rpc(-1),body(-1),response(-1),payload(-1),getJson(-1),response(-1),request(-1),controller(-1),timer(-1),clearTimeout(-1) - unwrapTask() src/core/schema/utils.ts: i: ../types.js e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation,assertGroundedLlMMode,assertModeRequirements,assertDeterministicGeneration,assertDegradedRequirements @@ -3746,6 +3849,74 @@ D: assertModeRequirements() assertDeterministicGeneration() assertDegradedRequirements() + src/semantic/reranker/candidate.ts: + i: ../../core/schema.js,../../core/types.js,./validation.js + e: CandidateValidationState,createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,state,assertCandidateSetHeader,createCandidateValidationState,addValidatedCandidate,validateCandidateId,validateCandidateRecords,declaration,module,validateCandidateRank,registerCandidate,existing,assertBoundedRanks,assertCandidateSetHash,expectedHash,comparePair + CandidateValidationState: + createSemanticCandidateSet() + grouped() + values() + assertSemanticCandidateSet() + state() + assertCandidateSetHeader() + createCandidateValidationState() + addValidatedCandidate() + validateCandidateId() + validateCandidateRecords() + declaration() + module() + validateCandidateRank() + registerCandidate() + existing() + assertBoundedRanks() + assertCandidateSetHash() + expectedHash() + comparePair() + scripts/verify-structured-responses.mjs: + i: node:fs,node:path + e: root,sourceRoot,files,structuredCalls,source,typescriptFiles,absolute + root() + sourceRoot() + files() + structuredCalls() + source() + typescriptFiles() + absolute() + scripts/verify-generated-analysis.mjs: + i: node:child_process,node:fs,node:path,node:util + e: execFileAsync,root,projectDirectory,textExtensions,untracked,tracked,generatedRelative,trackedReferences,relative,content,normalizePath,referencesAlreadyInTrackedSources,referenced,content,text + execFileAsync() + root() + projectDirectory() + textExtensions() + untracked() + tracked() + generatedRelative() + trackedReferences() + relative() + content() + normalizePath() + referencesAlreadyInTrackedSources() + referenced() + content() + text() + sdk/typescript/src/index.ts: + e: IntentTarget,IntentStatement,IntentGenerationMetadata,IntentRecord,IntentGraph,DiagnosticReport,ExtractionAudit,ExtractionResult,A2APart,A2AMessage,A2ATask,T2CError,ClientOptions,T2CClient,unwrapTask + IntentTarget: + IntentStatement: + IntentGenerationMetadata: + IntentRecord: + IntentGraph: + DiagnosticReport: + ExtractionAudit: + ExtractionResult: + A2APart: + A2AMessage: + A2ATask: + T2CError: super(-1) + ClientOptions: + T2CClient: health(-1),agentCard(-1),send(-1),result(-1),call(-1),task(-1),detail(-1),part(-1),getTask(-1),cancelTask(-1),listTasks(-1),extractNl(-1),extractGit(-1),extractAst(-1),extractConfig(-1),link(-1),diagnose(-1),summarize(-1),compareWorkspace(-1),diffGraphs(-1),response(-1),body(-1),message(-1),diffFiles(-1),diffGit(-1),reality(-1),pipeline(-1),proposeTodo(-1),renderTodo(-1),applyTodo(-1),proposeCodeChange(-1),renderCodeChange(-1),proposeSourcePatch(-1),applySourcePatch(-1),evaluateCodeChange(-1),closeCodeChange(-1),rpc(-1),body(-1),response(-1),payload(-1),getJson(-1),response(-1),request(-1),controller(-1),timer(-1),clearTimeout(-1) + unwrapTask() src/extractors/communication.ts: i: ../communication/identity.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,./communication-file-helpers.js,node:path e: CommunicationExtractionOptions,extractCommunicationIntent,root,projectRoot,files,identityRegistry,communicationFiles,fileResult @@ -3757,6 +3928,19 @@ D: identityRegistry() communicationFiles() fileResult() + src/graph/linker-relations.ts: + i: ../core/types.js + e: RelationEvidence,SourceRelationRule,DirectedRelation,determineRelation,textScore,sourceRelation,relationForSourceKinds,relation,matchSourceRule,orientRelation + RelationEvidence: + SourceRelationRule: + DirectedRelation: + determineRelation() + textScore() + sourceRelation() + relationForSourceKinds() + relation() + matchSourceRule() + orientRelation() src/core/security.ts: i: node:fs,node:path e: assertPathWithinRoot,rootAbsolute,candidateAbsolute,existingAncestor,ancestorReal,assertDescendant,relative,nearestExistingPath,current,code,parent @@ -3771,6 +3955,34 @@ D: current() code() parent() + src/semantic/reranker/result.ts: + i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js + e: createSemanticRerankResult,decisions,assertSemanticRerankResult,seenDecisions,acceptedDeclarations,candidate,assertSemanticRerankHeader,createCandidateAndRecordIndex,validateSemanticDecisionCandidate,candidate,validateSemanticDecisionDecision,validateSemanticDecisionEvidence,citations,record,validateDecisionEvidenceScope,validateSemanticDecisionVerdict,assertRerankResultHash,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons + createSemanticRerankResult() + decisions() + assertSemanticRerankResult() + seenDecisions() + acceptedDeclarations() + candidate() + assertSemanticRerankHeader() + createCandidateAndRecordIndex() + validateSemanticDecisionCandidate() + candidate() + validateSemanticDecisionDecision() + validateSemanticDecisionEvidence() + citations() + record() + validateDecisionEvidenceScope() + validateSemanticDecisionVerdict() + assertRerankResultHash() + expectedHash() + applyAcceptedSemanticRelations() + candidates() + added() + candidate() + assertSemanticVerdictReason() + allowedVerdicts() + allowedReasons() src/semantic/reranker/validation.ts: i: ../../core/types.js e: requiredText,validateRetrieval,validateGeneration,validateVerdictReason,allowedVerdicts,allowedReasons,assertGroundedQuote,quote,validDate,boundedScore,roundedConfidence @@ -3785,6 +3997,44 @@ D: validDate() boundedScore() roundedConfidence() + src/synthesis/code-change-plan/implementation-review.ts: + i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./implementation-diagnostics.js + e: CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CodeChangeReviewContext,createCodeChangeReviewPatch,context,markdown,artifact,buildCodeChangeReviewContext,createdAt,sortCodeChangeReviewPlans,buildCodeChangeReviewMarkdown,buildCodeChangeReviewArtifact,renderCodeChangeReviewMarkdown,lines,buildCodeChangeReviewMarkdownLines,appendPriorityHeader,appendPlanDetails,appendPlanChanges,symbols,appendAfterImplementationSection,assertCodeChangeReviewPatch,artifact,validateReviewPatchKeys,assertCodeChangeReviewPatchSchema,assertReviewPatchSchemaVersion,assertReviewPatchDateFields,assertReviewPatchIds,assertCodeChangeReviewPatchPlanCollections,assertCodeChangeReviewPatchGeneration,generation,deterministicGeneration,priorityRank,inline,renderIds,assertReviewPatchObject + CreateCodeChangeReviewOptions: + CreatedCodeChangeReview: + CodeChangeReviewContext: + createCodeChangeReviewPatch() + context() + markdown() + artifact() + buildCodeChangeReviewContext() + createdAt() + sortCodeChangeReviewPlans() + buildCodeChangeReviewMarkdown() + buildCodeChangeReviewArtifact() + renderCodeChangeReviewMarkdown() + lines() + buildCodeChangeReviewMarkdownLines() + appendPriorityHeader() + appendPlanDetails() + appendPlanChanges() + symbols() + appendAfterImplementationSection() + assertCodeChangeReviewPatch() + artifact() + validateReviewPatchKeys() + assertCodeChangeReviewPatchSchema() + assertReviewPatchSchemaVersion() + assertReviewPatchDateFields() + assertReviewPatchIds() + assertCodeChangeReviewPatchPlanCollections() + assertCodeChangeReviewPatchGeneration() + generation() + deterministicGeneration() + priorityRank() + inline() + renderIds() + assertReviewPatchObject() src/llm/failure.ts: i: ../core/types.js,./openrouter.js,./structured-schema.js e: LlmFailureReason,classifyLlmFailure,message,rejectedLlmResponseMetadata @@ -4033,6 +4283,18 @@ Example: cited() diagnostics() records() + src/synthesis/code-change-plan/implementation-targets.ts: + i: ../../core/target.js,../../core/types.js,../code-change-path.js + e: collectTarget,target,collectTargetComponents,paths,symbols,tickets,versions,addTargetEntries,finalizeTarget + collectTarget() + target() + collectTargetComponents() + paths() + symbols() + tickets() + versions() + addTargetEntries() + finalizeTarget() src/evaluation/gold-extraction.ts: i: ../config/env.js,../core/security.js,../core/types.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/markdown.js,../extractors/nl.js,./gold-types.js,node:fs,node:os,node:path e: runExtractionCase,root,config,writeFixtureFiles,destination,extractNlCase,extractMarkdownCase,extractDeterministicDocumentationCase,files,extractDocumentationCase,originalFetch,benchmarkConfig,config,projectRecord @@ -4116,6 +4378,15 @@ Example: pathResolver() todo() changelog() + src/synthesis/code-change-plan/implementation-indexing.ts: + i: ../../core/types.js + e: indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list + indexProposalsByDiagnostic() + index() + list() + indexConclusionsByDiagnostic() + index() + list() src/evaluation/gold-metrics.ts: i: ../core/id.js,./gold-types.js e: Counts,emptyCounts,addCounts,compareSets,actualCounts,expectedCounts,counts,actualCount,expectedCount,frequency,counts,metric,ratio @@ -4251,6 +4522,11 @@ Example: files() temporaryDirectory() filesPath() + src/synthesis/code-change-plan/implementation-diagnostics.ts: + i: ../../core/types.js + e: collectImplementationDiagnostics,implementationDiagnosticRank + collectImplementationDiagnostics() + implementationDiagnosticRank() src/diff/svg.ts: e: SvgTheme,SvgDocumentOptions,escapeXml,truncate,sanitizeSourceLine,metricCard,svgStyles,svgDocument,theme SvgTheme: @@ -4472,7 +4748,7 @@ Graph compar... src/core/schema/index.ts: src/core/types/code-change.ts: i: ./diagnostics.js,./intent.js,./pipeline.js - e: GroundedGenerationMetadata,Conclusion,TodoProposal,CodeChangeFile,CodeChangeRisk,CodeChangePlan,CodeChangeAcceptance,CodeChangeCloseResult,CodeChangeReviewPatch,CodeChangeSourceEdit,CodeChangeSourcePatch,CodeChangeSourcePatchSet,CodeChangeSourcePatchApproval,CodeChangeSourceApplyReceipt,TodoPatchDuplicateClassification,TodoPatchArtifact + e: GroundedGenerationMetadata,Conclusion,TodoProposal,CodeChangeFile,CodeChangeRisk,CodeChangePlan,CodeChangeAcceptance,CodeChangeCloseResult,CodeChangeReviewPatch,CodeChangeSourceEdit,CodeChangeSourcePatch,CodeChangeSourcePatchSet,CodeChangeSourcePatchApproval,CodeChangeSourceApplyReceipt,TodoPatchDuplicateClassification,TodoPatchArtifact,TodoPatchApproval,TodoApplyReceipt,TodoApplyResult GroundedGenerationMetadata: Conclusion: TodoProposal: @@ -4489,8 +4765,11 @@ Graph compar... CodeChangeSourceApplyReceipt: TodoPatchDuplicateClassification: TodoPatchArtifact: + TodoPatchApproval: + TodoApplyReceipt: + TodoApplyResult: src/core/types/intent.ts: - e: SourceLineRange,IntentTarget,IntentStatement,IntentSource,IntentEpistemic,IntentLifecycle,IntentGenerationMetadata,IntentRecordMetadata,IntentRecord,IntentRelation,IntentGraph,IntentRecordChange,IntentGraphDiff,Diagnostic,DiagnosticReport + e: SourceLineRange,IntentTarget,IntentStatement,IntentSource,IntentEpistemic,IntentLifecycle,IntentGenerationMetadata,IntentRecordMetadata,IntentRecord,IntentRelation,IntentGraph,IntentRecordChange,IntentGraphDiff SourceLineRange: IntentTarget: IntentStatement: @@ -4504,8 +4783,6 @@ Graph compar... IntentGraph: IntentRecordChange: IntentGraphDiff: - Diagnostic: - DiagnosticReport: src/core/types/diagnostics.ts: e: Diagnostic,DiagnosticReport Diagnostic: @@ -4535,6 +4812,7 @@ Graph compar... SemanticRerankResult: SemanticRerankGenerationInput: src/synthesis/code-change-plan/index.ts: + src/synthesis/code-change-plan/implementation.ts: src/interfaces/governed-intake.proto: src/interfaces/intake-schemas/command-v1.schema.json: src/interfaces/intake-schemas/result-v1.schema.json: diff --git a/project/mermaid.export b/project/mermaid.export index b18415d..efdfbc2 100644 --- a/project/mermaid.export +++ b/project/mermaid.export @@ -870,7 +870,7 @@ flowchart TD src__core__text__matches["matches"] src__core__text__detectPolarity("detectPolarity CC=8") src__core__text__stripped["stripped"] - src__core__text__normalized{{normalized CC=30}} + src__core__text__normalized["normalized"] src__core__text__normalizeToken["normalizeToken"] src__core__text__keywords["keywords"] src__core__text__GENERIC_TOPICS["GENERIC_TOPICS"] @@ -1129,28 +1129,28 @@ flowchart TD src__graph__diff__metricCard["metricCard"] src__graph__diff__escapeXml["escapeXml"] src__graph__diff__truncate["truncate"] - src__graph__linker__indexKeywords["indexKeywords"] - src__graph__linker__jaccard["jaccard"] - src__graph__linker__intersection["intersection"] - src__graph__linker__linkIntentRecords["linkIntentRecords"] - src__graph__linker__records["records"] - src__graph__linker__byId["byId"] - src__graph__linker__keywordIndex["keywordIndex"] - src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"] - src__graph__linker__candidatePairs["candidatePairs"] - src__graph__linker__resolvableBasenames["resolvableBasenames"] - src__graph__linker__left["left"] - src__graph__linker__right["right"] - src__graph__linker__evidence["evidence"] - src__graph__linker__directed["directed"] - src__graph__linker__deduplicateRecords["deduplicateRecords"] - src__graph__linker__existing["existing"] - src__graph__linker__collectCandidatePairs("collectCandidatePairs CC=10") - src__graph__linker__buckets("buckets CC=10") - src__graph__linker__astIds("astIds CC=10") - src__graph__linker__moduleAstIds("moduleAstIds CC=10") - src__graph__linker__declarationAstIds("declarationAstIds CC=10") - src__graph__linker__configurationIds("configurationIds CC=10") + src__graph__linker_relations__determineRelation["determineRelation"] + src__graph__linker_relations__textScore["textScore"] + src__graph__linker_relations__sourceRelation["sourceRelation"] + src__graph__linker_relations__relationForSourceKinds["relationForSourceKinds"] + src__graph__linker_relations__relation["relation"] + src__graph__linker_relations__matchSourceRule["matchSourceRule"] + src__graph__linker_relations__orientRelation["orientRelation"] + src__graph__symbol_resolution__buildSymbolResolutionIndex["buildSymbolResolutionIndex"] + src__graph__symbol_resolution__byAlias("byAlias CC=8") + src__graph__symbol_resolution__collectAstCandidates("collectAstCandidates CC=8") + src__graph__symbol_resolution__candidate["candidate"] + src__graph__symbol_resolution__values["values"] + src__graph__symbol_resolution__buildAstCandidate["buildAstCandidate"] + src__graph__symbol_resolution__uniqueSymbols["uniqueSymbols"] + src__graph__symbol_resolution__sortCandidates["sortCandidates"] + src__graph__symbol_resolution__collectNlResolutions["collectNlResolutions"] + src__graph__symbol_resolution__byNlRecord["byNlRecord"] + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair("hasResolvedNlAstSymbolPair CC=10") + src__graph__symbol_resolution__nl["nl"] + src__graph__symbol_resolution__ast["ast"] + src__graph__symbol_resolution__resolveSymbol("resolveSymbol CC=8") + src__graph__symbol_resolution__matched["matched"] end subgraph src__interfaces src__interfaces__a2a_card__sendAgentCard["sendAgentCard"] @@ -1482,21 +1482,32 @@ flowchart TD end subgraph src__semantic src__semantic__reranker_llm__SemanticRerankerRequiredError__super["super"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates{{rerankSemanticCandidates CC=25}} + src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates["rerankSemanticCandidates"] src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticCandidateSet["assertSemanticCandidateSet"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__validateCandidateSetSize["validateCandidateSetSize"] src__semantic__reranker_llm__SemanticRerankerRequiredError__model["model"] src__semantic__reranker_llm__SemanticRerankerRequiredError__modelRevision["modelRevision"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult["assertSemanticRerankResult"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__cached["cached"] src__semantic__reranker_llm__SemanticRerankerRequiredError__client["client"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__records("records CC=9") src__semantic__reranker_llm__SemanticRerankerRequiredError__payload["payload"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__response("response CC=8") + src__semantic__reranker_llm__SemanticRerankerRequiredError__response["response"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__resolveRerankerModel["resolveRerankerModel"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__resolveModelRevision["resolveModelRevision"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__revision["revision"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__resolveCachedResult["resolveCachedResult"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankResult["assertSemanticRerankResult"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__assertRerankerClient["assertRerankerClient"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshotAvailable["assertTrackedSnapshotAvailable"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__buildRerankerPayload["buildRerankerPayload"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__records("records CC=9") + src__semantic__reranker_llm__SemanticRerankerRequiredError__messagesForCandidates["messagesForCandidates"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__callReranker["callReranker"] src__semantic__reranker_llm__SemanticRerankerRequiredError__metadata["metadata"] + src__semantic__reranker_llm__SemanticRerankerRequiredError__buildRerankResult["buildRerankResult"] src__semantic__reranker_llm__SemanticRerankerRequiredError__assertSemanticRerankerResponse["assertSemanticRerankerResponse"] src__semantic__reranker_llm__SemanticRerankerRequiredError__execFileAsync["execFileAsync"] src__semantic__reranker_llm__SemanticRerankerRequiredError__assertTrackedSnapshot["assertTrackedSnapshot"] src__semantic__reranker_llm__SemanticRerankerRequiredError__root["root"] - src__semantic__reranker_llm__SemanticRerankerRequiredError__revision["revision"] src__semantic__reranker_llm__SemanticRerankerRequiredError__head["head"] src__semantic__reranker_llm__SemanticRerankerRequiredError__resolvedRevision["resolvedRevision"] src__semantic__reranker_llm__SemanticRerankerRequiredError__tracked("tracked CC=9") @@ -1512,97 +1523,86 @@ flowchart TD src__semantic__reranker_response__response["response"] src__semantic__reranker__result__createSemanticRerankResult["createSemanticRerankResult"] src__semantic__reranker__result__decisions["decisions"] - src__semantic__reranker__result__assertSemanticRerankResult{{assertSemanticRerankResult CC=21}} - src__semantic__reranker__result__candidates["candidates"] - src__semantic__reranker__result__records{{records CC=16}} - src__semantic__reranker__result__seenDecisions{{seenDecisions CC=16}} - src__semantic__reranker__result__acceptedDeclarations{{acceptedDeclarations CC=16}} + src__semantic__reranker__result__assertSemanticRerankResult["assertSemanticRerankResult"] + src__semantic__reranker__result__seenDecisions["seenDecisions"] + src__semantic__reranker__result__acceptedDeclarations["acceptedDeclarations"] src__semantic__reranker__result__candidate["candidate"] + src__semantic__reranker__result__assertSemanticRerankHeader["assertSemanticRerankHeader"] + src__semantic__reranker__result__createCandidateAndRecordIndex["createCandidateAndRecordIndex"] + src__semantic__reranker__result__validateSemanticDecisionCandidate["validateSemanticDecisionCandidate"] + src__semantic__reranker__result__validateSemanticDecisionDecision["validateSemanticDecisionDecision"] + src__semantic__reranker__result__validateSemanticDecisionEvidence["validateSemanticDecisionEvidence"] src__semantic__reranker__result__citations["citations"] src__semantic__reranker__result__record["record"] + src__semantic__reranker__result__validateDecisionEvidenceScope["validateDecisionEvidenceScope"] + src__semantic__reranker__result__validateSemanticDecisionVerdict["validateSemanticDecisionVerdict"] + src__semantic__reranker__result__assertRerankResultHash["assertRerankResultHash"] src__semantic__reranker__result__expectedHash["expectedHash"] src__semantic__reranker__result__applyAcceptedSemanticRelations["applyAcceptedSemanticRelations"] + src__semantic__reranker__result__candidates["candidates"] src__semantic__reranker__result__added["added"] - src__semantic__reranker__result__assertSemanticVerdictReason["assertSemanticVerdictReason"] - src__semantic__reranker__result__allowedVerdicts["allowedVerdicts"] - src__semantic__reranker__result__allowedReasons["allowedReasons"] - src__semantic__reranker__candidate__createSemanticCandidateSet("createSemanticCandidateSet CC=8") - src__semantic__reranker__candidate__grouped["grouped"] - src__semantic__reranker__candidate__values["values"] - src__semantic__reranker__candidate__assertSemanticCandidateSet{{assertSemanticCandidateSet CC=27}} - src__semantic__reranker__candidate__records("records CC=14") - src__semantic__reranker__candidate__seenIds("seenIds CC=14") - src__semantic__reranker__candidate__seenPairs("seenPairs CC=14") - src__semantic__reranker__candidate__byDeclaration("byDeclaration CC=14") - src__semantic__reranker__candidate__declaration["declaration"] - src__semantic__reranker__candidate__module["module"] - src__semantic__reranker__candidate__existing["existing"] - src__semantic__reranker__candidate__expectedHash["expectedHash"] - src__semantic__reranker__candidate__comparePair["comparePair"] - src__semantic__reranker__validation__requiredText["requiredText"] - src__semantic__reranker__validation__validateRetrieval["validateRetrieval"] end subgraph src__services - src__services__actions__executeAction{{executeAction CC=83}} - src__services__actions__root{{root CC=83}} + src__services__actions__executeAction["executeAction"] + src__services__actions__root["root"] + src__services__actions__handler["handler"] + src__services__actions__executeExtractNlAction["executeExtractNlAction"] src__services__actions__file["file"] src__services__actions__text["text"] + src__services__actions__executeExtractGitAction["executeExtractGitAction"] + src__services__actions__executeExtractAstAction["executeExtractAstAction"] + src__services__actions__executeExtractConfigAction["executeExtractConfigAction"] + src__services__actions__executeExtractMarkdownAction["executeExtractMarkdownAction"] + src__services__actions__executeExtractDocsAction["executeExtractDocsAction"] + src__services__actions__executeExtractCommunicationAction["executeExtractCommunicationAction"] + src__services__actions__executeAnalyzeCommunicationAction["executeAnalyzeCommunicationAction"] src__services__actions__analysis["analysis"] + src__services__actions__executeLinkAction["executeLinkAction"] src__services__actions__records["records"] + src__services__actions__executeDiagnoseAction["executeDiagnoseAction"] src__services__actions__graph["graph"] + src__services__actions__executeSummarizeAction["executeSummarizeAction"] src__services__actions__diagnostics["diagnostics"] + src__services__actions__executeProposeTodoAction["executeProposeTodoAction"] src__services__actions__result["result"] src__services__actions__output["output"] + src__services__actions__executeRenderTodoAction["executeRenderTodoAction"] src__services__actions__synthesis["synthesis"] src__services__actions__todoPath["todoPath"] src__services__actions__patchPath["patchPath"] src__services__actions__auditPath["auditPath"] src__services__actions__todoContent["todoContent"] src__services__actions__rendered["rendered"] + src__services__actions__executeApplyTodoAction["executeApplyTodoAction"] src__services__actions__receiptPath["receiptPath"] + src__services__actions__executeProposeCodeChangeAction("executeProposeCodeChangeAction CC=10") src__services__actions__conclusions["conclusions"] src__services__actions__proposals["proposals"] + src__services__actions__executeRenderCodeChangeAction("executeRenderCodeChangeAction CC=8") src__services__actions__planSet["planSet"] src__services__actions__review["review"] + src__services__actions__executeProposeSourcePatchAction["executeProposeSourcePatchAction"] src__services__actions__plan["plan"] src__services__actions__unifiedDiffs["unifiedDiffs"] src__services__actions__patch["patch"] + src__services__actions__executeApplySourcePatchAction["executeApplySourcePatchAction"] + src__services__actions__executeEvaluateCodeChangeAction["executeEvaluateCodeChangeAction"] src__services__actions__beforeGraph("beforeGraph CC=8") src__services__actions__beforeDiagnostics("beforeDiagnostics CC=8") src__services__actions__afterGraph("afterGraph CC=8") src__services__actions__afterDiagnostics("afterDiagnostics CC=8") + src__services__actions__executeCloseCodeChangeAction("executeCloseCodeChangeAction CC=13") src__services__actions__value["value"] + src__services__actions__executeDiffAction["executeDiffAction"] src__services__actions__beforeInput["beforeInput"] src__services__actions__afterInput["afterInput"] src__services__actions__before["before"] src__services__actions__after["after"] src__services__actions__diff["diff"] src__services__actions__svg["svg"] + src__services__actions__executeDiffFilesAction["executeDiffFilesAction"] src__services__actions__beforePath["beforePath"] src__services__actions__afterPath["afterPath"] - src__services__actions__view["view"] - src__services__actions__filterCommunicationGraph["filterCommunicationGraph"] - src__services__actions__filter["filter"] - src__services__actions__parseCommunicationGraphFilter["parseCommunicationGraphFilter"] - src__services__actions__participant["participant"] - src__services__actions__role["role"] - src__services__actions__ticket["ticket"] - src__services__actions__communicationOnly["communicationOnly"] - src__services__actions__matchesCommunicationFilter["matchesCommunicationFilter"] - src__services__actions__matchesParticipant["matchesParticipant"] - src__services__actions__matchesRole["matchesRole"] - src__services__actions__matchesTicket["matchesTicket"] - src__services__actions__nlModeValue["nlModeValue"] - src__services__actions__llmModeValue["llmModeValue"] - src__services__actions__taskSynthesisMode["taskSynthesisMode"] - src__services__actions__summaryModeValue["summaryModeValue"] - src__services__actions__pipelineTaskMode["pipelineTaskMode"] - src__services__actions__withTextDiffViews["withTextDiffViews"] - src__services__actions__title["title"] - src__services__actions__readGraphInput["readGraphInput"] - src__services__actions__safePath["safePath"] - src__services__actions__readActionObject["readActionObject"] - src__services__actions__resolveRoot["resolveRoot"] end subgraph src__summary src__summary__payload__compactSummaryPayload("compactSummaryPayload CC=12") @@ -1663,20 +1663,29 @@ flowchart TD src__synthesis__task_synthesis_payload__groundedDiagnostics["groundedDiagnostics"] src__synthesis__task_synthesis_payload__compactRecord["compactRecord"] src__synthesis__task_synthesis_payload__compareDiagnostics["compareDiagnostics"] - src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS{{NON_SOURCE_DIR_SEGMENTS CC=38}} - src__synthesis__code_change_path__BINARY_EXTENSIONS{{BINARY_EXTENSIONS CC=38}} - src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES{{GENERATED_ANALYSIS_BASENAMES CC=38}} - src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES{{T2C_ARTIFACT_BASENAMES CC=38}} - src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES{{EXTENSIONLESS_SOURCE_BASENAMES CC=38}} - src__synthesis__code_change_path__isPlannablePath{{isPlannablePath CC=38}} + src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS["NON_SOURCE_DIR_SEGMENTS"] + src__synthesis__code_change_path__BINARY_EXTENSIONS["BINARY_EXTENSIONS"] + src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES["GENERATED_ANALYSIS_BASENAMES"] + src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES["T2C_ARTIFACT_BASENAMES"] + src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES["EXTENSIONLESS_SOURCE_BASENAMES"] + src__synthesis__code_change_path__isUsefulCodeChangePath["isUsefulCodeChangePath"] + src__synthesis__code_change_path__isPlannablePath["isPlannablePath"] src__synthesis__code_change_path__normalized["normalized"] src__synthesis__code_change_path__segments["segments"] src__synthesis__code_change_path__lowerSegments["lowerSegments"] src__synthesis__code_change_path__basename["basename"] + src__synthesis__code_change_path__normalizePlannablePath["normalizePlannablePath"] + src__synthesis__code_change_path__isCandidatePathSyntax["isCandidatePathSyntax"] + src__synthesis__code_change_path__splitPathSegments["splitPathSegments"] + src__synthesis__code_change_path__isInvalidSegmentShape["isInvalidSegmentShape"] + src__synthesis__code_change_path__isConcretePath["isConcretePath"] + src__synthesis__code_change_path__hasShellPattern["hasShellPattern"] + src__synthesis__code_change_path__isDisallowedSegment["isDisallowedSegment"] + src__synthesis__code_change_path__isPlannableBasename("isPlannableBasename CC=11") src__synthesis__code_change_path__lowerBasename["lowerBasename"] src__synthesis__code_change_path__dot["dot"] src__synthesis__code_change_path__ext["ext"] - src__synthesis__code_change_path__isUsefulCodeChangePath["isUsefulCodeChangePath"] + src__synthesis__code_change_path__isGeneratedArtifactPath("isGeneratedArtifactPath CC=10") src__synthesis__task_synthesis_materialize__materializeTaskSynthesisResponse["materializeTaskSynthesisResponse"] src__synthesis__task_synthesis_materialize__parsed["parsed"] src__synthesis__task_synthesis_materialize__conclusionKeys["conclusionKeys"] @@ -1706,15 +1715,6 @@ flowchart TD src__synthesis__task_synthesis_materialize__target["target"] src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria["normalizeAcceptanceCriteria"] src__synthesis__task_synthesis_materialize__criteria["criteria"] - src__synthesis__task_synthesis_materialize__source["source"] - src__synthesis__task_synthesis_materialize__assertProposalEvidenceMatchesConclusions["assertProposalEvidenceMatchesConclu"] - src__synthesis__task_synthesis_materialize__byId["byId"] - src__synthesis__task_synthesis_materialize__cited["cited"] - src__synthesis__task_synthesis_materialize__diagnostics["diagnostics"] - src__synthesis__task_synthesis_materialize__records["records"] - src__synthesis__todo_patch__diagnosticReportFingerprint["diagnosticReportFingerprint"] - src__synthesis__todo_patch__createTodoPatch("createTodoPatch CC=8") - src__synthesis__todo_patch__expectedValidation["expectedValidation"] end subgraph src__tf src__tf__classifier__dynamicImport["dynamicImport"] @@ -1790,7 +1790,11 @@ flowchart TD src__watch__watcher__finish["finish"] end subgraph src__web - src__web__diff_ui__diffUiHtml{{diffUiHtml CC=52}} + src__web__diff_ui__diffUiStyles["diffUiStyles"] + src__web__diff_ui__diffUiRunPanel["diffUiRunPanel"] + src__web__diff_ui__diffUiFiltersPanel["diffUiFiltersPanel"] + src__web__diff_ui__diffUiBodyMarkup["diffUiBodyMarkup"] + src__web__diff_ui__diffUiScriptMarkup{{diffUiScriptMarkup CC=46}} src__web__diff_ui__byId["byId"] src__web__diff_ui__requestHeaders["requestHeaders"] src__web__diff_ui__formatBytes["formatBytes"] @@ -1799,6 +1803,8 @@ flowchart TD src__web__diff_ui__fillSelect["fillSelect"] src__web__diff_ui__loadRuns("loadRuns CC=12") src__web__diff_ui__compareGraphs{{compareGraphs CC=15}} + src__web__diff_ui__diffUiTemplate["diffUiTemplate"] + src__web__diff_ui__diffUiHtml["diffUiHtml"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -2294,6 +2300,11 @@ flowchart TD src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings + src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText @@ -2379,29 +2390,24 @@ flowchart TD src__graph__diff__changedFieldPaths --> src__graph__diff__isObject src__graph__diff__compareRelations --> src__graph__diff__relationKey src__graph__diff__metricCard --> src__graph__diff__escapeXml - src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords - src__graph__linker__linkIntentRecords --> src__graph__linker__indexKeywords - src__graph__linker__linkIntentRecords --> src__graph__linker__collectCandidatePairs - src__graph__linker__linkIntentRecords --> src__graph__linker__indexResolvableBasenames - src__graph__linker__linkIntentRecords --> src__graph__linker__scorePair - src__graph__linker__linkIntentRecords --> src__graph__linker__determineRelation - src__graph__linker__records --> src__graph__linker__scorePair - src__graph__linker__records --> src__graph__linker__determineRelation - src__graph__linker__byId --> src__graph__linker__set - src__graph__linker__keywordIndex --> src__graph__linker__scorePair - src__graph__linker__keywordIndex --> src__graph__linker__determineRelation - src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair - src__graph__linker__symbolResolutionIndex --> src__graph__linker__determineRelation - src__graph__linker__candidatePairs --> src__graph__linker__scorePair - src__graph__linker__candidatePairs --> src__graph__linker__determineRelation - src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair - src__graph__linker__resolvableBasenames --> src__graph__linker__determineRelation - src__graph__linker__deduplicateRecords --> src__graph__linker__set - src__graph__linker__deduplicateRecords --> src__graph__linker__values - src__graph__linker__collectCandidatePairs --> src__graph__linker__indexTargetBuckets - src__graph__linker__collectCandidatePairs --> src__graph__linker__indexKeywordBuckets + src__graph__linker_relations__determineRelation --> src__graph__linker_relations__relationForSourceKinds + src__graph__linker_relations__relationForSourceKinds --> src__graph__linker_relations__matchSourceRule + src__graph__linker_relations__matchSourceRule --> src__graph__linker_relations__orientRelation + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectAstCandidates + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__sortCandidates + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectNlResolutions + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__uniqueSymbols + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__buildAstCandidate + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__uniqueSymbols + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__buildAstCandidate + src__graph__symbol_resolution__sortCandidates --> src__graph__symbol_resolution__values + src__graph__symbol_resolution__collectNlResolutions --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration classDef highCC fill:#ff6b6b,stroke:#c92a2a,color:#fff classDef medCC fill:#ffd43b,stroke:#f08c00,color:#000 - class examples__backend__src__server__handleRequest,src__extractors__communication_file_helpers__buildLocalWarnings,src__services__actions__executeAction,src__services__actions__root,src__core__text__normalized,src__core__text__inferObject,src__core__io__walkFiles,src__web__diff_ui__diffUiHtml,src__web__diff_ui__compareGraphs,src__semantic__reranker_llm__SemanticRerankerRequiredError__rerankSemanticCandidates,src__semantic__reranker__result__assertSemanticRerankResult,src__semantic__reranker__result__records,src__semantic__reranker__result__seenDecisions,src__semantic__reranker__result__acceptedDeclarations,src__semantic__reranker__candidate__assertSemanticCandidateSet,src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS,src__synthesis__code_change_path__BINARY_EXTENSIONS,src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES,src__synthesis__code_change_path__T2C_ARTIFACT_BASENAMES,src__synthesis__code_change_path__EXTENSIONLESS_SOURCE_BASENAMES,src__synthesis__code_change_path__isPlannablePath,src__synthesis__code_change_plan__implementation__proposeCodeChangePlans,src__synthesis__code_change_plan__implementation__paths,src__synthesis__code_change_plan__implementation__assertCodeChangeReviewPatch,src__synthesis__code_change_plan__implementation__assertCodeChangeSourcePatch,src__synthesis__code_change_plan__implementation__assertCodeChangeSourcePatchSet,src__synthesis__code_change_plan__implementation__normalizeUnifiedDiff,src__synthesis__code_change_plan__implementation__applyCodeChangeSourcePatch,src__synthesis__code_change_plan__implementation__applyUnifiedDiffToText,src__synthesis__code_change_plan__implementation__cursor highCC + class examples__backend__src__server__handleRequest,src__core__record__generationMetadata,src__web__diff_ui__diffUiScriptMarkup,src__web__diff_ui__compareGraphs,src__llm__openrouter__OpenRouterClient__timeout,src__llm__openrouter__OpenRouterClient__request,src__interfaces__a2a_message__parseCommand,src__interfaces__a2a_history__runListItem,src__diff__text__myers,src__diff__text__n,src__diff__text__m,src__diff__text__max,src__diff__text__offset,src__diff__text__y,src__diff__text__backtrack,src__diff__text__x,src__diff__reality__buildRealityView,src__diff__reality__resolveStatus,src__diff__reality__renderRealitySvg,src__diff__git__BINARY_EXTENSIONS,src__diff__git__collectGitDiff,src__pipeline__run__runPipeline,src__pipeline__run__persistFailedRun,src__evaluation__gold_types__assertLinkingCohorts,src__evaluation__gold_types__labels,src__evaluation__gold_types__modules,src__evaluation__gold_cases__evaluateRerankingCase,src__evaluation__gold_cases__buildFixtureRecords,src__evaluation__gold_cases__labels,src__evaluation__gold_cases__records highCC class rust_ast__src__main__collect_files,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__cli__main,src__cli__handleRenderTodo,src__cli__handleApplyTodo,src__cli__options,src__cli__formatWatchEvent,src__cli__stamp,src__cli__handleDiff,src__cli__handleReality,src__cli__handleCommunication,src__cli__handleIntake,src__cli__intakeExitCode,src__cli__parseArgs,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk,src__extractors__changelog__extractChangelog,src__extractors__changelog__changelogAction medCC diff --git a/project/planfile-tickets.yaml b/project/planfile-tickets.yaml index b43fc0f..bb5f2ff 100644 --- a/project/planfile-tickets.yaml +++ b/project/planfile-tickets.yaml @@ -1,5 +1,5 @@ source: code2llm -# generated in 0.17s +# generated in 0.18s schema: code2llm.planfile_tickets.v1 project_root: /home/tom/github/semcod/todo2code tickets: @@ -160,40 +160,6 @@ tickets: files: - src/communication/identity.ts dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.text.inferObject (CC=34)' - description: 'code2llm reports `src.core.text.inferObject` at `src/core/text.ts:466` - with cyclomatic complexity 34 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/text.ts - dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.inferObject -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.text.normalized (CC=30)' - description: 'code2llm reports `src.core.text.normalized` at `src/core/text.ts:467` - with cyclomatic complexity 30 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/text.ts - dedupe_key: code2llm:cc:src/core/text.ts:src.core.text.normalized - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)' description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153` @@ -404,270 +370,9 @@ tickets: - src/pipeline/run.ts dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates - (CC=25)' - description: 'code2llm reports `src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates` - at `src/semantic/reranker-llm.ts:38` with cyclomatic complexity 25 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/semantic/reranker-llm.ts - dedupe_key: code2llm:cc:src/semantic/reranker-llm.ts:src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.candidate.assertSemanticCandidateSet - (CC=27)' - description: 'code2llm reports `src.semantic.reranker.candidate.assertSemanticCandidateSet` - at `src/semantic/reranker/candidate.ts:98` with cyclomatic complexity 27 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/semantic/reranker/candidate.ts - dedupe_key: code2llm:cc:src/semantic/reranker/candidate.ts:src.semantic.reranker.candidate.assertSemanticCandidateSet -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.services.actions.executeAction (CC=83)' - description: 'code2llm reports `src.services.actions.executeAction` at `src/services/actions.ts:72` - with cyclomatic complexity 83 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/services/actions.ts - dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.executeAction -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.services.actions.root (CC=83)' - description: 'code2llm reports `src.services.actions.root` at `src/services/actions.ts:73` - with cyclomatic complexity 83 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/services/actions.ts - dedupe_key: code2llm:cc:src/services/actions.ts:src.services.actions.root -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.BINARY_EXTENSIONS - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.BINARY_EXTENSIONS` - at `src/synthesis/code-change-path.ts:44` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.BINARY_EXTENSIONS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES` - at `src/synthesis/code-change-path.ts:127` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.EXTENSIONLESS_SOURCE_BASENAMES -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES` - at `src/synthesis/code-change-path.ts:79` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.GENERATED_ANALYSIS_BASENAMES -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS` - at `src/synthesis/code-change-path.ts:15` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.NON_SOURCE_DIR_SEGMENTS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES` - at `src/synthesis/code-change-path.ts:110` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.T2C_ARTIFACT_BASENAMES -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-path.isPlannablePath - (CC=38)' - description: 'code2llm reports `src.synthesis.code-change-path.isPlannablePath` - at `src/synthesis/code-change-path.ts:138` with cyclomatic complexity 38 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-path.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-path.ts:src.synthesis.code-change-path.isPlannablePath -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch - (CC=41)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch` - at `src/synthesis/code-change-plan/implementation.ts:1031` with cyclomatic complexity - 41 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyCodeChangeSourcePatch -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText - (CC=47)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText` - at `src/synthesis/code-change-plan/implementation.ts:1222` with cyclomatic complexity - 47 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.applyUnifiedDiffToText -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch - (CC=47)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch` - at `src/synthesis/code-change-plan/implementation.ts:790` with cyclomatic complexity - 47 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatch -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.cursor - (CC=25)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.cursor` - at `src/synthesis/code-change-plan/implementation.ts:1256` with cyclomatic complexity - 25 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.cursor -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiHtml (CC=52)' - description: 'code2llm reports `src.web.diff-ui.diffUiHtml` at `src/web/diff-ui.ts:1` - with cyclomatic complexity 52 (limit 15). + title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiScriptMarkup (CC=46)' + description: 'code2llm reports `src.web.diff-ui.diffUiScriptMarkup` at `src/web/diff-ui.ts:127` + with cyclomatic complexity 46 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -680,11 +385,11 @@ tickets: - refactor files: - src/web/diff-ui.ts - dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiHtml + dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiScriptMarkup - signal: code2llm_god - title: 'Split god module: src/graph/linker.ts' - description: 'code2llm reports `src/graph/linker.ts` as a large module (537 lines, - 4 classes). + title: 'Split god module: src/synthesis/code-change-plan/implementation-helpers.ts' + description: 'code2llm reports `src/synthesis/code-change-plan/implementation-helpers.ts` + as a large module (1148 lines, 16 classes). Split it by responsibility, keep public imports stable, and add focused tests @@ -696,12 +401,12 @@ tickets: - god-module - refactor files: - - src/graph/linker.ts - dedupe_key: code2llm:god:src/graph/linker.ts + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-helpers.ts - signal: code2llm_god - title: 'Split god module: src/synthesis/code-change-plan/implementation.ts' - description: 'code2llm reports `src/synthesis/code-change-plan/implementation.ts` - as a large module (1310 lines, 10 classes). + title: 'Split god module: src/synthesis/code-change-plan/implementation-source-patch.ts' + description: 'code2llm reports `src/synthesis/code-change-plan/implementation-source-patch.ts` + as a large module (694 lines, 5 classes). Split it by responsibility, keep public imports stable, and add focused tests @@ -713,8 +418,8 @@ tickets: - god-module - refactor files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation.ts + - src/synthesis/code-change-plan/implementation-source-patch.ts + dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-source-patch.ts - signal: code2llm_smell_god_function title: 'Address code smell: God Function: decode_envelope' description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`. @@ -811,13 +516,13 @@ tickets: - src/cli.ts dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation' - description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation` - in `src/synthesis/code-change-plan/implementation.ts:1`. + title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-helpers' + description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-helpers` + in `src/synthesis/code-change-plan/implementation-helpers.ts:1`. - Module ''src.synthesis.code-change-plan.implementation'' is too large (148 functions, - 10 classes). Consider splitting into sub-modules. + Module ''src.synthesis.code-change-plan.implementation-helpers'' is too large + (147 functions, 16 classes). Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -828,9 +533,9 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1:God - Module: src.synthesis.code-change-plan.implementation' + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1:God + Module: src.synthesis.code-change-plan.implementation-helpers' - signal: code2llm_cc title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest (CC=16)' @@ -1059,23 +764,6 @@ tickets: files: - src/communication/intake-protobuf.ts dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.io.walkFiles (CC=15)' - description: 'code2llm reports `src.core.io.walkFiles` at `src/core/io.ts:87` with - cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/io.ts - dedupe_key: code2llm:cc:src/core/io.ts:src.core.io.walkFiles - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)' description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141` @@ -1418,25 +1106,6 @@ tickets: files: - src/evaluation/gold-types.ts dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.extractors.communication-file-helpers.buildLocalWarnings - (CC=18)' - description: 'code2llm reports `src.extractors.communication-file-helpers.buildLocalWarnings` - at `src/extractors/communication-file-helpers.ts:254` with cyclomatic complexity - 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/extractors/communication-file-helpers.ts - dedupe_key: code2llm:cc:src/extractors/communication-file-helpers.ts:src.extractors.communication-file-helpers.buildLocalWarnings - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)' description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107` @@ -1508,11 +1177,10 @@ tickets: - src/pipeline/run.ts dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.acceptedDeclarations - (CC=16)' - description: 'code2llm reports `src.semantic.reranker.result.acceptedDeclarations` - at `src/semantic/reranker/result.ts:112` with cyclomatic complexity 16 (limit - 15). + title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS + (CC=19)' + description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144` + with cyclomatic complexity 19 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1524,13 +1192,13 @@ tickets: - complexity - refactor files: - - src/semantic/reranker/result.ts - dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.acceptedDeclarations + - src/watch/watcher.ts + dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.assertSemanticRerankResult - (CC=21)' - description: 'code2llm reports `src.semantic.reranker.result.assertSemanticRerankResult` - at `src/semantic/reranker/result.ts:91` with cyclomatic complexity 21 (limit 15). + title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS + (CC=19)' + description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145` + with cyclomatic complexity 19 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1542,178 +1210,12 @@ tickets: - complexity - refactor files: - - src/semantic/reranker/result.ts - dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.assertSemanticRerankResult + - src/watch/watcher.ts + dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.records (CC=16)' - description: 'code2llm reports `src.semantic.reranker.result.records` at `src/semantic/reranker/result.ts:110` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/semantic/reranker/result.ts - dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.records -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.semantic.reranker.result.seenDecisions - (CC=16)' - description: 'code2llm reports `src.semantic.reranker.result.seenDecisions` at `src/semantic/reranker/result.ts:111` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/semantic/reranker/result.ts - dedupe_key: code2llm:cc:src/semantic/reranker/result.ts:src.semantic.reranker.result.seenDecisions -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch - (CC=23)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch` - at `src/synthesis/code-change-plan/implementation.ts:626` with cyclomatic complexity - 23 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeReviewPatch -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet - (CC=18)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet` - at `src/synthesis/code-change-plan/implementation.ts:896` with cyclomatic complexity - 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.assertCodeChangeSourcePatchSet -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff - (CC=17)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff` - at `src/synthesis/code-change-plan/implementation.ts:983` with cyclomatic complexity - 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.normalizeUnifiedDiff -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.paths - (CC=16)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.paths` - at `src/synthesis/code-change-plan/implementation.ts:830` with cyclomatic complexity - 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.paths -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.synthesis.code-change-plan.implementation.proposeCodeChangePlans - (CC=17)' - description: 'code2llm reports `src.synthesis.code-change-plan.implementation.proposeCodeChangePlans` - at `src/synthesis/code-change-plan/implementation.ts:109` with cyclomatic complexity - 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: code2llm:cc:src/synthesis/code-change-plan/implementation.ts:src.synthesis.code-change-plan.implementation.proposeCodeChangePlans -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS - (CC=19)' - description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144` - with cyclomatic complexity 19 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - (CC=19)' - description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145` - with cyclomatic complexity 19 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)' - description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147` - with cyclomatic complexity 19 (limit 15). + title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)' + description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147` + with cyclomatic complexity 19 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1729,7 +1231,7 @@ tickets: dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)' - description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:45` + description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:139` with cyclomatic complexity 15 (limit 15). @@ -1745,12 +1247,12 @@ tickets: - src/web/diff-ui.ts dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: action, self, payload' - description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:249`. + title: 'Address code smell: Data Clump: root, self, excludes, patterns' + description: 'code2llm reports `Data Clump: root, self, excludes, patterns` in `sdk/python/todo2code/client.py:354`. - Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, - sdk.python.todo2code.client.T2CClient.call. + Arguments (root, self, excludes, patterns) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1762,15 +1264,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: - action, self, payload' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: + root, self, excludes, patterns' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: action, self, payload' - description: 'code2llm reports `Data Clump: action, self, payload` in `sdk/python/todo2code/client.py:261`. + title: 'Address code smell: Data Clump: root, self, excludes, patterns' + description: 'code2llm reports `Data Clump: root, self, excludes, patterns` in `sdk/python/todo2code/client.py:362`. - Arguments (action, self, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, - sdk.python.todo2code.client.T2CClient.call. + Arguments (root, self, excludes, patterns) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1782,15 +1284,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: - action, self, payload' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: + root, self, excludes, patterns' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: excludes, self, patterns, root' - description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:354`. + title: 'Address code smell: Data Clump: root, self, file, nl_mode' + description: 'code2llm reports `Data Clump: root, self, file, nl_mode` in `sdk/python/todo2code/client.py:307`. - Arguments (excludes, self, patterns, root) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. + Arguments (root, self, file, nl_mode) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1802,15 +1304,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: - excludes, self, patterns, root' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: + root, self, file, nl_mode' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: excludes, self, patterns, root' - description: 'code2llm reports `Data Clump: excludes, self, patterns, root` in `sdk/python/todo2code/client.py:362`. + title: 'Address code smell: Data Clump: root, self, file, nl_mode' + description: 'code2llm reports `Data Clump: root, self, file, nl_mode` in `sdk/python/todo2code/client.py:312`. - Arguments (excludes, self, patterns, root) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. + Arguments (root, self, file, nl_mode) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1822,15 +1324,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: - excludes, self, patterns, root' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: + root, self, file, nl_mode' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: file, nl_mode, self, root' - description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:307`. + title: 'Address code smell: Data Clump: self, action, payload' + description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`. - Arguments (file, nl_mode, self, root) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. + Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + sdk.python.todo2code.client.T2CClient.call. Make the smallest refactor that removes the smell and run local tests.' @@ -1842,15 +1344,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: - file, nl_mode, self, root' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: + self, action, payload' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: file, nl_mode, self, root' - description: 'code2llm reports `Data Clump: file, nl_mode, self, root` in `sdk/python/todo2code/client.py:312`. + title: 'Address code smell: Data Clump: self, action, payload' + description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`. - Arguments (file, nl_mode, self, root) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. + Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + sdk.python.todo2code.client.T2CClient.call. Make the smallest refactor that removes the smell and run local tests.' @@ -1862,15 +1364,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: - file, nl_mode, self, root' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: + self, action, payload' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo' - description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root, + title: 'Address code smell: Data Clump: self, root, changelog, markdown_mode, todo' + description: 'code2llm reports `Data Clump: self, root, changelog, markdown_mode, todo` in `sdk/python/todo2code/client.py:332`. - Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple + Arguments (self, root, changelog, markdown_mode, todo) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. @@ -1884,14 +1386,14 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: - markdown_mode, changelog, self, root, todo' + self, root, changelog, markdown_mode, todo' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: markdown_mode, changelog, self, root, todo' - description: 'code2llm reports `Data Clump: markdown_mode, changelog, self, root, + title: 'Address code smell: Data Clump: self, root, changelog, markdown_mode, todo' + description: 'code2llm reports `Data Clump: self, root, changelog, markdown_mode, todo` in `sdk/python/todo2code/client.py:341`. - Arguments (markdown_mode, changelog, self, root, todo) are used together in multiple + Arguments (self, root, changelog, markdown_mode, todo) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. @@ -1905,7 +1407,7 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: - markdown_mode, changelog, self, root, todo' + self, root, changelog, markdown_mode, todo' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: MAX_PER_SECTION' description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`. @@ -1946,7 +1448,7 @@ tickets: OBJECT_PLACEHOLDERS' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: PATH_ROOTS' - description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:369`. + description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`. Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0. @@ -1961,7 +1463,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:369:God Function: PATH_ROOTS' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: RPC' description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`. @@ -2059,7 +1561,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyAcceptedSemanticRelations' description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in - `src/semantic/reranker/result.ts:179`. + `src/semantic/reranker/result.ts:226`. Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0. @@ -2074,8 +1576,27 @@ tickets: - god-function files: - src/semantic/reranker/result.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:179:God + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:226:God Function: applyAcceptedSemanticRelations' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: applyCodeChangeSourcePatch' + description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-helpers.ts:572`. + + + Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:572:God + Function: applyCodeChangeSourcePatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyTodoPatch' description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`. @@ -2270,25 +1791,6 @@ tickets: - src/communication/intake-service.ts dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God Function: assertProjectionWritable' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: assertSourceApplyReceipt' - description: 'code2llm reports `God Function: assertSourceApplyReceipt` in `src/synthesis/code-change-plan/implementation.ts:1180`. - - - Function ''assertSourceApplyReceipt'' is oversized: CC=11, fan-out=13, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:1180:God - Function: assertSourceApplyReceipt' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertTodoPatchArtifact' description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`. @@ -2346,24 +1848,6 @@ tickets: - src/synthesis/todo-patch.ts dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function: atomicWrite' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: base' - description: 'code2llm reports `God Function: base` in `src/core/io.ts:92`. - - - Function ''base'' is oversized: CC=11, fan-out=16, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:92:God Function: base' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: baseWorktree' description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`. @@ -2459,11 +1943,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function: body' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: byDeclaration' - description: 'code2llm reports `God Function: byDeclaration` in `src/semantic/reranker/candidate.ts:123`. + title: 'Address code smell: God Function: buildAcceptanceContext' + description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers.ts:325`. - Function ''byDeclaration'' is oversized: CC=14, fan-out=9, mutations=0. + Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2474,9 +1958,9 @@ tickets: - code-smell - god-function files: - - src/semantic/reranker/candidate.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:123:God - Function: byDeclaration' + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:325:God + Function: buildAcceptanceContext' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: byKey' description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`. @@ -2496,25 +1980,6 @@ tickets: - src/communication/llm/implementation-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God Function: byKey' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: candidates' - description: 'code2llm reports `God Function: candidates` in `src/synthesis/code-change-plan/implementation.ts:124`. - - - Function ''candidates'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:124:God - Function: candidates' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: changePaths' description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`. @@ -2572,25 +2037,6 @@ tickets: - src/extractors/todo.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function: classified' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: closeCodeChanges' - description: 'code2llm reports `God Function: closeCodeChanges` in `src/synthesis/code-change-plan/implementation.ts:298`. - - - Function ''closeCodeChanges'' is oversized: CC=6, fan-out=13, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:298:God - Function: closeCodeChanges' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: collect' description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`. @@ -2666,109 +2112,13 @@ tickets: files: - rust-ast/src/main.rs dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function: - collect_files' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: communicationSegments' - description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`. - - - Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/extractors/communication-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God - Function: communicationSegments' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: compareWorkspaceIntent' - description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`. - - - Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/comparison/workspace.ts - dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function: - compareWorkspaceIntent' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: compileSubactorProcessEnvelope' - description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in - `src/operations/subactor.ts:41`. - - - Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/operations/subactor.ts - dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function: - compileSubactorProcessEnvelope' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: conclusions' - description: 'code2llm reports `God Function: conclusions` in `src/synthesis/code-change-plan/implementation.ts:118`. - - - Function ''conclusions'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:118:God - Function: conclusions' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: conclusionsByDiagnostic' - description: 'code2llm reports `God Function: conclusionsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:122`. - - - Function ''conclusionsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:122:God - Function: conclusionsByDiagnostic' + collect_files' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: configurationRecords' - description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`. + title: 'Address code smell: God Function: communicationSegments' + description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`. - Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0. + Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2779,15 +2129,15 @@ tickets: - code-smell - god-function files: - - src/extractors/configuration.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God - Function: configurationRecords' + - src/extractors/communication-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God + Function: communicationSegments' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: createCodeChangeReviewPatch' - description: 'code2llm reports `God Function: createCodeChangeReviewPatch` in `src/synthesis/code-change-plan/implementation.ts:547`. + title: 'Address code smell: God Function: compareWorkspaceIntent' + description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`. - Function ''createCodeChangeReviewPatch'' is oversized: CC=6, fan-out=15, mutations=0. + Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2798,15 +2148,16 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:547:God - Function: createCodeChangeReviewPatch' + - src/comparison/workspace.ts + dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function: + compareWorkspaceIntent' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: createCodeChangeSourcePatch' - description: 'code2llm reports `God Function: createCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation.ts:698`. + title: 'Address code smell: God Function: compileSubactorProcessEnvelope' + description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in + `src/operations/subactor.ts:41`. - Function ''createCodeChangeSourcePatch'' is oversized: CC=13, fan-out=20, mutations=0. + Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2817,16 +2168,15 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:698:God - Function: createCodeChangeSourcePatch' + - src/operations/subactor.ts + dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function: + compileSubactorProcessEnvelope' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: createCodeChangeSourcePatchSet' - description: 'code2llm reports `God Function: createCodeChangeSourcePatchSet` in - `src/synthesis/code-change-plan/implementation.ts:759`. + title: 'Address code smell: God Function: configurationRecords' + description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`. - Function ''createCodeChangeSourcePatchSet'' is oversized: CC=8, fan-out=11, mutations=0. + Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2837,9 +2187,9 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:759:God - Function: createCodeChangeSourcePatchSet' + - src/extractors/configuration.ts + dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God + Function: configurationRecords' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createMarkdownPathResolver' description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`. @@ -3048,25 +2398,6 @@ tickets: - src/extractors/markdown-llm-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God Function: enrichRecord' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: evaluateCodeChangeAcceptance' - description: 'code2llm reports `God Function: evaluateCodeChangeAcceptance` in `src/synthesis/code-change-plan/implementation.ts:224`. - - - Function ''evaluateCodeChangeAcceptance'' is oversized: CC=9, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:224:God - Function: evaluateCodeChangeAcceptance' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: evaluateDiagnosticsCase' description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:182`. @@ -3125,11 +2456,13 @@ tickets: dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function: exchange' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: extensions' - description: 'code2llm reports `God Function: extensions` in `src/core/io.ts:89`. + title: 'Address code smell: God Function: executeAnalyzeCommunicationAction' + description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction` + in `src/services/actions.ts:158`. - Function ''extensions'' is oversized: CC=11, fan-out=16, mutations=0. + Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18, + mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -3140,8 +2473,47 @@ tickets: - code-smell - god-function files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:89:God Function: extensions' + - src/services/actions.ts + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:158:God Function: + executeAnalyzeCommunicationAction' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: executeCloseCodeChangeAction' + description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:413`. + + + Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/services/actions.ts + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:413:God Function: + executeCloseCodeChangeAction' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: executePipelineAction' + description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:556`. + + + Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/services/actions.ts + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:556:God Function: + executePipelineAction' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractAstIntent' description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`. @@ -3203,7 +2575,7 @@ tickets: Function: extractCommunicationIntentAudited' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractConventionalAction' - description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:62`. + description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`. Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0. @@ -3218,7 +2590,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:62:God Function: extractConventionalAction' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractDocumentationIntent' description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`. @@ -3240,7 +2612,7 @@ tickets: extractDocumentationIntent' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractMarkdownIntentAudited' - description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:31`. + description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:34`. Function ''extractMarkdownIntentAudited'' is oversized: CC=9, fan-out=14, mutations=0. @@ -3255,7 +2627,7 @@ tickets: - god-function files: - src/extractors/markdown-llm.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:31:God Function: + dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:34:God Function: extractMarkdownIntentAudited' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractNlIntent' @@ -3372,7 +2744,7 @@ tickets: Function: extractRuntimeCycleIntent' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractSymbols' - description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:438`. + description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`. Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0. @@ -3387,7 +2759,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:438:God Function: extractSymbols' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: extractTodo' description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`. @@ -3466,7 +2838,7 @@ tickets: Function: graph' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleCommunication' - description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:659`. + description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:666`. Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0. @@ -3481,10 +2853,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:659:God Function: handleCommunication' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:666:God Function: handleCommunication' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleDiff' - description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:464`. + description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:468`. Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0. @@ -3499,10 +2871,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:464:God Function: handleDiff' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:468:God Function: handleDiff' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleGraphDiff' - description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:490`. + description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:494`. Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0. @@ -3517,10 +2889,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:490:God Function: handleGraphDiff' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:494:God Function: handleGraphDiff' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleIntake' - description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:699`. + description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:706`. Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0. @@ -3535,10 +2907,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:699:God Function: handleIntake' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:706:God Function: handleIntake' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleReality' - description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:547`. + description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:551`. Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0. @@ -3553,10 +2925,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:547:God Function: handleReality' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:551:God Function: handleReality' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleWatch' - description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:342`. + description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:346`. Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0. @@ -3571,25 +2943,7 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:342:God Function: handleWatch' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: ignored' - description: 'code2llm reports `God Function: ignored` in `src/core/io.ts:88`. - - - Function ''ignored'' is oversized: CC=11, fan-out=16, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:88:God Function: ignored' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:346:God Function: handleWatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: index' description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`. @@ -3629,7 +2983,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:308:God Function: indexModuleAnchors' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: indexResolvableBasenames' - description: 'code2llm reports `God Function: indexResolvableBasenames` in `src/graph/linker.ts:298`. + description: 'code2llm reports `God Function: indexResolvableBasenames` in `src/graph/linker.ts:94`. Function ''indexResolvableBasenames'' is oversized: CC=8, fan-out=13, mutations=0. @@ -3644,10 +2998,10 @@ tickets: - god-function files: - src/graph/linker.ts - dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:298:God Function: indexResolvableBasenames' + dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:94:God Function: indexResolvableBasenames' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: isPathLike' - description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:387`. + description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:408`. Function ''isPathLike'' is oversized: CC=13, fan-out=12, mutations=0. @@ -3662,7 +3016,7 @@ tickets: - god-function files: - src/core/text.ts - dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:387:God Function: isPathLike' + dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:408:God Function: isPathLike' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: lines' description: 'code2llm reports `God Function: lines` in `src/extractors/changelog.ts:30`. @@ -3703,7 +3057,7 @@ tickets: lines' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: linkIntentRecords' - description: 'code2llm reports `God Function: linkIntentRecords` in `src/graph/linker.ts:73`. + description: 'code2llm reports `God Function: linkIntentRecords` in `src/graph/linker.ts:32`. Function ''linkIntentRecords'' is oversized: CC=5, fan-out=22, mutations=0. @@ -3718,7 +3072,7 @@ tickets: - god-function files: - src/graph/linker.ts - dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:73:God Function: linkIntentRecords' + dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:32:God Function: linkIntentRecords' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: listAvailableModels' description: 'code2llm reports `God Function: listAvailableModels` in `src/llm/openrouter.ts:58`. @@ -3815,7 +3169,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/config/env.ts:76:God Function: loadEnvFile' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: loadRuns' - description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui.ts:43`. + description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui.ts:137`. Function ''loadRuns'' is oversized: CC=12, fan-out=14, mutations=0. @@ -3830,7 +3184,7 @@ tickets: - god-function files: - src/web/diff-ui.ts - dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui.ts:43:God Function: loadRuns' + dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui.ts:137:God Function: loadRuns' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: local' description: 'code2llm reports `God Function: local` in `scripts/verify-env-contract.mjs:52`. @@ -4000,24 +3354,6 @@ tickets: - python/ast_extract.py dedupe_key: 'code2llm:smell:god_function:python/ast_extract.py:195:God Function: main' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: matcher' - description: 'code2llm reports `God Function: matcher` in `src/core/io.ts:91`. - - - Function ''matcher'' is oversized: CC=11, fan-out=16, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:91:God Function: matcher' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: matchesRunFilters' description: 'code2llm reports `God Function: matchesRunFilters` in `src/interfaces/a2a-history.ts:192`. @@ -4077,24 +3413,6 @@ tickets: - src/synthesis/task-synthesis-materialize.ts dedupe_key: 'code2llm:smell:god_function:src/synthesis/task-synthesis-materialize.ts:14:God Function: materializeTaskSynthesisResponse' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: maxFiles' - description: 'code2llm reports `God Function: maxFiles` in `src/core/io.ts:90`. - - - Function ''maxFiles'' is oversized: CC=11, fan-out=16, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:90:God Function: maxFiles' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: maxFiles' description: 'code2llm reports `God Function: maxFiles` in `src/watch/watcher.ts:38`. @@ -4193,7 +3511,7 @@ tickets: object' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: options' - description: 'code2llm reports `God Function: options` in `src/cli.ts:774`. + description: 'code2llm reports `God Function: options` in `src/cli.ts:781`. Function ''options'' is oversized: CC=13, fan-out=5, mutations=0. @@ -4208,7 +3526,7 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:774:God Function: options' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:781:God Function: options' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: output' description: 'code2llm reports `God Function: output` in `src/communication/llm/implementation-helpers.ts:148`. @@ -4230,7 +3548,7 @@ tickets: Function: output' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parseArgs' - description: 'code2llm reports `God Function: parseArgs` in `src/cli.ts:772`. + description: 'code2llm reports `God Function: parseArgs` in `src/cli.ts:779`. Function ''parseArgs'' is oversized: CC=13, fan-out=5, mutations=0. @@ -4245,7 +3563,7 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:772:God Function: parseArgs' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:779:God Function: parseArgs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parseArgs' description: 'code2llm reports `God Function: parseArgs` in `scripts/research/rerank-embedding-shortlist.mjs:164`. @@ -4359,44 +3677,6 @@ tickets: files: - src/diff/reality.ts dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:386:God Function: primaryTargetKey' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: proposals' - description: 'code2llm reports `God Function: proposals` in `src/synthesis/code-change-plan/implementation.ts:119`. - - - Function ''proposals'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:119:God - Function: proposals' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: proposalsByDiagnostic' - description: 'code2llm reports `God Function: proposalsByDiagnostic` in `src/synthesis/code-change-plan/implementation.ts:121`. - - - Function ''proposalsByDiagnostic'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:121:God - Function: proposalsByDiagnostic' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: read' description: 'code2llm reports `God Function: read` in `src/communication/intake-store.ts:60`. @@ -4435,47 +3715,9 @@ tickets: - src/interfaces/a2a-history.ts dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:155:God Function: readCommunicationSummary' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: records' - description: 'code2llm reports `God Function: records` in `src/semantic/reranker/candidate.ts:120`. - - - Function ''records'' is oversized: CC=14, fan-out=9, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/semantic/reranker/candidate.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:120:God - Function: records' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: recordsById' - description: 'code2llm reports `God Function: recordsById` in `src/synthesis/code-change-plan/implementation.ts:120`. - - - Function ''recordsById'' is oversized: CC=7, fan-out=18, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation.ts:120:God - Function: recordsById' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: registerRunArtifacts' - description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:723`. + description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:792`. Function ''registerRunArtifacts'' is oversized: CC=7, fan-out=12, mutations=0. @@ -4490,7 +3732,7 @@ tickets: - god-function files: - src/services/actions.ts - dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:723:God Function: + dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:792:God Function: registerRunArtifacts' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: relative' @@ -4624,9 +3866,28 @@ tickets: - sdk/php/src/Client.php dedupe_key: 'code2llm:smell:god_function:sdk/php/src/Client.php:331:God Function: request' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: rerankSemanticCandidates' + description: 'code2llm reports `God Function: rerankSemanticCandidates` in `src/semantic/reranker-llm.ts:39`. + + + Function ''rerankSemanticCandidates'' is oversized: CC=2, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/semantic/reranker-llm.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker-llm.ts:39:God Function: + rerankSemanticCandidates' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: resolveGlobs' - description: 'code2llm reports `God Function: resolveGlobs` in `src/core/io.ts:152`. + description: 'code2llm reports `God Function: resolveGlobs` in `src/core/io.ts:186`. Function ''resolveGlobs'' is oversized: CC=4, fan-out=14, mutations=0. @@ -4641,7 +3902,7 @@ tickets: - god-function files: - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:152:God Function: resolveGlobs' + dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:186:God Function: resolveGlobs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: resolvedPaths' description: 'code2llm reports `God Function: resolvedPaths` in `src/extractors/todo.ts:51`. @@ -4738,7 +3999,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:37:God Function: scanTree' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: scorePair' - description: 'code2llm reports `God Function: scorePair` in `src/graph/linker.ts:342`. + description: 'code2llm reports `God Function: scorePair` in `src/graph/linker.ts:138`. Function ''scorePair'' is oversized: CC=1, fan-out=11, mutations=0. @@ -4753,7 +4014,7 @@ tickets: - god-function files: - src/graph/linker.ts - dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:342:God Function: scorePair' + dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:138:God Function: scorePair' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: seen' description: 'code2llm reports `God Function: seen` in `src/communication/llm/implementation-helpers.ts:147`. @@ -4773,44 +4034,6 @@ tickets: - src/communication/llm/implementation-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:147:God Function: seen' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: seenIds' - description: 'code2llm reports `God Function: seenIds` in `src/semantic/reranker/candidate.ts:121`. - - - Function ''seenIds'' is oversized: CC=14, fan-out=9, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/semantic/reranker/candidate.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:121:God - Function: seenIds' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: seenPairs' - description: 'code2llm reports `God Function: seenPairs` in `src/semantic/reranker/candidate.ts:122`. - - - Function ''seenPairs'' is oversized: CC=14, fan-out=9, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/semantic/reranker/candidate.ts - dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:122:God - Function: seenPairs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: sourcePath' description: 'code2llm reports `God Function: sourcePath` in `src/extractors/nl.ts:42`. @@ -5097,11 +4320,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:278:God Function: validateCodeChangePlanContext' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: validateProjection' - description: 'code2llm reports `God Function: validateProjection` in `src/communication/intake-service.ts:183`. + title: 'Address code smell: God Function: validatePatchTargetForEdit' + description: 'code2llm reports `God Function: validatePatchTargetForEdit` in `src/synthesis/code-change-plan/implementation-helpers.ts:729`. - Function ''validateProjection'' is oversized: CC=9, fan-out=20, mutations=0. + Function ''validatePatchTargetForEdit'' is oversized: CC=13, fan-out=3, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -5112,15 +4335,15 @@ tickets: - code-smell - god-function files: - - src/communication/intake-service.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:183:God - Function: validateProjection' + - src/synthesis/code-change-plan/implementation-helpers.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:729:God + Function: validatePatchTargetForEdit' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: visit' - description: 'code2llm reports `God Function: visit` in `src/core/io.ts:95`. + title: 'Address code smell: God Function: validateProjection' + description: 'code2llm reports `God Function: validateProjection` in `src/communication/intake-service.ts:183`. - Function ''visit'' is oversized: CC=11, fan-out=15, mutations=0. + Function ''validateProjection'' is oversized: CC=9, fan-out=20, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -5131,8 +4354,9 @@ tickets: - code-smell - god-function files: - - src/core/io.ts - dedupe_key: 'code2llm:smell:god_function:src/core/io.ts:95:God Function: visit' + - src/communication/intake-service.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:183:God + Function: validateProjection' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: visit' description: 'code2llm reports `God Function: visit` in `src/watch/watcher.ts:42`. @@ -5452,7 +4676,7 @@ tickets: description: 'code2llm reports `God Module: src.core.text` in `src/core/text.ts:1`. - Module ''src.core.text'' is too large (62 functions, 0 classes). Consider splitting + Module ''src.core.text'' is too large (66 functions, 0 classes). Consider splitting into sub-modules. @@ -5471,7 +4695,7 @@ tickets: description: 'code2llm reports `God Module: src.core.types.code-change` in `src/core/types/code-change.ts:1`. - Module ''src.core.types.code-change'' is too large (0 functions, 16 classes). + Module ''src.core.types.code-change'' is too large (0 functions, 19 classes). Consider splitting into sub-modules. @@ -5491,7 +4715,7 @@ tickets: description: 'code2llm reports `God Module: src.core.types.intent` in `src/core/types/intent.ts:1`. - Module ''src.core.types.intent'' is too large (0 functions, 15 classes). Consider + Module ''src.core.types.intent'' is too large (0 functions, 13 classes). Consider splitting into sub-modules. @@ -5590,7 +4814,7 @@ tickets: in `src/extractors/communication-file-helpers.ts:1`. - Module ''src.extractors.communication-file-helpers'' is too large (43 functions, + Module ''src.extractors.communication-file-helpers'' is too large (47 functions, 2 classes). Consider splitting into sub-modules. @@ -5691,7 +4915,7 @@ tickets: description: 'code2llm reports `God Module: src.graph.linker` in `src/graph/linker.ts:1`. - Module ''src.graph.linker'' is too large (85 functions, 4 classes). Consider splitting + Module ''src.graph.linker'' is too large (55 functions, 1 classes). Consider splitting into sub-modules. @@ -5821,6 +5045,26 @@ tickets: files: - src/pipeline/run.ts dedupe_key: 'code2llm:smell:god_function:src/pipeline/run.ts:1:God Module: src.pipeline.run' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.semantic.reranker-llm' + description: 'code2llm reports `God Module: src.semantic.reranker-llm` in `src/semantic/reranker-llm.ts:1`. + + + Module ''src.semantic.reranker-llm'' is too large (43 functions, 2 classes). Consider + splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/semantic/reranker-llm.ts + dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker-llm.ts:1:God Module: + src.semantic.reranker-llm' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.semantic.reranker.types' description: 'code2llm reports `God Module: src.semantic.reranker.types` in `src/semantic/reranker/types.ts:1`. @@ -5846,7 +5090,7 @@ tickets: description: 'code2llm reports `God Module: src.services.actions` in `src/services/actions.ts:1`. - Module ''src.services.actions'' is too large (118 functions, 1 classes). Consider + Module ''src.services.actions'' is too large (145 functions, 1 classes). Consider splitting into sub-modules. @@ -5860,6 +5104,27 @@ tickets: files: - src/services/actions.ts dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:1:God Module: src.services.actions' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-source-patch' + description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-source-patch` + in `src/synthesis/code-change-plan/implementation-source-patch.ts:1`. + + + Module ''src.synthesis.code-change-plan.implementation-source-patch'' is too large + (103 functions, 5 classes). Consider splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation-source-patch.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-source-patch.ts:1:God + Module: src.synthesis.code-change-plan.implementation-source-patch' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.synthesis.todo-patch' description: 'code2llm reports `God Module: src.synthesis.todo-patch` in `src/synthesis/todo-patch.ts:1`. diff --git a/project/project.toon.yaml b/project/project.toon.yaml index 784f88a..f3982e0 100644 --- a/project/project.toon.yaml +++ b/project/project.toon.yaml @@ -1,52 +1,52 @@ -# todo2code | 3683 func | 171f | 39185L | typescript | 2026-08-04 +# todo2code | 3918 func | 179f | 41965L | typescript | 2026-08-04 # generated in 0.00s HEALTH: - CC̄=3.6 critical=256 (limit:10) dup=28 cycles=0 + CC̄=3.3 critical=220 (limit:10) dup=28 cycles=0 ALERTS[20]: !!! cc_exceeded assertOperationPlan = 84 (limit:15) - !!! cc_exceeded executeAction = 83 (limit:15) - !!! cc_exceeded root = 83 (limit:15) - !!! high_fan_out executeAction = 65 (limit:10) - !!! high_fan_out root = 64 (limit:10) !!! cc_exceeded parseCommand = 63 (limit:15) !!! cc_exceeded runPipeline = 56 (limit:15) !!! high_fan_out runPipeline = 56 (limit:10) - !!! cc_exceeded diffUiHtml = 52 (limit:15) !!! cc_exceeded analyzeCommunication = 48 (limit:15) + !!! cc_exceeded diffUiScriptMarkup = 46 (limit:15) + !!! cc_exceeded variables = 44 (limit:15) + !!! cc_exceeded variableById = 44 (limit:15) + !!! cc_exceeded steps = 44 (limit:15) + !!! cc_exceeded stepIds = 44 (limit:15) -MODULES[251] (top by size): +MODULES[260] (top by size): M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json) - M[src/cli.ts] 935L C:1 F:124 CC↑13 D:0 (typescript) + M[src/synthesis/code-change-plan/implementation-helpers.ts] 1148L C:16 F:133 CC↑13 D:0 (typescript) + M[src/cli.ts] 942L C:1 F:124 CC↑13 D:0 (typescript) + M[src/services/actions.ts] 806L C:1 F:106 CC↑13 D:0 (typescript) M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json) - M[src/services/actions.ts] 737L C:1 F:79 CC↑83 D:0 (typescript) + M[src/synthesis/code-change-plan/implementation-source-patch.ts] 694L C:5 F:95 CC↑11 D:0 (typescript) M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript) M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript) M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json) M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript) M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript) - M[src/graph/linker.ts] 537L C:4 F:81 CC↑10 D:3 (typescript) + M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript) M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml) - M[src/core/text.ts] 517L C:0 F:57 CC↑34 D:0 (typescript) M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python) M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript) - M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript) - LANGS: typescript:143/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 + LANGS: typescript:152/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 HOTSPOTS[10]: - ★ executeAction fan=65 // Orchestrates 65 calls - ★ root fan=64 // Orchestrates 64 calls ★ runPipeline fan=56 // Orchestrates 56 calls - ★ diffUiHtml fan=42 // Orchestrates 42 calls ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls + ★ Client.parse_http_response fan=37 // Orchestrates 37 calls + ★ diffUiScriptMarkup fan=36 // Orchestrates 36 calls + ★ analyzeCommunication fan=35 // Analysis pipeline, 35 stages REFACTOR[15]: - [1] H/L Split executeAction (CC=83) - [2] H/L Split root (CC=83) - [3] H/L Split normalized (CC=30) - [4] H/L Split inferObject (CC=34) - [5] H/L Split diffUiHtml (CC=52) + [1] H/L Split diffUiScriptMarkup (CC=46) + [2] H/L Split OpenRouterClient.timeout (CC=26) + [3] H/L Split OpenRouterClient.request (CC=31) + [4] H/L Split parseCommand (CC=63) + [5] H/L Split buildRealityView (CC=26) EVOLUTION: - 2026-08-04 CC̄=3.6 crit=256 39185L // Automated analysis + 2026-08-04 CC̄=3.3 crit=220 41965L // Automated analysis diff --git a/project/prompt.txt b/project/prompt.txt index 25bf7fc..44da076 100644 --- a/project/prompt.txt +++ b/project/prompt.txt @@ -8,8 +8,8 @@ we are in project path: todo2code Files for analysis: Note: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup) -- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [23KB] -- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [153KB] +- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [24KB] +- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [168KB] - evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB] - project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB] - context.md (LLM narrative - architecture summary and project context) [34KB] diff --git a/src/cli.ts b/src/cli.ts index 899199b..8a8a5b7 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -93,8 +93,12 @@ function commandHandlers(): Record { }, init: async (parsed) => initProject(path.resolve(parsed.positionals[0] ?? '.')), doctor: async (_parsed, config) => doctor(config), - mcp: async (_parsed, config) => startMcpServer(config), - a2a: async (_parsed, config) => startA2aServer(config), + mcp: async (_parsed, config) => { + await startMcpServer(config); + }, + a2a: async (_parsed, config) => { + await startA2aServer(config); + }, intake: handleIntake, extract: handleExtract, communication: handleCommunication, @@ -572,6 +576,9 @@ async function handleReality(parsed: ParsedArgs, config: ReturnType): Promise { const extractor = parsed.positionals.shift(); + if (!extractor) { + throw new Error('Usage: t2c extract ...'); + } const root = path.resolve(optionString(parsed, 'root') ?? config.root); const out = optionString(parsed, 'out'); const handlers: Record = { diff --git a/src/communication/llm/implementation-helpers.ts b/src/communication/llm/implementation-helpers.ts index 5a0a390..b139af3 100644 --- a/src/communication/llm/implementation-helpers.ts +++ b/src/communication/llm/implementation-helpers.ts @@ -1,6 +1,7 @@ import { promises as fs } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import type { T2CConfig } from '../../config/env.js'; import { createIntentId, sha256, stableStringify } from '../../core/id.js'; import { pathExists } from '../../core/io.js'; import { buildRecord, withRecordGeneration } from '../../core/record.js'; @@ -10,13 +11,12 @@ import type { IntentRecord, LlmResponseMetadata, PipelineStageAudit, - T2CConfig, LlmExtractionMode, } from '../../core/types.js'; import { openRouterAuditConfiguration } from '../../llm/audit.js'; import { structuredSchema as s, type StructuredSchema } from '../../llm/structured-schema.js'; import { T2C_VERSION } from '../../version.js'; -import type { CommunicationRole, CommunicationExtractionOptions } from '../extractors/communication.js'; +import type { CommunicationRole, CommunicationExtractionOptions } from '../../extractors/communication.js'; export const ACTIONS = [ 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', diff --git a/src/core/types/intent.ts b/src/core/types/intent.ts index e8234a7..91479f7 100644 --- a/src/core/types/intent.ts +++ b/src/core/types/intent.ts @@ -210,49 +210,3 @@ export interface IntentGraphDiff { relationsUnchanged: number; }; } - -export type DiagnosticCode = - | 'ALIGNED' - | 'PLANNED_NOT_IMPLEMENTED' - | 'IMPLEMENTED_NOT_PLANNED' - | 'IMPLEMENTED_NOT_DOCUMENTED' - | 'CHANGELOG_WITHOUT_IMPLEMENTATION' - | 'CONFLICTING_INTENT' - | 'AMBIGUOUS_REQUIREMENT' - | 'UNLINKED_RECORD' - | 'LOW_CONFIDENCE' - | 'INSUFFICIENT_EVIDENCE' - | 'LLM_NOT_CONFIGURED' - | 'SOURCE_UNAVAILABLE' - | 'PARTICIPANT_IDENTITY_UNRESOLVED' - | 'HUMAN_COMMUNICATION_CONFLICT' - | 'AGENT_COMMUNICATION_CONFLICT' - | 'HUMAN_AGENT_CONFLICT' - | 'REQUEST_WITHOUT_AGENT_RESPONSE' - | 'AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED' - | 'AGENT_CLAIM_WITHOUT_EVIDENCE' - | 'AGENT_WORK_OUTSIDE_REQUEST'; - -export type DiagnosticSeverity = 'info' | 'warning' | 'review_required' | 'blocking'; - -export interface Diagnostic { - id: string; - code: DiagnosticCode; - severity: DiagnosticSeverity; - title: string; - detail: string; - recordIds: string[]; - suggestedAction: string; -} - -export interface DiagnosticReport { - schemaVersion: 't2c.diagnostics/v1'; - generatedAt: string; - graphFingerprint: string; - diagnostics: Diagnostic[]; - counts: Record; -} - -export type ConclusionKind = 'finding' | 'risk' | 'decision' | 'recommendation'; -export type TodoPriority = 'P0' | 'P1' | 'P2' | 'P3'; - diff --git a/src/core/types/pipeline.ts b/src/core/types/pipeline.ts index 910814d..c8e965c 100644 --- a/src/core/types/pipeline.ts +++ b/src/core/types/pipeline.ts @@ -1,4 +1,4 @@ -import type { JsonValue } from './intent.js'; +import type { IntentRecord, JsonValue } from './intent.js'; export interface ExtractionResult { records: IntentRecord[]; diff --git a/src/extractors/markdown-llm.ts b/src/extractors/markdown-llm.ts index ef39a46..e7671c2 100644 --- a/src/extractors/markdown-llm.ts +++ b/src/extractors/markdown-llm.ts @@ -10,6 +10,7 @@ import { classifyLlmFailure, rejectedLlmResponseMetadata, type LlmFailureReason import { OpenRouterClient } from '../llm/openrouter.js'; import { enrichMarkdownRecords, + MARKDOWN_LLM_BATCH_RECORDS, enrichRecord, markDeterministic, MarkdownAttemptError, @@ -17,6 +18,8 @@ import { stageAudit, } from './markdown-llm-helpers.js'; +export { MARKDOWN_LLM_BATCH_RECORDS }; + export interface AuditedMarkdownExtractionResult extends ExtractionResult { audit: PipelineStageAudit; } diff --git a/src/graph/linker-candidates.ts b/src/graph/linker-candidates.ts new file mode 100644 index 0000000..51bfb7c --- /dev/null +++ b/src/graph/linker-candidates.ts @@ -0,0 +1,163 @@ +import type { IntentRecord } from '../core/types.js'; +import { keywords, topicKeywords } from '../core/text.js'; +import { pathAliases, symbolAliases } from '../core/target.js'; +import { isFileAggregate } from './capability-evidence.js'; + +export interface RecordKeywords { + object: Set; + text: Set; + topics: Set; +} + +export function indexKeywords(records: IntentRecord[]): Map { + return new Map(records.map((record) => [record.id, { + object: new Set(keywords(record.statement.object)), + text: new Set(keywords(record.statement.text)), + topics: new Set(topicKeywords(`${record.statement.object} ${record.statement.text}`)), + }])); +} + +export function collectCandidatePairs( + records: IntentRecord[], + keywordIndex: Map, +): Array<[string, string]> { + const buckets = new Map(); + const astIds = new Set(); + const moduleAstIds = new Set(); + const declarationAstIds = new Set(); + const configurationIds = new Set(); + for (const record of records) { + if (record.source.kind === 'ast') { + astIds.add(record.id); + if (isFileAggregate(record)) moduleAstIds.add(record.id); + if (record.statement.action === 'declare' && record.statement.target.symbols.length > 0) { + declarationAstIds.add(record.id); + } + } + if (record.source.kind === 'system') configurationIds.add(record.id); + indexTargetBuckets(buckets, record); + indexKeywordBuckets(buckets, record.id, keywordIndex.get(record.id)?.object); + if (isModuleTopicSource(record)) { + indexTopicBuckets(buckets, record.id, keywordIndex.get(record.id)?.topics); + } + } + return pairsFromBuckets(buckets, astIds, moduleAstIds, declarationAstIds, configurationIds); +} + +function isModuleTopicSource(record: IntentRecord): boolean { + return record.statement.kind === 'module_fact' + || record.source.kind === 'nl' + || record.source.kind === 'todo' + || record.source.kind === 'document'; +} + +function indexTargetBuckets(buckets: Map, record: IntentRecord): void { + for (const ticket of record.statement.target.tickets) { + addToBucket(buckets, `ticket:${ticket.toLowerCase()}`, record.id); + } + indexAliases(buckets, 'symbol', record.id, record.statement.target.symbols, symbolAliases); + indexAliases(buckets, 'path', record.id, record.statement.target.paths, pathAliases); +} + +function indexAliases( + buckets: Map, + prefix: string, + recordId: string, + values: string[], + aliases: (value: string) => string[], +): void { + for (const value of values) { + for (const alias of aliases(value)) addToBucket(buckets, `${prefix}:${alias}`, recordId); + } +} + +function indexKeywordBuckets( + buckets: Map, + recordId: string, + objectKeywords: Set | undefined, +): void { + // A Set preserves the sorted insertion order of `keywords()`, so slicing the + // materialized values keeps the same five-token candidate limit. + for (const token of [...(objectKeywords ?? [])].slice(0, 5)) { + addToBucket(buckets, `token:${token}`, recordId); + } +} + +function indexTopicBuckets( + buckets: Map, + recordId: string, + topics: Set | undefined, +): void { + for (const topic of [...(topics ?? [])].slice(0, 12)) { + addToBucket(buckets, `topic:${topic}`, recordId); + } +} + +function addToBucket(buckets: Map, key: string, recordId: string): void { + const values = buckets.get(key); + if (values) values.push(recordId); + else buckets.set(key, [recordId]); +} + +function pairsFromBuckets( + buckets: Map, + astIds: Set, + moduleAstIds: Set, + declarationAstIds: Set, + configurationIds: Set, +): Array<[string, string]> { + const output = new Map(); + for (const [bucketKey, ids] of buckets) { + const limited = [...new Set(ids)].sort().slice(0, 300); + for (let left = 0; left < limited.length; left += 1) { + for (let right = left + 1; right < limited.length; right += 1) { + const leftId = limited[left]; + const rightId = limited[right]; + if (!leftId || !rightId) continue; + if (isSuppressedAstPair(bucketKey, leftId, rightId, astIds, moduleAstIds, declarationAstIds)) continue; + if (isSuppressedConfigurationPair(bucketKey, leftId, rightId, configurationIds)) continue; + output.set(`${leftId}|${rightId}`, [leftId, rightId]); + } + } + } + + return [...output.entries()] + .sort(([left], [right]) => left.localeCompare(right)) + .map(([, pair]) => pair); +} + +function isSuppressedAstPair( + bucketKey: string, + leftId: string, + rightId: string, + astIds: Set, + moduleAstIds: Set, + declarationAstIds: Set, +): boolean { + const leftAst = astIds.has(leftId); + const rightAst = astIds.has(rightId); + // AST details may relate only through an explicit shared symbol. Shared file + // and generic keyword buckets otherwise create a quadratic graph of calls + // within one module without adding plan/code evidence. + if (leftAst && rightAst) { + return !bucketKey.startsWith('symbol:') + || !declarationAstIds.has(leftId) + || !declarationAstIds.has(rightId); + } + if (!bucketKey.startsWith('path:')) return false; + // A file-level declaration links to one module aggregate, not every call and + // symbol extracted from that file. Exact symbol and semantic token matches + // remain available through their stronger buckets. + const astId = leftAst ? leftId : rightAst ? rightId : null; + return astId !== null && !moduleAstIds.has(astId); +} + +function isSuppressedConfigurationPair( + bucketKey: string, + leftId: string, + rightId: string, + configurationIds: Set, +): boolean { + if (bucketKey.startsWith('ticket:')) return false; + return configurationIds.has(leftId) && configurationIds.has(rightId); +} diff --git a/src/graph/linker-relations.ts b/src/graph/linker-relations.ts new file mode 100644 index 0000000..a3b8080 --- /dev/null +++ b/src/graph/linker-relations.ts @@ -0,0 +1,83 @@ +import type { IntentRecord, RelationType } from '../core/types.js'; + +interface RelationEvidence { + score: number; + textScore: number; +} + +interface SourceRelationRule { + anchor: IntentRecord['source']['kind']; + others: ReadonlySet; + type: RelationType; + anchorPosition: 'from' | 'to'; +} + +interface DirectedRelation { + from: IntentRecord; + to: IntentRecord; + type: RelationType; +} + +const SOURCE_RELATION_RULES: SourceRelationRule[] = [ + { anchor: 'git', others: new Set(['todo', 'nl', 'document']), type: 'implements', anchorPosition: 'from' }, + { + anchor: 'ast', + others: new Set(['nl', 'git', 'todo', 'changelog', 'document', 'agent_log', 'test', 'system']), + type: 'evidenced_by', + anchorPosition: 'to', + }, + { anchor: 'changelog', others: new Set(['git', 'ast']), type: 'releases', anchorPosition: 'from' }, + { anchor: 'todo', others: new Set(['nl', 'document']), type: 'plans', anchorPosition: 'from' }, + { anchor: 'document', others: new Set(['nl']), type: 'documents', anchorPosition: 'from' }, +]; + +export function determineRelation( + left: IntentRecord, + right: IntentRecord, + evidence: RelationEvidence, +): DirectedRelation { + // `scorePair` already computed this over the same two strings. + const textScore = evidence.textScore; + if (left.statement.polarity !== right.statement.polarity && textScore >= 0.45) { + return { from: left, to: right, type: 'contradicts' }; + } + if (left.source.kind === right.source.kind && textScore >= 0.82) { + return { from: left, to: right, type: 'duplicates' }; + } + const sourceRelation = relationForSourceKinds(left, right); + if (sourceRelation) return sourceRelation; + if (evidence.score >= 0.8) return { from: left, to: right, type: 'same_as' }; + return { from: left, to: right, type: 'related_to' }; +} + +function relationForSourceKinds(left: IntentRecord, right: IntentRecord): DirectedRelation | null { + for (const rule of SOURCE_RELATION_RULES) { + const relation = matchSourceRule(left, right, rule); + if (relation) return relation; + } + return null; +} + +function matchSourceRule( + left: IntentRecord, + right: IntentRecord, + rule: SourceRelationRule, +): DirectedRelation | null { + if (left.source.kind === rule.anchor && rule.others.has(right.source.kind)) { + return orientRelation(left, right, rule); + } + if (right.source.kind === rule.anchor && rule.others.has(left.source.kind)) { + return orientRelation(right, left, rule); + } + return null; +} + +function orientRelation( + anchor: IntentRecord, + other: IntentRecord, + rule: SourceRelationRule, +): DirectedRelation { + return rule.anchorPosition === 'from' + ? { from: anchor, to: other, type: rule.type } + : { from: other, to: anchor, type: rule.type }; +} diff --git a/src/graph/linker.ts b/src/graph/linker.ts index 1897c86..24eb08e 100644 --- a/src/graph/linker.ts +++ b/src/graph/linker.ts @@ -1,10 +1,15 @@ import { createRelationId, graphFingerprint } from '../core/id.js'; import { assertIntentRecords } from '../core/schema.js'; -import { keywords, topicKeywords } from '../core/text.js'; import { pathAliases, symbolAliases } from '../core/target.js'; -import type { IntentGraph, IntentRecord, IntentRelation, RelationType, SourceKind } from '../core/types.js'; +import type { IntentGraph, IntentRecord, IntentRelation } from '../core/types.js'; import { buildSymbolResolutionIndex, hasResolvedNlAstSymbolPair, type SymbolResolutionIndex } from './symbol-resolution.js'; import { aggregateCapabilityOverlap, isFileAggregate } from './capability-evidence.js'; +import { + collectCandidatePairs, + indexKeywords as buildKeywordIndex, + type RecordKeywords, +} from './linker-candidates.js'; +import { determineRelation } from './linker-relations.js'; interface PairEvidence { score: number; @@ -13,52 +18,6 @@ interface PairEvidence { textScore: number; } -/** - * Tokenising `statement.object` and `statement.text` is the linker's hot path: - * scoring recomputed both for every candidate pair, so a repository producing - * ~177k pairs performed ~1.4M tokenisations. Keyword sets are computed once per - * record instead and compared with a plain Jaccard index. - */ -interface RecordKeywords { - object: Set; - text: Set; - topics: Set; -} - -interface DirectedRelation { - from: IntentRecord; - to: IntentRecord; - type: RelationType; -} - -interface SourceRelationRule { - anchor: SourceKind; - others: ReadonlySet; - type: RelationType; - anchorPosition: 'from' | 'to'; -} - -const SOURCE_RELATION_RULES: SourceRelationRule[] = [ - { anchor: 'git', others: new Set(['todo', 'nl', 'document']), type: 'implements', anchorPosition: 'from' }, - { - anchor: 'ast', - others: new Set(['nl', 'git', 'todo', 'changelog', 'document', 'agent_log', 'test', 'system']), - type: 'evidenced_by', - anchorPosition: 'to', - }, - { anchor: 'changelog', others: new Set(['git', 'ast']), type: 'releases', anchorPosition: 'from' }, - { anchor: 'todo', others: new Set(['nl', 'document']), type: 'plans', anchorPosition: 'from' }, - { anchor: 'document', others: new Set(['nl']), type: 'documents', anchorPosition: 'from' }, -]; - -function indexKeywords(records: IntentRecord[]): Map { - return new Map(records.map((record) => [record.id, { - object: new Set(keywords(record.statement.object)), - text: new Set(keywords(record.statement.text)), - topics: new Set(topicKeywords(`${record.statement.object} ${record.statement.text}`)), - }])); -} - function jaccard(left: Set, right: Set): number { if (left.size === 0 || right.size === 0) return 0; // Iterate the smaller set: membership tests dominate this loop. @@ -74,7 +33,7 @@ export function linkIntentRecords(inputRecords: IntentRecord[], generatedAt = ne assertIntentRecords(inputRecords); const records = deduplicateRecords(inputRecords).sort((a, b) => a.id.localeCompare(b.id)); const byId = new Map(records.map((record) => [record.id, record])); - const keywordIndex = indexKeywords(records); + const keywordIndex = buildKeywordIndex(records); const symbolResolutionIndex = buildSymbolResolutionIndex(records); const candidatePairs = collectCandidatePairs(records, keywordIndex); const resolvableBasenames = indexResolvableBasenames(records); @@ -122,169 +81,6 @@ function deduplicateRecords(records: IntentRecord[]): IntentRecord[] { return [...byId.values()]; } -/** - * Builds the candidate pairs the scorer has to inspect. - * - * Pairs are returned as tuples rather than `"left|right"` keys so the scoring - * loop does not re-split a string per pair; the map key exists only to - * deduplicate, and the result is sorted by it to keep output deterministic. - */ -function collectCandidatePairs( - records: IntentRecord[], - keywordIndex: Map, -): Array<[string, string]> { - const buckets = new Map(); - const astIds = new Set(); - const moduleAstIds = new Set(); - const declarationAstIds = new Set(); - const configurationIds = new Set(); - for (const record of records) { - if (record.source.kind === 'ast') { - astIds.add(record.id); - if (isFileAggregate(record)) moduleAstIds.add(record.id); - if (record.statement.action === 'declare' && record.statement.target.symbols.length > 0) { - declarationAstIds.add(record.id); - } - } - if (record.source.kind === 'system') configurationIds.add(record.id); - indexTargetBuckets(buckets, record); - indexKeywordBuckets(buckets, record.id, keywordIndex.get(record.id)?.object); - if (isModuleTopicSource(record)) { - indexTopicBuckets(buckets, record.id, keywordIndex.get(record.id)?.topics); - } - } - return pairsFromBuckets(buckets, astIds, moduleAstIds, declarationAstIds, configurationIds); -} - -function isModuleTopicSource(record: IntentRecord): boolean { - return record.statement.kind === 'module_fact' - || record.source.kind === 'nl' - || record.source.kind === 'todo' - || record.source.kind === 'document'; -} - -function indexTargetBuckets(buckets: Map, record: IntentRecord): void { - for (const ticket of record.statement.target.tickets) { - addToBucket(buckets, `ticket:${ticket.toLowerCase()}`, record.id); - } - indexAliases(buckets, 'symbol', record.id, record.statement.target.symbols, symbolAliases); - indexAliases(buckets, 'path', record.id, record.statement.target.paths, pathAliases); -} - -function indexAliases( - buckets: Map, - prefix: string, - recordId: string, - values: string[], - aliases: (value: string) => string[], -): void { - for (const value of values) { - for (const alias of aliases(value)) addToBucket(buckets, `${prefix}:${alias}`, recordId); - } -} - -function indexKeywordBuckets( - buckets: Map, - recordId: string, - objectKeywords: Set | undefined, -): void { - // A Set preserves the sorted insertion order of `keywords()`, so slicing the - // materialized values keeps the same five-token candidate limit. - for (const token of [...(objectKeywords ?? [])].slice(0, 5)) { - addToBucket(buckets, `token:${token}`, recordId); - } -} - -function indexTopicBuckets( - buckets: Map, - recordId: string, - topics: Set | undefined, -): void { - for (const topic of [...(topics ?? [])].slice(0, 12)) { - addToBucket(buckets, `topic:${topic}`, recordId); - } -} - -function addToBucket(buckets: Map, key: string, recordId: string): void { - const values = buckets.get(key); - if (values) values.push(recordId); - else buckets.set(key, [recordId]); -} - -/** - * Two configuration declarations sharing a key name are not evidence. - * - * Config records are uniform by construction: every one carries action - * `configure` and a fragment of text such as `params:` or `version: 1`, so - * `same_action` plus text similarity clears the threshold for almost any pair. - * On an infrastructure repository 1 263 configuration records produced 28 896 - * mutual relations — 72% of the entire graph — restating only that YAML files - * reuse key names. A shared ticket still connects them, because that names one - * piece of work rather than a shared vocabulary. - */ -function isSuppressedConfigurationPair( - bucketKey: string, - leftId: string, - rightId: string, - configurationIds: Set, -): boolean { - if (bucketKey.startsWith('ticket:')) return false; - return configurationIds.has(leftId) && configurationIds.has(rightId); -} - -function pairsFromBuckets( - buckets: Map, - astIds: Set, - moduleAstIds: Set, - declarationAstIds: Set, - configurationIds: Set, -): Array<[string, string]> { - const output = new Map(); - for (const [bucketKey, ids] of buckets) { - const limited = [...new Set(ids)].sort().slice(0, 300); - for (let left = 0; left < limited.length; left += 1) { - for (let right = left + 1; right < limited.length; right += 1) { - const leftId = limited[left]; - const rightId = limited[right]; - if (!leftId || !rightId) continue; - if (isSuppressedAstPair(bucketKey, leftId, rightId, astIds, moduleAstIds, declarationAstIds)) continue; - if (isSuppressedConfigurationPair(bucketKey, leftId, rightId, configurationIds)) continue; - output.set(`${leftId}|${rightId}`, [leftId, rightId]); - } - } - } - - return [...output.entries()] - .sort(([left], [right]) => left.localeCompare(right)) - .map(([, pair]) => pair); -} - -function isSuppressedAstPair( - bucketKey: string, - leftId: string, - rightId: string, - astIds: Set, - moduleAstIds: Set, - declarationAstIds: Set, -): boolean { - const leftAst = astIds.has(leftId); - const rightAst = astIds.has(rightId); - // AST details may relate only through an explicit shared symbol. Shared file - // and generic keyword buckets otherwise create a quadratic graph of calls - // within one module without adding plan/code evidence. - if (leftAst && rightAst) { - return !bucketKey.startsWith('symbol:') - || !declarationAstIds.has(leftId) - || !declarationAstIds.has(rightId); - } - if (!bucketKey.startsWith('path:')) return false; - // A file-level declaration links to one module aggregate, not every call and - // symbol extracted from that file. Exact symbol and semantic token matches - // remain available through their stronger buckets. - const astId = leftAst ? leftId : rightAst ? rightId : null; - return astId !== null && !moduleAstIds.has(astId); -} - /** * Basenames that identify exactly one file in this repository. * @@ -470,53 +266,6 @@ function isModuleTopicEvidencePair(left: IntentRecord, right: IntentRecord): boo && (left.statement.kind === 'module_fact' || right.statement.kind === 'module_fact'); } -function determineRelation(left: IntentRecord, right: IntentRecord, evidence: PairEvidence): DirectedRelation { - // `scorePair` already computed this over the same two strings. - const textScore = evidence.textScore; - if (left.statement.polarity !== right.statement.polarity && textScore >= 0.45) { - return { from: left, to: right, type: 'contradicts' }; - } - if (left.source.kind === right.source.kind && textScore >= 0.82) { - return { from: left, to: right, type: 'duplicates' }; - } - const sourceRelation = relationForSourceKinds(left, right); - if (sourceRelation) return sourceRelation; - if (evidence.score >= 0.8) return { from: left, to: right, type: 'same_as' }; - return { from: left, to: right, type: 'related_to' }; -} - -function relationForSourceKinds(left: IntentRecord, right: IntentRecord): DirectedRelation | null { - for (const rule of SOURCE_RELATION_RULES) { - const relation = matchSourceRule(left, right, rule); - if (relation) return relation; - } - return null; -} - -function matchSourceRule( - left: IntentRecord, - right: IntentRecord, - rule: SourceRelationRule, -): DirectedRelation | null { - if (left.source.kind === rule.anchor && rule.others.has(right.source.kind)) { - return orientRelation(left, right, rule); - } - if (right.source.kind === rule.anchor && rule.others.has(left.source.kind)) { - return orientRelation(right, left, rule); - } - return null; -} - -function orientRelation( - anchor: IntentRecord, - other: IntentRecord, - rule: SourceRelationRule, -): DirectedRelation { - return rule.anchorPosition === 'from' - ? { from: anchor, to: other, type: rule.type } - : { from: other, to: anchor, type: rule.type }; -} - function intersects(left: string[], right: string[]): boolean { const set = new Set(left); return right.some((value) => set.has(value)); diff --git a/src/semantic/reranker-llm.ts b/src/semantic/reranker-llm.ts index 09e6f4d..e33462b 100644 --- a/src/semantic/reranker-llm.ts +++ b/src/semantic/reranker-llm.ts @@ -212,7 +212,7 @@ function buildRerankResult( requestedModel: model, model: response.metadata.model ?? model, modelRevision, - responseId: response.metadata.responseId, + responseId: response.metadata.responseId ?? null, }); } diff --git a/src/services/actions.ts b/src/services/actions.ts index e3ba04e..1d0b712 100644 --- a/src/services/actions.ts +++ b/src/services/actions.ts @@ -103,6 +103,9 @@ const ACTION_HANDLERS: Record = { export async function executeAction(action: T2CAction, input: Record, config: T2CConfig): Promise { const root = await resolveRoot(input.root, config); const handler = ACTION_HANDLERS[action]; + if (!handler) { + throw new Error(`Unknown action: ${action}`); + } return handler(input, root, config); } @@ -513,7 +516,7 @@ async function executeDiffGitAction(input: Record, root: string return { ...withTextDiffViews(result.diffs, input), revision: result.revision, staged: result.staged, warnings: result.warnings }; } -function executeRealityAction(_input: Record, _root: string, config: T2CConfig): unknown { +function executeRealityAction(input: Record, _root: string, config: T2CConfig): unknown { const graph = objectValue(input.graph, 'graph'); const diagnostics = input.diagnostics ? objectValue(input.diagnostics, 'diagnostics') diff --git a/src/synthesis/code-change-plan/implementation-diagnostics.ts b/src/synthesis/code-change-plan/implementation-diagnostics.ts new file mode 100644 index 0000000..00fa417 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-diagnostics.ts @@ -0,0 +1,17 @@ +import type { Diagnostic, DiagnosticReport } from '../../core/types.js'; + +export const IMPLEMENTATION_DIAGNOSTIC_CODES: ReadonlySet = new Set([ + 'PLANNED_NOT_IMPLEMENTED', + 'CHANGELOG_WITHOUT_IMPLEMENTATION', +]); + +export function collectImplementationDiagnostics(report: DiagnosticReport): Diagnostic[] { + return report.diagnostics + .filter((diagnostic) => IMPLEMENTATION_DIAGNOSTIC_CODES.has(diagnostic.code)) + .sort((left, right) => implementationDiagnosticRank(left) + - implementationDiagnosticRank(right) || left.id.localeCompare(right.id)); +} + +function implementationDiagnosticRank(diagnostic: Diagnostic): number { + return diagnostic.code === 'PLANNED_NOT_IMPLEMENTED' ? 0 : 1; +} diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts index 4626ce3..b209f05 100644 --- a/src/synthesis/code-change-plan/implementation-helpers.ts +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -1,23 +1,16 @@ -import { randomUUID } from 'node:crypto'; -import { existsSync, promises as fs } from 'node:fs'; +import { existsSync } from 'node:fs'; import path from 'node:path'; import { createCodeChangePlanHash, createCodeChangePlanId, - createCodeChangeSourcePatchHash, - createCodeChangeSourcePatchId, sha256, stableStringify, } from '../../core/id.js'; -import { ensureDir, pathExists, readJson, readText } from '../../core/io.js'; -import { assertPathWithinRoot } from '../../core/security.js'; import { assertCodeChangeAcceptance, assertCodeChangePlanForAcceptance, assertCodeChangePlans, - assertCodeChangePlansForReview, assertConclusions, - assertGroundedGenerationMetadata, assertIntentGraph, } from '../../core/schema.js'; import type { @@ -26,11 +19,7 @@ import type { CodeChangeFile, CodeChangeFileAction, CodeChangePlan, - CodeChangeReviewPatch, - CodeChangeSourceApplyReceipt, - CodeChangeSourceEdit, CodeChangeSourcePatch, - CodeChangeSourcePatchApproval, CodeChangeSourcePatchSet, Conclusion, Diagnostic, @@ -39,21 +28,48 @@ import type { IntentGraph, IntentRecord, IntentTarget, - TodoPriority, TodoProposal, } from '../../core/types.js'; -import { normalizeTarget } from '../../core/target.js'; import { diagnoseGraph } from '../../graph/diagnostics.js'; import { T2C_VERSION } from '../../version.js'; -import { isUsefulCodeChangePath } from '../code-change-path.js'; +import { + collectImplementationDiagnostics, + IMPLEMENTATION_DIAGNOSTIC_CODES, +} from './implementation-diagnostics.js'; +import { + indexConclusionsByDiagnostic, + indexProposalsByDiagnostic, +} from './implementation-indexing.js'; +import { collectTarget } from './implementation-targets.js'; +import { + buildPlanEvidence, + buildPlanSemantic, + type CodeChangePlanSemanticDraft, +} from './implementation-semantic.js'; + +export { + createCodeChangeSourcePatch, + assertCodeChangeSourcePatch, + createCodeChangeSourcePatchSet, + assertCodeChangeSourcePatchSet, + type CreateCodeChangeSourcePatchOptions, +} from './implementation-source-patch.js'; +export { + createCodeChangeReviewPatch, + assertCodeChangeReviewPatch, + renderCodeChangeReviewMarkdown, + type CreateCodeChangeReviewOptions, + type CreatedCodeChangeReview, +} from './implementation-review.js'; +export { + applyCodeChangeSourcePatch, + applyUnifiedDiffToText, + type ApplyCodeChangeSourcePatchOptions, + type ApplyCodeChangeSourcePatchResult, +} from './implementation-source-patch-apply.js'; export { isUsefulCodeChangePath } from '../code-change-path.js'; -const IMPLEMENTATION_DIAGNOSTIC_CODES = new Set([ - 'PLANNED_NOT_IMPLEMENTED', - 'CHANGELOG_WITHOUT_IMPLEMENTATION', -]); - export interface ProposeCodeChangePlansOptions { graph: IntentGraph; diagnostics: DiagnosticReport; @@ -195,17 +211,6 @@ function buildPlanContext(options: ProposeCodeChangePlansOptions): PlanContext { }; } -function collectImplementationDiagnostics(report: DiagnosticReport): Diagnostic[] { - return report.diagnostics - .filter((diagnostic) => IMPLEMENTATION_DIAGNOSTIC_CODES.has(diagnostic.code)) - // A released CHANGELOG entry is an audit signal; an open TODO is an - // explicit request for work. With a bounded plan set, sorting only by - // content id allowed historical release notes to consume every slot and - // hide the repository's actual backlog from autonomous executors. - .sort((left, right) => implementationDiagnosticRank(left) - - implementationDiagnosticRank(right) || left.id.localeCompare(right.id)); -} - function findRelatedRecords( diagnostic: Diagnostic, recordsById: Map, @@ -242,60 +247,6 @@ function confidenceForDiagnostic( return confidenceFor(diagnostic, matchingProposals); } -interface CodeChangePlanSemanticDraft { - title: string; - description: string; - priority: TodoPriority; - target: IntentTarget; - acceptanceCriteria: string[]; - changes: CodeChangeFile[]; - risk: CodeChangePlan['risk']; - rollback: string; - evidence: { - graphFingerprint: string; - recordIds: string[]; - diagnosticIds: string[]; - conclusionIds: string[]; - proposalIds: string[]; - }; -} - -function buildPlanEvidence( - graphFingerprint: string, - diagnosticId: string, - relatedRecords: IntentRecord[], - matchingConclusions: Conclusion[], - matchingProposals: TodoProposal[], -): CodeChangePlanSemanticDraft['evidence'] { - return { - graphFingerprint, - recordIds: uniqueSorted(relatedRecords.map((record) => record.id)), - diagnosticIds: [diagnosticId], - conclusionIds: uniqueSorted(matchingConclusions.map((item) => item.id)), - proposalIds: uniqueSorted(matchingProposals.map((item) => item.id)), - }; -} - -function buildPlanSemantic( - diagnostic: Diagnostic, - relatedRecords: IntentRecord[], - target: IntentTarget, - changes: CodeChangeFile[], - evidence: CodeChangePlanSemanticDraft['evidence'], -): CodeChangePlanSemanticDraft { - return { - title: titleFor(diagnostic, relatedRecords), - description: descriptionFor(diagnostic, relatedRecords, target), - priority: priorityFor(diagnostic), - target, - acceptanceCriteria: acceptanceCriteriaFor(diagnostic, target), - changes, - risk: riskFor(diagnostic, changes), - rollback: rollbackFor(changes), - evidence, - }; -} - function buildPlanResult( generatedAt: string, confidence: number, @@ -329,10 +280,6 @@ export function createRepositoryPathProbe(root: string): (relativePath: string) }; } -function implementationDiagnosticRank(diagnostic: Diagnostic): number { - return diagnostic.code === 'PLANNED_NOT_IMPLEMENTED' ? 0 : 1; -} - /** * Re-diagnose an after graph and decide whether the plan's targeted * diagnostics cleared without introducing new blocking findings. @@ -508,88 +455,6 @@ function buildCloseResult( generation: deterministicGeneration(evaluatedAt, 't2c/code-change-close-result'), }; } -function indexProposalsByDiagnostic(proposals: TodoProposal[]): Map { - const index = new Map(); - for (const proposal of proposals) { - for (const diagnosticId of proposal.diagnosticIds) { - const list = index.get(diagnosticId) ?? []; - list.push(proposal); - index.set(diagnosticId, list); - } - } - return index; -} - -function indexConclusionsByDiagnostic(conclusions: Conclusion[]): Map { - const index = new Map(); - for (const conclusion of conclusions) { - for (const diagnosticId of conclusion.diagnosticIds) { - const list = index.get(diagnosticId) ?? []; - list.push(conclusion); - index.set(diagnosticId, list); - } - } - return index; -} - -function collectTarget(records: IntentRecord[], proposals: TodoProposal[]): IntentTarget { - const target = collectTargetComponents(records, proposals); - return finalizeTarget(target); -} - -function collectTargetComponents( - records: IntentRecord[], - proposals: TodoProposal[], -): { - paths: Set; - symbols: Set; - tickets: Set; - versions: Set; -} { - const paths = new Set(); - const symbols = new Set(); - const tickets = new Set(); - const versions = new Set(); - for (const source of records) { - addTargetEntries(source.statement.target, paths, symbols, tickets, versions); - } - for (const proposal of proposals) { - addTargetEntries(proposal.target, paths, symbols, tickets, versions); - } - return { paths, symbols, tickets, versions }; -} - -function addTargetEntries( - target: IntentTarget, - paths: Set, - symbols: Set, - tickets: Set, - versions: Set, -): void { - for (const value of target.paths) paths.add(value); - for (const value of target.symbols) symbols.add(value); - for (const value of target.tickets) tickets.add(value); - for (const value of target.versions) versions.add(value); -} - -function finalizeTarget(target: { - paths: Set; - symbols: Set; - tickets: Set; - versions: Set; -}): IntentTarget { - const paths = [...target.paths].filter(isUsefulCodeChangePath); - const symbols = [...target.symbols]; - const tickets = [...target.tickets]; - const versions = [...target.versions]; - return normalizeTarget({ - paths, - symbols, - tickets, - versions, - }); -} - function buildChanges( target: IntentTarget, records: IntentRecord[], @@ -634,62 +499,6 @@ function buildChanges( return []; } -function titleFor(diagnostic: Diagnostic, records: IntentRecord[]): string { - const record = records[0]; - const object = record?.statement.object?.trim(); - // `inferObject` removes the verb selected by the action classifier. In a - // compound sentence a later high-precedence verb can win (`verify` before - // `implement`), leaving the original leading imperative inside `object` and - // a broken fragment after the removed verb. The source statement is the - // lossless title whenever that mismatch is visible. - if (object && startsWithImperative(object) && record?.statement.text.trim()) { - return record.statement.text.trim().replace(/[.!?]+$/, ''); - } - if (object) return `Implement ${object}`; - return diagnostic.title.trim() || `Resolve ${diagnostic.code}`; -} - -function startsWithImperative(value: string): boolean { - return /^(?:add|build|change|configure|create|delete|document|fix|implement|preserve|refactor|remove|test|update|validate|verify)\b/i.test(value) - || /^(?:dodać|dodac|naprawić|naprawic|przetestować|przetestowac|usunąć|usunac|utworzyć|utworzyc|wdrożyć|wdrozyc|zmienić|zmienic|zweryfikować|zweryfikowac)\b/i.test(value); -} - -function descriptionFor( - diagnostic: Diagnostic, - records: IntentRecord[], - target: IntentTarget, -): string { - const parts = [ - diagnostic.detail.trim(), - records[0] ? `Source intent: ${records[0].statement.text.trim()}` : '', - target.paths.length ? `Paths: ${target.paths.join(', ')}.` : '', - target.symbols.length ? `Symbols: ${target.symbols.join(', ')}.` : '', - target.tickets.length ? `Tickets: ${target.tickets.join(', ')}.` : '', - ].filter(Boolean); - return parts.join(' '); -} - -function acceptanceCriteriaFor(diagnostic: Diagnostic, target: IntentTarget): string[] { - const criteria = [ - `Re-run todo2code link+diagnose and clear diagnostic ${diagnostic.id} (${diagnostic.code}).`, - 'Do not introduce new blocking diagnostics.', - ]; - if (target.paths.length) { - criteria.push(`Touch only the declared paths: ${uniqueSorted(target.paths).join(', ')}.`); - } - if (target.symbols.length) { - criteria.push(`Provide AST evidence for symbols: ${uniqueSorted(target.symbols).join(', ')}.`); - } - return uniqueSorted(criteria); -} - -function priorityFor(diagnostic: Diagnostic): TodoPriority { - if (diagnostic.severity === 'blocking') return 'P0'; - if (diagnostic.severity === 'review_required') return 'P1'; - if (diagnostic.severity === 'warning') return 'P2'; - return 'P3'; -} - function confidenceFor(diagnostic: Diagnostic, proposals: TodoProposal[]): number { if (proposals.length) { return Math.min(0.92, Math.max(...proposals.map((item) => item.confidence))); @@ -699,19 +508,8 @@ function confidenceFor(diagnostic: Diagnostic, proposals: TodoProposal[]): numbe return 0.72; } -function riskFor(diagnostic: Diagnostic, changes: CodeChangeFile[]): CodeChangePlan['risk'] { - const level = diagnostic.severity === 'blocking' ? 'high' - : diagnostic.severity === 'review_required' ? 'medium' - : 'low'; - const reasons = [ - `Derived from ${diagnostic.severity} diagnostic ${diagnostic.id}.`, - `Touches ${changes.length} declared ${changes.length === 1 ? 'path' : 'paths'}.`, - ]; - return { level, reasons: uniqueSorted(reasons) }; -} - -function rollbackFor(changes: CodeChangeFile[]): string { - return `Revert the proposed changes to ${uniqueSorted(changes.map((item) => item.path)).join(', ')} and re-run todo2code diagnostics.`; +function uniqueSorted(values: string[]): string[] { + return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); } function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { @@ -735,1505 +533,4 @@ function deterministicGeneration(generatedAt: string, generator: string): Ground }; } -function uniqueSorted(values: string[]): string[] { - return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); -} - -export interface CreateCodeChangeReviewOptions { - plans: CodeChangePlan[]; - graphFingerprint: string; - createdAt?: string; -} - -export interface CreatedCodeChangeReview { - markdown: string; - artifact: CodeChangeReviewPatch; -} - -/** - * Render a stable, reviewable Markdown brief for grounded code-change plans. - * - * This is not a source patch and is never applied to the tree. It exists so - * humans and agents share one hash-bound artifact that lists exact paths, - * acceptance criteria, evidence IDs, risk and rollback instructions. - */ -export function createCodeChangeReviewPatch( - options: CreateCodeChangeReviewOptions, -): CreatedCodeChangeReview { - const context = buildCodeChangeReviewContext(options); - const markdown = buildCodeChangeReviewMarkdown(context); - const artifact = buildCodeChangeReviewArtifact(context, markdown); - assertCodeChangeReviewPatch(artifact); - return { markdown, artifact }; -} - -interface CodeChangeReviewContext { - plans: CodeChangePlan[]; - graphFingerprint: string; - createdAt: string; -} - -function buildCodeChangeReviewContext(options: CreateCodeChangeReviewOptions): CodeChangeReviewContext { - if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { - throw new Error('graphFingerprint must be a SHA-256 hex digest'); - } - const createdAt = options.createdAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); - assertCodeChangePlansForReview(options.plans, options.graphFingerprint); - return { - plans: sortCodeChangeReviewPlans(options.plans), - graphFingerprint: options.graphFingerprint, - createdAt, - }; -} - -function sortCodeChangeReviewPlans(plans: CodeChangePlan[]): CodeChangePlan[] { - return [...plans].sort((left, right) => - priorityRank(left.priority) - priorityRank(right.priority) || left.id.localeCompare(right.id)); -} - -function buildCodeChangeReviewMarkdown(context: CodeChangeReviewContext): string { - return renderCodeChangeReviewMarkdown(context.plans, context.graphFingerprint); -} - -function buildCodeChangeReviewArtifact( - context: CodeChangeReviewContext, - markdown: string, -): CodeChangeReviewPatch { - return { - schemaVersion: 't2c.code-change-review/v1', - createdAt: context.createdAt, - graphFingerprint: context.graphFingerprint, - planIds: context.plans.map((plan) => plan.id), - planHashes: context.plans.map((plan) => plan.planHash), - renderedPatchHash: sha256(markdown), - generation: deterministicGeneration(context.createdAt, 't2c/code-change-review'), - }; -} - -export function renderCodeChangeReviewMarkdown( - plans: CodeChangePlan[], - graphFingerprint: string, -): string { - const lines = buildCodeChangeReviewMarkdownLines(plans, graphFingerprint); - return lines.join('\n'); -} - -function buildCodeChangeReviewMarkdownLines( - plans: CodeChangePlan[], - graphFingerprint: string, -): string[] { - const lines = [ - '', - '# todo2code proposed code changes', - '', - 'This document is a grounded **review brief**, not an auto-applied source patch.', - 'Implement the listed paths in a normal branch, re-run the pipeline, then', - '`t2c evaluate-code-change`. Acceptance still requires human/CI approval before DONE.', - '', - `Graph fingerprint: \`${graphFingerprint}\``, - '', - ]; - if (!plans.length) { - lines.push('_No grounded code-change plans. Open diagnostics either cleared or lack repository paths._', ''); - return lines; - } - let currentPriority: CodeChangePlan['priority'] | null = null; - for (const plan of plans) { - currentPriority = appendPriorityHeader(lines, currentPriority, plan); - appendPlanDetails(lines, plan); - } - appendAfterImplementationSection(lines); - return lines; -} - -function appendPriorityHeader( - lines: string[], - currentPriority: CodeChangePlan['priority'] | null, - plan: CodeChangePlan, -): CodeChangePlan['priority'] { - if (plan.priority === currentPriority) return currentPriority; - if (currentPriority !== null) lines.push(''); - lines.push(`## ${plan.priority}`, ''); - return plan.priority; -} - -function appendPlanDetails(lines: string[], plan: CodeChangePlan): void { - lines.push(`### ${inline(plan.title)} (\`${plan.id}\`)`, ''); - lines.push(`- Plan hash: \`${plan.planHash}\``); - lines.push(`- Risk: **${plan.risk.level}** — ${plan.risk.reasons.map(inline).join('; ')}`); - lines.push(`- Confidence: ${plan.confidence.toFixed(2)}`); - lines.push(`- Description: ${inline(plan.description)}`); - appendPlanChanges(lines, plan); - lines.push('- Acceptance criteria:'); - for (const criterion of plan.acceptanceCriteria) lines.push(` - [ ] ${inline(criterion)}`); - lines.push(`- Diagnostics: ${renderIds(plan.evidence.diagnosticIds)}`); - lines.push(`- Evidence records: ${renderIds(plan.evidence.recordIds)}`); - if (plan.evidence.proposalIds.length) lines.push(`- TODO proposals: ${renderIds(plan.evidence.proposalIds)}`); - if (plan.evidence.conclusionIds.length) lines.push(`- Conclusions: ${renderIds(plan.evidence.conclusionIds)}`); - lines.push(`- Rollback: ${inline(plan.rollback)}`); - lines.push(''); -} - -function appendPlanChanges(lines: string[], plan: CodeChangePlan): void { - lines.push('- Changes:'); - for (const change of plan.changes) { - const symbols = change.symbols.length ? ` symbols: ${change.symbols.map((item) => `\`${item}\``).join(', ')}` : ''; - lines.push(` - \`${change.action}\` \`${change.path}\`${symbols}`); - lines.push(` - ${inline(change.rationale)}`); - } -} - -function appendAfterImplementationSection(lines: string[]): void { - lines.push('## After implementation', ''); - lines.push('1. Re-run `t2c pipeline` (or extract + link + diagnose) on the changed tree.'); - lines.push('2. `t2c evaluate-code-change --before-graph … --after-graph … --out acceptance.json`.'); - lines.push('3. Require `accepted=true` and human/CI review before marking work DONE.'); - lines.push(''); -} - -export function assertCodeChangeReviewPatch(value: unknown): asserts value is CodeChangeReviewPatch { - const artifact = assertSourcePatchObject(value, 'Code change review patch must be an object'); - validateReviewPatchKeys(artifact); - assertCodeChangeReviewPatchSchema(artifact); - assertCodeChangeReviewPatchPlanCollections(artifact); - assertCodeChangeReviewPatchGeneration(artifact); -} - -function validateReviewPatchKeys(artifact: Record): void { - const required = [ - 'schemaVersion', 'createdAt', 'graphFingerprint', 'planIds', 'planHashes', - 'renderedPatchHash', 'generation', - ]; - for (const key of required) { - if (!(key in artifact)) throw new Error(`Code change review patch is missing: ${key}`); - } -} - -function assertCodeChangeReviewPatchSchema(artifact: Record): void { - assertReviewPatchSchemaVersion(artifact); - assertReviewPatchDateFields(artifact); - assertReviewPatchIds(artifact); -} - -function assertReviewPatchSchemaVersion(artifact: Record): void { - if (artifact.schemaVersion !== 't2c.code-change-review/v1') { - throw new Error('Unsupported code change review schemaVersion'); - } -} - -function assertReviewPatchDateFields(artifact: Record): void { - if (typeof artifact.createdAt !== 'string' || Number.isNaN(Date.parse(artifact.createdAt))) { - throw new Error('Code change review createdAt must be an ISO date-time'); - } - if (typeof artifact.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.graphFingerprint)) { - throw new Error('Code change review graphFingerprint must be SHA-256'); - } - if (typeof artifact.renderedPatchHash !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.renderedPatchHash)) { - throw new Error('Code change review renderedPatchHash must be SHA-256'); - } -} - -function assertReviewPatchIds(artifact: Record): void { - if (!Array.isArray(artifact.planIds) || !artifact.planIds.every((id) => typeof id === 'string' && /^CPLAN-[a-f0-9]{20}$/.test(id))) { - throw new Error('Code change review planIds must be CPLAN ids'); - } - if (!Array.isArray(artifact.planHashes) || !artifact.planHashes.every((hash) => typeof hash === 'string' && /^[a-f0-9]{64}$/.test(hash))) { - throw new Error('Code change review planHashes must be SHA-256 digests'); - } -} - -function assertCodeChangeReviewPatchPlanCollections(artifact: Record): void { - if (artifact.planIds.length !== artifact.planHashes.length) { - throw new Error('Code change review planIds and planHashes must have equal length'); - } - if (new Set(artifact.planIds as string[]).size !== (artifact.planIds as string[]).length) { - throw new Error('Code change review planIds must be unique'); - } -} - -function assertCodeChangeReviewPatchGeneration(artifact: Record): void { - assertGroundedGenerationMetadata(artifact.generation, 'Code change review generation'); - const generation = artifact.generation as GroundedGenerationMetadata; - if (generation.generatedAt !== artifact.createdAt) { - throw new Error('Code change review generation.generatedAt must match createdAt'); - } - if (generation.generator !== 't2c/code-change-review') { - throw new Error('Code change review generation.generator must be t2c/code-change-review'); - } -} - -function priorityRank(priority: TodoPriority): number { - return ({ P0: 0, P1: 1, P2: 2, P3: 3 } as const)[priority]; -} - -function inline(value: string): string { - return value.replace(/\s+/g, ' ').trim(); -} - -function renderIds(ids: string[]): string { - return ids.length ? ids.map((id) => `\`${id}\``).join(', ') : '_none_'; -} - -export interface CreateCodeChangeSourcePatchOptions { - plan: CodeChangePlan; - /** Optional per-path unified diffs keyed by relative repository path. */ - unifiedDiffs?: Record; - createdAt?: string; -} - -/** - * Build a structured source-edit proposal from one grounded code-change plan. - * - * Deterministic by default: each planned file gets an imperative instruction. - * Callers may attach a unified diff per path; the runtime validates path headers - * and rejects traversal / host paths. Nothing is written to the working tree. - */ -export function createCodeChangeSourcePatch( - options: CreateCodeChangeSourcePatchOptions, -): CodeChangeSourcePatch { - const context = buildSourcePatchContext(options); - const edits = buildSourcePatchEdits(context); - const semantic = buildSourcePatchSemantic(context, edits); - const patchHash = createCodeChangeSourcePatchHash(semantic); - const patch: CodeChangeSourcePatch = { - schemaVersion: 't2c.code-change-source-patch/v1', - id: createCodeChangeSourcePatchId(semantic), - patchHash, - status: 'proposed', - createdAt: context.createdAt, - ...semantic, - generation: deterministicGeneration(context.createdAt, 't2c/code-change-source-patch'), - }; - assertCodeChangeSourcePatch(patch, context.plan); - return patch; -} - -interface SourcePatchCreationContext { - plan: CodeChangePlan; - createdAt: string; - allowedPaths: Set; - diffs: Record; -} - -function buildSourcePatchContext(options: CreateCodeChangeSourcePatchOptions): SourcePatchCreationContext { - const { plan, unifiedDiffs = {} } = options; - const graphFingerprint = plan?.evidence?.graphFingerprint; - assertCodeChangePlansForReview( - [plan], - typeof graphFingerprint === 'string' ? graphFingerprint : '', - ); - const createdAt = options.createdAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); - const allowedPaths = collectPlanTargetPaths(plan.target.paths); - validateUnifiedDiffsBelongToPlan(plan.id, unifiedDiffs, allowedPaths); - return { plan, createdAt, allowedPaths, diffs: unifiedDiffs }; -} - -function collectPlanTargetPaths(paths: string[]): Set { - return new Set(paths.map((item) => item.replace(/\\/g, '/'))); -} - -function validateUnifiedDiffsBelongToPlan( - planId: string, - diffs: Record, - allowedPaths: Set, -): void { - for (const diffPath of Object.keys(diffs)) { - const normalizedPath = diffPath.replace(/\\/g, '/'); - if (!allowedPaths.has(normalizedPath)) { - throw new Error(`Unified diff path ${normalizedPath} is not declared by plan ${planId}`); - } - } -} - -function buildSourcePatchEdits(context: SourcePatchCreationContext): CodeChangeSourceEdit[] { - const edits: CodeChangeSourceEdit[] = context.plan.changes - .map((change) => buildSourcePatchEdit(context, change)) - .sort((left, right) => left.path.localeCompare(right.path) || left.action.localeCompare(right.action)); - if (!edits.length) throw new Error(`Plan ${context.plan.id} has no editable paths`); - return edits; -} - -function buildSourcePatchEdit( - context: SourcePatchCreationContext, - change: CodeChangeFile, -): CodeChangeSourceEdit { - const path = change.path.replace(/\\/g, '/'); - if (!context.allowedPaths.has(path)) { - throw new Error(`Edit path ${path} is not present in plan target.paths`); - } - const rawDiff = context.diffs[path]; - const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); - return { - path, - action: change.action, - symbols: uniqueSorted(change.symbols), - instruction: instructionFor(change, context.plan), - unifiedDiff, - }; -} - -function buildSourcePatchSemantic( - context: SourcePatchCreationContext, - edits: CodeChangeSourceEdit[], -): Omit { - return { - planId: context.plan.id, - planHash: context.plan.planHash, - graphFingerprint: context.plan.evidence.graphFingerprint, - diagnosticIds: uniqueSorted(context.plan.evidence.diagnosticIds), - recordIds: uniqueSorted(context.plan.evidence.recordIds), - edits, - acceptanceCriteria: uniqueSorted(context.plan.acceptanceCriteria), - }; -} - -export function createCodeChangeSourcePatchSet(options: { - plans: CodeChangePlan[]; - graphFingerprint: string; - unifiedDiffsByPlanId?: Record>; - generatedAt?: string; -}): CodeChangeSourcePatchSet { - const context = normalizePatchSetOptions(options); - const patches = buildPatchesForSet(context); - const result = buildSourcePatchSet(context, patches); - assertCodeChangeSourcePatchSet(result, options.plans); - return result; -} - -interface SourcePatchSetBuildContext { - plans: CodeChangePlan[]; - graphFingerprint: string; - generatedAt: string; - unifiedDiffsByPlanId: Record>; -} - -function normalizePatchSetOptions( - options: { - plans: CodeChangePlan[]; - graphFingerprint: string; - unifiedDiffsByPlanId?: Record>; - generatedAt?: string; - }, -): SourcePatchSetBuildContext { - if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { - throw new Error('graphFingerprint must be a SHA-256 hex digest'); - } - assertCodeChangePlansForReview(options.plans, options.graphFingerprint); - const generatedAt = options.generatedAt ?? new Date().toISOString(); - return { - plans: options.plans, - graphFingerprint: options.graphFingerprint, - generatedAt, - unifiedDiffsByPlanId: options.unifiedDiffsByPlanId ?? {}, - }; -} - -function buildPatchesForSet(context: SourcePatchSetBuildContext): CodeChangeSourcePatch[] { - return [...context.plans] - .sort((left, right) => left.id.localeCompare(right.id)) - .map((plan) => createCodeChangeSourcePatch({ - plan, - createdAt: context.generatedAt, - ...(context.unifiedDiffsByPlanId[plan.id] ? { unifiedDiffs: context.unifiedDiffsByPlanId[plan.id] } : {}), - })); -} - -function buildSourcePatchSet( - context: SourcePatchSetBuildContext, - patches: CodeChangeSourcePatch[], -): CodeChangeSourcePatchSet { - return { - schemaVersion: 't2c.code-change-source-patch-set/v1', - generatedAt: context.generatedAt, - graphFingerprint: context.graphFingerprint, - patches, - generation: deterministicGeneration(context.generatedAt, 't2c/code-change-source-patch-set'), - }; -} - -export function assertCodeChangeSourcePatch( - value: unknown, - plan?: CodeChangePlan, -): asserts value is CodeChangeSourcePatch { - const patch = assertCodeChangeSourcePatchObject(value, plan); - validateSourcePatchSchema(patch); - validateSourcePatchIdentifiers(patch); - const editPaths = validateSourcePatchEdits(patch); - validateSourcePatchHashAndId(patch); - validateSourcePatchGeneration(patch); - if (plan) { - validateSourcePatchAgainstPlan(patch, plan, editPaths); - } -} - -function assertCodeChangeSourcePatchObject(value: unknown, plan?: CodeChangePlan): CodeChangeSourcePatch { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change source patch must be an object'); - } - const patch = value as CodeChangeSourcePatch; - exactSourcePatchKeys(patch as unknown as Record, [ - 'schemaVersion', 'id', 'patchHash', 'status', 'createdAt', 'planId', 'planHash', - 'graphFingerprint', 'diagnosticIds', 'recordIds', 'edits', 'acceptanceCriteria', 'generation', - ], 'Source patch'); - if (plan !== undefined && typeof patch.planId === 'string' && patch.id) { - if (patch.planId !== plan.id) { - throw new Error('Source patch is not bound to the supplied plan'); - } - } - return patch; -} - -function validateSourcePatchSchema(patch: CodeChangeSourcePatch): void { - if (patch.schemaVersion !== 't2c.code-change-source-patch/v1') { - throw new Error('Unsupported code change source patch schemaVersion'); - } - if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { - throw new Error('Source patch createdAt must be an ISO date-time'); - } - if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); - if (!Array.isArray(patch.edits) || patch.edits.length === 0) { - throw new Error('Source patch edits must be a non-empty array'); - } -} - -function validateSourcePatchIdentifiers(patch: CodeChangeSourcePatch): void { - if (typeof patch.id !== 'string' || !/^SPATCH-[a-f0-9]{20}$/.test(patch.id)) { - throw new Error('Source patch id must match SPATCH-<20 hex>'); - } - if (typeof patch.patchHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.patchHash)) { - throw new Error('Source patch patchHash must be SHA-256'); - } - if (typeof patch.planId !== 'string' || !/^CPLAN-[a-f0-9]{20}$/.test(patch.planId)) { - throw new Error('Source patch planId must match CPLAN-<20 hex>'); - } - if (typeof patch.planHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.planHash)) { - throw new Error('Source patch planHash must be SHA-256'); - } - if (typeof patch.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(patch.graphFingerprint)) { - throw new Error('Source patch graphFingerprint must be SHA-256'); - } - assertSourcePatchIds(patch.diagnosticIds, /^DIAG-[a-f0-9]{20}$/, 'diagnosticIds'); - assertSourcePatchIds(patch.recordIds, /^INT-[A-Z]+-[a-f0-9]{20}$/, 'recordIds'); - assertSourcePatchStrings(patch.acceptanceCriteria, 'acceptanceCriteria', false); -} - -function validateSourcePatchEdits(patch: CodeChangeSourcePatch): Set { - return collectSourcePatchEditPathActions(patch.edits); -} - -function collectSourcePatchEditPathActions(edits: CodeChangeSourceEdit[]): Set { - const paths = new Set(); - for (const edit of edits) { - const editContext = validateSourcePatchEdit(edit, paths); - paths.add(editContext.pathActionKey); - } - return paths; -} - -interface SourcePatchEditValidationContext { - pathActionKey: string; -} - -function validateSourcePatchEdit( - edit: CodeChangeSourceEdit, - seen: Set, -): SourcePatchEditValidationContext { - const normalizedEdit = assertSourcePatchEditObject(edit); - const normalizedPath = normalizeSourcePatchEditPath(normalizedEdit.path); - validateSourcePatchEditBody(normalizedEdit, normalizedPath); - validateSourcePatchEditDiff(normalizedEdit.unifiedDiff, normalizedPath); - assertUniqueSourcePatchEditPathAction(seen, normalizedPath, normalizedEdit.action); - const pathActionKey = `${normalizedPath}::${normalizedEdit.action}`; - return { pathActionKey }; -} - -function assertSourcePatchEditObject(edit: CodeChangeSourceEdit | unknown): { - path: unknown; - action: unknown; - symbols: unknown; - instruction: unknown; - unifiedDiff: string | null; -} { - if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); - exactSourcePatchKeys(edit as unknown as Record, [ - 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', - ], 'Source patch edit'); - return edit as { - path: unknown; - action: unknown; - symbols: unknown; - instruction: unknown; - unifiedDiff: string | null; - }; -} - -function validateSourcePatchEditBody( - edit: { - path: unknown; - action: unknown; - symbols: unknown; - instruction: unknown; - unifiedDiff: string | null; - }, - normalizedPath: string, -): void { - ensureSourcePatchEditAction(edit.action); - ensureSourcePatchEditInstruction(edit.instruction); - assertSourcePatchStrings(edit.symbols, `edits[${normalizedPath}].symbols`, true); -} - -function validateSourcePatchEditDiff(unifiedDiff: string | null, normalizedPath: string): void { - if (unifiedDiff === null) return; - if (typeof unifiedDiff !== 'string') { - throw new Error(`Source patch unifiedDiff for ${normalizedPath} must be string or null`); - } - normalizeUnifiedDiff(unifiedDiff, normalizedPath); -} - -function assertUniqueSourcePatchEditPathAction( - seen: Set, - normalizedPath: string, - action: unknown, -): void { - const pathActionKey = `${normalizedPath}::${action}`; - if (seen.has(pathActionKey)) throw new Error(`Duplicate source patch edit for ${normalizedPath}`); -} - -function normalizeSourcePatchEditPath(pathValue: unknown): string { - const normalizedPath = (typeof pathValue === 'string' ? pathValue.trim() : '').replace(/\\/g, '/'); - if (!normalizedPath || normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..')) { - throw new Error(`Source patch edit path is not a relative repository path: ${normalizedPath}`); - } - return normalizedPath; -} - -function ensureSourcePatchEditAction(action: unknown): void { - if (!['create', 'modify', 'delete'].includes(action as string) || typeof action !== 'string') { - throw new Error(`Source patch edit action is unsupported: ${String(action)}`); - } -} - -function ensureSourcePatchEditInstruction(instruction: unknown): void { - if (typeof instruction !== 'string' || !instruction.trim()) { - throw new Error('Source patch edit instruction must be non-blank'); - } -} -function validateSourcePatchHashAndId(patch: CodeChangeSourcePatch): void { - const expectedHash = createCodeChangeSourcePatchHash(patch); - if (patch.patchHash !== expectedHash) { - throw new Error(`Source patch patchHash does not match semantic content: expected ${expectedHash}`); - } - if (patch.id !== createCodeChangeSourcePatchId(patch)) { - throw new Error('Source patch id does not match semantic content'); - } -} - -function validateSourcePatchGeneration(patch: CodeChangeSourcePatch): void { - assertGroundedGenerationMetadata(patch.generation, 'Source patch generation'); - if (patch.generation.generatedAt !== patch.createdAt) { - throw new Error('Source patch generation.generatedAt must match createdAt'); - } - if (patch.generation.generator !== 't2c/code-change-source-patch') { - throw new Error('Source patch generation.generator must be t2c/code-change-source-patch'); - } -} - -function validateSourcePatchAgainstPlan( - patch: CodeChangeSourcePatch, - plan: CodeChangePlan, - editPaths: Set, -): void { - assertSourcePatchPlanBinding(patch, plan); - const expectedChanges = collectExpectedPlanChanges(plan); - validateSourcePatchEditsAgainstPlan(patch, plan, expectedChanges); - validateSourcePatchEvidence(patch, plan, expectedChanges, editPaths); -} - -function assertSourcePatchPlanBinding(patch: CodeChangeSourcePatch, plan: CodeChangePlan): void { - if (patch.planHash !== plan.planHash) throw new Error('Source patch is not bound to the supplied plan'); - if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { - throw new Error('Source patch graphFingerprint does not match the plan'); - } -} - -function collectExpectedPlanChanges(plan: CodeChangePlan): Map { - return new Map(plan.changes.map((item) => [ - item.path.replace(/\\/g, '/'), item.action, - ])); -} - -function validateSourcePatchEditsAgainstPlan( - patch: CodeChangeSourcePatch, - plan: CodeChangePlan, - expectedChanges: Map, -): void { - const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); - for (const edit of patch.edits) { - const editPath = edit.path.replace(/\\/g, '/'); - if (!allowed.has(editPath)) { - throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); - } - if (expectedChanges.get(editPath) !== edit.action) { - throw new Error(`Source patch action for ${edit.path} does not match the plan`); - } - } -} - -function validateSourcePatchEvidence( - patch: CodeChangeSourcePatch, - plan: CodeChangePlan, - expectedChangePaths: Map, - editPaths: Set, -): void { - const actualEditPaths = [...editPaths].map((item) => item.split('::')[0]); - const expectedPaths = [...expectedChangePaths.keys()]; - exactSourcePatchSet(actualEditPaths, expectedPaths, 'edit paths'); - exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); - exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); - exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); -} - -export function assertCodeChangeSourcePatchSet( - value: unknown, - plans?: CodeChangePlan[], -): asserts value is CodeChangeSourcePatchSet { - const set = assertSourcePatchSetObject(value); - const context = createSourcePatchSetValidationContext(plans); - validateSourcePatchSetSchema(set); - validateSourcePatchSetPatches(set, context); - validateSourcePatchSetGeneration(set); -} - -interface SourcePatchSetValidationContext { - plansById: Map; - expectedPlanIds: string[] | null; -} - -function createSourcePatchSetValidationContext(plans?: CodeChangePlan[]): SourcePatchSetValidationContext { - const expectedPlanIds = plans?.map((plan) => plan.id) ?? null; - return { - plansById: new Map((plans ?? []).map((plan) => [plan.id, plan])), - expectedPlanIds, - }; -} - -function assertSourcePatchObject(value: unknown, objectLabel: string): Record { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error(objectLabel); - } - return value as Record; -} - -function assertSourcePatchSetObject(value: unknown): CodeChangeSourcePatchSet { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change source patch set must be an object'); - } - const set = value as CodeChangeSourcePatchSet; - exactSourcePatchKeys(set as unknown as Record, [ - 'schemaVersion', 'generatedAt', 'graphFingerprint', 'patches', 'generation', - ], 'Source patch set'); - return set; -} - -function validateSourcePatchSetSchema(set: CodeChangeSourcePatchSet): void { - if (set.schemaVersion !== 't2c.code-change-source-patch-set/v1') { - throw new Error('Unsupported code change source patch set schemaVersion'); - } - if (typeof set.generatedAt !== 'string' || Number.isNaN(Date.parse(set.generatedAt))) { - throw new Error('Source patch set generatedAt must be an ISO date-time'); - } - if (typeof set.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(set.graphFingerprint)) { - throw new Error('Source patch set graphFingerprint must be SHA-256'); - } - if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); -} - -function validateSourcePatchSetPatches( - set: CodeChangeSourcePatchSet, - context: SourcePatchSetValidationContext, -): void { - const patchIds = new Set(); - for (const patch of set.patches) { - validateSetPatchAndTrackDuplicates(set, patch, context, patchIds); - } - validateSetPatchesPlanCoverage(set, context.expectedPlanIds); -} - -function validateSetPatchAndTrackDuplicates( - set: CodeChangeSourcePatchSet, - patch: CodeChangeSourcePatch, - context: SourcePatchSetValidationContext, - patchIds: Set, -): void { - const expectedPlan = context.plansById.get(patch.planId); - assertCodeChangeSourcePatch(patch, expectedPlan); - validateSetPatchGraphFingerprint(set, patch); - assertUniqueSetPatchId(patchIds, patch.id); - patchIds.add(patch.id); -} - -function validateSetPatchGraphFingerprint( - set: CodeChangeSourcePatchSet, - patch: CodeChangeSourcePatch, -): void { - if (patch.graphFingerprint !== set.graphFingerprint) { - throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); - } -} - -function assertUniqueSetPatchId( - patchIds: Set, - patchId: string, -): void { - if (patchIds.has(patchId)) throw new Error(`Duplicate source patch id: ${patchId}`); -} - -function validateSetPatchesPlanCoverage( - set: CodeChangeSourcePatchSet, - expectedPlanIds: string[] | null, -): void { - if (!expectedPlanIds) return; - exactSourcePatchSet(set.patches.map((patch) => patch.planId), expectedPlanIds, 'planIds'); -} - -function validateSourcePatchSetGeneration(set: CodeChangeSourcePatchSet): void { - assertGroundedGenerationMetadata(set.generation, 'Source patch set generation'); - if (set.generation.generatedAt !== set.generatedAt) { - throw new Error('Source patch set generation.generatedAt must match generatedAt'); - } - if (set.generation.generator !== 't2c/code-change-source-patch-set') { - throw new Error('Source patch set generation.generator must be t2c/code-change-source-patch-set'); - } -} - -function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { - const actual = Object.keys(value).sort(); - const wanted = [...expected].sort(); - if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { - throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); - } -} - -function assertSourcePatchIds(value: unknown, pattern: RegExp, name: string): asserts value is string[] { - if (!Array.isArray(value) || value.length === 0 - || value.some((item) => typeof item !== 'string' || !pattern.test(item))) { - throw new Error(`Source patch ${name} must be a non-empty array of valid IDs`); - } - if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); -} - -function assertSourcePatchStrings(value: unknown, name: string, emptyAllowed: boolean): asserts value is string[] { - if (!Array.isArray(value) || (!emptyAllowed && value.length === 0) - || value.some((item) => typeof item !== 'string' || !item.trim())) { - throw new Error(`Source patch ${name} must contain ${emptyAllowed ? 'only ' : ''}non-blank strings`); - } - if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); -} - -function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { - const left = [...new Set(actual)].sort(); - const right = [...new Set(expected)].sort(); - if (left.length !== right.length || left.some((item, index) => item !== right[index])) { - throw new Error(`Source patch ${name} do not match the plan`); - } -} - -function instructionFor(change: CodeChangeFile, plan: CodeChangePlan): string { - const symbols = change.symbols.length - ? ` Focus on symbols: ${change.symbols.join(', ')}.` - : ''; - const criteria = plan.acceptanceCriteria.length - ? ` Acceptance: ${plan.acceptanceCriteria.join(' ')}` - : ''; - return `${change.action} \`${change.path}\`. ${change.rationale.trim()}.${symbols}${criteria}`.replace(/\s+/g, ' ').trim(); -} - -/** - * Validate a single-file unified diff body. - * Accepts optional `--- a/path` / `+++ b/path` headers and rejects foreign paths. - */ -function normalizeUnifiedDiff(diff: string, expectedPath: string): string { - const normalized = normalizeUnifiedDiffText(diff, expectedPath); - validateUnifiedDiffBody(normalized, expectedPath); - validateUnifiedDiffPathHeaders(normalized, expectedPath); - return normalized; -} - -function normalizeUnifiedDiffText(diff: string, expectedPath: string): string { - const normalized = diff.replace(/\r\n/g, '\n'); - if (!normalized.trim()) throw new Error(`Unified diff for ${expectedPath} is empty`); - if (normalized.includes('\0')) throw new Error(`Unified diff for ${expectedPath} contains NUL bytes`); - return normalized; -} - -function validateUnifiedDiffBody(diff: string, expectedPath: string): void { - if (/(?:api[_-]?key|secret|password|private[_-]?key)\s*[:=]\s*['"]?[^'"\s]{8,}/i.test(diff)) { - throw new Error(`Unified diff for ${expectedPath} appears to contain a secret assignment`); - } -} - -function validateUnifiedDiffPathHeaders(diff: string, expectedPath: string): void { - for (const header of extractUnifiedDiffHeaders(diff)) { - validateUnifiedDiffHeaderPath(header, expectedPath); - } -} - -function extractUnifiedDiffHeaders(diff: string): string[] { - return [...diff.matchAll(/^(?:---|\+\+\+)\s+(?:[ab]\/)?(.+)$/gm)].map((match) => match[1]!.trim()); -} - -function validateUnifiedDiffHeaderPath(header: string, expectedPath: string): void { - if (header === '/dev/null') return; - const normalizedPath = normalizeUnifiedDiffHeaderPath(header); - assertUnifiedDiffHeaderPathSafety(normalizedPath, expectedPath); -} - -function normalizeUnifiedDiffHeaderPath(header: string): string { - return header.replace(/\\/g, '/').trim(); -} - -function assertUnifiedDiffHeaderPathSafety(normalizedPath: string, expectedPath: string): void { - if (isUnifiedDiffTraversalHeader(normalizedPath)) { - throw new Error(`Unified diff for ${expectedPath} uses a non-repository path header: ${normalizedPath}`); - } - if (!matchesUnifiedDiffExpectedHeader(normalizedPath, expectedPath)) { - const bare = normalizedHeaderPathCandidate(normalizedPath); - const stripped = stripLeadingDiffPrefix(bare); - if (stripped !== expectedPath) { - throw new Error(`Unified diff for ${expectedPath} references foreign path: ${normalizedPath}`); - } - } -} - -function isUnifiedDiffTraversalHeader(normalizedPath: string): boolean { - return normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..'); -} - -function matchesUnifiedDiffExpectedHeader(normalizedPath: string, expectedPath: string): boolean { - return normalizedPath === expectedPath - || normalizedPath === `a/${expectedPath}` - || normalizedPath === `b/${expectedPath}`; -} - -function normalizedHeaderPathCandidate(normalizedPath: string): string { - return normalizedPath.split('\t')[0] ?? normalizedPath; -} - -function stripLeadingDiffPrefix(pathValue: string): string { - return pathValue.replace(/^[ab]\//, ''); -} - -export interface ApplyCodeChangeSourcePatchOptions { - root: string; - patch: CodeChangeSourcePatch; - approval: CodeChangeSourcePatchApproval; - receiptPath: string; - now?: Date; -} - -export interface ApplyCodeChangeSourcePatchResult { - applied: boolean; - idempotent: boolean; - receipt: CodeChangeSourceApplyReceipt; -} - -interface NormalizedApplyCodeChangeSourcePatchRequest { - root: string; - patch: CodeChangeSourcePatch; - approval: CodeChangeSourcePatchApproval; - receiptPath: string; - now?: Date; -} - -interface SourcePatchApplyLock { - path: string; - lock: Awaited>; -} - -/** - * Apply a fully-diffed source patch after explicit hash approval. - * - * Instruction-only edits (null unifiedDiff) are rejected. Paths must stay - * relative and inside `root`. Re-applying with an existing matching receipt is - * idempotent. - */ -export async function applyCodeChangeSourcePatch( - options: ApplyCodeChangeSourcePatchOptions, -): Promise { - const request = assertPatchApplicationRequest(options); - const root = path.resolve(request.root); - const receiptPath = await assertPathWithinRoot(root, path.resolve(request.receiptPath)); - await ensureDir(path.dirname(receiptPath)); - const lock = await acquireApplyLock(receiptPath); - try { - const idempotentResult = await readExistingReceipt(receiptPath, request.patch, root); - if (idempotentResult) return idempotentResult; - - const prepared = await prepareSourceEdits(request.patch, root, receiptPath); - const now = (request.now ?? new Date()).toISOString(); - const receipt = await applyPreparedEdits(prepared, request.patch, request.approval.actor.trim(), now, receiptPath); - return { applied: true, idempotent: false, receipt }; - } finally { - await lock.lock.close(); - await fs.unlink(lock.path).catch(() => undefined); - } -} - -async function readExistingReceipt( - receiptPath: string, - patch: CodeChangeSourcePatch, - root: string, -): Promise { - if (!(await pathExists(receiptPath))) return null; - const existing = await readJson(receiptPath, 1024 * 1024); - await assertExistingSourceReceipt(existing, patch, root); - return { applied: false, idempotent: true, receipt: existing }; -} - -function assertPatchApplicationRequest( - options: ApplyCodeChangeSourcePatchOptions, -): NormalizedApplyCodeChangeSourcePatchRequest { - const patch = assertCodeChangeSourcePatchAndActorAndEdits(options.patch, options.approval); - assertPatchApprovalActor(options.approval); - assertPatchApprovalHash(options.patch, options.approval); - assertPatchEditsContainDiffs(patch); - return { - root: options.root, - patch: options.patch, - approval: options.approval, - receiptPath: options.receiptPath, - now: options.now, - }; -} - -function assertCodeChangeSourcePatchAndActorAndEdits( - patch: CodeChangeSourcePatch, - approval: CodeChangeSourcePatchApproval, -): CodeChangeSourcePatch { - assertCodeChangeSourcePatch(patch); - if (!approval) { - throw new Error('Source patch approval object is required'); - } - return patch; -} - -function assertPatchApprovalActor(approval: CodeChangeSourcePatchApproval): string { - if (!approval.actor?.trim()) { - throw new Error('Explicit source patch approval actor is required'); - } - return approval.actor.trim(); -} - -function assertPatchApprovalHash( - patch: CodeChangeSourcePatch, - approval: CodeChangeSourcePatchApproval, -): void { - if (approval.patchHash !== patch.patchHash) { - throw new Error('Source patch approval hash does not match the patch'); - } -} - -function assertPatchEditsContainDiffs(patch: CodeChangeSourcePatch): void { - for (const edit of patch.edits) { - if (edit.unifiedDiff === null) { - throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); - } - } -} - -async function acquireApplyLock(receiptPath: string): Promise { - const lockPath = `${receiptPath}.t2c-apply.lock`; - try { - const lock = await fs.open(lockPath, 'wx'); - return { path: lockPath, lock }; - } catch (error) { - if ((error as NodeJS.ErrnoException).code === 'EEXIST') { - throw new Error('Another source patch apply operation is in progress'); - } - throw error; - } -} - -async function prepareSourceEdits( - patch: CodeChangeSourcePatch, - root: string, - receiptPath: string, -): Promise { - const prepared: PreparedSourceEdit[] = []; - for (const edit of patch.edits) { - const target = await prepareSourceEditTarget(edit, root, receiptPath); - const before = target.existed ? await readText(target.absolute, 16 * 1024 * 1024) : ''; - const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, target.relative); - assertDeleteEditClearsAll(target.relative, edit.action, after); - prepared.push({ - ...target, - action: edit.action, - before, - after, - }); - } - return prepared; -} - -interface SourcePatchEditTarget { - relative: string; - absolute: string; - existed: boolean; -} - -async function prepareSourceEditTarget( - edit: CodeChangeSourceEdit, - root: string, - receiptPath: string, -): Promise { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - if (absolute === receiptPath) { - throw new Error(`Source patch target collides with its receipt path: ${relative}`); - } - const existed = await pathExists(absolute); - await assertSourcePatchTargetNotSymlink(absolute, existed, relative); - validatePatchTargetForEdit(edit.action, relative, existed, edit.unifiedDiff!); - return { relative, absolute, existed }; -} - -async function assertSourcePatchTargetNotSymlink( - absolute: string, - existed: boolean, - relative: string, -): Promise { - if (!existed) return; - if ((await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Refusing to apply through a symlink: ${relative}`); - } -} - -function assertDeleteEditClearsAll(relative: string, action: CodeChangeFileAction, after: string): void { - if (action === 'delete' && after !== '') { - throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); - } -} - -function validatePatchTargetForEdit( - action: CodeChangeFileAction, - relative: string, - exists: boolean, - unifiedDiff: string, -): void { - if (action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); - if (action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); - if (action === 'modify' && !exists) { - const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(unifiedDiff) - || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(unifiedDiff); - if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); - } -} - -async function applyPreparedEdits( - prepared: PreparedSourceEdit[], - patch: CodeChangeSourcePatch, - approvedBy: string, - now: string, - receiptPath: string, -): Promise { - const changed: PreparedSourceEdit[] = []; - try { - await writePreparedEdits(prepared, changed); - const receipt = buildPatchApplyReceipt(prepared, patch, approvedBy, now); - assertSourceApplyReceipt(receipt, patch); - // The receipt is part of the transaction: without it a retry could apply - // the same approved patch again. Roll files back if persisting it fails. - await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); - return receipt; - } catch (error) { - const rollbackErrors = await rollbackPreparedEdits(changed); - if (rollbackErrors.length) { - throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); - } - throw error; - } -} - -async function writePreparedEdits(prepared: PreparedSourceEdit[], changed: PreparedSourceEdit[]): Promise { - for (const edit of prepared) { - if (edit.action === 'delete') await fs.unlink(edit.absolute); - else await atomicWriteRaw(edit.absolute, edit.after); - changed.push(edit); - } -} - -function buildPatchApplyReceipt( - prepared: PreparedSourceEdit[], - patch: CodeChangeSourcePatch, - approvedBy: string, - now: string, -): CodeChangeSourceApplyReceipt { - const fileHashesAfter = Object.fromEntries(prepared - .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) - .sort(([left], [right]) => left.localeCompare(right))); - return { - schemaVersion: 't2c.code-change-source-apply-receipt/v1', - patchId: patch.id, - patchHash: patch.patchHash, - planId: patch.planId, - approvedBy, - approvedAt: now, - appliedAt: now, - appliedPaths: prepared.map((edit) => edit.relative).sort(), - fileHashesAfter, - generation: deterministicGeneration(now, 't2c/code-change-source-apply'), - }; -} - -async function rollbackPreparedEdits(changes: PreparedSourceEdit[]): Promise { - const rollbackErrors: string[] = []; - for (const edit of [...changes].reverse()) { - try { - if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); - else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { - if (failure.code !== 'ENOENT') throw failure; - }); - } catch (rollbackError) { - rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); - } - } - return rollbackErrors; -} - -interface PreparedSourceEdit { - relative: string; - absolute: string; - action: CodeChangeFileAction; - before: string; - after: string; - existed: boolean; -} - -async function assertExistingSourceReceipt( - receipt: CodeChangeSourceApplyReceipt, - patch: CodeChangeSourcePatch, - root: string, -): Promise { - try { - assertSourceApplyReceipt(receipt, patch); - } catch { - throw new Error('A different or invalid source patch receipt already exists at the receipt path'); - } - for (const edit of patch.edits) { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - const exists = await pathExists(absolute); - if (edit.action === 'delete') { - if (exists) throw new Error(`Applied source patch state changed after receipt: ${relative}`); - continue; - } - if (!exists || (await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Applied source patch state changed after receipt: ${relative}`); - } - const current = await readText(absolute, 16 * 1024 * 1024); - if (receipt.fileHashesAfter[relative] !== sha256(current)) { - throw new Error(`Applied source patch state changed after receipt: ${relative}`); - } - } -} - -function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: CodeChangeSourcePatch): void { - validateSourceApplyReceiptShape(receipt); - validateSourceApplyReceiptIdentity(receipt, patch); - validateSourceApplyReceiptTimestamps(receipt); - validateSourceApplyReceiptPathHashes(receipt, patch); - validateSourceApplyReceiptGeneration(receipt); -} - -function validateSourceApplyReceiptShape(receipt: CodeChangeSourceApplyReceipt): void { - exactSourcePatchKeys(receipt as unknown as Record, [ - 'schemaVersion', 'patchId', 'patchHash', 'planId', 'approvedBy', 'approvedAt', - 'appliedAt', 'appliedPaths', 'fileHashesAfter', 'generation', - ], 'Code change source apply receipt'); -} - -function validateSourceApplyReceiptIdentity( - receipt: CodeChangeSourceApplyReceipt, - patch: CodeChangeSourcePatch, -): void { - if (receipt.schemaVersion !== 't2c.code-change-source-apply-receipt/v1' - || receipt.patchId !== patch.id - || receipt.patchHash !== patch.patchHash - || receipt.planId !== patch.planId) { - throw new Error('Code change source apply receipt does not match its patch'); - } -} - -function validateSourceApplyReceiptTimestamps(receipt: CodeChangeSourceApplyReceipt): void { - if (!receipt.approvedBy.trim()) throw new Error('Code change source apply receipt approvedBy is required'); - if (!Number.isFinite(Date.parse(receipt.approvedAt)) || !Number.isFinite(Date.parse(receipt.appliedAt))) { - throw new Error('Code change source apply receipt timestamps must be ISO date-times'); - } -} - -function validateSourceApplyReceiptPathHashes( - receipt: CodeChangeSourceApplyReceipt, - patch: CodeChangeSourcePatch, -): void { - const expectedPaths = patch.edits.map((edit) => edit.path).sort(); - exactSourcePatchSet(receipt.appliedPaths, expectedPaths, 'receipt appliedPaths'); - const hashPaths = Object.keys(receipt.fileHashesAfter).sort(); - exactSourcePatchSet(hashPaths, expectedPaths, 'receipt fileHashesAfter paths'); - if (Object.values(receipt.fileHashesAfter).some((value) => !/^[a-f0-9]{64}$/.test(value))) { - throw new Error('Code change source apply receipt file hashes must be SHA-256'); - } -} - -function validateSourceApplyReceiptGeneration(receipt: CodeChangeSourceApplyReceipt): void { - assertGroundedGenerationMetadata(receipt.generation, 'Code change source apply receipt generation'); - if (receipt.generation.generatedAt !== receipt.appliedAt - || receipt.generation.generator !== 't2c/code-change-source-apply') { - throw new Error('Code change source apply receipt generation does not match the apply operation'); - } -} - -async function atomicWriteRaw(target: string, content: string): Promise { - await ensureDir(path.dirname(target)); - const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`; - try { - await fs.writeFile(temporary, content, 'utf8'); - await fs.rename(temporary, target); - } finally { - await fs.unlink(temporary).catch(() => undefined); - } -} - -/** - * Apply a single-file unified diff to a text buffer. - * Supports standard hunks with space/+/− prefixes. Throws on context mismatch. - */ -export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: string): string { - const baseLines = splitKeep(base); - const hunks = parseUnifiedDiffIntoHunks(diff, expectedPath); - const output = applyUnifiedDiffHunks(baseLines, expectedPath, hunks); - // Reconstruct text. Files without a trailing newline end without an empty last segment. - return joinAppliedText(base.endsWith('\n'), output); -} - -function joinAppliedText(baseEndsWithNewline: boolean, lines: string[]): string { - if (baseEndsWithNewline || lines.length === 0) return `${lines.join('\n')}${lines.length ? '\n' : ''}`; - return lines.join('\n'); -} - -interface ParsedUnifiedDiffHunk { - oldStart: number; - oldCount: number; - newCount: number; - lines: string[]; -} - -function parseUnifiedDiffIntoHunks(diff: string, expectedPath: string): ParsedUnifiedDiffHunk[] { - const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); - const context = createEmptyUnifiedDiffContext(); - for (const line of parseUnifiedDiffLines(normalizedDiff)) { - applyUnifiedDiffLineToContext(context, line, expectedPath); - } - return finalizeUnifiedDiffContext(context, expectedPath); -} - -interface UnifiedDiffParsingContext { - current: ParsedUnifiedDiffHunk | null; - hunks: ParsedUnifiedDiffHunk[]; -} - -function createEmptyUnifiedDiffContext(): UnifiedDiffParsingContext { - return { current: null, hunks: [] }; -} - -function parseUnifiedDiffLines(diff: string): string[] { - return diff.split('\n'); -} - -function finalizeUnifiedDiffContext( - context: UnifiedDiffParsingContext, - expectedPath: string, -): ParsedUnifiedDiffHunk[] { - if (context.current) { - context.hunks.push(context.current); - context.current = null; - } - if (!context.hunks.length) { - throw new Error(`Unified diff for ${expectedPath} contains no hunks`); - } - return context.hunks; -} - -function applyUnifiedDiffLineToContext( - context: UnifiedDiffParsingContext, - line: string, - expectedPath: string, -): void { - const header = parseUnifiedDiffHeader(line); - if (header) { - if (context.current) { - context.hunks.push(context.current); - } - context.current = header; - return; - } - if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { - return; - } - if (!context.current) { - if (line === '') return; - throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); - } - // Blank lines without a unified-diff prefix separate hunks in some emitters. - if (line === '') return; - context.current.lines.push(line); -} - -function parseUnifiedDiffHeader(line: string): ParsedUnifiedDiffHunk | null { - const match = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); - if (!match) return null; - return buildParsedUnifiedDiffHunk(match); -} - -function buildParsedUnifiedDiffHunk(match: RegExpMatchArray): ParsedUnifiedDiffHunk { - return { - oldStart: Number(match[1]), - oldCount: match[2] === undefined ? 1 : Number(match[2]), - newCount: match[4] === undefined ? 1 : Number(match[4]), - lines: [], - }; -} - -interface UnifiedDiffCursor { - position: number; -} - -function applyUnifiedDiffHunks( - baseLines: string[], - expectedPath: string, - hunks: ParsedUnifiedDiffHunk[], -): string[] { - const cursor: UnifiedDiffCursor = { position: 0 }; - const output: string[] = []; - for (const hunk of hunks) { - applyUnifiedDiffHunk(baseLines, expectedPath, cursor, output, hunk); - } - appendRemainingBaseLines(baseLines, cursor, output); - return output; -} - -function applyUnifiedDiffHunk( - baseLines: string[], - expectedPath: string, - cursor: UnifiedDiffCursor, - output: string[], - hunk: ParsedUnifiedDiffHunk, -): void { - const oldIndex = Math.max(0, hunk.oldStart - 1); - if (oldIndex < cursor.position) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); - validateHunkCounts(expectedPath, hunk); - copyBaseLinesToCursor(baseLines, expectedPath, cursor, output, oldIndex); - for (const line of hunk.lines) { - if (line.startsWith('\\')) continue; // "\ No newline at end of file" - applyUnifiedDiffLine(expectedPath, line, cursor, baseLines, output); - } -} - -function copyBaseLinesToCursor( - baseLines: string[], - expectedPath: string, - cursor: UnifiedDiffCursor, - output: string[], - targetIndex: number, -): void { - while (cursor.position < targetIndex) { - if (cursor.position >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); - output.push(baseLines[cursor.position]!); - cursor.position += 1; - } -} - -function appendRemainingBaseLines( - baseLines: string[], - cursor: UnifiedDiffCursor, - output: string[], -): void { - while (cursor.position < baseLines.length) { - output.push(baseLines[cursor.position]!); - cursor.position += 1; - } -} - -function validateHunkCounts(expectedPath: string, hunk: ParsedUnifiedDiffHunk): void { - const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; - const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; - if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { - throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); - } -} - -function applyUnifiedDiffLine( - expectedPath: string, - line: string, - cursor: UnifiedDiffCursor, - baseLines: string[], - output: string[], -): void { - const mark = line[0]; - const body = line.slice(1); - if (line === '') { - throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); - } - if (mark === ' ') { - applyUnifiedDiffContextLine(expectedPath, body, cursor, baseLines, output); - return; - } - if (mark === '-') { - applyUnifiedDiffDeletionLine(expectedPath, body, cursor, baseLines); - return; - } - if (mark === '+') { - applyUnifiedDiffAdditionLine(body, output); - return; - } - throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); -} - -function applyUnifiedDiffContextLine( - expectedPath: string, - body: string, - cursor: UnifiedDiffCursor, - baseLines: string[], - output: string[], -): void { - if (baseLines[cursor.position] !== body) { - throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor.position + 1}`); - } - output.push(baseLines[cursor.position]!); - cursor.position += 1; -} - -function applyUnifiedDiffDeletionLine( - expectedPath: string, - body: string, - cursor: UnifiedDiffCursor, - baseLines: string[], -): void { - if (baseLines[cursor.position] !== body) { - throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor.position + 1}`); - } - cursor.position += 1; -} - -function applyUnifiedDiffAdditionLine(body: string, output: string[]): void { - output.push(body); -} - -function splitKeep(text: string): string[] { - if (text === '') return []; - const lines = text.split('\n'); - if (text.endsWith('\n')) lines.pop(); - return lines; -} diff --git a/src/synthesis/code-change-plan/implementation-indexing.ts b/src/synthesis/code-change-plan/implementation-indexing.ts new file mode 100644 index 0000000..5fa94f4 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-indexing.ts @@ -0,0 +1,25 @@ +import type { Conclusion, TodoProposal } from '../../core/types.js'; + +export function indexProposalsByDiagnostic(proposals: TodoProposal[]): Map { + const index = new Map(); + for (const proposal of proposals) { + for (const diagnosticId of proposal.diagnosticIds) { + const list = index.get(diagnosticId) ?? []; + list.push(proposal); + index.set(diagnosticId, list); + } + } + return index; +} + +export function indexConclusionsByDiagnostic(conclusions: Conclusion[]): Map { + const index = new Map(); + for (const conclusion of conclusions) { + for (const diagnosticId of conclusion.diagnosticIds) { + const list = index.get(diagnosticId) ?? []; + list.push(conclusion); + index.set(diagnosticId, list); + } + } + return index; +} diff --git a/src/synthesis/code-change-plan/implementation-review.ts b/src/synthesis/code-change-plan/implementation-review.ts new file mode 100644 index 0000000..69796aa --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-review.ts @@ -0,0 +1,269 @@ +import { assertCodeChangePlansForReview, assertGroundedGenerationMetadata } from '../../core/schema.js'; +import { sha256, stableStringify } from '../../core/id.js'; +import type { CodeChangePlan, CodeChangeReviewPatch, GroundedGenerationMetadata, TodoPriority } from '../../core/types.js'; +import { IMPLEMENTATION_DIAGNOSTIC_CODES } from './implementation-diagnostics.js'; +import { T2C_VERSION } from '../../version.js'; + +export interface CreateCodeChangeReviewOptions { + plans: CodeChangePlan[]; + graphFingerprint: string; + createdAt?: string; +} + +export interface CreatedCodeChangeReview { + markdown: string; + artifact: CodeChangeReviewPatch; +} + +/** + * Render a stable, reviewable Markdown brief for grounded code-change plans. + * + * This is not a source patch and is never applied to the tree. It exists so + * humans and agents share one hash-bound artifact that lists exact paths, + * acceptance criteria, evidence IDs, risk and rollback instructions. + */ +export function createCodeChangeReviewPatch( + options: CreateCodeChangeReviewOptions, +): CreatedCodeChangeReview { + const context = buildCodeChangeReviewContext(options); + const markdown = buildCodeChangeReviewMarkdown(context); + const artifact = buildCodeChangeReviewArtifact(context, markdown); + assertCodeChangeReviewPatch(artifact); + return { markdown, artifact }; +} + +interface CodeChangeReviewContext { + plans: CodeChangePlan[]; + graphFingerprint: string; + createdAt: string; +} + +function buildCodeChangeReviewContext(options: CreateCodeChangeReviewOptions): CodeChangeReviewContext { + if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { + throw new Error('graphFingerprint must be a SHA-256 hex digest'); + } + const createdAt = options.createdAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); + assertCodeChangePlansForReview(options.plans, options.graphFingerprint); + return { + plans: sortCodeChangeReviewPlans(options.plans), + graphFingerprint: options.graphFingerprint, + createdAt, + }; +} + +function sortCodeChangeReviewPlans(plans: CodeChangePlan[]): CodeChangePlan[] { + return [...plans].sort((left, right) => + priorityRank(left.priority) - priorityRank(right.priority) || left.id.localeCompare(right.id)); +} + +function buildCodeChangeReviewMarkdown(context: CodeChangeReviewContext): string { + return renderCodeChangeReviewMarkdown(context.plans, context.graphFingerprint); +} + +function buildCodeChangeReviewArtifact( + context: CodeChangeReviewContext, + markdown: string, +): CodeChangeReviewPatch { + return { + schemaVersion: 't2c.code-change-review/v1', + createdAt: context.createdAt, + graphFingerprint: context.graphFingerprint, + planIds: context.plans.map((plan) => plan.id), + planHashes: context.plans.map((plan) => plan.planHash), + renderedPatchHash: sha256(markdown), + generation: deterministicGeneration(context.createdAt, 't2c/code-change-review'), + }; +} + +export function renderCodeChangeReviewMarkdown( + plans: CodeChangePlan[], + graphFingerprint: string, +): string { + const lines = buildCodeChangeReviewMarkdownLines(plans, graphFingerprint); + return lines.join('\n'); +} + +function buildCodeChangeReviewMarkdownLines( + plans: CodeChangePlan[], + graphFingerprint: string, +): string[] { + const lines = [ + '', + '# todo2code proposed code changes', + '', + 'This document is a grounded **review brief**, not an auto-applied source patch.', + 'Implement the listed paths in a normal branch, re-run the pipeline, then', + '`t2c evaluate-code-change`. Acceptance still requires human/CI approval before DONE.', + '', + `Graph fingerprint: \`${graphFingerprint}\``, + '', + ]; + if (!plans.length) { + lines.push('_No grounded code-change plans. Open diagnostics either cleared or lack repository paths._', ''); + return lines; + } + let currentPriority: CodeChangePlan['priority'] | null = null; + for (const plan of plans) { + currentPriority = appendPriorityHeader(lines, currentPriority, plan); + appendPlanDetails(lines, plan); + } + appendAfterImplementationSection(lines); + return lines; +} + +function appendPriorityHeader( + lines: string[], + currentPriority: CodeChangePlan['priority'] | null, + plan: CodeChangePlan, +): CodeChangePlan['priority'] { + if (plan.priority === currentPriority) return currentPriority; + if (currentPriority !== null) lines.push(''); + lines.push(`## ${plan.priority}`, ''); + return plan.priority; +} + +function appendPlanDetails(lines: string[], plan: CodeChangePlan): void { + lines.push(`### ${inline(plan.title)} (\`${plan.id}\`)`, ''); + lines.push(`- Plan hash: \`${plan.planHash}\``); + lines.push(`- Risk: **${plan.risk.level}** — ${plan.risk.reasons.map(inline).join('; ')}`); + lines.push(`- Confidence: ${plan.confidence.toFixed(2)}`); + lines.push(`- Description: ${inline(plan.description)}`); + appendPlanChanges(lines, plan); + lines.push('- Acceptance criteria:'); + for (const criterion of plan.acceptanceCriteria) lines.push(` - [ ] ${inline(criterion)}`); + lines.push(`- Diagnostics: ${renderIds(plan.evidence.diagnosticIds)}`); + lines.push(`- Evidence records: ${renderIds(plan.evidence.recordIds)}`); + if (plan.evidence.proposalIds.length) lines.push(`- TODO proposals: ${renderIds(plan.evidence.proposalIds)}`); + if (plan.evidence.conclusionIds.length) lines.push(`- Conclusions: ${renderIds(plan.evidence.conclusionIds)}`); + lines.push(`- Rollback: ${inline(plan.rollback)}`); + lines.push(''); +} + +function appendPlanChanges(lines: string[], plan: CodeChangePlan): void { + lines.push('- Changes:'); + for (const change of plan.changes) { + const symbols = change.symbols.length ? ` symbols: ${change.symbols.map((item) => `\`${item}\``).join(', ')}` : ''; + lines.push(` - \`${change.action}\` \`${change.path}\`${symbols}`); + lines.push(` - ${inline(change.rationale)}`); + } +} + +function appendAfterImplementationSection(lines: string[]): void { + lines.push('## After implementation', ''); + lines.push('1. Re-run `t2c pipeline` (or extract + link + diagnose) on the changed tree.'); + lines.push('2. `t2c evaluate-code-change --before-graph … --after-graph … --out acceptance.json`.'); + lines.push('3. Require `accepted=true` and human/CI review before marking work DONE.'); + lines.push(''); +} + +export function assertCodeChangeReviewPatch(value: unknown): asserts value is CodeChangeReviewPatch { + const artifact = assertReviewPatchObject(value, 'Code change review patch must be an object'); + validateReviewPatchKeys(artifact); + assertCodeChangeReviewPatchSchema(artifact); + assertCodeChangeReviewPatchPlanCollections(artifact); + assertCodeChangeReviewPatchGeneration(artifact); +} + +function validateReviewPatchKeys(artifact: Record): void { + const required = [ + 'schemaVersion', 'createdAt', 'graphFingerprint', 'planIds', 'planHashes', + 'renderedPatchHash', 'generation', + ]; + for (const key of required) { + if (!(key in artifact)) throw new Error(`Code change review patch is missing: ${key}`); + } +} + +function assertCodeChangeReviewPatchSchema(artifact: Record): void { + assertReviewPatchSchemaVersion(artifact); + assertReviewPatchDateFields(artifact); + assertReviewPatchIds(artifact); +} + +function assertReviewPatchSchemaVersion(artifact: Record): void { + if (artifact.schemaVersion !== 't2c.code-change-review/v1') { + throw new Error('Unsupported code change review schemaVersion'); + } +} + +function assertReviewPatchDateFields(artifact: Record): void { + if (typeof artifact.createdAt !== 'string' || Number.isNaN(Date.parse(artifact.createdAt))) { + throw new Error('Code change review createdAt must be an ISO date-time'); + } + if (typeof artifact.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.graphFingerprint)) { + throw new Error('Code change review graphFingerprint must be SHA-256'); + } + if (typeof artifact.renderedPatchHash !== 'string' || !/^[a-f0-9]{64}$/.test(artifact.renderedPatchHash)) { + throw new Error('Code change review renderedPatchHash must be SHA-256'); + } +} + +function assertReviewPatchIds(artifact: Record): void { + if (!Array.isArray(artifact.planIds) || !artifact.planIds.every((id) => typeof id === 'string' && /^CPLAN-[a-f0-9]{20}$/.test(id))) { + throw new Error('Code change review planIds must be CPLAN ids'); + } + if (!Array.isArray(artifact.planHashes) || !artifact.planHashes.every((hash) => typeof hash === 'string' && /^[a-f0-9]{64}$/.test(hash))) { + throw new Error('Code change review planHashes must be SHA-256 digests'); + } +} + +function assertCodeChangeReviewPatchPlanCollections(artifact: Record): void { + if (artifact.planIds.length !== artifact.planHashes.length) { + throw new Error('Code change review planIds and planHashes must have equal length'); + } + if (new Set(artifact.planIds as string[]).size !== (artifact.planIds as string[]).length) { + throw new Error('Code change review planIds must be unique'); + } +} + +function assertCodeChangeReviewPatchGeneration(artifact: Record): void { + assertGroundedGenerationMetadata(artifact.generation, 'Code change review generation'); + const generation = artifact.generation as GroundedGenerationMetadata; + if (generation.generatedAt !== artifact.createdAt) { + throw new Error('Code change review generation.generatedAt must match createdAt'); + } + if (generation.generator !== 't2c/code-change-review') { + throw new Error('Code change review generation.generator must be t2c/code-change-review'); + } +} + +function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { + return { + generator, + generatorVersion: '1', + runtimeVersion: T2C_VERSION, + generatedAt, + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + model: null, + provider: null, + responseId: null, + configurationFingerprint: sha256(stableStringify({ + generator, + generatorVersion: '1', + codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), + })), + reason: null, + }; +} + +function priorityRank(priority: TodoPriority): number { + return ({ P0: 0, P1: 1, P2: 2, P3: 3 } as const)[priority]; +} + +function inline(value: string): string { + return value.replace(/\s+/g, ' ').trim(); +} + +function renderIds(ids: string[]): string { + return ids.length ? ids.map((id) => `\`${id}\``).join(', ') : '_none_'; +} + +function assertReviewPatchObject(value: unknown, objectLabel: string): Record { + if (value === null || typeof value !== 'object' || Array.isArray(value)) { + throw new Error(objectLabel); + } + return value as Record; +} diff --git a/src/synthesis/code-change-plan/implementation-semantic.ts b/src/synthesis/code-change-plan/implementation-semantic.ts new file mode 100644 index 0000000..bbdf628 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-semantic.ts @@ -0,0 +1,125 @@ +import type { CodeChangeFile, CodeChangePlan, Conclusion, Diagnostic, IntentRecord, IntentTarget, TodoPriority, TodoProposal } from '../../core/types.js'; + +export interface CodeChangePlanSemanticDraft { + title: string; + description: string; + priority: TodoPriority; + target: IntentTarget; + acceptanceCriteria: string[]; + changes: CodeChangeFile[]; + risk: CodeChangePlan['risk']; + rollback: string; + evidence: { + graphFingerprint: string; + recordIds: string[]; + diagnosticIds: string[]; + conclusionIds: string[]; + proposalIds: string[]; + }; +} + +export function buildPlanEvidence( + graphFingerprint: string, + diagnosticId: string, + relatedRecords: IntentRecord[], + matchingConclusions: Conclusion[], + matchingProposals: TodoProposal[], +): CodeChangePlanSemanticDraft['evidence'] { + return { + graphFingerprint, + recordIds: uniqueSorted(relatedRecords.map((record) => record.id)), + diagnosticIds: [diagnosticId], + conclusionIds: uniqueSorted(matchingConclusions.map((item) => item.id)), + proposalIds: uniqueSorted(matchingProposals.map((item) => item.id)), + }; +} + +export function buildPlanSemantic( + diagnostic: Diagnostic, + relatedRecords: IntentRecord[], + target: IntentTarget, + changes: CodeChangeFile[], + evidence: CodeChangePlanSemanticDraft['evidence'], +): CodeChangePlanSemanticDraft { + return { + title: titleFor(diagnostic, relatedRecords), + description: descriptionFor(diagnostic, relatedRecords, target), + priority: priorityFor(diagnostic), + target, + acceptanceCriteria: acceptanceCriteriaFor(diagnostic, target), + changes, + risk: riskFor(diagnostic, changes), + rollback: rollbackFor(changes), + evidence, + }; +} + +function titleFor(diagnostic: Diagnostic, records: IntentRecord[]): string { + const record = records[0]; + const object = record?.statement.object?.trim(); + if (object && startsWithImperative(object) && record?.statement.text.trim()) { + return record.statement.text.trim().replace(/[.!?]+$/, ''); + } + if (object) return `Implement ${object}`; + return diagnostic.title.trim() || `Resolve ${diagnostic.code}`; +} + +function startsWithImperative(value: string): boolean { + return /^(?:add|build|change|configure|create|delete|document|fix|implement|preserve|refactor|remove|test|update|validate|verify)\b/i.test(value) + || /^(?:dodać|dodac|naprawić|naprawic|przetestować|przetestowac|usunąć|usunac|utworzyć|utworzyc|wdrożyć|wdrozyc|zmienić|zmienic|zweryfikować|zweryfikowac)\b/i.test(value); +} + +function descriptionFor( + diagnostic: Diagnostic, + records: IntentRecord[], + target: IntentTarget, +): string { + const parts = [ + diagnostic.detail.trim(), + records[0] ? `Source intent: ${records[0].statement.text.trim()}` : '', + target.paths.length ? `Paths: ${target.paths.join(', ')}.` : '', + target.symbols.length ? `Symbols: ${target.symbols.join(', ')}.` : '', + target.tickets.length ? `Tickets: ${target.tickets.join(', ')}.` : '', + ].filter(Boolean); + return parts.join(' '); +} + +function acceptanceCriteriaFor(diagnostic: Diagnostic, target: IntentTarget): string[] { + const criteria = [ + `Re-run todo2code link+diagnose and clear diagnostic ${diagnostic.id} (${diagnostic.code}).`, + 'Do not introduce new blocking diagnostics.', + ]; + if (target.paths.length) { + criteria.push(`Touch only the declared paths: ${uniqueSorted(target.paths).join(', ')}.`); + } + if (target.symbols.length) { + criteria.push(`Provide AST evidence for symbols: ${uniqueSorted(target.symbols).join(', ')}.`); + } + return uniqueSorted(criteria); +} + +function priorityFor(diagnostic: Diagnostic): TodoPriority { + if (diagnostic.severity === 'blocking') return 'P0'; + if (diagnostic.severity === 'review_required') return 'P1'; + if (diagnostic.severity === 'warning') return 'P2'; + return 'P3'; +} + +function riskFor(diagnostic: Diagnostic, changes: CodeChangeFile[]): CodeChangePlan['risk'] { + const level = diagnostic.severity === 'blocking' ? 'high' + : diagnostic.severity === 'review_required' ? 'medium' + : 'low'; + const reasons = [ + `Derived from ${diagnostic.severity} diagnostic ${diagnostic.id}.`, + `Touches ${changes.length} declared ${changes.length === 1 ? 'path' : 'paths'}.`, + ]; + return { level, reasons: uniqueSorted(reasons) }; +} + +function rollbackFor(changes: CodeChangeFile[]): string { + return `Revert the proposed changes to ${uniqueSorted(changes.map((item) => item.path)).join(', ')} and re-run todo2code diagnostics.`; +} + +function uniqueSorted(values: string[]): string[] { + return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); +} diff --git a/src/synthesis/code-change-plan/implementation-source-patch-apply.ts b/src/synthesis/code-change-plan/implementation-source-patch-apply.ts new file mode 100644 index 0000000..338472a --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-source-patch-apply.ts @@ -0,0 +1,663 @@ +import { randomUUID } from 'node:crypto'; +import { promises as fs } from 'node:fs'; +import path from 'node:path'; + +import { assertPathWithinRoot } from '../../core/security.js'; +import { assertGroundedGenerationMetadata } from '../../core/schema.js'; +import { + sha256, + stableStringify, +} from '../../core/id.js'; +import { ensureDir, pathExists, readJson, readText } from '../../core/io.js'; +import { T2C_VERSION } from '../../version.js'; +import { assertCodeChangeSourcePatch, normalizeUnifiedDiff } from './implementation-source-patch.js'; +import { IMPLEMENTATION_DIAGNOSTIC_CODES } from './implementation-diagnostics.js'; +import type { + CodeChangeFileAction, + CodeChangeSourceApplyReceipt, + CodeChangeSourceEdit, + CodeChangeSourcePatch, + CodeChangeSourcePatchApproval, + GroundedGenerationMetadata, +} from '../../core/types.js'; + +export interface ApplyCodeChangeSourcePatchOptions { + root: string; + patch: CodeChangeSourcePatch; + approval: CodeChangeSourcePatchApproval; + receiptPath: string; + now?: Date; +} + +export interface ApplyCodeChangeSourcePatchResult { + applied: boolean; + idempotent: boolean; + receipt: CodeChangeSourceApplyReceipt; +} + +interface NormalizedApplyCodeChangeSourcePatchRequest { + root: string; + patch: CodeChangeSourcePatch; + approval: CodeChangeSourcePatchApproval; + receiptPath: string; + now?: Date; +} + +interface SourcePatchApplyLock { + path: string; + lock: Awaited>; +} + +/** + * Apply a fully-diffed source patch after explicit hash approval. + * + * Instruction-only edits (null unifiedDiff) are rejected. Paths must stay + * relative and inside `root`. Re-applying with an existing matching receipt is + * idempotent. + */ +export async function applyCodeChangeSourcePatch( + options: ApplyCodeChangeSourcePatchOptions, +): Promise { + const request = assertPatchApplicationRequest(options); + const root = path.resolve(request.root); + const receiptPath = await assertPathWithinRoot(root, path.resolve(request.receiptPath)); + await ensureDir(path.dirname(receiptPath)); + const lock = await acquireApplyLock(receiptPath); + try { + const idempotentResult = await readExistingReceipt(receiptPath, request.patch, root); + if (idempotentResult) return idempotentResult; + + const prepared = await prepareSourceEdits(request.patch, root, receiptPath); + const now = (request.now ?? new Date()).toISOString(); + const receipt = await applyPreparedEdits(prepared, request.patch, request.approval.actor.trim(), now, receiptPath); + return { applied: true, idempotent: false, receipt }; + } finally { + await lock.lock.close(); + await fs.unlink(lock.path).catch(() => undefined); + } +} + +async function readExistingReceipt( + receiptPath: string, + patch: CodeChangeSourcePatch, + root: string, +): Promise { + if (!(await pathExists(receiptPath))) return null; + const existing = await readJson(receiptPath, 1024 * 1024); + await assertExistingSourceReceipt(existing, patch, root); + return { applied: false, idempotent: true, receipt: existing }; +} + +function assertPatchApplicationRequest( + options: ApplyCodeChangeSourcePatchOptions, +): NormalizedApplyCodeChangeSourcePatchRequest { + const patch = assertCodeChangeSourcePatch(options.patch); + assertPatchApprovalActor(options.approval); + assertPatchApprovalHash(patch, options.approval); + assertPatchEditsContainDiffs(patch); + return { + root: options.root, + patch: options.patch, + approval: options.approval, + receiptPath: options.receiptPath, + now: options.now, + }; +} + +function assertPatchApprovalActor(approval: CodeChangeSourcePatchApproval): string { + if (!approval) { + throw new Error('Source patch approval object is required'); + } + if (!approval.actor?.trim()) { + throw new Error('Explicit source patch approval actor is required'); + } + return approval.actor.trim(); +} + +function assertPatchApprovalHash( + patch: CodeChangeSourcePatch, + approval: CodeChangeSourcePatchApproval, +): void { + if (approval.patchHash !== patch.patchHash) { + throw new Error('Source patch approval hash does not match the patch'); + } +} + +function assertPatchEditsContainDiffs(patch: CodeChangeSourcePatch): void { + for (const edit of patch.edits) { + if (edit.unifiedDiff === null) { + throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); + } + } +} + +async function acquireApplyLock(receiptPath: string): Promise { + const lockPath = `${receiptPath}.t2c-apply.lock`; + try { + const lock = await fs.open(lockPath, 'wx'); + return { path: lockPath, lock }; + } catch (error) { + if ((error as NodeJS.ErrnoException).code === 'EEXIST') { + throw new Error('Another source patch apply operation is in progress'); + } + throw error; + } +} + +async function prepareSourceEdits( + patch: CodeChangeSourcePatch, + root: string, + receiptPath: string, +): Promise { + const prepared: PreparedSourceEdit[] = []; + for (const edit of patch.edits) { + const target = await prepareSourceEditTarget(edit, root, receiptPath); + const before = target.existed ? await readText(target.absolute, 16 * 1024 * 1024) : ''; + const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, target.relative); + assertDeleteEditClearsAll(target.relative, edit.action, after); + prepared.push({ + ...target, + action: edit.action, + before, + after, + }); + } + return prepared; +} + +interface SourcePatchEditTarget { + relative: string; + absolute: string; + existed: boolean; +} + +async function prepareSourceEditTarget( + edit: CodeChangeSourceEdit, + root: string, + receiptPath: string, +): Promise { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + if (absolute === receiptPath) { + throw new Error(`Source patch target collides with its receipt path: ${relative}`); + } + const existed = await pathExists(absolute); + await assertSourcePatchTargetNotSymlink(absolute, existed, relative); + validatePatchTargetForEdit(edit.action, relative, existed, edit.unifiedDiff!); + return { relative, absolute, existed }; +} + +async function assertSourcePatchTargetNotSymlink( + absolute: string, + existed: boolean, + relative: string, +): Promise { + if (!existed) return; + if ((await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Refusing to apply through a symlink: ${relative}`); + } +} + +function assertDeleteEditClearsAll(relative: string, action: CodeChangeFileAction, after: string): void { + if (action === 'delete' && after !== '') { + throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); + } +} + +function validatePatchTargetForEdit( + action: CodeChangeFileAction, + relative: string, + exists: boolean, + unifiedDiff: string, +): void { + if (action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); + if (action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); + if (action === 'modify' && !exists) { + const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(unifiedDiff) + || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(unifiedDiff); + if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); + } +} + +async function applyPreparedEdits( + prepared: PreparedSourceEdit[], + patch: CodeChangeSourcePatch, + approvedBy: string, + now: string, + receiptPath: string, +): Promise { + const changed: PreparedSourceEdit[] = []; + try { + await writePreparedEdits(prepared, changed); + const receipt = buildPatchApplyReceipt(prepared, patch, approvedBy, now); + assertSourceApplyReceipt(receipt, patch); + // The receipt is part of the transaction: without it a retry could apply + // the same approved patch again. Roll files back if persisting it fails. + await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); + return receipt; + } catch (error) { + const rollbackErrors = await rollbackPreparedEdits(changed); + if (rollbackErrors.length) { + throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); + } + throw error; + } +} + +async function writePreparedEdits(prepared: PreparedSourceEdit[], changed: PreparedSourceEdit[]): Promise { + for (const edit of prepared) { + if (edit.action === 'delete') await fs.unlink(edit.absolute); + else await atomicWriteRaw(edit.absolute, edit.after); + changed.push(edit); + } +} + +function buildPatchApplyReceipt( + prepared: PreparedSourceEdit[], + patch: CodeChangeSourcePatch, + approvedBy: string, + now: string, +): CodeChangeSourceApplyReceipt { + const fileHashesAfter = Object.fromEntries(prepared + .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) + .sort(([left], [right]) => left.localeCompare(right))); + return { + schemaVersion: 't2c.code-change-source-apply-receipt/v1', + patchId: patch.id, + patchHash: patch.patchHash, + planId: patch.planId, + approvedBy, + approvedAt: now, + appliedAt: now, + appliedPaths: prepared.map((edit) => edit.relative).sort(), + fileHashesAfter, + generation: deterministicGeneration(now, 't2c/code-change-source-apply'), + }; +} + +async function rollbackPreparedEdits(changes: PreparedSourceEdit[]): Promise { + const rollbackErrors: string[] = []; + for (const edit of [...changes].reverse()) { + try { + if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); + else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { + if (failure.code !== 'ENOENT') throw failure; + }); + } catch (rollbackError) { + rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); + } + } + return rollbackErrors; +} + +interface PreparedSourceEdit { + relative: string; + absolute: string; + action: CodeChangeFileAction; + before: string; + after: string; + existed: boolean; +} + +async function assertExistingSourceReceipt( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, + root: string, +): Promise { + try { + assertSourceApplyReceipt(receipt, patch); + } catch { + throw new Error('A different or invalid source patch receipt already exists at the receipt path'); + } + for (const edit of patch.edits) { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + const exists = await pathExists(absolute); + if (edit.action === 'delete') { + if (exists) throw new Error(`Applied source patch state changed after receipt: ${relative}`); + continue; + } + if (!exists || (await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Applied source patch state changed after receipt: ${relative}`); + } + const current = await readText(absolute, 16 * 1024 * 1024); + if (receipt.fileHashesAfter[relative] !== sha256(current)) { + throw new Error(`Applied source patch state changed after receipt: ${relative}`); + } + } +} + +function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: CodeChangeSourcePatch): void { + validateSourceApplyReceiptShape(receipt); + validateSourceApplyReceiptIdentity(receipt, patch); + validateSourceApplyReceiptTimestamps(receipt); + validateSourceApplyReceiptPathHashes(receipt, patch); + validateSourceApplyReceiptGeneration(receipt); +} + +function validateSourceApplyReceiptShape(receipt: CodeChangeSourceApplyReceipt): void { + exactSourcePatchKeys(receipt as unknown as Record, [ + 'schemaVersion', 'patchId', 'patchHash', 'planId', 'approvedBy', 'approvedAt', + 'appliedAt', 'appliedPaths', 'fileHashesAfter', 'generation', + ], 'Code change source apply receipt'); +} + +function validateSourceApplyReceiptIdentity( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, +): void { + if (receipt.schemaVersion !== 't2c.code-change-source-apply-receipt/v1' + || receipt.patchId !== patch.id + || receipt.patchHash !== patch.patchHash + || receipt.planId !== patch.planId) { + throw new Error('Code change source apply receipt does not match its patch'); + } +} + +function validateSourceApplyReceiptTimestamps(receipt: CodeChangeSourceApplyReceipt): void { + if (!receipt.approvedBy.trim()) throw new Error('Code change source apply receipt approvedBy is required'); + if (!Number.isFinite(Date.parse(receipt.approvedAt)) || !Number.isFinite(Date.parse(receipt.appliedAt))) { + throw new Error('Code change source apply receipt timestamps must be ISO date-times'); + } +} + +function validateSourceApplyReceiptPathHashes( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, +): void { + const expectedPaths = patch.edits.map((edit) => edit.path).sort(); + exactSourcePatchSet(receipt.appliedPaths, expectedPaths, 'receipt appliedPaths'); + const hashPaths = Object.keys(receipt.fileHashesAfter).sort(); + exactSourcePatchSet(hashPaths, expectedPaths, 'receipt fileHashesAfter paths'); + if (Object.values(receipt.fileHashesAfter).some((value) => !/^[a-f0-9]{64}$/.test(value))) { + throw new Error('Code change source apply receipt file hashes must be SHA-256'); + } +} + +function validateSourceApplyReceiptGeneration(receipt: CodeChangeSourceApplyReceipt): void { + assertGroundedGenerationMetadata(receipt.generation, 'Code change source apply receipt generation'); + if (receipt.generation.generatedAt !== receipt.appliedAt + || receipt.generation.generator !== 't2c/code-change-source-apply') { + throw new Error('Code change source apply receipt generation does not match the apply operation'); + } +} + +async function atomicWriteRaw(target: string, content: string): Promise { + await ensureDir(path.dirname(target)); + const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`; + try { + await fs.writeFile(temporary, content, 'utf8'); + await fs.rename(temporary, target); + } finally { + await fs.unlink(temporary).catch(() => undefined); + } +} + +/** + * Apply a single-file unified diff to a text buffer. + * Supports standard hunks with space/+/− prefixes. Throws on context mismatch. + */ +export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: string): string { + const baseLines = splitKeep(base); + const hunks = parseUnifiedDiffIntoHunks(diff, expectedPath); + const output = applyUnifiedDiffHunks(baseLines, expectedPath, hunks); + // Reconstruct text. Files without a trailing newline end without an empty last segment. + return joinAppliedText(base.endsWith('\n'), output); +} + +function joinAppliedText(baseEndsWithNewline: boolean, lines: string[]): string { + if (baseEndsWithNewline || lines.length === 0) return `${lines.join('\n')}${lines.length ? '\n' : ''}`; + return lines.join('\n'); +} + +interface ParsedUnifiedDiffHunk { + oldStart: number; + oldCount: number; + newCount: number; + lines: string[]; +} + +function parseUnifiedDiffIntoHunks(diff: string, expectedPath: string): ParsedUnifiedDiffHunk[] { + const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); + const context = createEmptyUnifiedDiffContext(); + for (const line of parseUnifiedDiffLines(normalizedDiff)) { + applyUnifiedDiffLineToContext(context, line, expectedPath); + } + return finalizeUnifiedDiffContext(context, expectedPath); +} + +interface UnifiedDiffParsingContext { + current: ParsedUnifiedDiffHunk | null; + hunks: ParsedUnifiedDiffHunk[]; +} + +function createEmptyUnifiedDiffContext(): UnifiedDiffParsingContext { + return { current: null, hunks: [] }; +} + +function parseUnifiedDiffLines(diff: string): string[] { + return diff.split('\n'); +} + +function finalizeUnifiedDiffContext( + context: UnifiedDiffParsingContext, + expectedPath: string, +): ParsedUnifiedDiffHunk[] { + if (context.current) { + context.hunks.push(context.current); + context.current = null; + } + if (!context.hunks.length) { + throw new Error(`Unified diff for ${expectedPath} contains no hunks`); + } + return context.hunks; +} + +function applyUnifiedDiffLineToContext( + context: UnifiedDiffParsingContext, + line: string, + expectedPath: string, +): void { + const header = parseUnifiedDiffHeader(line); + if (header) { + if (context.current) { + context.hunks.push(context.current); + } + context.current = header; + return; + } + if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { + return; + } + if (!context.current) { + if (line === '') return; + throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); + } + // Blank lines without a unified-diff prefix separate hunks in some emitters. + if (line === '') return; + context.current.lines.push(line); +} + +function parseUnifiedDiffHeader(line: string): ParsedUnifiedDiffHunk | null { + const match = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); + if (!match) return null; + return buildParsedUnifiedDiffHunk(match); +} + +function buildParsedUnifiedDiffHunk(match: RegExpMatchArray): ParsedUnifiedDiffHunk { + return { + oldStart: Number(match[1]), + oldCount: match[2] === undefined ? 1 : Number(match[2]), + newCount: match[4] === undefined ? 1 : Number(match[4]), + lines: [], + }; +} + +interface UnifiedDiffCursor { + position: number; +} + +function applyUnifiedDiffHunks( + baseLines: string[], + expectedPath: string, + hunks: ParsedUnifiedDiffHunk[], +): string[] { + const cursor: UnifiedDiffCursor = { position: 0 }; + const output: string[] = []; + for (const hunk of hunks) { + applyUnifiedDiffHunk(baseLines, expectedPath, cursor, output, hunk); + } + appendRemainingBaseLines(baseLines, cursor, output); + return output; +} + +function applyUnifiedDiffHunk( + baseLines: string[], + expectedPath: string, + cursor: UnifiedDiffCursor, + output: string[], + hunk: ParsedUnifiedDiffHunk, +): void { + const oldIndex = Math.max(0, hunk.oldStart - 1); + if (oldIndex < cursor.position) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); + validateHunkCounts(expectedPath, hunk); + copyBaseLinesToCursor(baseLines, expectedPath, cursor, output, oldIndex); + for (const line of hunk.lines) { + if (line.startsWith('\\')) continue; // "\ No newline at end of file" + applyUnifiedDiffLine(expectedPath, line, cursor, baseLines, output); + } +} + +function copyBaseLinesToCursor( + baseLines: string[], + expectedPath: string, + cursor: UnifiedDiffCursor, + output: string[], + targetIndex: number, +): void { + while (cursor.position < targetIndex) { + if (cursor.position >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); + output.push(baseLines[cursor.position]!); + cursor.position += 1; + } +} + +function appendRemainingBaseLines( + baseLines: string[], + cursor: UnifiedDiffCursor, + output: string[], +): void { + while (cursor.position < baseLines.length) { + output.push(baseLines[cursor.position]!); + cursor.position += 1; + } +} + +function validateHunkCounts(expectedPath: string, hunk: ParsedUnifiedDiffHunk): void { + const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; + const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; + if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { + throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); + } +} + +function applyUnifiedDiffLine( + expectedPath: string, + line: string, + cursor: UnifiedDiffCursor, + baseLines: string[], + output: string[], +): void { + const mark = line[0]; + const body = line.slice(1); + if (line === '') { + throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); + } + if (mark === ' ') { + applyUnifiedDiffContextLine(expectedPath, body, cursor, baseLines, output); + return; + } + if (mark === '-') { + applyUnifiedDiffDeletionLine(expectedPath, body, cursor, baseLines); + return; + } + if (mark === '+') { + applyUnifiedDiffAdditionLine(body, output); + return; + } + throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); +} + +function applyUnifiedDiffContextLine( + expectedPath: string, + body: string, + cursor: UnifiedDiffCursor, + baseLines: string[], + output: string[], +): void { + if (baseLines[cursor.position] !== body) { + throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor.position + 1}`); + } + output.push(baseLines[cursor.position]!); + cursor.position += 1; +} + +function applyUnifiedDiffDeletionLine( + expectedPath: string, + body: string, + cursor: UnifiedDiffCursor, + baseLines: string[], +): void { + if (baseLines[cursor.position] !== body) { + throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor.position + 1}`); + } + cursor.position += 1; +} + +function applyUnifiedDiffAdditionLine(body: string, output: string[]): void { + output.push(body); +} + +function splitKeep(text: string): string[] { + if (text === '') return []; + const lines = text.split('\n'); + if (text.endsWith('\n')) lines.pop(); + return lines; +} + +function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { + const actual = Object.keys(value).sort(); + const wanted = [...expected].sort(); + if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { + throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); + } +} + +function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { + const left = [...new Set(actual)].sort(); + const right = [...new Set(expected)].sort(); + if (left.length !== right.length || left.some((item, index) => item !== right[index])) { + throw new Error(`Source patch ${name} do not match the plan`); + } +} + +function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { + return { + generator, + generatorVersion: '1', + runtimeVersion: T2C_VERSION, + generatedAt, + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + model: null, + provider: null, + responseId: null, + configurationFingerprint: sha256(stableStringify({ + generator, + generatorVersion: '1', + codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), + })), + reason: null, + }; +} diff --git a/src/synthesis/code-change-plan/implementation-source-patch-diff.ts b/src/synthesis/code-change-plan/implementation-source-patch-diff.ts new file mode 100644 index 0000000..2dccf32 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-source-patch-diff.ts @@ -0,0 +1,74 @@ +/** + * Validate a single-file unified diff body. + * Accepts optional `--- a/path` / `+++ b/path` headers and rejects foreign paths. + */ +export function normalizeUnifiedDiff(diff: string, expectedPath: string): string { + const normalized = normalizeUnifiedDiffText(diff, expectedPath); + validateUnifiedDiffBody(normalized, expectedPath); + validateUnifiedDiffPathHeaders(normalized, expectedPath); + return normalized; +} + +function normalizeUnifiedDiffText(diff: string, expectedPath: string): string { + const normalized = diff.replace(/\r\n/g, '\n'); + if (!normalized.trim()) throw new Error(`Unified diff for ${expectedPath} is empty`); + if (normalized.includes('\0')) throw new Error(`Unified diff for ${expectedPath} contains NUL bytes`); + return normalized; +} + +function validateUnifiedDiffBody(diff: string, expectedPath: string): void { + if (/(?:api[_-]?key|secret|password|private[_-]?key)\s*[:=]\s*['"]?[^'"\s]{8,}/i.test(diff)) { + throw new Error(`Unified diff for ${expectedPath} appears to contain a secret assignment`); + } +} + +function validateUnifiedDiffPathHeaders(diff: string, expectedPath: string): void { + for (const header of extractUnifiedDiffHeaders(diff)) { + validateUnifiedDiffHeaderPath(header, expectedPath); + } +} + +function extractUnifiedDiffHeaders(diff: string): string[] { + return [...diff.matchAll(/^(?:---|\+\+\+)\s+(?:[ab]\/)?(.+)$/gm)].map((match) => match[1]!.trim()); +} + +function validateUnifiedDiffHeaderPath(header: string, expectedPath: string): void { + if (header === '/dev/null') return; + const normalizedPath = normalizeUnifiedDiffHeaderPath(header); + assertUnifiedDiffHeaderPathSafety(normalizedPath, expectedPath); +} + +function normalizeUnifiedDiffHeaderPath(header: string): string { + return header.replace(/\\/g, '/').trim(); +} + +function assertUnifiedDiffHeaderPathSafety(normalizedPath: string, expectedPath: string): void { + if (isUnifiedDiffTraversalHeader(normalizedPath)) { + throw new Error(`Unified diff for ${expectedPath} uses a non-repository path header: ${normalizedPath}`); + } + if (!matchesUnifiedDiffExpectedHeader(normalizedPath, expectedPath)) { + const bare = normalizedHeaderPathCandidate(normalizedPath); + const stripped = stripLeadingDiffPrefix(bare); + if (stripped !== expectedPath) { + throw new Error(`Unified diff for ${expectedPath} references foreign path: ${normalizedPath}`); + } + } +} + +function isUnifiedDiffTraversalHeader(normalizedPath: string): boolean { + return normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..'); +} + +function matchesUnifiedDiffExpectedHeader(normalizedPath: string, expectedPath: string): boolean { + return normalizedPath === expectedPath + || normalizedPath === `a/${expectedPath}` + || normalizedPath === `b/${expectedPath}`; +} + +function normalizedHeaderPathCandidate(normalizedPath: string): string { + return normalizedPath.split('\t')[0] ?? normalizedPath; +} + +function stripLeadingDiffPrefix(pathValue: string): string { + return pathValue.replace(/^[ab]\//, ''); +} diff --git a/src/synthesis/code-change-plan/implementation-source-patch.ts b/src/synthesis/code-change-plan/implementation-source-patch.ts new file mode 100644 index 0000000..d701fb5 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-source-patch.ts @@ -0,0 +1,613 @@ +import { + createCodeChangeSourcePatchHash, + createCodeChangeSourcePatchId, + sha256, + stableStringify, +} from '../../core/id.js'; +import { assertCodeChangePlansForReview, assertGroundedGenerationMetadata } from '../../core/schema.js'; +import { T2C_VERSION } from '../../version.js'; +import { IMPLEMENTATION_DIAGNOSTIC_CODES } from './implementation-diagnostics.js'; +import { normalizeUnifiedDiff } from './implementation-source-patch-diff.js'; +import type { + CodeChangeFile, + CodeChangeFileAction, + CodeChangePlan, + CodeChangeSourceEdit, + CodeChangeSourcePatch, + CodeChangeSourcePatchSet, + GroundedGenerationMetadata, +} from '../../core/types.js'; + +export interface CreateCodeChangeSourcePatchOptions { + plan: CodeChangePlan; + /** Optional per-path unified diffs keyed by relative repository path. */ + unifiedDiffs?: Record; + createdAt?: string; +} + +/** + * Build a structured source-edit proposal from one grounded code-change plan. + * + * Deterministic by default: each planned file gets an imperative instruction. + * Callers may attach a unified diff per path; the runtime validates path headers + * and rejects traversal / host paths. Nothing is written to the working tree. + */ +export function createCodeChangeSourcePatch( + options: CreateCodeChangeSourcePatchOptions, +): CodeChangeSourcePatch { + const context = buildSourcePatchContext(options); + const edits = buildSourcePatchEdits(context); + const semantic = buildSourcePatchSemantic(context, edits); + const patchHash = createCodeChangeSourcePatchHash(semantic); + const patch: CodeChangeSourcePatch = { + schemaVersion: 't2c.code-change-source-patch/v1', + id: createCodeChangeSourcePatchId(semantic), + patchHash, + status: 'proposed', + createdAt: context.createdAt, + ...semantic, + generation: deterministicGeneration(context.createdAt, 't2c/code-change-source-patch'), + }; + assertCodeChangeSourcePatch(patch, context.plan); + return patch; +} + +interface SourcePatchCreationContext { + plan: CodeChangePlan; + createdAt: string; + allowedPaths: Set; + diffs: Record; +} + +function buildSourcePatchContext(options: CreateCodeChangeSourcePatchOptions): SourcePatchCreationContext { + const { plan, unifiedDiffs = {} } = options; + const graphFingerprint = plan?.evidence?.graphFingerprint; + assertCodeChangePlansForReview( + [plan], + typeof graphFingerprint === 'string' ? graphFingerprint : '', + ); + const createdAt = options.createdAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); + const allowedPaths = collectPlanTargetPaths(plan.target.paths); + validateUnifiedDiffsBelongToPlan(plan.id, unifiedDiffs, allowedPaths); + return { plan, createdAt, allowedPaths, diffs: unifiedDiffs }; +} + +function collectPlanTargetPaths(paths: string[]): Set { + return new Set(paths.map((item) => item.replace(/\\/g, '/'))); +} + +function validateUnifiedDiffsBelongToPlan( + planId: string, + diffs: Record, + allowedPaths: Set, +): void { + for (const diffPath of Object.keys(diffs)) { + const normalizedPath = diffPath.replace(/\\/g, '/'); + if (!allowedPaths.has(normalizedPath)) { + throw new Error(`Unified diff path ${normalizedPath} is not declared by plan ${planId}`); + } + } +} + +function buildSourcePatchEdits(context: SourcePatchCreationContext): CodeChangeSourceEdit[] { + const edits: CodeChangeSourceEdit[] = context.plan.changes + .map((change) => buildSourcePatchEdit(context, change)) + .sort((left, right) => left.path.localeCompare(right.path) || left.action.localeCompare(right.action)); + if (!edits.length) throw new Error(`Plan ${context.plan.id} has no editable paths`); + return edits; +} + +function buildSourcePatchEdit( + context: SourcePatchCreationContext, + change: CodeChangeFile, +): CodeChangeSourceEdit { + const path = change.path.replace(/\\/g, '/'); + if (!context.allowedPaths.has(path)) { + throw new Error(`Edit path ${path} is not present in plan target.paths`); + } + const rawDiff = context.diffs[path]; + const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); + return { + path, + action: change.action, + symbols: uniqueSorted(change.symbols), + instruction: instructionFor(change, context.plan), + unifiedDiff, + }; +} + +function buildSourcePatchSemantic( + context: SourcePatchCreationContext, + edits: CodeChangeSourceEdit[], +): Omit { + return { + planId: context.plan.id, + planHash: context.plan.planHash, + graphFingerprint: context.plan.evidence.graphFingerprint, + diagnosticIds: uniqueSorted(context.plan.evidence.diagnosticIds), + recordIds: uniqueSorted(context.plan.evidence.recordIds), + edits, + acceptanceCriteria: uniqueSorted(context.plan.acceptanceCriteria), + }; +} + +export function createCodeChangeSourcePatchSet(options: { + plans: CodeChangePlan[]; + graphFingerprint: string; + unifiedDiffsByPlanId?: Record>; + generatedAt?: string; +}): CodeChangeSourcePatchSet { + const context = normalizePatchSetOptions(options); + const patches = buildPatchesForSet(context); + const result = buildSourcePatchSet(context, patches); + assertCodeChangeSourcePatchSet(result, options.plans); + return result; +} + +interface SourcePatchSetBuildContext { + plans: CodeChangePlan[]; + graphFingerprint: string; + generatedAt: string; + unifiedDiffsByPlanId: Record>; +} + +function normalizePatchSetOptions( + options: { + plans: CodeChangePlan[]; + graphFingerprint: string; + unifiedDiffsByPlanId?: Record>; + generatedAt?: string; + }, +): SourcePatchSetBuildContext { + if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { + throw new Error('graphFingerprint must be a SHA-256 hex digest'); + } + assertCodeChangePlansForReview(options.plans, options.graphFingerprint); + const generatedAt = options.generatedAt ?? new Date().toISOString(); + return { + plans: options.plans, + graphFingerprint: options.graphFingerprint, + generatedAt, + unifiedDiffsByPlanId: options.unifiedDiffsByPlanId ?? {}, + }; +} + +function buildPatchesForSet(context: SourcePatchSetBuildContext): CodeChangeSourcePatch[] { + return [...context.plans] + .sort((left, right) => left.id.localeCompare(right.id)) + .map((plan) => createCodeChangeSourcePatch({ + plan, + createdAt: context.generatedAt, + ...(context.unifiedDiffsByPlanId[plan.id] ? { unifiedDiffs: context.unifiedDiffsByPlanId[plan.id] } : {}), + })); +} + +function buildSourcePatchSet( + context: SourcePatchSetBuildContext, + patches: CodeChangeSourcePatch[], +): CodeChangeSourcePatchSet { + return { + schemaVersion: 't2c.code-change-source-patch-set/v1', + generatedAt: context.generatedAt, + graphFingerprint: context.graphFingerprint, + patches, + generation: deterministicGeneration(context.generatedAt, 't2c/code-change-source-patch-set'), + }; +} + +export function assertCodeChangeSourcePatch( + value: unknown, + plan?: CodeChangePlan, +): asserts value is CodeChangeSourcePatch { + const patch = assertCodeChangeSourcePatchObject(value, plan); + validateSourcePatchSchema(patch); + validateSourcePatchIdentifiers(patch); + const editPaths = validateSourcePatchEdits(patch); + validateSourcePatchHashAndId(patch); + validateSourcePatchGeneration(patch); + if (plan) { + validateSourcePatchAgainstPlan(patch, plan, editPaths); + } +} + +function assertCodeChangeSourcePatchObject(value: unknown, plan?: CodeChangePlan): CodeChangeSourcePatch { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change source patch must be an object'); + } + const patch = value as CodeChangeSourcePatch; + exactSourcePatchKeys(patch as unknown as Record, [ + 'schemaVersion', 'id', 'patchHash', 'status', 'createdAt', 'planId', 'planHash', + 'graphFingerprint', 'diagnosticIds', 'recordIds', 'edits', 'acceptanceCriteria', 'generation', + ], 'Source patch'); + if (plan !== undefined && typeof patch.planId === 'string' && patch.id) { + if (patch.planId !== plan.id) { + throw new Error('Source patch is not bound to the supplied plan'); + } + } + return patch; +} + +function validateSourcePatchSchema(patch: CodeChangeSourcePatch): void { + if (patch.schemaVersion !== 't2c.code-change-source-patch/v1') { + throw new Error('Unsupported code change source patch schemaVersion'); + } + if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { + throw new Error('Source patch createdAt must be an ISO date-time'); + } + if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); + if (!Array.isArray(patch.edits) || patch.edits.length === 0) { + throw new Error('Source patch edits must be a non-empty array'); + } +} + +function validateSourcePatchIdentifiers(patch: CodeChangeSourcePatch): void { + if (typeof patch.id !== 'string' || !/^SPATCH-[a-f0-9]{20}$/.test(patch.id)) { + throw new Error('Source patch id must match SPATCH-<20 hex>'); + } + if (typeof patch.patchHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.patchHash)) { + throw new Error('Source patch patchHash must be SHA-256'); + } + if (typeof patch.planId !== 'string' || !/^CPLAN-[a-f0-9]{20}$/.test(patch.planId)) { + throw new Error('Source patch planId must match CPLAN-<20 hex>'); + } + if (typeof patch.planHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.planHash)) { + throw new Error('Source patch planHash must be SHA-256'); + } + if (typeof patch.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(patch.graphFingerprint)) { + throw new Error('Source patch graphFingerprint must be SHA-256'); + } + assertSourcePatchIds(patch.diagnosticIds, /^DIAG-[a-f0-9]{20}$/, 'diagnosticIds'); + assertSourcePatchIds(patch.recordIds, /^INT-[A-Z]+-[a-f0-9]{20}$/, 'recordIds'); + assertSourcePatchStrings(patch.acceptanceCriteria, 'acceptanceCriteria', false); +} + +function validateSourcePatchEdits(patch: CodeChangeSourcePatch): Set { + return collectSourcePatchEditPathActions(patch.edits); +} + +function collectSourcePatchEditPathActions(edits: CodeChangeSourceEdit[]): Set { + const paths = new Set(); + for (const edit of edits) { + const editContext = validateSourcePatchEdit(edit, paths); + paths.add(editContext.pathActionKey); + } + return paths; +} + +interface SourcePatchEditValidationContext { + pathActionKey: string; +} + +function validateSourcePatchEdit( + edit: CodeChangeSourceEdit, + seen: Set, +): SourcePatchEditValidationContext { + const normalizedEdit = assertSourcePatchEditObject(edit); + const normalizedPath = normalizeSourcePatchEditPath(normalizedEdit.path); + validateSourcePatchEditBody(normalizedEdit, normalizedPath); + validateSourcePatchEditDiff(normalizedEdit.unifiedDiff, normalizedPath); + assertUniqueSourcePatchEditPathAction(seen, normalizedPath, normalizedEdit.action); + const pathActionKey = `${normalizedPath}::${normalizedEdit.action}`; + return { pathActionKey }; +} + +function assertSourcePatchEditObject(edit: CodeChangeSourceEdit | unknown): { + path: unknown; + action: unknown; + symbols: unknown; + instruction: unknown; + unifiedDiff: string | null; +} { + if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); + exactSourcePatchKeys(edit as unknown as Record, [ + 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', + ], 'Source patch edit'); + return edit as { + path: unknown; + action: unknown; + symbols: unknown; + instruction: unknown; + unifiedDiff: string | null; + }; +} + +function validateSourcePatchEditBody( + edit: { + path: unknown; + action: unknown; + symbols: unknown; + instruction: unknown; + unifiedDiff: string | null; + }, + normalizedPath: string, +): void { + ensureSourcePatchEditAction(edit.action); + ensureSourcePatchEditInstruction(edit.instruction); + assertSourcePatchStrings(edit.symbols, `edits[${normalizedPath}].symbols`, true); +} + +function validateSourcePatchEditDiff(unifiedDiff: string | null, normalizedPath: string): void { + if (unifiedDiff === null) return; + if (typeof unifiedDiff !== 'string') { + throw new Error(`Source patch unifiedDiff for ${normalizedPath} must be string or null`); + } + normalizeUnifiedDiff(unifiedDiff, normalizedPath); +} + +function assertUniqueSourcePatchEditPathAction( + seen: Set, + normalizedPath: string, + action: unknown, +): void { + const pathActionKey = `${normalizedPath}::${action}`; + if (seen.has(pathActionKey)) throw new Error(`Duplicate source patch edit for ${normalizedPath}`); +} + +function normalizeSourcePatchEditPath(pathValue: unknown): string { + const normalizedPath = (typeof pathValue === 'string' ? pathValue.trim() : '').replace(/\\/g, '/'); + if (!normalizedPath || normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..')) { + throw new Error(`Source patch edit path is not a relative repository path: ${normalizedPath}`); + } + return normalizedPath; +} + +function ensureSourcePatchEditAction(action: unknown): void { + if (!['create', 'modify', 'delete'].includes(action as string) || typeof action !== 'string') { + throw new Error(`Source patch edit action is unsupported: ${String(action)}`); + } +} + +function ensureSourcePatchEditInstruction(instruction: unknown): void { + if (typeof instruction !== 'string' || !instruction.trim()) { + throw new Error('Source patch edit instruction must be non-blank'); + } +} + +function validateSourcePatchHashAndId(patch: CodeChangeSourcePatch): void { + const expectedHash = createCodeChangeSourcePatchHash(patch); + if (patch.patchHash !== expectedHash) { + throw new Error(`Source patch patchHash does not match semantic content: expected ${expectedHash}`); + } + if (patch.id !== createCodeChangeSourcePatchId(patch)) { + throw new Error('Source patch id does not match semantic content'); + } +} + +function validateSourcePatchGeneration(patch: CodeChangeSourcePatch): void { + assertGroundedGenerationMetadata(patch.generation, 'Source patch generation'); + if (patch.generation.generatedAt !== patch.createdAt) { + throw new Error('Source patch generation.generatedAt must match createdAt'); + } + if (patch.generation.generator !== 't2c/code-change-source-patch') { + throw new Error('Source patch generation.generator must be t2c/code-change-source-patch'); + } +} + +function validateSourcePatchAgainstPlan( + patch: CodeChangeSourcePatch, + plan: CodeChangePlan, + editPaths: Set, +): void { + assertSourcePatchPlanBinding(patch, plan); + const expectedChanges = collectExpectedPlanChanges(plan); + validateSourcePatchEditsAgainstPlan(patch, plan, expectedChanges); + validateSourcePatchEvidence(patch, plan, expectedChanges, editPaths); +} + +function assertSourcePatchPlanBinding(patch: CodeChangeSourcePatch, plan: CodeChangePlan): void { + if (patch.planHash !== plan.planHash) throw new Error('Source patch is not bound to the supplied plan'); + if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { + throw new Error('Source patch graphFingerprint does not match the plan'); + } +} + +function collectExpectedPlanChanges(plan: CodeChangePlan): Map { + return new Map(plan.changes.map((item) => [ + item.path.replace(/\\/g, '/'), item.action, + ])); +} + +function validateSourcePatchEditsAgainstPlan( + patch: CodeChangeSourcePatch, + plan: CodeChangePlan, + expectedChanges: Map, +): void { + const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); + for (const edit of patch.edits) { + const editPath = edit.path.replace(/\\/g, '/'); + if (!allowed.has(editPath)) { + throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); + } + if (expectedChanges.get(editPath) !== edit.action) { + throw new Error(`Source patch action for ${edit.path} does not match the plan`); + } + } +} + +function validateSourcePatchEvidence( + patch: CodeChangeSourcePatch, + plan: CodeChangePlan, + expectedChangePaths: Map, + editPaths: Set, +): void { + const actualEditPaths = [...editPaths].map((item) => item.split('::')[0]); + const expectedPaths = [...expectedChangePaths.keys()]; + exactSourcePatchSet(actualEditPaths, expectedPaths, 'edit paths'); + exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); + exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); + exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); +} + +export function assertCodeChangeSourcePatchSet( + value: unknown, + plans?: CodeChangePlan[], +): asserts value is CodeChangeSourcePatchSet { + const set = assertSourcePatchSetObject(value); + const context = createSourcePatchSetValidationContext(plans); + validateSourcePatchSetSchema(set); + validateSourcePatchSetPatches(set, context); + validateSourcePatchSetGeneration(set); +} + +interface SourcePatchSetValidationContext { + plansById: Map; + expectedPlanIds: string[] | null; +} + +function createSourcePatchSetValidationContext(plans?: CodeChangePlan[]): SourcePatchSetValidationContext { + const expectedPlanIds = plans?.map((plan) => plan.id) ?? null; + return { + plansById: new Map((plans ?? []).map((plan) => [plan.id, plan])), + expectedPlanIds, + }; +} + +function assertSourcePatchSetObject(value: unknown): CodeChangeSourcePatchSet { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change source patch set must be an object'); + } + const set = value as CodeChangeSourcePatchSet; + exactSourcePatchKeys(set as unknown as Record, [ + 'schemaVersion', 'generatedAt', 'graphFingerprint', 'patches', 'generation', + ], 'Source patch set'); + return set; +} + +function validateSourcePatchSetSchema(set: CodeChangeSourcePatchSet): void { + if (set.schemaVersion !== 't2c.code-change-source-patch-set/v1') { + throw new Error('Unsupported code change source patch set schemaVersion'); + } + if (typeof set.generatedAt !== 'string' || Number.isNaN(Date.parse(set.generatedAt))) { + throw new Error('Source patch set generatedAt must be an ISO date-time'); + } + if (typeof set.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(set.graphFingerprint)) { + throw new Error('Source patch set graphFingerprint must be SHA-256'); + } + if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); +} + +function validateSourcePatchSetPatches( + set: CodeChangeSourcePatchSet, + context: SourcePatchSetValidationContext, +): void { + const patchIds = new Set(); + for (const patch of set.patches) { + validateSetPatchAndTrackDuplicates(set, patch, context, patchIds); + } + validateSetPatchesPlanCoverage(set, context.expectedPlanIds); +} + +function validateSetPatchAndTrackDuplicates( + set: CodeChangeSourcePatchSet, + patch: CodeChangeSourcePatch, + context: SourcePatchSetValidationContext, + patchIds: Set, +): void { + const expectedPlan = context.plansById.get(patch.planId); + assertCodeChangeSourcePatch(patch, expectedPlan); + validateSetPatchGraphFingerprint(set, patch); + assertUniqueSetPatchId(patchIds, patch.id); + patchIds.add(patch.id); +} + +function validateSetPatchGraphFingerprint( + set: CodeChangeSourcePatchSet, + patch: CodeChangeSourcePatch, +): void { + if (patch.graphFingerprint !== set.graphFingerprint) { + throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); + } +} + +function assertUniqueSetPatchId( + patchIds: Set, + patchId: string, +): void { + if (patchIds.has(patchId)) throw new Error(`Duplicate source patch id: ${patchId}`); +} + +function validateSetPatchesPlanCoverage( + set: CodeChangeSourcePatchSet, + expectedPlanIds: string[] | null, +): void { + if (!expectedPlanIds) return; + exactSourcePatchSet(set.patches.map((patch) => patch.planId), expectedPlanIds, 'planIds'); +} + +function validateSourcePatchSetGeneration(set: CodeChangeSourcePatchSet): void { + assertGroundedGenerationMetadata(set.generation, 'Source patch set generation'); + if (set.generation.generatedAt !== set.generatedAt) { + throw new Error('Source patch set generation.generatedAt must match generatedAt'); + } + if (set.generation.generator !== 't2c/code-change-source-patch-set') { + throw new Error('Source patch set generation.generator must be t2c/code-change-source-patch-set'); + } +} + +function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { + const actual = Object.keys(value).sort(); + const wanted = [...expected].sort(); + if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { + throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); + } +} + +function assertSourcePatchIds(value: unknown, pattern: RegExp, name: string): asserts value is string[] { + if (!Array.isArray(value) || value.length === 0 + || value.some((item) => typeof item !== 'string' || !pattern.test(item))) { + throw new Error(`Source patch ${name} must be a non-empty array of valid IDs`); + } + if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); +} + +function assertSourcePatchStrings(value: unknown, name: string, emptyAllowed: boolean): asserts value is string[] { + if (!Array.isArray(value) || (!emptyAllowed && value.length === 0) + || value.some((item) => typeof item !== 'string' || !item.trim())) { + throw new Error(`Source patch ${name} must contain ${emptyAllowed ? 'only ' : ''}non-blank strings`); + } + if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); +} + +function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { + const left = [...new Set(actual)].sort(); + const right = [...new Set(expected)].sort(); + if (left.length !== right.length || left.some((item, index) => item !== right[index])) { + throw new Error(`Source patch ${name} do not match the plan`); + } +} + +function instructionFor(change: CodeChangeFile, plan: CodeChangePlan): string { + const symbols = change.symbols.length + ? ` Focus on symbols: ${change.symbols.join(', ')}.` + : ''; + const criteria = plan.acceptanceCriteria.length + ? ` Acceptance: ${plan.acceptanceCriteria.join(' ')}` + : ''; + return `${change.action} \`${change.path}\`. ${change.rationale.trim()}.${symbols}${criteria}`.replace(/\s+/g, ' ').trim(); +} + +function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { + return { + generator, + generatorVersion: '1', + runtimeVersion: T2C_VERSION, + generatedAt, + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + model: null, + provider: null, + responseId: null, + configurationFingerprint: sha256(stableStringify({ + generator, + generatorVersion: '1', + codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), + })), + reason: null, + }; +} + +function uniqueSorted(values: string[]): string[] { + return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); +} diff --git a/src/synthesis/code-change-plan/implementation-targets.ts b/src/synthesis/code-change-plan/implementation-targets.ts new file mode 100644 index 0000000..adfab80 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-targets.ts @@ -0,0 +1,61 @@ +import { normalizeTarget } from '../../core/target.js'; +import { isUsefulCodeChangePath } from '../code-change-path.js'; +import type { IntentRecord, IntentTarget, TodoProposal } from '../../core/types.js'; + +export function collectTarget(records: IntentRecord[], proposals: TodoProposal[]): IntentTarget { + const target = collectTargetComponents(records, proposals); + return finalizeTarget(target); +} + +function collectTargetComponents( + records: IntentRecord[], + proposals: TodoProposal[], +): { + paths: Set; + symbols: Set; + tickets: Set; + versions: Set; +} { + const paths = new Set(); + const symbols = new Set(); + const tickets = new Set(); + const versions = new Set(); + for (const source of records) { + addTargetEntries(source.statement.target, paths, symbols, tickets, versions); + } + for (const proposal of proposals) { + addTargetEntries(proposal.target, paths, symbols, tickets, versions); + } + return { paths, symbols, tickets, versions }; +} + +function addTargetEntries( + target: IntentTarget, + paths: Set, + symbols: Set, + tickets: Set, + versions: Set, +): void { + for (const value of target.paths) paths.add(value); + for (const value of target.symbols) symbols.add(value); + for (const value of target.tickets) tickets.add(value); + for (const value of target.versions) versions.add(value); +} + +function finalizeTarget(target: { + paths: Set; + symbols: Set; + tickets: Set; + versions: Set; +}): IntentTarget { + const paths = [...target.paths].filter(isUsefulCodeChangePath); + const symbols = [...target.symbols]; + const tickets = [...target.tickets]; + const versions = [...target.versions]; + return normalizeTarget({ + paths, + symbols, + tickets, + versions, + }); +} From 0c22f5c88011f008edda9dde7aa879f91e513b52 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 13:50:19 +0200 Subject: [PATCH 21/43] fix(code-change): resolve source patch apply typing mismatches --- .../implementation-source-patch-apply.ts | 11 +++++++---- .../code-change-plan/implementation-source-patch.ts | 5 ++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/synthesis/code-change-plan/implementation-source-patch-apply.ts b/src/synthesis/code-change-plan/implementation-source-patch-apply.ts index 338472a..6c76a75 100644 --- a/src/synthesis/code-change-plan/implementation-source-patch-apply.ts +++ b/src/synthesis/code-change-plan/implementation-source-patch-apply.ts @@ -10,7 +10,8 @@ import { } from '../../core/id.js'; import { ensureDir, pathExists, readJson, readText } from '../../core/io.js'; import { T2C_VERSION } from '../../version.js'; -import { assertCodeChangeSourcePatch, normalizeUnifiedDiff } from './implementation-source-patch.js'; +import { assertCodeChangeSourcePatch } from './implementation-source-patch.js'; +import { normalizeUnifiedDiff } from './implementation-source-patch-diff.js'; import { IMPLEMENTATION_DIAGNOSTIC_CODES } from './implementation-diagnostics.js'; import type { CodeChangeFileAction, @@ -91,17 +92,19 @@ async function readExistingReceipt( function assertPatchApplicationRequest( options: ApplyCodeChangeSourcePatchOptions, ): NormalizedApplyCodeChangeSourcePatchRequest { - const patch = assertCodeChangeSourcePatch(options.patch); + const patch = options.patch; + assertCodeChangeSourcePatch(patch); assertPatchApprovalActor(options.approval); assertPatchApprovalHash(patch, options.approval); assertPatchEditsContainDiffs(patch); - return { + const request: NormalizedApplyCodeChangeSourcePatchRequest = { root: options.root, patch: options.patch, approval: options.approval, receiptPath: options.receiptPath, - now: options.now, }; + if (options.now !== undefined) request.now = options.now; + return request; } function assertPatchApprovalActor(approval: CodeChangeSourcePatchApproval): string { diff --git a/src/synthesis/code-change-plan/implementation-source-patch.ts b/src/synthesis/code-change-plan/implementation-source-patch.ts index d701fb5..26d5ea9 100644 --- a/src/synthesis/code-change-plan/implementation-source-patch.ts +++ b/src/synthesis/code-change-plan/implementation-source-patch.ts @@ -431,7 +431,10 @@ function validateSourcePatchEvidence( expectedChangePaths: Map, editPaths: Set, ): void { - const actualEditPaths = [...editPaths].map((item) => item.split('::')[0]); + const actualEditPaths = [...editPaths].map((item) => { + const marker = item.indexOf('::'); + return marker === -1 ? item : item.slice(0, marker); + }); const expectedPaths = [...expectedChangePaths.keys()]; exactSourcePatchSet(actualEditPaths, expectedPaths, 'edit paths'); exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); From fff64da5122de5f3d5128144aed2368a9bb5891a Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 13:57:22 +0200 Subject: [PATCH 22/43] fix(types): resolve refactor build blockers from analysis toon --- src/communication/llm/implementation.ts | 2 +- src/core/io.ts | 6 +- src/core/schema/intent.ts | 98 ++++++++++--------- src/extractors/nl-llm-helpers.ts | 8 +- src/graph/diagnostics.ts | 8 +- .../implementation-helpers.ts | 8 +- .../code-change-plan/implementation-review.ts | 9 +- 7 files changed, 73 insertions(+), 66 deletions(-) diff --git a/src/communication/llm/implementation.ts b/src/communication/llm/implementation.ts index be6e7db..fe76cb3 100644 --- a/src/communication/llm/implementation.ts +++ b/src/communication/llm/implementation.ts @@ -29,7 +29,7 @@ import { extractCommunicationIntent, type CommunicationExtractionOptions, type CommunicationRole, -} from '../extractors/communication.js'; +} from '../../extractors/communication.js'; export interface ParticipantCommunicationSynthesis { schemaVersion: 't2c.participant-synthesis/v1'; diff --git a/src/core/io.ts b/src/core/io.ts index 597abff..c2c3305 100644 --- a/src/core/io.ts +++ b/src/core/io.ts @@ -97,7 +97,7 @@ interface WalkState { maxFiles: number; extensions: Set | null; ignored: Set; - matcher?: { ignores(relativePath: string, isDirectory?: boolean): boolean }; + matcher: { ignores(relativePath: string, isDirectory?: boolean): boolean }; } function createWalkState(root: string, options: WalkOptions): WalkState { @@ -108,7 +108,7 @@ function createWalkState(root: string, options: WalkOptions): WalkState { maxFiles: options.maxFiles ?? 20_000, extensions: options.extensions ? new Set(options.extensions.map((value) => value.toLowerCase())) : null, ignored: new Set([...DEFAULT_IGNORED_DIRS, ...(options.ignoredDirs ?? [])]), - matcher: options.matcher, + matcher: options.matcher ?? { ignores: () => false }, }; } @@ -131,7 +131,7 @@ async function walkEntry( } const absolute = path.join(directory, entry.name); const relative = relativePosix(state.base, absolute); - if (state.matcher?.ignores(relative, entry.isDirectory())) return; + if (state.matcher.ignores(relative, entry.isDirectory())) return; if (entry.isDirectory()) { if (!state.ignored.has(entry.name)) await walkDirectory(absolute, state); diff --git a/src/core/schema/intent.ts b/src/core/schema/intent.ts index e0389ba..c530c6c 100644 --- a/src/core/schema/intent.ts +++ b/src/core/schema/intent.ts @@ -69,26 +69,27 @@ export function assertIntentRecord(value: unknown): asserts value is IntentRecor exactKeys(record, ['schemaVersion', 'id', 'statement', 'lifecycle', 'source', 'epistemic', 'observedAt', 'metadata'], 'Intent record'); if (record.schemaVersion !== 't2c.intent/v1') throw new Error('Unsupported intent schemaVersion'); if (typeof record.id !== 'string' || !RECORD_ID.test(record.id)) throw new Error('Intent record id must match INT--<20 hex>'); - const statement = assertIntentStatement(record); - const lifecycle = assertIntentLifecycle(record); - const source = assertIntentSource(record); - const epistemic = assertIntentEpistemic(record); + const recordId = nonEmptyString(record.id, 'Intent record: id'); + const statement = assertIntentStatement(recordId, record); + const lifecycle = assertIntentLifecycle(recordId, record); + const source = assertIntentSource(recordId, record); + const epistemic = assertIntentEpistemic(recordId, record); const metadata = objectValue(record.metadata, `Intent ${record.id}: metadata`); - assertIntentMetadata(record, metadata, source.extractor, epistemic.class); + assertIntentMetadata(recordId, metadata, source.extractor, epistemic.class, record.observedAt); } -function assertIntentStatement(record: Record): IntentRecord['statement'] { - const statement = objectValue(record.statement, `Intent ${(record.id as string ?? 'unknown')}: statement`); - exactKeys(statement, ['kind', 'actor', 'action', 'subject', 'object', 'target', 'modality', 'polarity', 'text'], `Intent ${(record.id as string ?? 'unknown')}: statement`); - nonEmptyString(statement.kind, `Intent ${(record.id as string ?? 'unknown')}: statement.kind`); - nullableString(statement.actor, `Intent ${(record.id as string ?? 'unknown')}: statement.actor`); - enumValue(statement.action, ACTIONS, `Intent ${(record.id as string ?? 'unknown')}: statement.action`); - nullableString(statement.subject, `Intent ${record.id}: statement.subject`); - nonEmptyString(statement.object, `Intent ${record.id}: statement.object`); - if (typeof statement.text !== 'string') throw new Error(`Intent ${record.id}: statement.text must be a string`); - enumValue(statement.modality, MODALITIES, `Intent ${record.id}: statement.modality`); - enumValue(statement.polarity, POLARITIES, `Intent ${record.id}: statement.polarity`); - statement.target = assertIntentTarget(record.id, statement.target); +function assertIntentStatement(recordId: string, record: Record): IntentRecord['statement'] { + const statement = objectValue(record.statement, `Intent ${recordId}: statement`); + exactKeys(statement, ['kind', 'actor', 'action', 'subject', 'object', 'target', 'modality', 'polarity', 'text'], `Intent ${recordId}: statement`); + nonEmptyString(statement.kind, `Intent ${recordId}: statement.kind`); + nullableString(statement.actor, `Intent ${recordId}: statement.actor`); + enumValue(statement.action, ACTIONS, `Intent ${recordId}: statement.action`); + nullableString(statement.subject, `Intent ${recordId}: statement.subject`); + nonEmptyString(statement.object, `Intent ${recordId}: statement.object`); + if (typeof statement.text !== 'string') throw new Error(`Intent ${recordId}: statement.text must be a string`); + enumValue(statement.modality, MODALITIES, `Intent ${recordId}: statement.modality`); + enumValue(statement.polarity, POLARITIES, `Intent ${recordId}: statement.polarity`); + statement.target = assertIntentTarget(recordId, statement.target); return statement; } @@ -101,65 +102,66 @@ function assertIntentTarget(recordId: string, targetValue: unknown): IntentRecor return target; } -function assertIntentLifecycle(record: Record): IntentRecord['lifecycle'] { - const lifecycle = objectValue(record.lifecycle, `Intent ${record.id as string}: lifecycle`); - exactKeys(lifecycle, ['status'], `Intent ${record.id as string}: lifecycle`); - enumValue(lifecycle.status, LIFECYCLES, `Intent ${record.id as string}: lifecycle.status`); +function assertIntentLifecycle(recordId: string, record: Record): IntentRecord['lifecycle'] { + const lifecycle = objectValue(record.lifecycle, `Intent ${recordId}: lifecycle`); + exactKeys(lifecycle, ['status'], `Intent ${recordId}: lifecycle`); + enumValue(lifecycle.status, LIFECYCLES, `Intent ${recordId}: lifecycle.status`); return lifecycle; } -function assertIntentSource(record: Record): IntentRecord['source'] { - const source = objectValue(record.source, `Intent ${record.id as string}: source`); - exactKeys(source, ['kind', 'path', 'lines', 'revision', 'symbol', 'commitIndex', 'extractor', 'contentHash', 'rawExcerpt'], `Intent ${record.id as string}: source`); - enumValue(source.kind, SOURCE_KINDS, `Intent ${record.id as string}: source.kind`); - nullableString(source.path, `Intent ${record.id as string}: source.path`); - nullableString(source.revision, `Intent ${record.id as string}: source.revision`); - nullableString(source.symbol, `Intent ${record.id as string}: source.symbol`); - nullableString(source.rawExcerpt, `Intent ${record.id as string}: source.rawExcerpt`); - nonEmptyString(source.extractor, `Intent ${record.id as string}: source.extractor`); +function assertIntentSource(recordId: string, record: Record): IntentRecord['source'] { + const source = objectValue(record.source, `Intent ${recordId}: source`); + exactKeys(source, ['kind', 'path', 'lines', 'revision', 'symbol', 'commitIndex', 'extractor', 'contentHash', 'rawExcerpt'], `Intent ${recordId}: source`); + enumValue(source.kind, SOURCE_KINDS, `Intent ${recordId}: source.kind`); + nullableString(source.path, `Intent ${recordId}: source.path`); + nullableString(source.revision, `Intent ${recordId}: source.revision`); + nullableString(source.symbol, `Intent ${recordId}: source.symbol`); + nullableString(source.rawExcerpt, `Intent ${recordId}: source.rawExcerpt`); + nonEmptyString(source.extractor, `Intent ${recordId}: source.extractor`); if (typeof source.contentHash !== 'string' || !FINGERPRINT.test(source.contentHash)) { - throw new Error(`Intent ${record.id as string}: source.contentHash must be SHA-256`); + throw new Error(`Intent ${recordId}: source.contentHash must be SHA-256`); } if (source.commitIndex !== null && (!Number.isInteger(source.commitIndex) || (source.commitIndex as number) < 1)) { - throw new Error(`Intent ${record.id as string}: source.commitIndex must be null or an integer >= 1`); + throw new Error(`Intent ${recordId}: source.commitIndex must be null or an integer >= 1`); } if (source.lines !== null) { - const lines = objectValue(source.lines, `Intent ${record.id as string}: source.lines`); - exactKeys(lines, ['start', 'end'], `Intent ${record.id as string}: source.lines`); + const lines = objectValue(source.lines, `Intent ${recordId}: source.lines`); + exactKeys(lines, ['start', 'end'], `Intent ${recordId}: source.lines`); if (!Number.isInteger(lines.start) || (lines.start as number) < 1 || !Number.isInteger(lines.end) || (lines.end as number) < (lines.start as number)) { - throw new Error(`Intent ${record.id as string}: source.lines must be positive and end >= start`); + throw new Error(`Intent ${recordId}: source.lines must be positive and end >= start`); } } return source; } -function assertIntentEpistemic(record: Record): IntentRecord['epistemic'] { - const epistemic = objectValue(record.epistemic, `Intent ${record.id as string}: epistemic`); - exactKeys(epistemic, ['class', 'confidence', 'basis'], `Intent ${record.id as string}: epistemic`); - enumValue(epistemic.class, EPISTEMIC_CLASSES, `Intent ${record.id as string}: epistemic.class`); +function assertIntentEpistemic(recordId: string, record: Record): IntentRecord['epistemic'] { + const epistemic = objectValue(record.epistemic, `Intent ${recordId}: epistemic`); + exactKeys(epistemic, ['class', 'confidence', 'basis'], `Intent ${recordId}: epistemic`); + enumValue(epistemic.class, EPISTEMIC_CLASSES, `Intent ${recordId}: epistemic.class`); if (typeof epistemic.confidence !== 'number' || !Number.isFinite(epistemic.confidence) || epistemic.confidence < 0 || epistemic.confidence > 1) { - throw new Error(`Intent ${record.id as string}: epistemic.confidence must be between 0 and 1`); + throw new Error(`Intent ${recordId}: epistemic.confidence must be between 0 and 1`); } - stringArray(epistemic.basis, `Intent ${record.id as string}: epistemic.basis`, true); + stringArray(epistemic.basis, `Intent ${recordId}: epistemic.basis`, true); return epistemic; } function assertIntentMetadata( - record: Record, + recordId: string, metadata: unknown, sourceExtractor: string, epistemicClass: string, + observedAt: unknown, ): void { - if (!isJsonValue(metadata)) throw new Error(`Intent ${record.id as string}: metadata must contain JSON values only`); + if (!isJsonValue(metadata)) throw new Error(`Intent ${recordId}: metadata must contain JSON values only`); const typedMetadata = metadata as Record; - const generation = objectValue(typedMetadata.generation, `Intent ${record.id as string}: metadata.generation`); - assertIntentGenerationMetadata(generation, `Intent ${record.id as string}: metadata.generation`); - assertGenerationMatchesExtractor(generation, sourceExtractor, `Intent ${record.id as string}: metadata.generation`); - nullableDate((record as { observedAt?: unknown }).observedAt, `Intent ${record.id as string}: observedAt`); + const generation = objectValue(typedMetadata.generation, `Intent ${recordId}: metadata.generation`); + assertIntentGenerationMetadata(generation, `Intent ${recordId}: metadata.generation`); + assertGenerationMatchesExtractor(generation, sourceExtractor, `Intent ${recordId}: metadata.generation`); + nullableDate(observedAt, `Intent ${recordId}: observedAt`); if (epistemicClass === 'llm_inference' && (generation as { used?: unknown }).used !== 'llm') { - throw new Error(`Intent ${record.id as string}: llm_inference requires metadata.generation.used=llm`); + throw new Error(`Intent ${recordId}: llm_inference requires metadata.generation.used=llm`); } } diff --git a/src/extractors/nl-llm-helpers.ts b/src/extractors/nl-llm-helpers.ts index e6656f7..065c852 100644 --- a/src/extractors/nl-llm-helpers.ts +++ b/src/extractors/nl-llm-helpers.ts @@ -9,9 +9,7 @@ import type { IntentAction, IntentRecord, LlmResponseMetadata, - Modality, PipelineStageAudit, - LifecycleStatus, } from '../core/types.js'; import { openRouterAuditConfiguration } from '../llm/audit.js'; import { OpenRouterClient, type OpenRouterResult } from '../llm/openrouter.js'; @@ -21,12 +19,12 @@ import { T2C_VERSION } from '../version.js'; export interface RawNlRecord { kind: string; actor: string | null; - action: IntentAction; + action: string; subject: string | null; object: string; - modality: Modality; + modality: string; polarity: 'positive' | 'negative'; - lifecycle: LifecycleStatus; + lifecycle: string; confidence: number; basis: string[]; target: { paths: string[]; symbols: string[]; tickets: string[]; versions: string[] }; diff --git a/src/graph/diagnostics.ts b/src/graph/diagnostics.ts index 644b9fe..899f2ee 100644 --- a/src/graph/diagnostics.ts +++ b/src/graph/diagnostics.ts @@ -120,11 +120,11 @@ function isRecordEvidenced( record: IntentRecord, context: DiagnosticContext, ): boolean { - const hasImplementedTarget = !hasCapabilityClaim(record) && hasImplementedTarget(record, context.implementedPaths); - const hasDocumentedTarget = record.source.kind === 'changelog' && hasDocumentedTarget(record, context.documentedPaths); + const hasImplementedTargetEvidence = !hasCapabilityClaim(record) && hasImplementedTarget(record, context.implementedPaths); + const hasDocumentedTargetEvidence = record.source.kind === 'changelog' && hasDocumentedTarget(record, context.documentedPaths); return context.groundedImplementation.has(record.id) - || hasImplementedTarget - || hasDocumentedTarget; + || hasImplementedTargetEvidence + || hasDocumentedTargetEvidence; } function buildPlannedNotImplementedDiagnostic( diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts index b209f05..af74fe5 100644 --- a/src/synthesis/code-change-plan/implementation-helpers.ts +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -200,15 +200,18 @@ interface PlanContext { function buildPlanContext(options: ProposeCodeChangePlansOptions): PlanContext { const conclusions = options.conclusions ?? []; const proposals = options.proposals ?? []; - return { + const context: PlanContext = { graph: options.graph, recordsById: new Map(options.graph.records.map((record) => [record.id, record])), proposalsByDiagnostic: indexProposalsByDiagnostic(proposals), conclusionsByDiagnostic: indexConclusionsByDiagnostic(conclusions), conclusions, proposals, - pathExists: options.pathExists, }; + if (options.pathExists) { + context.pathExists = options.pathExists; + } + return context; } function findRelatedRecords( @@ -533,4 +536,3 @@ function deterministicGeneration(generatedAt: string, generator: string): Ground }; } - diff --git a/src/synthesis/code-change-plan/implementation-review.ts b/src/synthesis/code-change-plan/implementation-review.ts index 69796aa..c974174 100644 --- a/src/synthesis/code-change-plan/implementation-review.ts +++ b/src/synthesis/code-change-plan/implementation-review.ts @@ -209,10 +209,15 @@ function assertReviewPatchIds(artifact: Record): void { } function assertCodeChangeReviewPatchPlanCollections(artifact: Record): void { - if (artifact.planIds.length !== artifact.planHashes.length) { + if (!Array.isArray(artifact.planIds) || !Array.isArray(artifact.planHashes)) { + throw new Error('Code change review planIds and planHashes must be arrays'); + } + const planIds = artifact.planIds as string[]; + const planHashes = artifact.planHashes as string[]; + if (planIds.length !== planHashes.length) { throw new Error('Code change review planIds and planHashes must have equal length'); } - if (new Set(artifact.planIds as string[]).size !== (artifact.planIds as string[]).length) { + if (new Set(planIds).size !== planIds.length) { throw new Error('Code change review planIds must be unique'); } } From 29ce649dfd18e51a1c94a1eae3fc5e4d20c0b724 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 14:00:04 +0200 Subject: [PATCH 23/43] fix(types): complete toon refactor intent and nl helper typing --- src/core/schema/intent.ts | 13 +++++++------ src/extractors/nl-llm-helpers.ts | 13 ++++++++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/core/schema/intent.ts b/src/core/schema/intent.ts index c530c6c..47cf20d 100644 --- a/src/core/schema/intent.ts +++ b/src/core/schema/intent.ts @@ -69,7 +69,8 @@ export function assertIntentRecord(value: unknown): asserts value is IntentRecor exactKeys(record, ['schemaVersion', 'id', 'statement', 'lifecycle', 'source', 'epistemic', 'observedAt', 'metadata'], 'Intent record'); if (record.schemaVersion !== 't2c.intent/v1') throw new Error('Unsupported intent schemaVersion'); if (typeof record.id !== 'string' || !RECORD_ID.test(record.id)) throw new Error('Intent record id must match INT--<20 hex>'); - const recordId = nonEmptyString(record.id, 'Intent record: id'); + nonEmptyString(record.id, 'Intent record: id'); + const recordId = record.id; const statement = assertIntentStatement(recordId, record); const lifecycle = assertIntentLifecycle(recordId, record); const source = assertIntentSource(recordId, record); @@ -79,7 +80,7 @@ export function assertIntentRecord(value: unknown): asserts value is IntentRecor } function assertIntentStatement(recordId: string, record: Record): IntentRecord['statement'] { - const statement = objectValue(record.statement, `Intent ${recordId}: statement`); + const statement = objectValue(record.statement, `Intent ${recordId}: statement`) as IntentRecord['statement']; exactKeys(statement, ['kind', 'actor', 'action', 'subject', 'object', 'target', 'modality', 'polarity', 'text'], `Intent ${recordId}: statement`); nonEmptyString(statement.kind, `Intent ${recordId}: statement.kind`); nullableString(statement.actor, `Intent ${recordId}: statement.actor`); @@ -94,7 +95,7 @@ function assertIntentStatement(recordId: string, record: Record } function assertIntentTarget(recordId: string, targetValue: unknown): IntentRecord['statement']['target'] { - const target = objectValue(targetValue, `Intent ${recordId}: statement.target`); + const target = objectValue(targetValue, `Intent ${recordId}: statement.target`) as IntentRecord['statement']['target']; exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `Intent ${recordId}: statement.target`); for (const key of ['paths', 'symbols', 'tickets', 'versions'] as const) { stringArray(target[key], `Intent ${recordId}: statement.target.${key}`, true); @@ -103,14 +104,14 @@ function assertIntentTarget(recordId: string, targetValue: unknown): IntentRecor } function assertIntentLifecycle(recordId: string, record: Record): IntentRecord['lifecycle'] { - const lifecycle = objectValue(record.lifecycle, `Intent ${recordId}: lifecycle`); + const lifecycle = objectValue(record.lifecycle, `Intent ${recordId}: lifecycle`) as IntentRecord['lifecycle']; exactKeys(lifecycle, ['status'], `Intent ${recordId}: lifecycle`); enumValue(lifecycle.status, LIFECYCLES, `Intent ${recordId}: lifecycle.status`); return lifecycle; } function assertIntentSource(recordId: string, record: Record): IntentRecord['source'] { - const source = objectValue(record.source, `Intent ${recordId}: source`); + const source = objectValue(record.source, `Intent ${recordId}: source`) as IntentRecord['source']; exactKeys(source, ['kind', 'path', 'lines', 'revision', 'symbol', 'commitIndex', 'extractor', 'contentHash', 'rawExcerpt'], `Intent ${recordId}: source`); enumValue(source.kind, SOURCE_KINDS, `Intent ${recordId}: source.kind`); nullableString(source.path, `Intent ${recordId}: source.path`); @@ -136,7 +137,7 @@ function assertIntentSource(recordId: string, record: Record): } function assertIntentEpistemic(recordId: string, record: Record): IntentRecord['epistemic'] { - const epistemic = objectValue(record.epistemic, `Intent ${recordId}: epistemic`); + const epistemic = objectValue(record.epistemic, `Intent ${recordId}: epistemic`) as IntentRecord['epistemic']; exactKeys(epistemic, ['class', 'confidence', 'basis'], `Intent ${recordId}: epistemic`); enumValue(epistemic.class, EPISTEMIC_CLASSES, `Intent ${recordId}: epistemic.class`); if (typeof epistemic.confidence !== 'number' || !Number.isFinite(epistemic.confidence) diff --git a/src/extractors/nl-llm-helpers.ts b/src/extractors/nl-llm-helpers.ts index 065c852..882cdca 100644 --- a/src/extractors/nl-llm-helpers.ts +++ b/src/extractors/nl-llm-helpers.ts @@ -7,6 +7,7 @@ import { buildRecord, withRecordGeneration } from '../core/record.js'; import type { ExtractionResult, IntentAction, + Modality, IntentRecord, LlmResponseMetadata, PipelineStageAudit, @@ -95,7 +96,7 @@ export function toIntentRecord(raw: RawNlRecord, sourcePath: string, body: strin subject: raw.subject ?? null, object, target: raw.target, - modality: allowedModality(raw.modality) ? raw.modality : 'unknown', + modality: resolveModality(raw.modality), polarity: raw.polarity === 'negative' ? 'negative' : 'positive', text: statementText, lifecycle: 'proposed', @@ -167,6 +168,10 @@ function resolveAction(rawAction: string): IntentAction { return allowedAction(rawAction) ? rawAction : 'unknown'; } +function resolveModality(rawModality: string): Modality { + return allowedModality(rawModality) ? rawModality : 'unknown'; +} + /** * `statement.object` is free text, but neighbouring fields (`action`, `modality`, * `lifecycle`) are enums that include the literal `unknown`. Models copy that @@ -215,18 +220,20 @@ function clampLine(value: number, min: number, max: number): number { } function allowedAction(value: string): value is IntentAction { - return NL_ACTIONS.includes(value); + return NL_ACTION_SET.has(value); } function allowedModality(value: string): value is Modality { - return NL_MODALITIES.includes(value); + return NL_MODALITY_SET.has(value); } const NL_ACTIONS = [ 'add', 'fix', 'remove', 'refactor', 'test', 'document', 'configure', 'analyze', 'validate', 'call', 'depend_on', 'declare', 'release', 'change', 'preserve', 'block', 'approve', 'unknown', ] as const; +const NL_ACTION_SET = new Set(NL_ACTIONS); const NL_MODALITIES = ['required', 'recommended', 'optional', 'observed', 'claimed', 'unknown'] as const; +const NL_MODALITY_SET = new Set(NL_MODALITIES); const NL_LIFECYCLES = [ 'proposed', 'planned', 'in_progress', 'implemented', 'verified', 'released', 'completed', 'blocked', 'unknown', ] as const; From caf6551e23a2489d18d8efb27248b569afe27285 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 14:01:04 +0200 Subject: [PATCH 24/43] fix(types): validate intent schema nodes before typed assertions --- src/core/schema/intent.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/core/schema/intent.ts b/src/core/schema/intent.ts index 47cf20d..e4fe2b3 100644 --- a/src/core/schema/intent.ts +++ b/src/core/schema/intent.ts @@ -80,7 +80,7 @@ export function assertIntentRecord(value: unknown): asserts value is IntentRecor } function assertIntentStatement(recordId: string, record: Record): IntentRecord['statement'] { - const statement = objectValue(record.statement, `Intent ${recordId}: statement`) as IntentRecord['statement']; + const statement = objectValue(record.statement, `Intent ${recordId}: statement`); exactKeys(statement, ['kind', 'actor', 'action', 'subject', 'object', 'target', 'modality', 'polarity', 'text'], `Intent ${recordId}: statement`); nonEmptyString(statement.kind, `Intent ${recordId}: statement.kind`); nullableString(statement.actor, `Intent ${recordId}: statement.actor`); @@ -91,27 +91,27 @@ function assertIntentStatement(recordId: string, record: Record enumValue(statement.modality, MODALITIES, `Intent ${recordId}: statement.modality`); enumValue(statement.polarity, POLARITIES, `Intent ${recordId}: statement.polarity`); statement.target = assertIntentTarget(recordId, statement.target); - return statement; + return statement as unknown as IntentRecord['statement']; } function assertIntentTarget(recordId: string, targetValue: unknown): IntentRecord['statement']['target'] { - const target = objectValue(targetValue, `Intent ${recordId}: statement.target`) as IntentRecord['statement']['target']; + const target = objectValue(targetValue, `Intent ${recordId}: statement.target`); exactKeys(target, ['paths', 'symbols', 'tickets', 'versions'], `Intent ${recordId}: statement.target`); for (const key of ['paths', 'symbols', 'tickets', 'versions'] as const) { stringArray(target[key], `Intent ${recordId}: statement.target.${key}`, true); } - return target; + return target as unknown as IntentRecord['statement']['target']; } function assertIntentLifecycle(recordId: string, record: Record): IntentRecord['lifecycle'] { - const lifecycle = objectValue(record.lifecycle, `Intent ${recordId}: lifecycle`) as IntentRecord['lifecycle']; + const lifecycle = objectValue(record.lifecycle, `Intent ${recordId}: lifecycle`); exactKeys(lifecycle, ['status'], `Intent ${recordId}: lifecycle`); enumValue(lifecycle.status, LIFECYCLES, `Intent ${recordId}: lifecycle.status`); - return lifecycle; + return lifecycle as unknown as IntentRecord['lifecycle']; } function assertIntentSource(recordId: string, record: Record): IntentRecord['source'] { - const source = objectValue(record.source, `Intent ${recordId}: source`) as IntentRecord['source']; + const source = objectValue(record.source, `Intent ${recordId}: source`); exactKeys(source, ['kind', 'path', 'lines', 'revision', 'symbol', 'commitIndex', 'extractor', 'contentHash', 'rawExcerpt'], `Intent ${recordId}: source`); enumValue(source.kind, SOURCE_KINDS, `Intent ${recordId}: source.kind`); nullableString(source.path, `Intent ${recordId}: source.path`); @@ -133,11 +133,11 @@ function assertIntentSource(recordId: string, record: Record): throw new Error(`Intent ${recordId}: source.lines must be positive and end >= start`); } } - return source; + return source as unknown as IntentRecord['source']; } function assertIntentEpistemic(recordId: string, record: Record): IntentRecord['epistemic'] { - const epistemic = objectValue(record.epistemic, `Intent ${recordId}: epistemic`) as IntentRecord['epistemic']; + const epistemic = objectValue(record.epistemic, `Intent ${recordId}: epistemic`); exactKeys(epistemic, ['class', 'confidence', 'basis'], `Intent ${recordId}: epistemic`); enumValue(epistemic.class, EPISTEMIC_CLASSES, `Intent ${recordId}: epistemic.class`); if (typeof epistemic.confidence !== 'number' || !Number.isFinite(epistemic.confidence) @@ -145,7 +145,7 @@ function assertIntentEpistemic(recordId: string, record: Record throw new Error(`Intent ${recordId}: epistemic.confidence must be between 0 and 1`); } stringArray(epistemic.basis, `Intent ${recordId}: epistemic.basis`, true); - return epistemic; + return epistemic as unknown as IntentRecord['epistemic']; } function assertIntentMetadata( From 995c7d4858b7caaf0f72c36b345afbdeccd0912e Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 15:57:38 +0200 Subject: [PATCH 25/43] refactor: split pipeline runner into focused modules --- README.md | 6 +- examples/backend/src/request-handlers.ts | 88 + examples/backend/src/server.ts | 60 +- project/README.md | 6 +- project/analysis.toon.yaml | 270 +- project/calls.mmd | 727 ++- project/calls.png | Bin 98580 -> 100231 bytes project/calls.toon.yaml | 106 +- project/calls.yaml | 5171 +++++++++-------- project/compact_flow.mmd | 9 +- project/compact_flow.png | Bin 37211 -> 32714 bytes project/context.md | 240 +- project/evolution.toon.yaml | 70 +- project/flow.mmd | 4 +- project/flow.png | Bin 14204 -> 14203 bytes project/index.html | 2 +- project/map.toon.yaml | 2449 ++++---- project/mermaid.export | 541 +- project/planfile-tickets.yaml | 1671 ++---- project/project.toon.yaml | 58 +- project/prompt.txt | 6 +- src/communication/analyzer.ts | 108 +- src/communication/identity.ts | 138 +- src/communication/intake-contract.ts | 103 +- src/communication/intake-protobuf.ts | 123 +- src/core/record-metadata.ts | 27 + src/core/record.ts | 27 +- src/diff/git-binary.ts | 10 + src/diff/git.ts | 151 +- src/diff/reality.ts | 329 +- src/diff/text-myers.ts | 152 + src/diff/text.ts | 88 +- src/evaluation/gold-cases.ts | 251 +- src/evaluation/gold-types.ts | 95 +- src/interfaces/a2a-history.ts | 144 +- src/interfaces/a2a-message-command.ts | 144 + src/interfaces/a2a-message.ts | 74 +- src/interfaces/a2a-run-list-item.ts | 171 + src/llm/openrouter-request.ts | 242 + src/llm/openrouter.ts | 136 +- src/operations/validation.ts | 308 +- src/pipeline/run-documentation.ts | 80 + src/pipeline/run-execution.ts | 189 + src/pipeline/run-failed.ts | 167 + src/pipeline/run-helpers.ts | 177 + src/pipeline/run-persistence.ts | 292 + src/pipeline/run-summary.ts | 58 + src/pipeline/run-types.ts | 89 + src/pipeline/run.ts | 661 +-- .../implementation-helpers-acceptance.ts | 141 + .../implementation-helpers-close.ts | 75 + .../implementation-helpers-plans.ts | 269 + .../implementation-helpers-shared.ts | 29 + .../implementation-helpers.ts | 531 +- .../implementation-source-patch-apply-core.ts | 434 ++ .../implementation-source-patch-apply-diff.ts | 233 + .../implementation-source-patch-apply.ts | 674 +-- .../implementation-source-patch-assert.ts | 397 ++ .../implementation-source-patch-create.ts | 235 + .../implementation-source-patch.ts | 625 +- src/watch/watcher.ts | 191 +- src/web/diff-ui-script.ts | 17 + src/web/diff-ui.ts | 21 +- 63 files changed, 10718 insertions(+), 9172 deletions(-) create mode 100644 examples/backend/src/request-handlers.ts create mode 100644 src/core/record-metadata.ts create mode 100644 src/diff/git-binary.ts create mode 100644 src/diff/text-myers.ts create mode 100644 src/interfaces/a2a-message-command.ts create mode 100644 src/interfaces/a2a-run-list-item.ts create mode 100644 src/llm/openrouter-request.ts create mode 100644 src/pipeline/run-documentation.ts create mode 100644 src/pipeline/run-execution.ts create mode 100644 src/pipeline/run-failed.ts create mode 100644 src/pipeline/run-helpers.ts create mode 100644 src/pipeline/run-persistence.ts create mode 100644 src/pipeline/run-summary.ts create mode 100644 src/pipeline/run-types.ts create mode 100644 src/synthesis/code-change-plan/implementation-helpers-acceptance.ts create mode 100644 src/synthesis/code-change-plan/implementation-helpers-close.ts create mode 100644 src/synthesis/code-change-plan/implementation-helpers-plans.ts create mode 100644 src/synthesis/code-change-plan/implementation-helpers-shared.ts create mode 100644 src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts create mode 100644 src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts create mode 100644 src/synthesis/code-change-plan/implementation-source-patch-assert.ts create mode 100644 src/synthesis/code-change-plan/implementation-source-patch-create.ts create mode 100644 src/web/diff-ui-script.ts diff --git a/README.md b/README.md index 5b1f86a..b26d310 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ ## AI Cost Tracking ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.2-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green) -![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.81-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-47.8h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) +![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.69-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-50.0h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey) -- 🤖 **LLM usage:** $7.8085 (125 commits) -- 👤 **Human dev:** ~$4778 (47.8h @ $100/h, 30min dedup) +- 🤖 **LLM usage:** $7.6898 (128 commits) +- 👤 **Human dev:** ~$4997 (50.0h @ $100/h, 30min dedup) Generated on 2026-08-04 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next) diff --git a/examples/backend/src/request-handlers.ts b/examples/backend/src/request-handlers.ts new file mode 100644 index 0000000..474fa2c --- /dev/null +++ b/examples/backend/src/request-handlers.ts @@ -0,0 +1,88 @@ +import { type IncomingMessage, type ServerResponse } from 'node:http'; +import { EventStore } from './store.js'; +import { validateEventPayload } from './validation.js'; + +const MAX_BODY_BYTES = 64 * 1024; + +export async function handleRequest( + request: IncomingMessage, + response: ServerResponse, + store: EventStore, +): Promise { + const url = new URL(request.url ?? '/', `http://${request.headers.host ?? 'localhost'}`); + if (url.pathname === '/health' && request.method === 'GET') { + return handleHealth(response, store); + } + if (url.pathname === '/events' && request.method === 'POST') { + return handleEventPublish(request, response, store); + } + if (url.pathname === '/events' && request.method === 'GET') { + return handleEventList(response, url.searchParams, store); + } + sendJson(response, 404, { error: 'not found' }); +} + +async function handleHealth(response: ServerResponse, store: EventStore): Promise { + sendJson(response, 200, { status: 'ok', events: store.size() }); +} + +async function handleEventPublish(request: IncomingMessage, response: ServerResponse, store: EventStore): Promise { + const body = await readBody(request); + let payload: unknown; + try { + payload = JSON.parse(body || '{}'); + } catch { + sendJson(response, 400, { error: 'invalid JSON body' }); + return; + } + + const validation = validateEventPayload(payload); + if (!validation.valid) { + process.stderr.write(`rejected event: ${validation.reason}\n`); + sendJson(response, 400, { error: validation.reason }); + return; + } + + const event = store.enqueueEvent(validation.agent, validation.action, validation.object); + sendJson(response, 202, { id: event.id }); +} + +async function handleEventList(response: ServerResponse, params: URLSearchParams, store: EventStore): Promise { + const offset = parseOffset(params.get('offset')); + const limit = parseLimit(params.get('limit')); + sendJson(response, 200, store.listEvents( + offset, + limit, + )); +} + +function parseOffset(value: string | null): number { + const parsed = Number(value); + return Number.isFinite(parsed) ? parsed : 0; +} + +function parseLimit(value: string | null): number { + const parsed = Number(value); + return Number.isFinite(parsed) ? parsed : 50; +} + +async function readBody(request: IncomingMessage): Promise { + const chunks: Buffer[] = []; + let size = 0; + for await (const chunk of request) { + const buffer = Buffer.from(chunk as Buffer); + size += buffer.byteLength; + if (size > MAX_BODY_BYTES) throw new Error('request body too large'); + chunks.push(buffer); + } + return Buffer.concat(chunks).toString('utf8'); +} + +function sendJson(response: ServerResponse, status: number, payload: unknown): void { + const body = JSON.stringify(payload); + response.writeHead(status, { + 'content-type': 'application/json; charset=utf-8', + 'content-length': Buffer.byteLength(body), + }); + response.end(body); +} diff --git a/examples/backend/src/server.ts b/examples/backend/src/server.ts index 8cbdc68..fd658e5 100644 --- a/examples/backend/src/server.ts +++ b/examples/backend/src/server.ts @@ -3,11 +3,9 @@ // Mirrors the todo2code house style: node: builtins only, explicit body limits // and no framework, so `t2c extract ast` sees plain TypeScript declarations. -import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http'; +import { createServer, type Server, type ServerResponse } from 'node:http'; import { EventStore } from './store.js'; -import { validateEventPayload } from './validation.js'; - -const MAX_BODY_BYTES = 64 * 1024; +import { handleRequest } from './request-handlers.js'; export interface BackendOptions { host?: string; @@ -25,60 +23,6 @@ export function createBackend(options: BackendOptions = {}): { server: Server; s return { server, store }; } -async function handleRequest(request: IncomingMessage, response: ServerResponse, store: EventStore): Promise { - const url = new URL(request.url ?? '/', `http://${request.headers.host ?? 'localhost'}`); - - if (request.method === 'GET' && url.pathname === '/health') { - sendJson(response, 200, { status: 'ok', events: store.size() }); - return; - } - - if (request.method === 'POST' && url.pathname === '/events') { - const body = await readBody(request); - let payload: unknown; - try { - payload = JSON.parse(body || '{}'); - } catch { - sendJson(response, 400, { error: 'invalid JSON body' }); - return; - } - const validation = validateEventPayload(payload); - if (!validation.valid) { - // Every rejection is logged with its reason, per the acceptance criteria. - process.stderr.write(`rejected event: ${validation.reason}\n`); - sendJson(response, 400, { error: validation.reason }); - return; - } - const event = store.enqueueEvent(validation.agent, validation.action, validation.object); - sendJson(response, 202, { id: event.id }); - return; - } - - if (request.method === 'GET' && url.pathname === '/events') { - const offset = Number(url.searchParams.get('offset') ?? '0'); - const limit = Number(url.searchParams.get('limit') ?? '50'); - sendJson(response, 200, store.listEvents( - Number.isFinite(offset) ? offset : 0, - Number.isFinite(limit) ? limit : 50, - )); - return; - } - - sendJson(response, 404, { error: 'not found' }); -} - -async function readBody(request: IncomingMessage): Promise { - const chunks: Buffer[] = []; - let size = 0; - for await (const chunk of request) { - const buffer = Buffer.from(chunk as Buffer); - size += buffer.byteLength; - if (size > MAX_BODY_BYTES) throw new Error('request body too large'); - chunks.push(buffer); - } - return Buffer.concat(chunks).toString('utf8'); -} - function sendJson(response: ServerResponse, status: number, payload: unknown): void { const body = JSON.stringify(payload); response.writeHead(status, { diff --git a/project/README.md b/project/README.md index b53ff19..19770e7 100644 --- a/project/README.md +++ b/project/README.md @@ -333,8 +333,8 @@ code2llm ./ -f yaml --separate-orphans **Generated by**: `code2llm ./ -f all --readme` **Analysis Date**: 2026-08-04 -**Total Functions**: 3918 -**Total Classes**: 392 -**Modules**: 260 +**Total Functions**: 4129 +**Total Classes**: 404 +**Modules**: 281 For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm diff --git a/project/analysis.toon.yaml b/project/analysis.toon.yaml index 693340a..6590bfc 100644 --- a/project/analysis.toon.yaml +++ b/project/analysis.toon.yaml @@ -1,35 +1,34 @@ -# code2llm | 260f 41965L | typescript:152,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 -# generated in 0.32s -# CC̅=3.3 | critical:63/3918 | dups:0 | cycles:0 +# code2llm | 281f 43441L | typescript:173,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 +# generated in 0.31s +# CC̅=3.1 | critical:24/4129 | dups:0 | cycles:0 HEALTH[20]: - 🔴 GOD src/synthesis/code-change-plan/implementation-helpers.ts = 1148L, 16 classes, 133m, max CC=13 - 🔴 GOD src/synthesis/code-change-plan/implementation-source-patch.ts = 694L, 5 classes, 95m, max CC=11 - 🟡 CC handleRequest CC=16 (limit:15) + 🔴 GOD src/diff/reality.ts = 690L, 4 classes, 89m, max CC=15 🟡 CC generationMetadata CC=17 (limit:15) - 🟡 CC diffUiScriptMarkup CC=46 (limit:15) 🟡 CC compareGraphs CC=15 (limit:15) - 🟡 CC timeout CC=26 (limit:15) - 🟡 CC request CC=31 (limit:15) - 🟡 CC parseCommand CC=63 (limit:15) - 🟡 CC runListItem CC=18 (limit:15) - 🟡 CC myers CC=19 (limit:15) - 🟡 CC n CC=15 (limit:15) - 🟡 CC m CC=15 (limit:15) - 🟡 CC max CC=15 (limit:15) - 🟡 CC offset CC=15 (limit:15) - 🟡 CC y CC=15 (limit:15) - 🟡 CC backtrack CC=18 (limit:15) - 🟡 CC x CC=15 (limit:15) - 🟡 CC buildRealityView CC=26 (limit:15) - 🟡 CC resolveStatus CC=15 (limit:15) + 🟡 CC looksLikeJson CC=20 (limit:15) + 🟡 CC buildRealityTotals CC=15 (limit:15) + 🟡 CC persistPipelineArtifacts CC=17 (limit:15) + 🟡 CC persistFailedRunState CC=19 (limit:15) + 🟡 CC assertRerankerDecision CC=17 (limit:15) + 🟡 CC assertGeneration CC=16 (limit:15) + 🟡 CC validateOperationStep CC=23 (limit:15) + 🟡 CC collectAgentActionIssues CC=15 (limit:15) + 🟡 CC parseFile CC=38 (limit:15) + 🟡 CC makefile CC=28 (limit:15) + 🟡 CC visited CC=15 (limit:15) + 🟡 CC visit CC=15 (limit:15) + 🟡 CC main CC=27 (limit:15) + 🟡 CC iter_python_files CC=16 (limit:15) + 🟡 CC run CC=26 (limit:15) + 🟡 CC baseUrl CC=17 (limit:15) + 🟡 CC token CC=17 (limit:15) -REFACTOR[3]: - 1. split src/synthesis/code-change-plan/implementation-helpers.ts (god module) - 2. split src/synthesis/code-change-plan/implementation-source-patch.ts (god module) - 3. split 18 high-CC methods (CC>15) +REFACTOR[2]: + 1. split src/diff/reality.ts (god module) + 2. split 19 high-CC methods (CC>15) -PIPELINES[2088]: +PIPELINES[2116]: [1] Src [main]: main → arguments PURITY: 100% pure [2] Src [new]: new @@ -60,75 +59,75 @@ PIPELINES[2088]: PURITY: 100% pure [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt PURITY: 100% pure - [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid + [16] Src [MAX_BODY_BYTES]: MAX_BODY_BYTES → handleHealth → sendJson PURITY: 100% pure - [17] Src [validateEventPayload]: validateEventPayload → invalid + [17] Src [handleRequest]: handleRequest → handleHealth → sendJson PURITY: 100% pure - [18] Src [record]: record → invalid + [18] Src [url]: url PURITY: 100% pure - [19] Src [agent]: agent → invalid + [19] Src [body]: body PURITY: 100% pure - [20] Src [action]: action → invalid + [20] Src [validation]: validation → sendJson PURITY: 100% pure - [21] Src [object]: object → invalid + [21] Src [event]: event → sendJson PURITY: 100% pure - [22] Src [enqueueEvent]: enqueueEvent + [22] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid PURITY: 100% pure - [23] Src [listEvents]: listEvents + [23] Src [validateEventPayload]: validateEventPayload → invalid PURITY: 100% pure - [24] Src [start]: start + [24] Src [record]: record → invalid PURITY: 100% pure - [25] Src [store]: store → handleRequest → sendJson + [25] Src [agent]: agent → invalid PURITY: 100% pure - [26] Src [server]: server → handleRequest → sendJson + [26] Src [action]: action → invalid PURITY: 100% pure - [27] Src [url]: url + [27] Src [object]: object → invalid PURITY: 100% pure - [28] Src [body]: body + [28] Src [enqueueEvent]: enqueueEvent PURITY: 100% pure - [29] Src [validation]: validation → sendJson + [29] Src [listEvents]: listEvents PURITY: 100% pure - [30] Src [event]: event → sendJson + [30] Src [start]: start PURITY: 100% pure - [31] Src [offset]: offset → sendJson + [31] Src [store]: store → sendJson PURITY: 100% pure - [32] Src [limit]: limit → sendJson + [32] Src [server]: server → sendJson PURITY: 100% pure - [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson + [33] Src [body]: body PURITY: 100% pure - [34] Src [port]: port + [34] Src [startBackend]: startBackend → createBackend → sendJson PURITY: 100% pure - [35] Src [host]: host + [35] Src [port]: port PURITY: 100% pure - [36] Src [fetchEvents]: fetchEvents + [36] Src [host]: host PURITY: 100% pure - [37] Src [url]: url + [37] Src [fetchEvents]: fetchEvents PURITY: 100% pure - [38] Src [response]: response + [38] Src [url]: url PURITY: 100% pure - [39] Src [payload]: payload + [39] Src [response]: response PURITY: 100% pure - [40] Src [publishEvent]: publishEvent + [40] Src [payload]: payload PURITY: 100% pure - [41] Src [toRows]: toRows → classifyEvent + [41] Src [publishEvent]: publishEvent PURITY: 100% pure - [42] Src [renderTable]: renderTable → headerRow + [42] Src [toRows]: toRows → classifyEvent PURITY: 100% pure - [43] Src [table]: table + [43] Src [renderTable]: renderTable → headerRow PURITY: 100% pure - [44] Src [head]: head + [44] Src [table]: table PURITY: 100% pure - [45] Src [body]: body + [45] Src [head]: head PURITY: 100% pure - [46] Src [tr]: tr + [46] Src [body]: body PURITY: 100% pure - [47] Src [renderError]: renderError + [47] Src [tr]: tr PURITY: 100% pure - [48] Src [message]: message + [48] Src [renderError]: renderError PURITY: 100% pure - [49] Src [mountPanel]: mountPanel → createState + [49] Src [message]: message PURITY: 100% pure - [50] Src [load_task]: load_task + [50] Src [mountPanel]: mountPanel → createState PURITY: 100% pure LAYERS: @@ -138,31 +137,58 @@ LAYERS: golang/ CC̄=5.3 ←in:0 →out:0 │ ast_extract.go 368L 3C 15m CC=14 ←0 │ - python/ CC̄=4.2 ←in:0 →out:5 + python/ CC̄=4.2 ←in:0 →out:1 │ !! ast_extract 221L 1C 18m CC=16 ←0 │ requirements.txt 1L 0C 0m CC=0.0 ←0 │ - src/ CC̄=3.4 ←in:0 →out:0 - │ !! implementation-helpers.ts 1148L 16C 133m CC=13 ←0 + scripts/ CC̄=3.4 ←in:0 →out:0 + │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0 + │ examples-check.sh 210L 0C 3m CC=0.0 ←0 + │ live-contract-check.mjs 200L 0C 26m CC=5 ←0 + │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0 + │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0 + │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0 + │ e2e.sh 109L 0C 3m CC=0.0 ←0 + │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0 + │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0 + │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0 + │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0 + │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0 + │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0 + │ smoke.sh 57L 0C 0m CC=0.0 ←0 + │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0 + │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0 + │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0 + │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0 + │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0 + │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0 + │ vallm-compatible 25L 0C 1m CC=2 ←0 + │ package 25L 0C 0m CC=0.0 ←0 + │ a2a-request.sh 23L 0C 0m CC=0.0 ←0 + │ mcp-request.sh 11L 0C 0m CC=0.0 ←0 + │ + src/ CC̄=3.1 ←in:0 →out:0 │ !! cli.ts 942L 1C 124m CC=13 ←0 │ !! actions.ts 806L 1C 106m CC=13 ←0 - │ !! implementation-source-patch.ts 694L 5C 95m CC=11 ←0 - │ !! reality.ts 619L 3C 74m CC=26 ←0 - │ !! run.ts 617L 1C 65m CC=56 ←0 + │ !! reality.ts 690L 4C 89m CC=15 ←0 + │ !! analyzer.ts 596L 3C 81m CC=15 ←0 │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0 - │ !! analyzer.ts 542L 3C 72m CC=48 ←0 │ !! text.ts 530L 0C 61m CC=14 ←0 - │ diagnostics.ts 459L 1C 58m CC=11 ←0 + │ gold-cases.ts 489L 4C 62m CC=8 ←0 + │ diagnostics.ts 459L 1C 59m CC=11 ←0 + │ implementation-source-patch-apply-core.ts 434L 6C 50m CC=13 ←0 + │ !! validation.ts 429L 0C 69m CC=23 ←0 + │ !! gold-types.ts 405L 15C 17m CC=17 ←0 │ git.ts 397L 6C 57m CC=11 ←0 + │ implementation-source-patch-assert.ts 397L 2C 52m CC=11 ←0 + │ !! run.ts 384L 4C 33m CC=20 ←0 │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0 - │ !! gold-types.ts 378L 15C 11m CC=32 ←0 │ todo-patch.ts 372L 5C 52m CC=12 ←0 │ docs-deterministic.ts 369L 3C 43m CC=11 ←0 - │ !! gold-cases.ts 366L 4C 42m CC=18 ←0 │ implementation-helpers.ts 357L 5C 33m CC=10 ←0 │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0 │ workspace.ts 342L 3C 54m CC=12 ←0 - │ !! openrouter.ts 338L 7C 39m CC=31 ←0 + │ intake-contract.ts 334L 7C 34m CC=14 ←0 │ summarizer.ts 333L 5C 27m CC=10 ←0 │ a2a.ts 332L 0C 47m CC=9 ←0 │ gold.ts 329L 3C 31m CC=14 ←0 @@ -171,64 +197,72 @@ LAYERS: │ communication-helpers.ts 320L 3C 45m CC=14 ←0 │ contract-check.ts 317L 6C 39m CC=14 ←2 │ result.ts 311L 0C 23m CC=7 ←0 + │ intent.ts 309L 4C 37m CC=12 ←0 │ runtime-cycle.ts 306L 1C 35m CC=9 ←0 - │ intent.ts 306L 4C 36m CC=12 ←0 + │ !! run-persistence.ts 297L 0C 28m CC=19 ←0 + │ watcher.ts 292L 6C 42m CC=12 ←0 │ reranker-llm.ts 291L 2C 35m CC=9 ←0 │ intake-service.ts 291L 2C 48m CC=13 ←0 │ linker.ts 286L 1C 52m CC=8 ←3 - │ !! validation.ts 281L 0C 47m CC=84 ←0 - │ !! intake-contract.ts 273L 7C 30m CC=18 ←0 + │ implementation-review.ts 274L 3C 33m CC=7 ←0 │ docs-llm.ts 269L 1C 28m CC=12 ←0 - │ implementation-review.ts 269L 3C 31m CC=7 ←0 + │ implementation-helpers-plans.ts 269L 3C 36m CC=9 ←0 │ typescript.ts 266L 1C 26m CC=8 ←0 │ tasks-llm.ts 266L 4C 22m CC=11 ←0 + │ nl-llm-helpers.ts 261L 3C 31m CC=11 ←0 │ mcp.ts 261L 2C 38m CC=9 ←0 - │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0 │ text-render.ts 251L 2C 33m CC=13 ←0 │ candidate.ts 250L 1C 19m CC=8 ←0 │ code-change.ts 250L 19C 0m CC=0.0 ←0 - │ !! watcher.ts 243L 4C 37m CC=19 ←0 + │ openrouter-request.ts 242L 4C 30m CC=9 ←0 + │ openrouter.ts 240L 5C 31m CC=13 ←0 │ utils.ts 239L 0C 42m CC=8 ←0 - │ !! text.ts 239L 1C 48m CC=19 ←2 │ diff.ts 235L 1C 38m CC=11 ←0 + │ implementation-source-patch-create.ts 235L 3C 30m CC=6 ←0 + │ implementation-source-patch-apply-diff.ts 233L 3C 31m CC=11 ←0 │ code-change-path.ts 232L 0C 23m CC=11 ←0 │ env.ts 231L 1C 20m CC=13 ←0 - │ !! a2a-history.ts 226L 3C 37m CC=18 ←0 │ structured-schema.ts 218L 5C 25m CC=10 ←0 │ model-comparison.ts 218L 4C 21m CC=12 ←0 + │ identity.ts 216L 3C 33m CC=12 ←0 │ intent.ts 212L 13C 0m CC=0.0 ←0 │ io.ts 211L 2C 30m CC=11 ←0 │ conclusions.ts 210L 0C 21m CC=9 ←0 │ configuration.ts 208L 1C 38m CC=10 ←0 + │ git.ts 208L 4C 27m CC=6 ←0 │ implementation.ts 208L 4C 21m CC=12 ←0 │ ignore.ts 200L 3C 23m CC=10 ←0 - │ !! a2a-message.ts 197L 0C 35m CC=63 ←1 │ docs-record.ts 193L 0C 34m CC=14 ←0 - │ !! record.ts 183L 2C 13m CC=17 ←0 + │ run-helpers.ts 188L 0C 18m CC=11 ←0 │ a2a-card.ts 181L 0C 7m CC=3 ←0 │ markdown-llm.ts 178L 2C 11m CC=9 ←0 │ pipeline.ts 173L 7C 0m CC=0.0 ←0 │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0 │ typescript.ts 172L 6C 16m CC=2 ←0 + │ a2a-run-list-item.ts 171L 2C 29m CC=8 ←0 │ ast.ts 167L 2C 15m CC=12 ←0 │ id.ts 167L 0C 16m CC=5 ←0 - │ !! diff-ui.ts 167L 0C 15m CC=46 ←0 │ a2a-types.ts 164L 9C 14m CC=10 ←0 │ nl-llm.ts 163L 2C 19m CC=10 ←0 │ linker-candidates.ts 163L 1C 23m CC=10 ←0 - │ !! git.ts 161L 3C 21m CC=22 ←0 │ intake-store.ts 161L 3C 19m CC=11 ←0 │ markdown-paths.ts 158L 2C 22m CC=12 ←0 + │ record.ts 158L 2C 10m CC=6 ←0 + │ intake-protobuf.ts 158L 0C 29m CC=13 ←0 │ intake_cli 156L 0C 6m CC=10 ←0 │ types.ts 155L 8C 0m CC=0.0 ←0 + │ text.ts 153L 0C 34m CC=6 ←0 + │ diff-ui.ts 152L 0C 7m CC=5 ←0 + │ text-myers.ts 152L 3C 27m CC=9 ←0 │ docs-chunks.ts 147L 0C 29m CC=8 ←0 │ symbol-resolution.ts 146L 3C 22m CC=10 ←0 - │ !! identity.ts 146L 3C 22m CC=30 ←0 + │ !! a2a-message-command.ts 144L 0C 30m CC=20 ←1 + │ implementation-helpers-acceptance.ts 141L 2C 15m CC=4 ←0 │ content-cache.ts 139L 4C 12m CC=5 ←0 │ classifier.ts 135L 4C 32m CC=6 ←0 │ gold-extraction.ts 127L 0C 13m CC=5 ←0 │ implementation-semantic.ts 125L 1C 13m CC=9 ←0 - │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0 + │ a2a-message.ts 125L 0C 19m CC=12 ←0 │ subactor.ts 122L 1C 9m CC=13 ←0 │ validation.ts 113L 2C 28m CC=11 ←0 │ validation.ts 111L 0C 11m CC=7 ←0 @@ -237,12 +271,15 @@ LAYERS: │ svg.ts 104L 2C 7m CC=2 ←0 │ changelog.ts 99L 0C 16m CC=11 ←0 │ records.ts 97L 0C 10m CC=6 ←0 + │ a2a-history.ts 96L 1C 17m CC=13 ←0 │ todo.ts 93L 0C 18m CC=5 ←0 │ changelog-signal.ts 89L 0C 12m CC=8 ←0 │ mcp-resources.ts 88L 0C 13m CC=6 ←0 │ contract.ts 84L 0C 7m CC=1 ←0 │ linker-relations.ts 83L 3C 7m CC=7 ←0 │ governed-intake.proto 78L 0C 0m CC=0.0 ←0 + │ implementation-helpers-close.ts 75L 2C 10m CC=4 ←0 + │ implementation-source-patch-diff.ts 74L 0C 16m CC=6 ←0 │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0 │ docs-types.ts 68L 7C 0m CC=0.0 ←0 │ markdown-block.ts 67L 1C 3m CC=10 ←0 @@ -253,6 +290,7 @@ LAYERS: │ capability-evidence.ts 62L 0C 14m CC=10 ←0 │ implementation-targets.ts 61L 0C 9m CC=5 ←0 │ render.ts 61L 0C 13m CC=10 ←0 + │ run-summary.ts 58L 1C 4m CC=5 ←0 │ target.ts 57L 0C 12m CC=9 ←0 │ security.ts 55L 0C 11m CC=7 ←0 │ index.ts 53L 0C 0m CC=0.0 ←0 @@ -264,6 +302,7 @@ LAYERS: │ reranker-response.ts 42L 1C 5m CC=1 ←0 │ python.ts 39L 0C 6m CC=2 ←0 │ text-types.ts 39L 4C 0m CC=0.0 ←0 + │ implementation-helpers.ts 39L 0C 0m CC=0.0 ←0 │ intake-actions.ts 38L 0C 10m CC=6 ←0 │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0 │ markdown.ts 35L 1C 4m CC=4 ←0 @@ -271,6 +310,8 @@ LAYERS: │ compile-cli.ts 34L 0C 7m CC=10 ←0 │ constants.ts 31L 0C 14m CC=1 ←0 │ unsupported.ts 30L 0C 4m CC=5 ←0 + │ implementation-helpers-shared.ts 29L 0C 2m CC=1 ←0 + │ !! record-metadata.ts 27L 0C 3m CC=17 ←0 │ implementation-indexing.ts 25L 0C 4m CC=4 ←3 │ failure.ts 25L 1C 3m CC=7 ←0 │ grounding.ts 24L 0C 5m CC=5 ←0 @@ -281,13 +322,17 @@ LAYERS: │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0 │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0 │ audit.ts 19L 0C 1m CC=1 ←0 + │ !! diff-ui-script.ts 17L 0C 8m CC=15 ←0 │ implementation-diagnostics.ts 17L 0C 2m CC=2 ←0 │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0 │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0 │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0 │ mcp-errors.ts 10L 1C 2m CC=3 ←0 + │ git-binary.ts 10L 0C 2m CC=1 ←0 + │ implementation-source-patch.ts 9L 0C 0m CC=0.0 ←0 │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0 │ index.ts 8L 0C 0m CC=0.0 ←0 + │ implementation-source-patch-apply.ts 8L 0C 0m CC=0.0 ←0 │ index.ts 4L 0C 0m CC=0.0 ←0 │ index.ts 4L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 @@ -296,32 +341,6 @@ LAYERS: │ implementation.ts 1L 0C 0m CC=0.0 ←0 │ llm.ts 1L 0C 0m CC=0.0 ←0 │ - scripts/ CC̄=3.4 ←in:0 →out:0 - │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0 - │ examples-check.sh 210L 0C 3m CC=0.0 ←0 - │ live-contract-check.mjs 200L 0C 26m CC=5 ←0 - │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0 - │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0 - │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0 - │ e2e.sh 109L 0C 3m CC=0.0 ←0 - │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0 - │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0 - │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0 - │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0 - │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0 - │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0 - │ smoke.sh 57L 0C 0m CC=0.0 ←0 - │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0 - │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0 - │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0 - │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0 - │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0 - │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0 - │ vallm-compatible 25L 0C 1m CC=2 ←0 - │ package 25L 0C 0m CC=0.0 ←0 - │ a2a-request.sh 23L 0C 0m CC=0.0 ←0 - │ mcp-request.sh 11L 0C 0m CC=0.0 ←0 - │ java/ CC̄=3.0 ←in:2 →out:0 │ JavaAstExtract.java 260L 1C 12m CC=10 ←1 │ @@ -356,11 +375,12 @@ LAYERS: │ __init__ 13L 0C 0m CC=0.0 ←0 │ __init__ 1L 0C 0m CC=0.0 ←0 │ - examples/ CC̄=2.4 ←in:0 →out:0 - │ !! server.ts 99L 1C 18m CC=16 ←0 + examples/ CC̄=2.3 ←in:0 →out:0 + │ request-handlers.ts 88L 0C 18m CC=9 ←0 │ render.ts 64L 1C 12m CC=4 ←0 │ api.ts 50L 3C 6m CC=6 ←1 │ store.ts 48L 3C 4m CC=1 ←0 + │ server.ts 43L 1C 8m CC=4 ←0 │ app.ts 43L 1C 7m CC=4 ←0 │ participants.json 37L 0C 0m CC=0.0 ←0 │ validation.ts 31L 1C 7m CC=10 ←0 @@ -420,22 +440,20 @@ LAYERS: │ COUPLING: - scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend - scripts.research ── 7 2 1 1 !! fan-out - sdk.python ── 4 1 2 1 !! fan-out - src.live ←7 ── hub - src.diff ←2 ── ←4 hub - python 4 ── 1 - src.synthesis ←1 ←4 ── hub - src.graph ←1 ←1 ←1 ── - java ←2 ── - examples.frontend ←1 ── + scripts.research sdk.python src.live src.synthesis src.graph java examples.frontend python + scripts.research ── 7 1 1 !! fan-out + sdk.python ── 4 1 2 1 !! fan-out + src.live ←7 ── hub + src.synthesis ←1 ←4 ── hub + src.graph ←1 ←1 ── ←1 + java ←2 ── + examples.frontend ←1 ── + python 1 ── CYCLES: none - HUB: src.diff/ (fan-in=6) HUB: src.live/ (fan-in=7) HUB: src.synthesis/ (fan-in=5) + SMELL: scripts.research/ fan-out=9 → split needed SMELL: sdk.python/ fan-out=8 → split needed - SMELL: scripts.research/ fan-out=11 → split needed EXTERNAL: validation: run `vallm batch .` → validation.toon diff --git a/project/calls.mmd b/project/calls.mmd index 9263900..8ce239f 100644 --- a/project/calls.mmd +++ b/project/calls.mmd @@ -1,420 +1,417 @@ flowchart LR -%% generated in 0.09s +%% generated in 0.04s subgraph examples__backend - examples__backend__src__server__readBody["readBody"] - examples__backend__src__server__createBackend["createBackend"] - examples__backend__src__validation__action["action"] + examples__backend__src__request_handlers__handleHealth["handleHealth"] examples__backend__src__validation__agent["agent"] + examples__backend__src__request_handlers__size["size"] + examples__backend__src__server__createBackend["createBackend"] + examples__backend__src__request_handlers__handleEventList["handleEventList"] + examples__backend__src__request_handlers__handleRequest["handleRequest"] + examples__backend__src__validation__invalid["invalid"] examples__backend__src__server__sendJson["sendJson"] + examples__backend__src__request_handlers__handleEventPublish["handleEventPublish"] + examples__backend__src__request_handlers__parseOffset["parseOffset"] + examples__backend__src__validation__record["record"] + examples__backend__src__request_handlers__event["event"] + examples__backend__src__request_handlers__parseLimit["parseLimit"] + examples__backend__src__request_handlers__validation["validation"] examples__backend__src__server__startBackend["startBackend"] - examples__backend__src__server__size["size"] - examples__backend__src__server__server["server"] - examples__backend__src__validation__object["object"] - examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] examples__backend__src__server__store["store"] - examples__backend__src__validation__invalid["invalid"] - examples__backend__src__validation__record["record"] - examples__backend__src__server__handleRequest["handleRequest"] - examples__backend__src__server__event["event"] + examples__backend__src__request_handlers__readBody["readBody"] + examples__backend__src__request_handlers__sendJson["sendJson"] + examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] examples__backend__src__validation__validateEventPayload["validateEventPayload"] - examples__backend__src__server__offset["offset"] - examples__backend__src__server__validation["validation"] - examples__backend__src__server__limit["limit"] + examples__backend__src__validation__action["action"] + examples__backend__src__request_handlers__MAX_BODY_BYTES["MAX_BODY_BYTES"] + examples__backend__src__server__server["server"] + examples__backend__src__validation__object["object"] end subgraph examples__frontend - examples__frontend__src__app__reload["reload"] + examples__frontend__src__app__state["state"] + examples__frontend__src__render__renderTable["renderTable"] examples__frontend__src__app__refresh["refresh"] + examples__frontend__src__render__headerRow["headerRow"] examples__frontend__src__app__mountPanel["mountPanel"] - examples__frontend__src__render__toRows["toRows"] + examples__frontend__src__app__reload["reload"] examples__frontend__src__render__classifyEvent["classifyEvent"] - examples__frontend__src__app__state["state"] - examples__frontend__src__render__headerRow["headerRow"] - examples__frontend__src__render__renderTable["renderTable"] + examples__frontend__src__render__toRows["toRows"] examples__frontend__src__app__createState["createState"] end subgraph examples__src - examples__src__runtime__validateContract["validateContract"] examples__src__runtime__executeContract["executeContract"] + examples__src__runtime__validateContract["validateContract"] end subgraph java__JavaAstExtract - java__JavaAstExtract__JavaAstExtract__add["add"] - java__JavaAstExtract__JavaAstExtract__emit["emit"] - java__JavaAstExtract__JavaAstExtract__escape["escape"] - java__JavaAstExtract__JavaAstExtract__json["json"] - java__JavaAstExtract__JavaAstExtract__try["try"] - java__JavaAstExtract__JavaAstExtract__main["main"] java__JavaAstExtract__JavaAstExtract__slash["slash"] - java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] java__JavaAstExtract__JavaAstExtract__collect["collect"] + java__JavaAstExtract__JavaAstExtract__json["json"] java__JavaAstExtract__JavaAstExtract__map["map"] + java__JavaAstExtract__JavaAstExtract__try["try"] + java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] + java__JavaAstExtract__JavaAstExtract__escape["escape"] + java__JavaAstExtract__JavaAstExtract__add["add"] + java__JavaAstExtract__JavaAstExtract__emit["emit"] + java__JavaAstExtract__JavaAstExtract__main["main"] end subgraph rust_ast__src - rust_ast__src__main__visit_item_type["visit_item_type"] + rust_ast__src__main__visit_item_use["visit_item_use"] + rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] rust_ast__src__main__visit_item_static["visit_item_static"] + rust_ast__src__main__visit_item_const["visit_item_const"] + rust_ast__src__main__add["add"] rust_ast__src__main__visit_item_mod["visit_item_mod"] - rust_ast__src__main__type_item["type_item"] - rust_ast__src__main__excerpt["excerpt"] - rust_ast__src__main__visit_item_enum["visit_item_enum"] + rust_ast__src__main__visit_item_fn["visit_item_fn"] rust_ast__src__main__qualified["qualified"] - rust_ast__src__main__slash["slash"] - rust_ast__src__main__add["add"] - rust_ast__src__main__visit_item_use["visit_item_use"] - rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] - rust_ast__src__main__collect_files["collect_files"] rust_ast__src__main__modifiers["modifiers"] - rust_ast__src__main__visit_item_const["visit_item_const"] - rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] + rust_ast__src__main__visit_item_type["visit_item_type"] + rust_ast__src__main__visit_item_enum["visit_item_enum"] + rust_ast__src__main__slash["slash"] + rust_ast__src__main__visit_expr_call["visit_expr_call"] + rust_ast__src__main__visit_item_trait["visit_item_trait"] + rust_ast__src__main__excerpt["excerpt"] rust_ast__src__main__main["main"] - rust_ast__src__main__visit_item_struct["visit_item_struct"] + rust_ast__src__main__type_item["type_item"] + rust_ast__src__main__collect_files["collect_files"] + rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] rust_ast__src__main__arguments["arguments"] - rust_ast__src__main__visit_item_trait["visit_item_trait"] - rust_ast__src__main__visit_item_fn["visit_item_fn"] - rust_ast__src__main__visit_expr_call["visit_expr_call"] + rust_ast__src__main__visit_item_struct["visit_item_struct"] end subgraph src__cli - src__cli__optionNlMode["optionNlMode"] + src__cli__main["main"] + src__cli__svg["svg"] + src__cli__handleExtractAst["handleExtractAst"] + src__cli__handleDiagnose["handleDiagnose"] + src__cli__handleExtract["handleExtract"] src__cli__result["result"] - src__cli__parseDiffMode["parseDiffMode"] - src__cli__handleProposeCodeChange["handleProposeCodeChange"] - src__cli__formatWatchEvent["formatWatchEvent"] - src__cli__handleProposeSourcePatch["handleProposeSourcePatch"] + src__cli__taskFile["taskFile"] + src__cli__handleCommunication["handleCommunication"] src__cli__isPlanSet["isPlanSet"] - src__cli__reportPipelineDegradation["reportPipelineDegradation"] - src__cli__emitJson["emitJson"] - src__cli__optionLlmMode["optionLlmMode"] - src__cli__printHelp["printHelp"] - src__cli__execFileAsync["execFileAsync"] - src__cli__handleDiagnose["handleDiagnose"] - src__cli__handleDiff["handleDiff"] + src__cli__doctor["doctor"] + src__cli__handleLink["handleLink"] + src__cli__emitExtraction["emitExtraction"] src__cli__parseArgs["parseArgs"] - src__cli__handleExtractRuntime["handleExtractRuntime"] - src__cli__handleExtractNl["handleExtractNl"] - src__cli__parsed["parsed"] + src__cli__handleDiff["handleDiff"] src__cli__optionTaskMode["optionTaskMode"] - src__cli__handler["handler"] - src__cli__commandHandlers["commandHandlers"] - src__cli__view["view"] - src__cli__handleExtractConfig["handleExtractConfig"] - src__cli__buildFileDiff["buildFileDiff"] - src__cli__absolute["absolute"] - src__cli__buildPipelineOptions["buildPipelineOptions"] - src__cli__handleSummarize["handleSummarize"] - src__cli__resolveMainCommand["resolveMainCommand"] + src__cli__handleCompareWorkspace["handleCompareWorkspace"] + src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] + src__cli__handleWatch["handleWatch"] src__cli__handleExtractCommunication["handleExtractCommunication"] + src__cli__handleGraphDiff["handleGraphDiff"] + src__cli__emitJson["emitJson"] + src__cli__view["view"] + src__cli__controller["controller"] + src__cli__handleApplySourcePatch["handleApplySourcePatch"] + src__cli__buildDiffPayload["buildDiffPayload"] src__cli__context["context"] src__cli__handleRenderTodo["handleRenderTodo"] - src__cli__diagnosticsPath["diagnosticsPath"] + src__cli__handleExtractDocs["handleExtractDocs"] + src__cli__printHelp["printHelp"] + src__cli__optionNullableString["optionNullableString"] + src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] src__cli__handleReality["handleReality"] - src__cli__optionSummaryMode["optionSummaryMode"] + src__cli__optionString["optionString"] + src__cli__handleProposeTodo["handleProposeTodo"] + src__cli__resolveMainCommand["resolveMainCommand"] + src__cli__handleExtractConfig["handleExtractConfig"] + src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] + src__cli__diff["diff"] + src__cli__optionNumber["optionNumber"] + src__cli__handler["handler"] + src__cli__resolvePipelineRoot["resolvePipelineRoot"] + src__cli__root["root"] + src__cli__handleIntake["handleIntake"] + src__cli__handleProposeSourcePatch["handleProposeSourcePatch"] + src__cli__handleProposeCodeChange["handleProposeCodeChange"] + src__cli__optionNlMode["optionNlMode"] + src__cli__commandHandlers["commandHandlers"] + src__cli__execFileAsync["execFileAsync"] + src__cli__optionList["optionList"] + src__cli__handleExtractGit["handleExtractGit"] + src__cli__handleExtractNl["handleExtractNl"] + src__cli__command["command"] + src__cli__formatWatchEvent["formatWatchEvent"] + src__cli__diagnosticsPath["diagnosticsPath"] src__cli__handleRenderCodeChange["handleRenderCodeChange"] + src__cli__handleSummarize["handleSummarize"] + src__cli__reportPipelineDegradation["reportPipelineDegradation"] + src__cli__file["file"] + src__cli__handleExtractMarkdown["handleExtractMarkdown"] + src__cli__pipeline["pipeline"] + src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] + src__cli__handleExtractRuntime["handleExtractRuntime"] + src__cli__absolute["absolute"] src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] - src__cli__handleCommunication["handleCommunication"] - src__cli__optionNullableString["optionNullableString"] src__cli__diagnostics["diagnostics"] - src__cli__main["main"] - src__cli__handleExtractGit["handleExtractGit"] - src__cli__optionNumber["optionNumber"] - src__cli__handleExtractAst["handleExtractAst"] - src__cli__pipeline["pipeline"] - src__cli__buildDiffPayload["buildDiffPayload"] - src__cli__handleExtractDocs["handleExtractDocs"] - src__cli__handleLink["handleLink"] - src__cli__handleExtractMarkdown["handleExtractMarkdown"] - src__cli__handleExtract["handleExtract"] - src__cli__root["root"] - src__cli__optionBoolean["optionBoolean"] - src__cli__handleCompareWorkspace["handleCompareWorkspace"] - src__cli__svg["svg"] - src__cli__handleApplyTodo["handleApplyTodo"] - src__cli__controller["controller"] + src__cli__parsed["parsed"] src__cli__initProject["initProject"] - src__cli__handleWatch["handleWatch"] - src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] - src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] - src__cli__handleCloseCodeChange["handleCloseCodeChange"] - src__cli__handleGraphDiff["handleGraphDiff"] - src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] - src__cli__handlePipeline["handlePipeline"] - src__cli__diff["diff"] - src__cli__stamp["stamp"] - src__cli__file["file"] - src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] - src__cli__command["command"] - src__cli__handleApplySourcePatch["handleApplySourcePatch"] - src__cli__handleProposeTodo["handleProposeTodo"] - src__cli__doctor["doctor"] - src__cli__taskFile["taskFile"] - src__cli__handleIntake["handleIntake"] src__cli__invokedPath["invokedPath"] - src__cli__emitExtraction["emitExtraction"] - src__cli__optionList["optionList"] - src__cli__optionString["optionString"] + src__cli__handleCloseCodeChange["handleCloseCodeChange"] src__cli__buildGitDiff["buildGitDiff"] src__cli__stop["stop"] - src__cli__resolvePipelineRoot["resolvePipelineRoot"] + src__cli__handleApplyTodo["handleApplyTodo"] + src__cli__optionBoolean["optionBoolean"] + src__cli__optionLlmMode["optionLlmMode"] + src__cli__parseDiffMode["parseDiffMode"] + src__cli__stamp["stamp"] + src__cli__optionSummaryMode["optionSummaryMode"] + src__cli__buildFileDiff["buildFileDiff"] + src__cli__handlePipeline["handlePipeline"] + src__cli__buildPipelineOptions["buildPipelineOptions"] end subgraph src__extractors - src__extractors__docs_record__isPlaceholder["isPlaceholder"] - src__extractors__communication_helpers__listValue["listValue"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] - src__extractors__communication_helpers__normalize["normalize"] - src__extractors__ast__records__end["end"] - src__extractors__docs_deterministic__match["match"] - src__extractors__git__execFileAsync["execFileAsync"] - src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] - src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] - src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"] - src__extractors__nl__missing["missing"] + src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] + src__extractors__nl__absolute["absolute"] + src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] - src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] - src__extractors__communication_helpers__match["match"] - src__extractors__nl__body["body"] - src__extractors__docs_record__hasTarget["hasTarget"] - src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] + src__extractors__git__extractChangedSymbols["extractChangedSymbols"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] + src__extractors__nl__confidence["confidence"] + src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] + src__extractors__docs_deterministic__primePathMapper["primePathMapper"] + src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] + src__extractors__docs_chunks__sectionText["sectionText"] + src__extractors__docs_deterministic__heading["heading"] + src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] + src__extractors__ast__isIntentRecords["isIntentRecords"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] src__extractors__todo__body["body"] - src__extractors__todo__heading["heading"] - src__extractors__configuration__dockerEntries["dockerEntries"] - src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] - src__extractors__todo__classified["classified"] - src__extractors__todo__extractTodo["extractTodo"] - src__extractors__docs_schema__strings["strings"] - src__extractors__runtime_cycle__parseCycle["parseCycle"] - src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] - src__extractors__runtime_cycle__results["results"] - src__extractors__ast__records__moduleTopicText["moduleTopicText"] - src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] - src__extractors__nl_llm__NlLlmRequiredError__client["client"] - src__extractors__docs_record__allowedModality["allowedModality"] - src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] - src__extractors__git__finishDiscovery["finishDiscovery"] - src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] - src__extractors__configuration__line["line"] - src__extractors__nl__classified["classified"] + src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"] src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] - src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"] - src__extractors__communication_helpers__communicationSegments["communicationSegments"] - src__extractors__docs_chunks__needles["needles"] + src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] + src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] src__extractors__docs_record__anchorToSource["anchorToSource"] - src__extractors__docs_deterministic__root["root"] - src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] - src__extractors__nl__detectMissingFields["detectMissingFields"] - src__extractors__docs_record__resolveTarget["resolveTarget"] - src__extractors__docs_record__action["action"] - src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] - src__extractors__docs_chunks__item["item"] - src__extractors__docs_deterministic__readParagraph["readParagraph"] - src__extractors__markdown_paths__basenames["basenames"] - src__extractors__runtime_cycle__tags["tags"] - src__extractors__ast__isExtractionResult["isExtractionResult"] - src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] - src__extractors__configuration__isConfigurationPath["isConfigurationPath"] - src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"] - src__extractors__configuration__tomlEntries["tomlEntries"] - src__extractors__runtime_cycle__label["label"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] - src__extractors__docs_deterministic__primePathMapper["primePathMapper"] - src__extractors__markdown_paths__headingScopes["headingScopes"] - src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"] - src__extractors__ast__external__result["result"] - src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"] - src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] - src__extractors__runtime_cycle__jsonScalar["jsonScalar"] - src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] + src__extractors__docs_record__allowedAction["allowedAction"] + src__extractors__communication_helpers__listValue["listValue"] + src__extractors__todo__resolvedPaths["resolvedPaths"] + src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] + src__extractors__runtime_cycle__proposalAction["proposalAction"] + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] + src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] + src__extractors__runtime_cycle__results["results"] src__extractors__docs_deterministic__resolver["resolver"] - src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] - src__extractors__communication_helpers__fileParts["fileParts"] - src__extractors__docs_record__fallback["fallback"] - src__extractors__ast__typescript__scriptKind["scriptKind"] - src__extractors__ast__records__adapterRecords["adapterRecords"] - src__extractors__configuration__files["files"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] - src__extractors__git__count["count"] - src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] + src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] + src__extractors__docs_schema__documentRecord["documentRecord"] src__extractors__configuration__uniqueEntries["uniqueEntries"] - src__extractors__docs_chunks__sectionLines["sectionLines"] - src__extractors__docs_schema__documentResponseContract["documentResponseContract"] - src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] - src__extractors__docs_record__modality["modality"] - src__extractors__docs_deterministic__heading["heading"] - src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"] - src__extractors__git__mapWithConcurrency["mapWithConcurrency"] - src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] + src__extractors__runtime_cycle__tags["tags"] + src__extractors__nl_llm_helpers__NlAttemptError__action["action"] + src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] + src__extractors__docs_record__hasTarget["hasTarget"] + src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] + src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] + src__extractors__configuration__entry["entry"] + src__extractors__todo__match["match"] + src__extractors__docs_chunks__workerCount["workerCount"] + src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] + src__extractors__communication_helpers__match["match"] + src__extractors__todo__checked["checked"] + src__extractors__ast__records__moduleRecords["moduleRecords"] + src__extractors__runtime_cycle__proposalRecord["proposalRecord"] + src__extractors__runtime_cycle__factsMetadata["factsMetadata"] + src__extractors__git__extractGitIntent["extractGitIntent"] + src__extractors__docs_schema__target["target"] + src__extractors__nl__object["object"] src__extractors__communication_helpers__heading["heading"] - src__extractors__todo__task["task"] + src__extractors__configuration__bounded["bounded"] src__extractors__ast__external__execFileAsync["execFileAsync"] - src__extractors__docs_schema__target["target"] - src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] - src__extractors__runtime_cycle__text["text"] - src__extractors__ast__records__start["start"] - src__extractors__git__discoverGitRepositories["discoverGitRepositories"] - src__extractors__docs_chunks__sectionText["sectionText"] - src__extractors__nl__absolute["absolute"] - src__extractors__configuration__entries["entries"] - src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] - src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] - src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] - src__extractors__configuration__configurationFormat["configurationFormat"] - src__extractors__todo__raw["raw"] - src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] - src__extractors__nl__inferActor["inferActor"] - src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] - src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] - src__extractors__configuration__entry["entry"] + src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] + src__extractors__nl_llm__NlLlmRequiredError__client["client"] + src__extractors__git__root["root"] + src__extractors__runtime_cycle__violationRecord["violationRecord"] + src__extractors__todo__text["text"] + src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] + src__extractors__configuration__tomlEntries["tomlEntries"] + src__extractors__ast__records__adapterRecords["adapterRecords"] + src__extractors__communication_helpers__raw["raw"] + src__extractors__markdown_paths__basenames["basenames"] + src__extractors__changelog__relative["relative"] + src__extractors__git__readStats["readStats"] + src__extractors__runtime_cycle__jsonScalar["jsonScalar"] + src__extractors__docs_deterministic__match["match"] src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] - src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] + src__extractors__git__runGit["runGit"] src__extractors__git__readCommits["readCommits"] - src__extractors__docs_record__target["target"] - src__extractors__docs_chunks__workerCount["workerCount"] - src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] - src__extractors__communication_helpers__unquote["unquote"] - src__extractors__runtime_cycle__boundedArray["boundedArray"] - src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] - src__extractors__docs_record__resolveAction["resolveAction"] - src__extractors__ast__typescript__recordModuleFact["recordModuleFact"] + src__extractors__markdown_paths__headingScopes["headingScopes"] + src__extractors__ast__isExtractionResult["isExtractionResult"] src__extractors__markdown_paths__index["index"] - src__extractors__git__isGitWorkTree["isGitWorkTree"] - src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] - src__extractors__changelog__body["body"] - src__extractors__changelog__relative["relative"] - src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] - src__extractors__configuration__heading["heading"] - src__extractors__todo__text["text"] - src__extractors__docs_record__clampLine["clampLine"] - src__extractors__nl__confidence["confidence"] - src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] - src__extractors__configuration__parsed["parsed"] - src__extractors__todo__checked["checked"] - src__extractors__docs_deterministic__statementRecord["statementRecord"] - src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] - src__extractors__nl_llm_helpers__NlAttemptError__action["action"] - src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] - src__extractors__configuration__bounded["bounded"] + src__extractors__communication_file_helpers__envelope["envelope"] + src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] src__extractors__todo__block["block"] - src__extractors__configuration__relative["relative"] - src__extractors__communication_file_helpers__inferred["inferred"] - src__extractors__configuration__fileAggregate["fileAggregate"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] + src__extractors__configuration__lines["lines"] src__extractors__docs_chunks__markdownSections["markdownSections"] - src__extractors__docs_record__statementText["statementText"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] - src__extractors__communication_helpers__inferIdentity["inferIdentity"] - src__extractors__todo__match["match"] - src__extractors__docs_record__keywordOverlap["keywordOverlap"] - src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] - src__extractors__runtime_cycle__factsMetadata["factsMetadata"] - src__extractors__nl__extractNlIntent["extractNlIntent"] - src__extractors__docs_record__allowedAction["allowedAction"] - src__extractors__todo__resolvedPaths["resolvedPaths"] - src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] - src__extractors__docs_chunks__flush["flush"] - src__extractors__runtime_cycle__watched["watched"] - src__extractors__changelog__changelogAction["changelogAction"] - src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] - src__extractors__docs_record__resolveModality["resolveModality"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] - src__extractors__runtime_cycle__proposalAction["proposalAction"] - src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] + src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] + src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] + src__extractors__todo__raw["raw"] + src__extractors__runtime_cycle__text["text"] src__extractors__communication_helpers__basename["basename"] + src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] + src__extractors__configuration__parsed["parsed"] + src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] + src__extractors__configuration__isConfigurationPath["isConfigurationPath"] + src__extractors__docs_record__resolveAction["resolveAction"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveModality["resolveModality"] + src__extractors__git__readChangedFiles["readChangedFiles"] + src__extractors__docs_record__modality["modality"] + src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] - src__extractors__configuration__pair["pair"] - src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] - src__extractors__configuration__lines["lines"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] - src__extractors__git__runGit["runGit"] - src__extractors__markdown_paths__headingDirectories["headingDirectories"] - src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] + src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] + src__extractors__communication_helpers__item["item"] + src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] + src__extractors__configuration__fileAggregate["fileAggregate"] + src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] - src__extractors__nl__object["object"] - src__extractors__todo__relative["relative"] - src__extractors__changelog__extractChangelog["extractChangelog"] - src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] - src__extractors__docs_chunks__worker["worker"] - src__extractors__docs_deterministic__targetsOf["targetsOf"] - src__extractors__docs_chunks__splitLongSection["splitLongSection"] - src__extractors__git__extractChangedSymbols["extractChangedSymbols"] - src__extractors__markdown_paths__state["state"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] - src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] - src__extractors__configuration__findKeyLine["findKeyLine"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] - src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] - src__extractors__git__extractGitIntent["extractGitIntent"] - src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] - src__extractors__docs_deterministic__convertDocument["convertDocument"] - src__extractors__todo__inferOwner["inferOwner"] - src__extractors__git__createDiscoveryState["createDiscoveryState"] - src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] - src__extractors__docs_record__resolveObject["resolveObject"] - src__extractors__communication_file_helpers__envelope["envelope"] - src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] - src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] - src__extractors__git__readChangedFiles["readChangedFiles"] + src__extractors__nl__sourcePath["sourcePath"] + src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] + src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] + src__extractors__git__mapWithConcurrency["mapWithConcurrency"] src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] - src__extractors__runtime_cycle__proposalRecord["proposalRecord"] - src__extractors__ast__records__moduleRecords["moduleRecords"] - src__extractors__ast__isIntentRecords["isIntentRecords"] - src__extractors__docs_schema__documentRecord["documentRecord"] - src__extractors__communication_helpers__nestedRole["nestedRole"] - src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] + src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET["NL_ACTION_SET"] + src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__configuration__pair["pair"] + src__extractors__nl__action["action"] + src__extractors__docs_deterministic__action["action"] + src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] src__extractors__configuration__jsonEntries["jsonEntries"] - src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] - src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"] - src__extractors__communication_helpers__item["item"] - src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] - src__extractors__runtime_cycle__probeRecord["probeRecord"] + src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] + src__extractors__runtime_cycle__watched["watched"] + src__extractors__docs_record__fallback["fallback"] + src__extractors__communication_helpers__fileParts["fileParts"] + src__extractors__changelog__extractChangelog["extractChangelog"] src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"] - src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] - src__extractors__ast__records__capabilities["capabilities"] - src__extractors__todo__action["action"] - src__extractors__nl__sourcePath["sourcePath"] + src__extractors__docs_chunks__needles["needles"] + src__extractors__docs_chunks__chunkPriority["chunkPriority"] + src__extractors__configuration__heading["heading"] + src__extractors__git__count["count"] + src__extractors__nl__extractNlIntent["extractNlIntent"] + src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"] + src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] + src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET["NL_MODALITY_SET"] + src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] + src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] + src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] + src__extractors__docs_chunks__sectionLines["sectionLines"] + src__extractors__configuration__relative["relative"] + src__extractors__communication_helpers__nestedRole["nestedRole"] + src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] + src__extractors__configuration__match["match"] src__extractors__changelog__lines["lines"] - src__extractors__docs_deterministic__action["action"] - src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] - src__extractors__git__gitMarkerState["gitMarkerState"] - src__extractors__ast__typescript__context["context"] - src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] - src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] - src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] + src__extractors__docs_record__isPlaceholder["isPlaceholder"] src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] - src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"] - src__extractors__runtime_cycle__violationRecord["violationRecord"] - src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] - src__extractors__todo__lines["lines"] - src__extractors__runtime_cycle__driftRecord["driftRecord"] - src__extractors__docs_record__linesFromChunk["linesFromChunk"] - src__extractors__configuration__configurationRecords["configurationRecords"] - src__extractors__configuration__match["match"] - src__extractors__nl__action["action"] + src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] + src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] src__extractors__git__result["result"] - src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] + src__extractors__todo__lines["lines"] + src__extractors__communication_helpers__normalize["normalize"] + src__extractors__git__execFileAsync["execFileAsync"] + src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] + src__extractors__docs_deterministic__statementRecord["statementRecord"] + src__extractors__docs_deterministic__root["root"] + src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] + src__extractors__nl__detectMissingFields["detectMissingFields"] + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] + src__extractors__ast__external__result["result"] + src__extractors__todo__extractTodo["extractTodo"] + src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] + src__extractors__docs_record__resolveModality["resolveModality"] + src__extractors__todo__task["task"] + src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] + src__extractors__docs_deterministic__targetsOf["targetsOf"] + src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] + src__extractors__communication_helpers__unquote["unquote"] + src__extractors__docs_chunks__item["item"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] + src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] + src__extractors__docs_deterministic__convertDocument["convertDocument"] + src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] + src__extractors__docs_schema__strings["strings"] + src__extractors__runtime_cycle__label["label"] + src__extractors__todo__extractExplicitId["extractExplicitId"] + src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] src__extractors__communication_helpers__sameStrings["sameStrings"] - src__extractors__git__state["state"] + src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"] + src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] + src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] + src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] + src__extractors__communication_helpers__inferIdentity["inferIdentity"] + src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] + src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] + src__extractors__markdown_paths__headingDirectories["headingDirectories"] + src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"] + src__extractors__todo__inferOwner["inferOwner"] + src__extractors__runtime_cycle__probeRecord["probeRecord"] + src__extractors__docs_record__target["target"] + src__extractors__git__createDiscoveryState["createDiscoveryState"] src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] - src__extractors__communication_helpers__flush["flush"] - src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] - src__extractors__communication_helpers__raw["raw"] - src__extractors__todo__extractExplicitId["extractExplicitId"] - src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"] - src__extractors__git__root["root"] - src__extractors__communication_helpers__normalizeType["normalizeType"] - src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] + src__extractors__docs_chunks__worker["worker"] + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] + src__extractors__git__gitMarkerState["gitMarkerState"] + src__extractors__runtime_cycle__parseCycle["parseCycle"] + src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"] + src__extractors__configuration__dockerEntries["dockerEntries"] + src__extractors__git__isGitWorkTree["isGitWorkTree"] + src__extractors__communication_helpers__communicationSegments["communicationSegments"] + src__extractors__changelog__body["body"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] + src__extractors__configuration__configurationFormat["configurationFormat"] src__extractors__docs_deterministic__marker["marker"] + src__extractors__configuration__findKeyLine["findKeyLine"] + src__extractors__communication_file_helpers__inferred["inferred"] + src__extractors__todo__heading["heading"] + src__extractors__docs_chunks__flush["flush"] + src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] + src__extractors__communication_helpers__normalizeType["normalizeType"] + src__extractors__configuration__files["files"] + src__extractors__docs_deterministic__readParagraph["readParagraph"] + src__extractors__docs_record__linesFromChunk["linesFromChunk"] + src__extractors__nl__inferActor["inferActor"] + src__extractors__docs_record__action["action"] + src__extractors__docs_record__clampLine["clampLine"] + src__extractors__runtime_cycle__boundedArray["boundedArray"] + src__extractors__docs_chunks__splitLongSection["splitLongSection"] + src__extractors__todo__classified["classified"] + src__extractors__git__state["state"] + src__extractors__runtime_cycle__driftRecord["driftRecord"] + src__extractors__configuration__entries["entries"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] + src__extractors__todo__relative["relative"] + src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] + src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"] + src__extractors__nl__classified["classified"] src__extractors__docs_chunks__index["index"] - src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] - src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] - src__extractors__docs_chunks__chunkPriority["chunkPriority"] - src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] - src__extractors__git__readStats["readStats"] + src__extractors__todo__action["action"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"] + src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] + src__extractors__configuration__configurationRecords["configurationRecords"] + src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] + src__extractors__docs_record__allowedModality["allowedModality"] + src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] + src__extractors__communication_helpers__flush["flush"] + src__extractors__docs_record__keywordOverlap["keywordOverlap"] + src__extractors__changelog__changelogAction["changelogAction"] + src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] + src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] + src__extractors__configuration__line["line"] + src__extractors__docs_record__statementText["statementText"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] + src__extractors__nl__body["body"] + src__extractors__docs_record__resolveTarget["resolveTarget"] + src__extractors__git__discoverGitRepositories["discoverGitRepositories"] + src__extractors__git__finishDiscovery["finishDiscovery"] + src__extractors__nl__missing["missing"] + src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] + src__extractors__docs_schema__documentResponseContract["documentResponseContract"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] + src__extractors__markdown_paths__state["state"] + src__extractors__docs_record__resolveObject["resolveObject"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -442,25 +439,32 @@ flowchart LR rust_ast__src__main__type_item --> rust_ast__src__main__qualified rust_ast__src__main__type_item --> rust_ast__src__main__add rust_ast__src__main__type_item --> rust_ast__src__main__modifiers + examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleHealth + examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventPublish + examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventList + examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleHealth + examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventPublish + examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventList + examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__size + examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__readBody + examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__validation --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__event --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseOffset + examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseLimit + examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__sendJson examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid examples__backend__src__validation__record --> examples__backend__src__validation__invalid examples__backend__src__validation__agent --> examples__backend__src__validation__invalid examples__backend__src__validation__action --> examples__backend__src__validation__invalid examples__backend__src__validation__object --> examples__backend__src__validation__invalid - examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson - examples__backend__src__server__store --> examples__backend__src__server__handleRequest examples__backend__src__server__store --> examples__backend__src__server__sendJson - examples__backend__src__server__server --> examples__backend__src__server__handleRequest examples__backend__src__server__server --> examples__backend__src__server__sendJson - examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson - examples__backend__src__server__handleRequest --> examples__backend__src__server__size - examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody - examples__backend__src__server__validation --> examples__backend__src__server__sendJson - examples__backend__src__server__event --> examples__backend__src__server__sendJson - examples__backend__src__server__offset --> examples__backend__src__server__sendJson - examples__backend__src__server__limit --> examples__backend__src__server__sendJson examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow @@ -892,27 +896,20 @@ flowchart LR src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject - src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject - src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality + src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction + src__extractors__nl_llm_helpers__NlAttemptError__resolveModality --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText + src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings + src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords - src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities - src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText - src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText - src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText - src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext - src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind - src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode - src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact - src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext - src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind diff --git a/project/calls.png b/project/calls.png index 311e8bd560f1ae6426fc58d6d017b0dffb54b17e..0ea1cbbc91c7e5cd4214e0012868579b245d09e6 100644 GIT binary patch literal 100231 zcmZ^~b9iLkw=Epowr$(CZJQn2w(X8>+fF)0C#hJSPQ~iv_WSQedEnp)F6K-Z#y&6LU>0at()=#1BK|Hw~MBLs1vH zdItt>BJXTk5Sb(=Gr-Eiz?QUa^YA{pE1&IZ?pOO=?)7LAQe9u)T-SUKZtY!O&UlRS zo&|+6XZg|L#G@e-33%Tg42MDguOF_Bs&ct@@1c!Za8}x&fdBJ4Y{m-W&xJJmwdGpp z0n<{>fG;m%T}sn(@tU0WgH;u4L*%HD>axy#7P0?1#HeJPp5o|GeRUP5KPKMVKm2^df-@w(1nlzC;%0D?H<|W!b557URD|Sb`=3oc(Vr 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 z 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 )bc|RVv2AXo;rFs||(x%8DFvE^f-TtceCMwp& zk|am3PrJw&DJsl11T0XN+DN9OQOLh*IfzUt4WZ%H@Pad({|4VQ<@O5>>ls!?sF6~J z418K5lbf2Wd_WcNuiqXY;7M;=#H!?{d!Eh}lT1^g=g`(>{V?Iw{_<41eIpK6*V9>d zWWUOic&3C`|1WsbRlvB@C&-k25hN2X%0k}Ep1bBq;}k&qb#tc~A0NBWTuoEd#57J! z^nCOhzcr2?*BE=r;2?Q$gb#P<*wOXPoPOJ1H+qX?Z42!>SddA;uN0EK>Q+ioNp+={ zG|a(Qb&u#3*vMxw6>=fmlIpl9AEqfGpXasb@h7L@zYzpFjE-EfOlp|K)|r2!t=Qj^ z{Fz!5uh5?g=4qkg>S4&TE>>N4w{AAxiBCmuIr#z->Hv6`B zb-`^m<@-A{Gm*9w9)?!SUDYXiaO{M~Al_!yU5_7+o;v}Upx z`gX&2n_E3O;6=9JpLuC@wo=<>SI#XY&w~W4Jc8`vP ze@3y~e2Q&+N^y5sbTU*$s{UqkI0I2+LIv*9Z7`k#SB@>uzw2TSAk zx4!190ixKsptshRHrH+v-Du_lRxTh%hz68`5^0QW`1~=Az zGn6GM=+?V&Wf6`gEH1|&mA^^)#G6U|Zhwg*OFpH))hi2@UXZoy#)ThY#!+f9-?kU> zjf3(TH4b|-NC%=_*;T7l@QzVu7IUC66sNDhi}pQBsH?2TNV|9u<{?1LV5G*v&Ti5}mX11WGa`^e1-Y_>ZN(d=2A;Et6)6L+}?_ zELXUmo@V7JyCEDr?-C%Atr6cwER;ND^)p&DtX=5u%20sMw$kgIs&B2b$uC$PT0KA&VUHDZzpGc)_LkI3D|i%6oD zFnhCXFL`Wz*gBSLz+@q5D`Ys$y2x6t@m zs}h+WTK6vQvC1gsxaO~elS?Nh2@+5Kpa>Zp{c4f{PvfF%vC~*kKVv7Go(UTAonrby z{vhw@QZ{^4MgVdnt`_8<|F!oc%6&*5#(2GJD-&Q}bS$P&VP3P}S5@3*duC6-lzkNs zpH~ulc=r7M`r&*rPnum*4dR`-vm;5}MMJu{DqSK0fpk<}Xd(QxcsDOWD)Y;x&~ zHqRZ$s*Tmjy2-`LzsnZlz^T<-P&vuc#z!J$StMwX^tsF7Z#yff6LMS-Dbp!b2DsVi z>l!W+h|&m8)3(XO>T@2UeOOb$yjJNMldf-&o)Ugce#0kbx8rH2TxPDF%cZwp!hO*$ zr2PlwvrrsK6k>O_Y&=R^kAnq@f3Yi89+5>52K%z$<5jajldqE4t4&pgNZQQOvqZH! zj4Je|^TTbE^p+aQ{cT*Syq!Wx-}OnE-F|b&_@}=YWv~AJ>nmAeFj+n03+>bK>c!s4 z)NV`=FZcFl)ilTockId}YsrZ8N3eg1cL>PcJeQulEU!RW$7*8L(A{ zqc*pF{LSOrN{M9*p@8h2qRQ|l7QaasZ+c)mp?9f z(z|l-s#JZ*155(san=fjAe8jvxNL#4)C;7yN_w6r#yJmpu6yFX#~p&)2^Ce9uJNS} z`piTts`YsT@}!+li}_E+()8I*vK>^a8k53~XDi}!VK!MpYy3_=tH)u9EBx&%LLAoB zRdxc$qE{I9KIKSAr)d`RdEKH^!knCtoruGtV&}uD>H=ldvAX`Gf;Dhmgkh;F_rOg; z&V5g7)Nf(e-3$t!p3`~Pa{9iguJ8D{L&A_tv*wxTll=v8JAoYw?Be;8lPr1WctHWn zWL{otc^{sXqc*U-nsbzT@yrR`+@e=$TBZ=JM{g-+D!FY??^mJ`=6}|M%70G?xcg%_ zzQhAykIkeS~Uqc16l+-;0>B1M;g@mgX6n~ zI6nCDwByF0cz0q;r*wV|Tm|wfN7x)Wi)S9!yg+P|+0!ti+F2{l05rrxr>35y8n$fL(*si ze}a_uXTuQWb?bEFV*-yf8}sP72@|N4eMk{Zx^PifgL-%M;9zmj#BSK6sih@ZmX0GW zXdT-u1C;fT(*d2PZ>FiXDQ z$n6Vx#E@-#Khpq)mrQPUEL!Z8`ISUoIuCWsY<~ZQS-Ezlt&Po0nXUIIh3_nI44bZx zaL~!KT#HF{3%cw;`)`y0CS3=`*PFAi`h>5JxJq93pofDW|Js=AeGa z^_Abe@rY#kLS%m%LM@b&fJ#;KI;M@`gdDkZ&vt~_mO85wBVn>R>FY-$0UZ@jYlQyw ztHYo#**|0jm~%*csoEy(vIf~SoHXNO7@ky4`Yy9mM;ynJ6p6~iyN%Nuz=lM{ zI0gi-Q9G-R4yR4K5|bj@n`G`r^b6$>%^M-q^PT-a*YQ=3>69fjg~~~GQ}V?LlKu57 zsx0^<#G~&cm1iT0m*!ew&oa;YRM`35ADKf%|BCnF9+s3B^v!rC6rx<_x|a|z8Asc#}%8KZQI zIz;_vi*%@b@!#DZ0q?$!7-6tW8^kMrg+@@Lb>mE#W2}y9^ED#Xz%vJd9JU7L$zZM1 zkLxhkLMAFOAugY>Xk5zzRRh{K9E*#t8W2(UnLtVmXQf5vCd-#dAq*+yCYk`h4)$95 zgz$pQQztVsCu8FXfxz(aipS(%yR}$RSCfYR#C1QfeMicfXg9o01N)jQICo}5NQS>s z6kKw>S}jt2vG{7w$^g@3SLuGtv~ zAN+XnD24_w8YB;_YK)%{p9|`5>Pn`2#K~G67&DRVB$2Kj{TRa#LQGPP-27@OT)|=Y zU9$;J!91ASXGya$=dF|aN{z<>@E4U!eUM#FfX89C(lGBt>#NAE008P99HRIBO6lPW|AMj>*-4u7`QD zuL+|Gj)C#jF@TlXH1^75*fkz}LT-lpLW?=mK6Gk{QDKilv%T#KjpJGf$>$JIZ!_12 zDfINtWrTwDAf1E|{(n!B9a#UrNgh??Lo4+%3C#oO(=w|K<;(cfT)7Hxn~qRjPBpRC zIm9JZYTHgHJ0B*SnHNhMhYjRmE4=3F^e@5=3q~eOJhe87(a~B-&B|KO4I(fVF!5$U z`Vm%H$${#<<}0HNJf1u34a})B2z(l)%@ZYXV^iG}`yT1Yng<^t&X%Sf7Osj9i=B%< zn)-iSy;W2j+SUfzT}oSum14z}0KqLdw8h=sEx5aLv(GvI z9e3QfJSQu2&Go4gtR#xQz4|?#6qD`xTNvP;>LbNo1@0%4Qh$Zw#+DY0?bBi;lfzqu zoR_NGCB`dTGN`@+pG>NjL zesz~a0dXbL>!KTKSxQ0hm1^Eca5^hN@gFSfftg`S>1khqrxL7fMM}p?x@e5Ln$lFp zR}VF}dMI7r*ll;&o=VAGcqMu6d-hg>LBFSp$7Grr$##*if)SNuc(7d++4!Euv@1q2 zgs1i?+VP15`0A>wAO0X%q6yp8i?yz(#jh&e%37}Nm@*URV7Jz!sAC=2{b!P*3H)!8 zq6!C>7`(t&v?*#TM%xVm;tI z6zyzCQlvLjaMb?9u#yxc5{5Ez?P+Y!B#*>Vq5jwzWa6s2l=uDUfbC{!qFuytoN=bJ zw6COWYF_mbX5jn!`wrJ{t(I&B4!SyFKr@Qo=|Z?%*l>aVXq}y+81nWPn?h33$3&^uyZo^| zmwnDJ2bo=tvNWO$_F7wZdX+c=hu>z6*2Lv(QFy(P7QpBbTT!EVcSA+BhR+DA)<#V) zeH8PIV|jXF-2!N)&nyw^YCUe$aRo`gi)i`T28* zqY35TPwQ%V3*M6r{GyYavdkJepHsrDZE4dSZsKcoZ+1r0a&pvlr0lr-JOP_!L4$;+ z(cTZS+~t}NrM5PU4Qe!r)Ks+#);w{c71=qg1?Lmwy<0&~&RICgDRZ=VNCfrXC-;#U z(qTk3WFu+!sL&Q~jz!EZegw7^Zf9o;=f}r_alC zBWw8fze*=b5@>xk9IL1y^bvkTh@PwXzB#m*hK*oz$jC zZd3Nz4Zl1Gs<}Iyae!hKPpMY4(;6|gn13~-4yvmm+AcpELY)$Dfux)`HY0q69Z`!z`?{)Gqnom<$^5ptf4`k~YrE!yZ+IS;e=SE?U#{Gf z(*YI^JPNjk&uc9j%+RYKRqCT!dTyqzPwee(dwaFodab#QUP}tX`0zb=Cwvpz&_}qw zB_xC+UES+uTwhV%9k-Iz&0VdcGMkfEVJ!s?$tVsddZgk1*_2)0KNe|S$P#q*_tn4D zCx{3(CB|*tvV8C)Yo`s!a5i?JN*+G0@A|QOC3G}{;aw3RFix?2<@d!2OEd637R|vY-;ixXIlu`+{aO|LzKdQ^!)>NvVwu= zn^S(oED;ZV=bUVQ$!hh?w#`{#a!8e`=ipZT_(`JCW_jk4w@|TIW9lA_A(Ok#esBD$ zvlHN=L^ydlTsJiveK`YGIUKOo>m9x-I@ICj#0{gA2s*ZP(~6-7cvR_eXAeG9@a)xy zo6i`akkDjn4#>Nzeek+zmS$}!&P`Wtm|33 z|M^=WeBk@<%_UTg*&F0EmTjPY+R|=Xlak7k5hOB|np%rHniSoeh02-2lZaC`bnML2 zqGoN90PR`a7E7G|huOio!{y~loq`#Um2)sIgv56!cc_1~Ni=X=eyTcQQ#R)=hc0e7 za@d~HK#TV9Tz_tcfnlPoJbbx^9I`k$DFJ`{wC&z}D6YdBv5p^!s262Pu(8GYec0-I zr%K}YfSmK+NYkIex|u|ZP&&;7-R zMh=GTJWfxs%AOWbPA`hJ((;rj(dGl>jLkD5yLOuwa0(+0xOgr*nuqRnS9Yug+`#YW z*wWrMAKtr_yy1H4wQe&e=;tc+i44WT=lW?Xrei)kt+Fa5Qq!6Y!!5xGHta!-Gv?|A z-S4XDTo?()6!bmRqb?F_ZlD(vd?Ba{jHkGv`WR-2C%weJODb=!%i{Lv^T^1u1S?nX zqUKd0wmHM<&7qBuGajR){}gn*bl48V?D? zF8g_YH=CY4lC%9;2VJt{gjl&CPQZ?@C-%9 zj9ctz6*G3tX+QL-xU)X)!(rvir?pi!P5?W$USn`L7&JSRsJkG8cRuuOO@7`(6R@)VfBNgS2~cfV!;^^Vd$ zbxR{uM(w<(K3w=w=6~4-6!4EF?nV9X{VV1nTPt-#vrj;0E0>|LUB{hX5#!BXYck#y zkD|o;mdDD*E)l6>46lcwm@KW;RK9FLCInopT7mj%Ka|lfCy?bxo~5voK4yt*C3))C z2d|8!TGI$kA$*q2xj%irNjS18#~Gd$YiVrQ7#-6LicgIUjW$hZE}JR2u55jlr!Ky{ zhrBG?(IM|s6F*LGn)0U|Izwq&YoOr10tL!=8K8PugT~L3P0QUgq}G~_nTapzJShsG zQ!ba4tEbFEG*oL09aE$0G)3Q&px!*yf?{K$Yzs!l3`o;##9o!(detO@bO4Eq`E|P0S?C+9lc1ZWK;SmqFO3#7gSO?~}Zc zGFbwG9u`UieffH z8Et#XFeX~JIznbT{#uuR-ADU($+3F-U#;K|zXHA|4vmD)w$LilYh>S8fE6}#?HCVeH=%7cC-MNqY`e|(!MXul8TmI(Tk9ciJh5=a$m+| z=ucGF%!ufo;w1sElqiew9!(r*-VW{mn zgEFa;lUi8{g@TdDd3K1cXEH7&A66Z~B87)H{7-T=v&Tjhi3+-(3r36T^c*=qs zGhw%!zdozSDdcE-$kLdpZZwEfw}|cE&=Z0(+L2`k*VWZ~=MM3rl-+EvFye(Qh0`;` zF{C6=MN-dJO(C?aBe*p&3&jniZsLxMdi`WaY|p>7BYvtP!byh>8YI_29+=RmQ=w4c zS(g=hV$!GI$_IA@B{;XXOB4v}S+U?PEz|E_F1WV3Jl&BV#CrTh9LQw3bj?!|a5fLF z|0B_LSh>4fTypqv*W+Y)av0vg+4QgX0=_hGXYCSJz%>ah@>!nnqmia?`{?mMA!_bh z^#1^qgrDil7WSlUn&W!M+>t2hUwh{80lsEfhO zDylYp6Ruf;ro2by3&%G}KSlDSlBx8HQQFfoEulPPYt*};7g*4%Lc1F9+e|KIMXK+$ zp-`QnilT)>ZvA;qyZH{%?Rpj0THT5UHhDWX9^kZQIo*es6wiua+;Bx)XP$Zmvu+r? ztR`7JWJ*3u9&sYBwi7oy5x7IB;~zWUZ#Lt!^e(ooyk{+mMy8Lt)K4B zyu&2ejy!a~&zB}Fp}M*6ve2NGQMNQKa0rUzju|^_T6=^it!x)sPE%oFd7$q7mEx^sFa1kHFiMkNqLblTDxvOX52Ebx5%7jGcSuIObdJE8yW}l( z(W9|`J01z=9Gq2||6x0QsK7T4q@QXn>da`L;r&~!SbVl3-9CI=k{3jb+p?3wih}*K zRD9|^F`eOtx_d>*>LJ=~rt?Qz2BTlw+kgHf=1Il`R5C%qHH!6DV!UneO+T}e+6De< z<}m<#=j>DnNzW|9r(g#Fu(87~hZSSOe#*Bx^JZM9#usFNqoVx^AUv03Uw_ck$h^V)|&Vr1zulupfT zE2GAC|DiU22L5kxul}t}?7QUf^5n=zoRxXC`B+hDOV4EIuC3ilUh#)fYwv)#K4{oU z&tk-Fn>U_nBvqTuGTuQZz0>7hy1}+Bj28k_7 zG)~SeU%u?+g1(W*0v zxheXSWK4L7WF$P4(2``-f3}Xsu>)HLK zENHyAh*5rQ^_X_4t;f{l3rfj^%2u(LlU12qacWP08ow@}>)?`)#TxE>z067a1 zIX~N2IE$X1(`#A>=LOmp7sP(6Z)%d@q=&I`{N3CHSWt(cjg0#+xCUAVALMD0`(y5;pm7$Z6B4B5Isk`Sx!&M#Mai+s;s`Dft@v>Sie!*CLT@L zF=Eu*CSmfS7;WBJJcP zEDYtClBAT1GcrZLMJP=Pw~&Hvv=38~QdJexIjLtTuq$V<`NuP&uURf4k7^5Zv)UA7 zU_2ck9os0y7a%v3FwySikK5F;T^3!8{6$wAE+fhwRms>*3E{eCa!u54)T~JCgL!;d zQGtl9sWeLC2I!0I^$2%pq&`XHAH+gE^eMSxZADvF0_<9W+U)Fb0Xu*@?Fx`qn}2X^ zxyS-esL`0=MV}A&KW*TDQO4@u3tDGzX6xzcYH!^k7}e0yy_F5%(bct}PBS70f*v_9 z{9M>aB=BlOW*FC}Agw+PVx!>U%M{e4QcdCP&TgD4u2)CO-U~$|9vmXcpU^dce3_3P)1e1@HtH)DOErHxf~d4LaKwG6%J&yV50W^#+{WHOL^su2bOP;=is&Q#8jcY zuE&{W3p6=JkycOCL48Sfj0MkV3MI*u!sTXfWZsKfFkbyqkugoj82zQk3Zrf{oz&nd z;{~z_WbTlQnA}kBVt%j%v|8b`FiE+q3b4W7+&8@hF_*P$j0qd_tvTQy;~QRSHVe)% z36Wx7nx>xs1O$i=$tQ0uFX>I4SSMWKBc2!o3WZ%2NdtYmRlVqG$GmQ%hfDR!*azOr zll?Q`07;B=+n0W89po0?Gx^{dcT!;7hXz+ae>q*iNW=d=5XIN<6McjeUs#+>ww+!u zM05>EV5=#A%@;Jgo`p$KQ=TiZZ$QFq1~qp`)So$p{1=f(L% z`30fS)tqi4ye!&s>wb4^#d%6v<)2 zBd?w+Esx7Rh8*(KQ@-BPF??%scAy0Vt9hJv2M=W%Syv2*Jf#LCY^6Lp$WOU71Ypnm zZ)o}TtUSUBF8nw7Gu+$Ipnm&%J9<9aMLcm1|8SuqKY5-lPe>_dWsj}9FrcQ>fYKv^i%iW3)j!OR=(&+%bnu2fD`e=9%vkQYJgE3+a z9U`}@^Q8df%QnNlixp7(qDQnHuy@hknG~bYg7b8C-4WZ8PD-*&82-mgPE~rF-K9NY znw@*iKJ7%zqtCs0zzsqD@$Q}u1UuBxQM1*k^}535h4u7z#kdP$-)dY*^68*Nv@f+cXXqXXwr8##ye$4(9S<( zxQ=`5{JcT-Q7?uv{LlPuzubI>WJALjhye&v$OpEFfl2&r5VSbmf{T#Fegq`q2x({| zdimF=^@I2uzVmcgN_#b_9848fY8fLimKC-sCr=sflPNK;RNMXIqXMgTNKmciB;94a z+-Mj3=E`!Q!w^b}L;opR@VQ$B58KfV9QII~wd@a89c%dd^-AlX8Lc<5ej?Je{-_$& zD+Y{lhRT;VY5q|v_#XVo3_8}d{)U<=T0l5p6PZZhqRs=ZqN=KOE*!9jth!F|2LEv4 z)```sV0(+2AS3(gM5@(;WnF%K)T3)|7xC$#R7^gYZd8z2Pj$$D*Tmoms78HL_k?$o zL#5^Le^|g7IRR&wD4hQemkn@b!Wk+&K>B+unb0B?Qa}{nE7Z6%ISG)qV#y_p!9L@- zQ2Q1ZU`rUkW={H5bA8}ungyJ=#}1m!>=#nx{6>kH?L0jInw(sjO^oWZYNubBkXU#> zpO8ur`IkXn-yy3@As$4ti*!jQ>PTMfrS!?2LQibE`lnFKxYkVqV@!6tp5^;&Q`(>p zDbLC9jSZb78v-P+F5&}EIjA3%aFlE$ypuH;@SVi0EGoLVaHi+UY}>yQ;t1`3 z99_2+ySv3`wR&V6Ex)YUDssoG{@S&wEJIc^l?_H|`s%JYoIJOEGVawUny0`K0y6_opi?$XHzt_WA}1sH$eM`TyAP)H&jH{a zIt!_2+dt?O2C&tH_sP03oi+9A=q7PHLlkg*d2(y0gZ#l~Daip^15OwJsQYo=7MA732qvp4JAy<~JSxJxZfEu<0`V)?f$#59y{ z3$Z-C2S7-+8SLYZtbR?Zlsj$fs53A058ddv7J|z7k&);F;+eCehD2I?-VK)F^e1+- zhRNl!Y-FNv=nt`85GfVnlwIOEWETPlR-#;6p-?qas}8F6ABWfKHJb5BMFU$ml={h1 zCj9oK^*{3E4Hm#v{Vn{gtkMsXBTliGM?0993!r$E3Fe3FrGs0)*O=d@KBpJ~CIqLB z34pq$CJ~!R>tzbr{{C2^XaZdbaQ{fkbF1X{^2LHxa5wl zXQ=v+oeQ7sPq3}4SG-8T-IU<-IGh1pDp@TN(;b+x3`C=#eAkijBW{nz_lDz&!{G$A=gKQy=Qpw?nXQtU_W=u1NOd=!0MGhnGE!JtL7RlIxHVS zA=LKGgL45@T9-t1HcBPss1)Kb?DS6l^#(u>6A3#oiU0steeIY!Jn^@aVhK=1bQ zXht6NAA~j@g&rp`W*o;c!v2tyF|FFCe7#e7Op^*RMKkVav|2qwxuG?ya^Uu{QshYD zKsIF=%W;Vq$FB+*@2K& zIzP9pmB)bApIIx2UbllAEa`+;M*WLFAggXcDGRk|X75=tdRJ(@R+IzaM7E#>bolgn z^><#cdx@=}5^B%-K@aNnUDVp09sHccoE-JYR{i5_2RNN6^vP7 zX%qb1Mh6mhjz#V@A>>Dzv{{FxGeNisahhD?WlW{0Hs>k2&~*kpQ`Q6~x*)q_k>Ofa zVKe}V#&OwdI8yW6qqAaT~ptS?<39O z;$jVXpB-o<7=4fyH$`7l_x=-a^k>PUQ$gn|b1uP&+cuO>7(9q-tU0fplIpVtA4jKs zrmTLm^2Q-4C?caAB3yH5=Y%VIZw6Wgv09%~JKZd;UbOFLaz?1F2ZIs&uEj^bIl+Xs z!1NjoFHcObb@k&3S4&|M1@wpUd!NJZ{;^5oDt+qhv@DtCv-TNRbRlzyE3czdL-C>SUD#()kd2o7A2H(D2?@O8O_Yf&nN|$rjleG4a>(&$=dS zjj2fh((4~BV)O(xvdlvwDs(Ex0`!)e*J za6~Z^MGP>_u`rn76!B;AxD)=~`;CuB*hg|M2vq1TQ2aE>w#Gg}BE0@6OE8GpavC6^ z)7T($?+y4;qxM;Y5y7imhJ-7M`VcnxK4>m5?n4IwVHR9;I0SdWDO=*9J1fDqLB0ud z^>CLe8cBBEsaQaP~q*NG+!HPcr0GGfvRRd6KLa3$SXnLKr~P4Eh%&kF9794`lmXF1xmf>Mmx znX5~1*_KNo3aw22T52-1x0`apDy3k;cOxOK@cS(VPxR1GYU&BEc_oAV*9rbCg^#75 z$6V!5k5KJS9_wsvx`}MM+o25b*uehn;T6lS2O0H7#-g*oCh%5~u6j+P!)g0<^pb?4{kE7+(Df(+`ZB4BICbn4 z&k?Lw`LU4ZkAQ11kY?dh4xQ}7Cs%(|AP-Y-F3QY6*=RwGKwN!{-_Y8VZH+Pe>n77n zB(~KrFNpO&ZnUw44M~WD`Vj>$nbpR$$E_t>@%JkIh zch{%`6Hh)&#^wBd`{>(QU$2yIIGW9S`xo8!sO3f!S45KUPv$tQ@MuU*0bQq zRMw;#vKZDHqCBLNP%-Iu(k_H9DhgX*BVv#6?Hp={${^#I_yHXop`zNaC-WpR>fqwn z=>Q)s)Qcj{Ap!S`><`3WE$~+NpT-0q>_!ygTnebO?+$KX+Hr}wy3 z&0C?s(&6G9&+|Oaw(P>PEVtJ#!KW2T62GHh0tF=~-}9A|-)*b!Q*cHlx?Zb4U4QG- ze$GqY$pK3yJblczj*ANb9s70z5v)s(Je3(b$|{m&PRDfWH!=v{>aX|5-@Vs$bXV&D zm8T%Kq%+mg`st?0dF&k=yPCnvhwjcj)ITM~{+1+xvYJV`XRJI@gf0mmNAaW$47A_m zd#+1)i8I^iu(nGM*yoJzcmy#8uH%L+bZ!?Xt^Hu!xb7lwWo^jhoh(Odd;hOgJ&iatlI2KCX) zB}`dv#isE=GpO9)=*ph{^hL{A{o4k+G@|gIGnL*4bvX;mkuc*PZHmPeth6p#<+ABR zvYq5l3!H729Y_w~Jug4L$18GKx?Mun0*mvxHMcdT7T1k?bl)9tm}c3An2J`bKG$#c znu{qX*XhW_6x_y^zLVFY#~8F--;D^r`(|AH5C!ljGt2#Zq{cS=C^^D#hD=(y%+zXi zPK}XN9U9QuOOyepV^dv>!2SJ<`l2oGK$yGbNvQiq7^2(DS)#dhWtBQUKd;l0ja}Py z{~3nhZQg4ejl!sSazup`TUv|@-F5QPe#1)Y4#!qVk#Q7iRsFzWG>A9LXag*BG@Ww>SfjlEtX`Rp(s9=fXEf+nit1W~iVbK{#ZM%VD_>akeOMI`9v% z!%w?EuTk_dcc>HaSS|~3UyL55y6PE`Xq+>55f{Lro8dL(z`=y;PO;K$E#Z2YW>b2c z9Ior+Rtfz1ASS=3=IgeZWoy`F9JDrro5kUdy%B}vqEkcQWiR45ZU14gl-c8`C}9dZ zrI>Y6=%mcBm59?=Zwn8TAPt|XZ^ZmFyC*s7@0FXv7|T38Ew;H#TV&yv1r zu#{M)y%`2h&udrgn5m>&rNKtT<3>$}Q^iX)ESim|AT4VbXG=RfRIHdjV5jpo@#ZWD zar?&j;Qi+IaN=>Lns&>A^=uJ(-=`s)Dk!z$$RSkX^63j@#_F;;vFBZ0>*~EimB+MY zR7J%XtxF3JW8;K(zxfqvn%&fKi#sl0aKQtFs=UMo3rDtQKT@sqBd@+2DzCbgixcLA zCf}raPRp}@&eH%13K^)y-+Ql_SY-^$Jk~nsmf}xP5DczRj)d;@BMrA4E#P&ZZOc84 zUy9+uLw!EKkropM*4979yzKQZt=>pj`YZlE6PX+BNe@zB(cr#SAx}=t5Xfi8Y0SL$ zI&D9-vGaOjSdsak2utGMkH>Z%Lslg2D~XZE`>}6S zX%eNu{VKx+G6^F%-p^6{b_+umaQ8DRbwHWFi}OvCX|2-i~tugWC>+j5|oqLrD1v zNVUr2+{y0=T%lVEHK%eUv%H3zYXt0HnVvcYF(;AYDUwA)OijFHr@lWJA}t-?Jb1zx zgfuCN&TRWZX|}V2sclhV^Gg;p-C5>_YQ7>Tz|X= zJPDz9HGSD_yQ8fol>%3L`Ew)8Ca$Gcht#VV3N2)n`ae#EhQ16G-Zu-rwkJuM zQkmK&k~^_BEX~uqB`nUSiA0X}L01-Kc)2B?hjw-t?4GP%_eh@khinJ9iB@Eq^IS?v zo-SiGQ7+qivKAu;ne)+?>%>4B5*GY5sa2h~>If>{kM`dt-x0~DptXHuHJ4)Mi z47oDN>lI^$;bp1w&1$*dh-hWBZ2&tOT2>=m2BW$RUV|V1&GdTnX8!%JtN*yxUQAnK zvoFeaHaGF{=8Tx_9BCtp9a$KEzi2>W|F*`;^?FrUkiyei=wVNPE5(~>spIBVTCq6u zM~ci|$uhXc;)>S84*O%}hg6+1f+tiB;)ZiO`;Y{$Hh=!Zk!9DnmEyO}+s@o^*4aET z;LVdYuRZ40syvrdq#z5*1X_xM>2ZfW`338l6pgS}Q!`4%3)rD8&FKfu!OzD5ci{*W zEVck>N7qKfl7nONaFz|Ur6cq3x&hj9QjS@CS>fJxI^6^%wt_aeND}CL6}K(LkD8r1 z*s*Mxs$pU%16F28VNF|Fur8Y4y`MeX2T>n3=%EtD(U)&k%xrM*4NCd!c(vP9?6w}9 zB-H5?Ehv{+$zoElM#)PzPP!(D_ox)6WtGiIqguvqlbhtdpP64?Hc@{JjY>jUK@=tE z%Qoe!08f=I!N|=LuZrx+uLHW@JY-~KC{Qqt-qtr6a%QxCJr98sB81z7{_j_6298Xt zG>)8kfD~TY0h4wn`xl_sK7jI|Cxu#PM_z2Jj>44H=cK_%->!QB9NeQySmfI z!vDMSaB23t|C@{CFu@2$Tv^8Kej%%=AVdUhVGLi@9{W*ArAPV7rXeJxpI zW;4;YeqV&w%u?Jo6p>b}h)UC>y1gjZX)Pp`otjEn;K(=il1>cvgZfa0fhrGIdW|MU zg7jr!9sQfK?()xG(l8(4Fq@3@6L3qQ0ZI_my)}#Qab~=|!Ho;w{@btCo+$Um!x_Pq z;N?^CO|?F)#FT+Jr@b2x2q>zqY*{|s3?;UM_NF+6RQm3*uTKg|DgJv_34#9?N>>-S z-WR*_`(GD{4aelfkRpXqyz&y8OLm?l@{ zuTV^*$RRMuhHJ>)K?8yu6hV|BCE;*WhK0WZAhjq|6pANI!;y_8P0nm=Vc}s!MiSE} z<+{?!kbO~1C~c8jhl$%I%aoOqon07?o$^j^5N?sEY&{8WB8*k?e7^4M9xBqdDX*-| z;`4COQqHJ?i*StgTMna798&&Zg0*N8qlq$pgUqmMZwBw@d7N)&4x=!s(F_9YKCe_v zYM%^n*9&c8vJ18}QJlplX_=mIkFfD+FR$QdGT=MjPxp zt}wNwt}elwX=t=NpExvpH_IQ_XgY;?TRhKa2@}(z1v=wjI`aSz#si{0TMTmzg0Vif zEqpSG@>o+Tmc;W6IpUedR54M~fgz9h`m2=Y&DhH8ekg)p=2*~m)82nQDrh;%hDVlDV zd^+GB(S?!XgA?p{5FtM2=Y_-Z*vEdAwWPC16g3yWn~@))uPvcMWvaXmqF+Sxpl8_5 zplesPf{T_##>RT$)`7uUngH4T>mMQLikDjgd>UkZTBw|1x!-*uO*?@XcWw!m#OGXL zw{;q$1z7)ee4_#WUvgFLj6fv%mU@0?mGdv%5)KoMRqdHgPzS1P|6b5!DlFsm?NYvi zsnr(_DTA;+n@I|;RO}^YaOfm$(je$FQ&MSSJbhS$4fPj}jE@MHJd#VS?lg8a-U_Fn| zYvBN^a^YQ5FBu4R_&AByO?!WFdXa7fmym(`+v1)cwbBGJGDfu=8d{tK9n$VfGd=p` zef+o!Qhj1sSt|-n{o1SkyxqdwnL^B*oSfCX?b>WD?}H0)o?t0W>8~0AN_wuE7%WcU z{jSHKahE)qA&|-vq|O?7M<)pPE;wFADTJV{-t&)n;IynY3>hJ)6&5fzh=iHVf7jgBVyf3lp!}SmEo9SOk(>+t)r=tz8-rSTG zyXa*Dr3m$y()O%tEtD85*~(qmYk!8R;K72Nn=!o^5)-l6-urPb(7J%emDQE+>It)n z65LjnJXO7F}M$2 zA@n+;RyPu+M1L4;@@3P;nI}X84W1nR)iQt43iHR`VHqbcpSz@r1hSKh{T3}Ux?~Gy zc~{0%H*jHI{%4?cwt1T`fkbeq>AfcYHXY4Vi2p|%HnbJIVYHF~E6}?byT8OY2kNNd zh1(Ja0)^>Y#b1bm43L_DdGAYpadNV0ncgwtTx{OBYpL-{W}%+Q=V{aL<^!2s^-&n( z3J#JZun6OJE2g*or;pd=v1Gi?J^~`Q+=> zy}$LI_>J!`W|PMv#hakgnRJTlxEcVww0ea!0lN$r^p&!JkM7&ms`#K7Jx*K>M+SS) zXW{Pe2A-e_VYCvB5ZAZ-lL^n$pC1+akjgErwWbgPjn{rv>=fmrf+o?mme?&=XA1MC zP$Ks|*CqFO4{L-62V=kSfL5q{ zo7Rq1y?D<_s#@7G8c9=FpPd;0+=u26}d; zs5M!`8$k^2jN;lmx^AnS)6YBCCRm0->Sexg@eU*A>!rB(EXIY?Gx^8P1$ezPh{t&T zS*9-?Sb*F?<9|Ua_5);A*MX(|F!>SrAAfLm59{B##L7~(+eag{Cd_rj1t2g3<4AKL z9n%UR6A<56_#-ITN^KB9_e}^dk8Pf#@L8JULg!1IKhLIYkAD#v`+yK?yrgrp2&iB) z?19boaP$1118;;irb@aLgfvHa$1$o$xsGnn+;jJ#qlSBprj6c@9 zD7KfQmJ@CZyZ7EbKJ4aa)`&@U8dk(L*5T8<{ms~M9pI%D6z>{Xr+TcqZ}>7LdHqAC zF3~Z)vLoL!x6{6-){B5MN$5f40d?)8XYR>e0@a{w?vOe)n;&0@Urj*%gUG~>;!^3f zDYY(wdI4dgcdb&5tnF3J&CAm>`%MSQ8)%ZV)gNcVRA`{Nf*Ae@IUk3X^2pD`-9*(6 zP64lMc6e}f-kLn_{V+aFiyQn}No zQlRJ>ieY_i8uK9yvR;cAG8=G#OnLCGXPm1SQfp=9pCP{9vx!$;pse`q)4T5p2!n|E z(Il$Ov2T1Q;q()k$vte$k}RFL6Xl9b1+% z1O>4qkC@WvRM!4sA5>#BI-;iv;vdtKn<>8PxjN8((B`Hutab0L`OMvv8Lr-!>|n9u zx)3Dmp>eittc|{en_vJQ);St2nHewn)!BvrV=&ousn|VNpZXc5uf2usK}8z zNkbTYS$O!{Nm+cX%T2W*s^~$0J~AbLhEI&U1dTcXyew5(MG(3<{o~5EvF9y84hE-} z>nC6_JrJcio28HU$WH9O`aZki44jC)=_9Kp6BRX}B%0w82$c@)BzOk}EEzJSc zTRi7K#iRA-lDUQ98>7lCz`$&qk4qN9KmK&Ioy=4-+R+<;OxPoyEv7B|(Z=w9{%DR^ zV&MGV(JdntyD6I+^AQ6lP4guV+DqJPTdgc*_KiAKG0~^`0so7^;17SZ^}`|KqjJK2 zz~3JGCN043cS#pc|7bGM?fBM8^H-In+_Le!F1OE$NTLND^5hC)};!eJY>p!+5%X7-MGGY#a)v+pI*S8vcH}D8O)U^3Sy7}`+ zN)<|#T5|lxz#oY}KT_~8MuvZf)NN9#&2+T&@d8M+?)NQyswz4%^wtGRE~Y!tbV^}P z9*Ld+C)T$%lXmZAT#(g$8oAkNjmM+Rh1Dzf(4&=7gt%*Hg9g+r?)0Zb@b%5n`E%z9`It}t=JI&|;UAG1%DvVHhwFFO3suaBB=u`X0V9?rl2Xc3!P;~F z6El_C|4V_({ofzxF=L4At|GH8KaAP%4MQ1T*gZ3L*^ETHK6L@>5(r$nf#<5l7GEhv z6(PsOn!mn^B#n>YNoq%^<&t=rb8&j^BI+kWV<3+bWO)@NPTR;e*d-C{e7P-=%@?Kz z(Ubt?lzwaUwHC#ekA4P3sw!@cu}RI~FpZ+^Z& zD(EpGTAn9_G4b){xS8UnMhN@j@!T1?CDNH)dLyBRrhxuKJiVmNx}@(muHOl@A7%Qy zYj$;v-&4XE-(&y3^%ImXv3g%2Z}FozKFlY^0hUz!t{HZ8H|Q&*!7}z-{5O_l5Jl-m z!db=3cY4^cq?POk2dw?0J+c9wBN+_Y{<}=yKkeR|MVf<~4+i=I$L6RU4Rz|cTupaq z5{YTkp+SzCNZv_&1$-uqJ>nrSJoSG96*a=`qxq2Mt|>tVfoPxBoE|Z=A*n9(uV)(% zG60=j1lS)Y{U3X`$OJT>2t{UbGXoN{(MY}PcpG^djviZwOnc?W)heZqeqyCwB*FCh z5j^r;#!YqcQYH;kSd#5ZVmvUz26nm1J2ItL4rNN*j>&==blvs! zo}SsR>!NokRb9?hrsyO)t@;OvK4vT%A-mW;n=*3@b$(fs+M3F$Wy0CdQbXFg?KP9b z1`g@#0552T_cidJE8m~OY8I9+9C}ycEMN^JjBYyD$H7Lwj1mTV3MXEWhe}vPK1pQF zDRdx5<~p%VCd>^1GI=VfmAHwM_p5jPOW9=jx(q6fq&N8OGdo|e2s;6cwx8fRo1?_g zrr%!Qw!}Y5x+fn0orz1=Hcah=(ZavPpN^xt!v_)|u{_>!Z z#sDk4|3$!-r2dBqUr(2eDI|(g>q`Et41HdES<3Mk(y`n8>2mH)pCK>VmR2N3c@dQr zaEMKA-P(4cx{C5S8M{j$bP(R{66DaLq$|M5cbkDJmrPYC1m0Ae)F@0CxJ%IIQ(Wz2 zO`!cC86Ai(W_z{!tAKC$+Y5k~sTLvmiez)$jtq3_f*{DThA3G|WoYvU1dhcKc$gSF z6ikRardXDG7^)3feAhqd7b=@xP8bYxyyz@af6g3Jk}s|XL$~y z`eJ0ddbVpA!zSXASNx8esUSBRG_QUtUrH+r(il8DCUEOJ(*1cT^AURwzNjBnMRjji zi0Y?zhwLg3*Fb*A#SM&yRE$PPfHS3iZ+-!&5LMK0C=9iC)=DP6j-{VqQd~!bX^8)1 z3Ov`NMFd8Fr=9;m_k|e-g>R|xOo>Vz2KgkQNvF33i18&0c??Q*cYE)VW0$MJA>i~+ z5sGWd|2(~wm-6tm_$#g)kmgr0)8;G_s9cPvtJE<#C>hR_NxUeE98DJR=@xyuw2$z( zX&z%ls~!_vjY8EOo6OcszMNzwU2~nGvk6C*}1gTwHY-)RNE1viL{Qmsi|Kz^!BxhXboNJwPU0-rP zrK>D157TGFwdL{q~^UspFl#=j-{7Zl3wW`V_!wXV7& z7{wd&PKLxGW!+mcOL^o#bl8F|1lV>_Uy!Z${d|=82e?j-P~kPBflUI%G3_){jbtsG zSjyX8b#*q|2TO;GM(K}INUCCLhgCkY{i{px*#GtYNgb~#cEX!8%SQGUVvX8X`0N)q zjXwQ?f6f~)FLAS974rhJYY$j*&B9azRl!A?-u7;*O4NEk`o{guO8SD^2R2YF0-Wa8 zxf6x#FhS_tT$`%(p5$9J3m0g~L#U%)U*$v@1sbTO9>jg(*T1Jw%kY8sPcOd(g@DRd zD7!gpc)o#b`QAJJNw4B4{K6Ru+0&T+e7W3_9J-#v@!`o`0@YtzjbkKsIwQB05_m>l z#l%#%khNS)8=*Re}3ous&AG%#D2%S*6X3U zAIWE_!#pCd)!5+`E9%|eCfCOLk0|EAkEGAn``eOskeyEQvRd;;zimR;%JkNAy&KT@kVA%`3IBO4BhyIs_A=bJ{#I|=CDtS5tvM||cGpIZI6 zuKkNV^m(*sTLTc8hWEu1Eq||_+3a~x84U{d?av`mBaSjZZy8V7qhW~!K&Yyy7dl=x#qxG z5^3Aqo%Jv5R|ofPZ~E)ShL*c|6BpkFUOe*#0cksro9XbVpJcZr{=1Ji>@tVgvi*zQ zrDr)D@hEOtf=w`y zrK$rwZktRBl|S#d4|!r1W<&T93H;k~OQixu+i60F`JQzfO?nQD3~-g0cHh%F-dzfs zLY!m?1h$X&6$-XhdiLsJEse>a=s#Dc_HO9XU|Er!`5R&ak-bkXa_YZ5#9BRw6C0oq*C=3LsW_PEO$vyC^9wAJ5yFoU@&rg$fFT=L4E1=X35S)Z-G+J~7|Q%HRJG?&AnX~ennl1Oow1kx@{5M;nBX-Zn4{ySLLTy_6GX9rjAvc*ZXc-Ia674)cly=Ng7pPm;pS` z5FNH!oUkO7?93ORs<=|($o2J|e27A%+N^f!8}m?SDMjjif2NzKvJ$W6JwA@*jH&=-L z0bshz8oXq7>lKwGo|2X|Q!&q&^7I+wm7WAblU#8Q0x!$jKGZybnxbx>*w4Nv5LOYHEf46+r3VAPvAGX;v-^yIN*K z=|dlX?)ZGhUh#=f)M8+@cq@RcRr)%-##UHKW4Gt6%O*O)Cr~M7wS$_jvye`qg0%J_ zcXWGDuIJ_laMZk20~}1J>uQjh-gFb2!0jpER($`e#|%_4SFJd~c{Nip?|%9AK}s5{ zmlHBhzI1XSGaP$ECU#!Sx|g#jxBRal@t89i-kP2mDK1UU_>8gK0o(+EzSwVqEO}{3k8)Jd>Qw`tT4q zDeYRx2xrl4KIz@s+Mbp+9h=tj%E`$M)xgWOeSbYhLfm&q6g;ubtPxBQ0>j1PUF&}5 z+T8bAR9oWGhB4xNlnho~v;DV4+;(p0{Ue>fjEai9&iQt;xI|ZPXD?;47;ARS;xejK zg;r`kejyPnmMr3qCQ(Q_A7HM&-S#}FfM2=OP(FIzW<<(>J z*0y8Prvp{0T0?ORQ+34FY6%^-?)H(u1&0(gv_cwLLE$S&*Zy#+vd7GVFBZdCLO+X( zM`~?|qxabqQYET027}hy_H+&ou&Us326A=MDzK0 zIphrc-D-x&wxGUuNRpx!vLH!6`3ek{6SC8`H}CC#QH1XPSY{j*d z0op~oa0b$fBgS7;mP52P_O(KfJ$Th?NA=!@eVJws*W3mlHX@+2+&YHxU1$FB2mbSAQEIUQmRmMxX|5Sl>dP_;u7a*BIl&t9^zWkxFaGJW3^GL{*hKwC+bd@ zd=ru$T&ptDOM(8R+!;5J>b+|D0V^(pcGLAY4@{ele}Doanr~1)W$(VGS0!1v=m^eI zwl3*t6|Xn%3+VnL{GbEGIdBTahG%PqcaoC;&_6Ed15kuydi-8{Tl$I>y>oene*6mM z@)_E26-LgUM7C%n`ta*ZsQHbKIE~Up1TBT116VrEB2zgbA;IWnXr^-3hAV8qGOWrB z)2+@djkt3d`bRug>J4qs7eVvrKhH_)E|R?nCzQMR=n!Qg$2*k3lra$4vb|Yx8Nm8z zQP_1I_7zajNg?3?fmUBX$Rfa`w=uUPH~+Z13HV*t0FZe69QkIYoPuTe==SNt$poZ^ zZ-Kt|Ot-bw&!{OY``0y088h;md-w=Pw}9E%#WFhA{t4U4fcL7K=_x**W&SZ`YRVuG z?<6sLoM080FFect(H4tI_JBAg$=}kToez<{(b7N|RTfKXr4&&G;?9?yCsJB8?IHEg zc4+mbZX~NS1~jxxnXLS2rcJ8LQBuuRrXekuumkhmN^;5>Q_?vFRnf2namWx~k=miT zpO3*x`@aUZ9}{9)lz5S|^|~#*q>Mx;hP$zhF7|9CBGQbC|`$ePeO&0eN0zHq-MZ*IdRN0s$XOX~3JVqbkIpOxa2q%No-urHH8^`Z1Y z4;iIYEJ**eBRGsD;$|}qHIr9@Xdkw_+M=kqOasV6i)?h}m!4$E?6muVkbFDeMcNX{ zrI_bOK~W;&`q(u zz?qJz%EkqTAh_2u(eOT`dNVwgHORB!CC_Yl>JvGn)L4qFWI0WAz#Z_8i^kVp*CzVL1g};=b47(RWD#@!v_?1Xv^(*In zIO1}6_-~d~Kp4-wc5jB_#fkr2IfFhiv0#Zf{w%z%n z*7oMq`AOW~5lW9!_y?|U_nSU-p8!`$NlID0SVsPSdst7jKNC^~>0NnxbM{m98rW;E z2W>I3Qc?w=Jn-5GRdPSqxveMx(h2@5$#>nON9y$^{3ByfDwt0qZ1GPLXVYx+9>skP zcq*RSp*4au#3AeTGe-6RWMn*4 z>XZ1-2I>Q|!RPI51Zm1lSW@#hhL?p@3%<%w;3K|1XT%T*I3A8oNZ_xnYiKbgYN_uQ z+ql83BpMn-B-%`r7QXRB2+f)eKk|*+eSlibJ>01tR*_G+48*UE6c<_Z?&uHqWO19C zSi3H{jffzqq~3x?W>e!dQ-@~(%~VvPHg&IH+zuQr6>c)^?;80?XJ4`hX?6RIay6yCX|@DF3EsX4nMOzyK> zc)Vr(gqUXkAmdxUq1jn}78^LdR?dNuCw$&aQ*We2wvgEWL#ZT}8UWd7@3_0Zmu_C% zF!?>-Sd~#J1v6pJ601Y(mZJSL3ng{`jxwmgny-?PkmB5;{4dY{I$AgW3nyno;gP7v!nAw!iNRg>8x+4AoHDvh*UC9cDM-P~#&r4(;7hoKGcwUMp`TE*j&)jneb?Jf)_^E}NDMvvxifNoIc^dH(7%fQ(|OV+EHJhF`%+ALve9W0wEzs$kbs}gJz%7 z7DQzz9s<4)s}Y*hKaGxlz*)(V&$gicU+k4XgJ_Bh zItPZT|4Iv&8qZ@vvk+Rznz)^(+prB{j6ZF%Z4J(@=6O~h z(;kfX=8Ku5?&-HR@5RrsV^7~4e{3=!{`+`*zo2#E==$#$KSOZB6Zg7Cu<_2>1N>q@ z1M2`(Ra<^gSahZu*fUtM@3P$GJ9GMsT3o?-xU}!~7wcolD1FlM*J~5q9qs5x9N}KA z+zD9%8!HkCRvn$-*7@*^si*`uDF;_dmgk|x*R@myU1kt&HUbH^$fOE1a3((7fCCL+ zF`QiQ)M8E6u3&RT0*befh5c+tpqnWkB>tuPIG<(B`%`cfpfv5YY`AqXCVpT*ig?Yps>i9_DIN<2aJ^E> zv|}Q{@zyEbpfOvI%3J=TJ+q?p;kXeZyoKW`qZUR$rg7y;0RE(8JK?fW9vO3MVYU$; zmiG`f->#VX+pJJh6gQ;^um3ZBHVkUCLhB-jt`>~dLnT71wAGL6hwoJ1S}7Ia=H6cu zIwUXB)Hx#J(Z%!F4DQw~bo*@PX+zc4&5F)^0RU>UC0OJJVEDJMrdVsL8X6!T$QLgg z^b{Iea7O=@G}&A)u%3*gYqNBgDZzG74F04sDESa!xhsEG9x#*7y)JXL0b-;HTU*nt zj?)ZqubF>S>P7}PXEUlbv!1HBuDA^^r>Ayp&dia?eVfclV|72c#=>dEW5rEXJ|F3Z zo3{Hnl?<mq9n=;fO4*4X=(`~KtZ=eiKboEM(*Q9vSpcVLxAT6$$snrf$bXrRY&BrSKydOBp$DaO~L=$?N)hupj=D!HwEOCQIeDEHuJa|RX&1loOS z?9U}7Q)4jA&r=Ukqik}SO=|#Bk}SmO=c2)HtpVHxdD%O)7;yX|5V;o~J|Ig^cS3If z21Cp7j5u$EY!`nk^2L8{NVW)s&#$d10di*HCz<~TAX=V^mksA_*>H4_thGE!AY(V6EO z@2AlD(%F5dx05#F-;`olos2!48rh4=(~D?D3GEhy1P%d7->d&tR@34duE2pFn!mhs z_6(Y9v!t|2*@#=VO2W-KDP_lM`^8r#}Zjf;D>g9q&< zwd(`KuKSGFi_#0JC}GfK90F_$PfE))zJ2@USMtpS9B$M4e`ZeuuG4UXHZ$3K;YbIi z;efG!x}z2sQoH9|F{V?Mo${vMg1sfKAQV^6c4nq{&fQ@qV)k-_fGDXh!wp*lSBsg_ z_>S~Fs?(O&pa^kXs&w#4#d;g9g8M*R*>)9pv4zM34R;?mq}CW>9$9X*sdTe;ZZf4l z6fI(R`3teWH=Jp^sTATt7g;nPWKndhbvnM7)Q-^#Jb=}R)-`1Enjv^Q^8I9I1gLHI z0!}e_2m62(b|vj2*>IKrX9qj=#MUq5>8BU|u*h`-JKZ!u#ts0`Uhv#Mnk=l2rfd^N z1u_kfnrPN&WBL#3g((;8<4$=D^{AGWZVFN{b)BaH8Byc zxOvW9RS0pKRL#K){7)LHd7R?>ugt zQ_xjI@7Cl8DX+xc-axEt7-=8r&9OzNCTsTnKT(lpNt(5}$2kpw5_o=UYs%g`D=I4b zSp3|yV$NpJ_TZ~XdyS%yWfj ztD;o8yr-7vkxvm)+@WIVz(7^8R3)&eE^xTTP_-(X6Uyf})J`-ch?~O{uW+_Kp4t_h z@`Pt=ehQKXG!Cvy6Dpota&I_HzPvokLcyj_mbN1rsbMyKCAH8CeykWec*eXzlK_8=pV}9@P zaLjK($Px^}1aeD6&6hio%uFoSS)~3Vk!PPr}A#>4c1gnrbT z8^;DIc+RKi0e#HR1h386h@gga>nUXN&&&qq_M$d>jo4Oni%v?uW;-=vd*dzTnNJGu zKf3pu5r;MG+acz~L0-Ae8_Q?y9mP96cXUKu?oi1bGz5UZ!cdkCUAJkIKMpiHBK$k= z|0paYMhr0`T7WB`LoW8)uj@zOA6;lX+~C-D*>cLAyaiUFIL?`fNAZH938$6A3C_EZ zA4KH2Y)E~uoPm>HkW2rUlKoKcC^EeOt-OAC`8{z6AY>P)3a}by)E<5D?o7MJ`&s=Q zTY6h+1C0?D?Uk1K^w?$r$|S6eEBq2ZZejNS<=>s57Sd~Dh`(`HjiVgN{^WlVwJ0NZ zcW2l7Y@Gu{#o0i3yCJrcok1wa67nIZC`UL+2$}cL?VdBujgSzxa^CH?|B*cbzy|12 z>f3$Rk~1pdy&3tB_UKg#?=};yPcy(EantkV1&1>w4ELv>AumrNZE$aZo6YCAm4$oV z--NRWaPQtw8{!5p_fEsOX>#{hXJhkgx9_T5mSeZv<-}DDyN;ul^W;zLSF4N$<5ZR1 zKZXhskx{MI!+oyoYXdu~4HaXWq3B@`=`(8d z+u#TUY{_IGGtsd{nkfS_qHVN96$iQ3pVMb$#GB=2TY`x5jM(7jF=v1LNqt@yKB?kX z7K(3w7C{<Qjcb{9kT`9bHh>NhvWT*bwAv-aEe@4)c3fd!0T_L=?&RcJpl%=|U0s)pVNRd6 zhDJHyj0RtxdLlzY)K(x=+|>@xrqos@gdhfwdHo;8!=&I1C4H~@fHQZVtg z1$7<*QB^P~0ql%u<_IDLs7i<^0oOlGU?2oHf++l{5nW%))Ml+nQ~u;Q zB!Zb7Fz+=Xa;tia%Hp0J2J#_Fb^wm7e>430v^o{kR0v@*N+yLuZi!Rb(;3D4kV45HF95f_? zR~{6l*>Co{_g0L_y_L0l!27*`y0E}@Y#Z4c==AzYLQbrb1WnMSeM+cw2I0`=GFGW> z+iPXQ%RcE|F2g5%<5y8|1`!mLU z^L*_*yl}Q#f#;0+B>JFon18reVyw?^z&#++d^3gCh%H??t8wCWYrZol`+UfR zEXV)=-V)&rq2uJW{iJT$>LjD=`@=6HW+vDZGrMk43~l2P zE;LW-ekz7Fqla0Aw@n(!mKEPuFdkpodc`J(1hRB^jQOlJ1-CP>n>a_sOHK1%$Q@=J z@K@&pViB#9UIjFQqurIyhPJfjeBI>=!snZv+!U&G#?3hF|NL42^gNJ(FK+#P;nzd=K1EGaE!f&#Tz~l$c4x~iO zW})VonX`dV+UDmn%&xH zoGjP94Op30V7VJIrUtdY7Qe7XYb#8bTWl;iY)e}1?YZPRKj$8}RsOO^r(l4lC>Myd z)U@i^v;^mGg?$rn#Jp;epxzIh*4?Wm+N&8E;G{7t&?v@&PY_!H0k3xVTm@HqZ&v#_ z&T}=>XDz~{d{`pHN!@iCN}htdZ_aX7ss)y91O=4N!nv!q+jIA)Y|3#8 zYd^!eYN^Zn)o)}IJL0Q$FV9!m8`Q9sum=z$CTzG#rKtzO`;4LqB z;CJidxuAtzIG^^gcjkrQ_*%ki#7gqcs9@FK@>Z5D>!MoPjEKe3oG}9s!?_>q-~vwj ztGI5&AF)XD5#b*lP79Y@zc((AUkO;{B7P}M^X{^Iedrr5ZSoiS#2Aghg~5WR-v!75b`LctoxO6ml9F;$ zs6b==!0dsiGCaq1E_1@XnsI+h4?y#*xpoQxU-9v;N5{hC-L<5qFa({AOW1Z<<;Fin6HL-7$C6K$;-t^tD9EaI zih}!8SJV1XoU~R~@{%dhrfjNiu+;-1FX5Bl(ws=9XVK}lgw>Vt6-%++L(e{QU>C{w zRX7I`LT7ekWz?pu;|qHx_B?ITvMtpE*XV^OxO4!Q~b9_cO!h za+^%wVX0|vLpN2fy8@)t*4>2HX%GMLez@$RAv%gM zNwJ@7$F^(jg5O8?ZKM|L`-ZzYcJOf!ASI^>xYtM&n4b_8+jvZ*c`*EHn~L(>T5%}b zg<>uD_l5Kr?>bXS$cy zcG?*fdx#&6-@DA0$E1D37C&60kX+&ItyzvOg)?9xjWr|f{GQ4pzZfrMLq&8Kd&eSO zD`$B;lfF9BT|3YG`oLK^vhzUBSoqV+$xN1CT3>*lJY;G_^3gnwni4 zMT(g%or;VZS4C)#XWcWatrHA){ujxQ5$@Z*R^(;c#p<#Y1e=R=2@gV6fkf5TedC$g z_R@vmq5&7C2-G6S%-UK3JNv-?zKFk&Oj?;IEH$aee$m79W(xSv6>w2iRZiBElgWSg zWKHtFP*(By6PhNSrZrGp@>T}D0Up8jx^8%AmeebtIpiLcW9BMlHkn&z9Qh~Lf2ht+ z+S_Hn7T00!P=N)_qqz$P*8hFU87&(JF5&M@+709hhG3qb)IfY%gF0yZfpWpN=jiUx z!0rclms90K+vLY#kNV3x9YqfaFj)2>mBV*Jh)b?tbr1P>+(wa@E59 zP4!6LzNd9I8~~oVl5m%5tALlM7;#meVERB1*R|uLfU+zn%P_ptyvn<|75kBopKKV+ z_ZO5=okB=#y$v_9h|H9NJIUf-JB;CM-lx$39R?;_Tc*dp6uR>@O*7}o5D$xe%+TWg z=U2s`?fD#(y6|F85Z-R+_vx8R$5+@Uzm-(WCzb8iDbv3R3GqY6_WjtQj{WMLj};I0 zI-j~PI#l!h-hw0^w2$oWk4UBwv$L1kmz5$Ao*Y;uMA7H;&&Q1Wop~A%S9iP~NSf@5 zEiqUdo1D9{yQvNpvvb3;NzeO-bQ3uZ?oZbLE-op}f8L+7I3NGUrO>;&G~Y9k(6=}? z5kdeh>6?-R^Zx#~xUZ+|&Chbr97~3rP{Ju!z7c|&VOI!t%#X}TCs5ef!RmSBz1&2S zmlwZg0SCur5cZ&uDYq^!dY2a?=@~E!c`gZ?YjpCeq&?#o?`@4 zj`&1P@AulHbzbua={RXS9|VDLV@&$ZGmCTjxY3$7sJHtKGrb{dTv`d^zH$w1S}g2; z51KkcQVodZbX@i!YMVWowv|**f`#-rv^GS`evDX(Wlb~4R*%=qm^Z){bgf(qItBi& zqUCsCHZZ5w{&e|OJA(Tn-zHZ6{_lK?Q zq*Q9&zg2%(n!=^rY&l1QuvOdG5)0HXNp)-o(SE;Q2Vpx*O{kaLP3v%FXsLKk1soBl z;knur6&Ahc-b?HMhK0?h%4G#e(U3Zu=(U=X`FPH;;)j}Zzt+g`RxR1Vdc(*;T|9S{ zi(QdYoDG&!slj>r=VG)2)G#HUwP`=5U@N8bK=QS&=F(Nqusc+{+%Te1GU+3BG+HU@ zb0kyWHFIc>l@z#G`XpjzA4hTuuEahFR^Gx|cie|+^5#JeQ)?B7^YboN9o;RN;j=u* zT*eGgy2n@GvD{6@@eU742$QV3K67TdINXl>Cai1 zQl|A<9TPn`(9YxPAHp<4Oss!Ge#8z$2iwQ(4}CVMkn1_Cdg>_lqQBW-;~^4v$Np;oksozmIHn7p?;8ovN} z0YfoH$uKN->D3@KJc}OYS|%Z;r=;rB%7GTlN2g`TA zlrJo)MMX;gL;{0UPVno z)n`$Zo}NjZB*lF{dqFyYG^C068u+RIbm%Yke`EAt@^qg4b!iu6A)+Xyg8K8?p-dLQ%zKWo zmI#x4^g8jT=z~e_&_gA|43ZNKlk4)a5=D=cx>&7GOwTKyaVQ|A!QY8?YJYa~S|rFK z?45L=G!f6>@y{nnM%$vE_fZ2k)k5aveR z3wxgX+06T+O1@8Wh!>*5}_+9h5{H5v?5PtYx^WS~>rlo7;4aT}}6%n4x+z&3#?SFf<$|%*VtTON86_)6P z_TE#tSl#J$pis5dFhcozax&_0e__C{GeKuTz#&7;`tgNm+B~i7Slj#d?ZXiQI_TZ^ zamzN(mV`fdi^L5g|DXa^b^E6X^JbJIy&Xp7WGsyMe!s@Ap(TQ zSZ#xX$K3Y6oI=~pdWWk~hox$K1GjoK?CX{1pxY_vectjq^CAij*X|U{(h_SG;QR`G zILFNbHEXlxUv&K>`PLkuO_;|dlb+W~gF>Q__W$kk;-zZ0S=BnHf)~|lK&08hN$2P=~}c|p^=F1qfYwU-#-Rd61YSuk5nk{&vYK9uQh8~MAM5s_QbOhL^;robMnrv|Ohlv>s6wjjSEf4m7MgaW z6eE7B!*9a(xV=^el@z=dX4qjC>ikOgtxwmdmHayDct@z_1#5nfERuiIOo+Wad~-vo z=KBzokZ2wZc4Mtr);e4d$@Q9!P#eEyl=vI#z|fK4>P`0ba4b3LP*%7l{1yUH7D4pK0R!Opbh(KkqYj%rF8{Df1L|d zE7#}V!mX8)KQ8)he=Np=1h;M|2xJ|x&l<;+69#0obD*+SNv?ly(K6C7MQI>&Y*98T zEsm?`Qr(THVBmnaNA{n^KZJ}cuUIxp;>9y6@_8M>$QxuK3F92#$;tLmQpOXd@czl? zXl06djB(M24oTwZ#2a6gBvn$rD+vrHG`qDNM!t*-*`wb`iOGw?h2MPmAANII&j0`b diff --git a/project/calls.toon.yaml b/project/calls.toon.yaml index 16fb75b..15f8dc3 100644 --- a/project/calls.toon.yaml +++ b/project/calls.toon.yaml @@ -1,62 +1,68 @@ # code2llm call graph | /home/tom/github/semcod/todo2code -# generated in 0.33s -# nodes: 402 | edges: 500 | modules: 30 -# CC̄=3.3 +# generated in 0.23s +# nodes: 399 | edges: 500 | modules: 30 +# CC̄=3.1 HUBS[20]: src.cli.optionString CC=2 in:33 out:1 total:34 src.cli.optionNumber CC=5 in:20 out:5 total:25 - src.extractors.todo.extractTodo - CC=5 in:0 out:24 total:24 src.extractors.git.extractRepositoryGitIntent CC=11 in:3 out:21 total:24 + src.extractors.todo.extractTodo + CC=5 in:0 out:24 total:24 src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited CC=10 in:0 out:22 total:22 - rust-ast.src.main.collect_files - CC=9 in:1 out:20 total:21 rust-ast.src.main.main CC=6 in:0 out:21 total:21 + rust-ast.src.main.collect_files + CC=9 in:1 out:20 total:21 src.extractors.todo.body CC=5 in:0 out:20 total:20 - src.cli.optionBoolean - CC=3 in:17 out:3 total:20 src.extractors.nl.extractNlIntent CC=5 in:0 out:20 total:20 - src.extractors.todo.relative - CC=5 in:0 out:20 total:20 src.extractors.todo.lines CC=5 in:0 out:20 total:20 + src.extractors.todo.relative + CC=5 in:0 out:20 total:20 + src.cli.optionBoolean + CC=3 in:17 out:3 total:20 rust-ast.src.main.add CC=1 in:9 out:10 total:19 src.extractors.changelog.extractChangelog CC=10 in:0 out:19 total:19 src.cli.handleCommunication CC=11 in:0 out:18 total:18 - java.JavaAstExtract.JavaAstExtract.main - CC=10 in:0 out:16 total:16 src.extractors.configuration.configurationRecords CC=4 in:4 out:12 total:16 - src.extractors.changelog.body - CC=7 in:0 out:15 total:15 + java.JavaAstExtract.JavaAstExtract.main + CC=10 in:0 out:16 total:16 + src.extractors.ast.records.moduleRecords + CC=6 in:1 out:14 total:15 src.extractors.changelog.relative CC=7 in:0 out:15 total:15 - examples.backend.src.server.handleRequest - CC=16 in:3 out:12 total:15 + src.extractors.changelog.lines + CC=7 in:0 out:15 total:15 MODULES: - examples.backend.src.server [12 funcs] - createBackend CC=4 out:5 + examples.backend.src.request-handlers [12 funcs] + MAX_BODY_BYTES CC=9 out:5 event CC=1 out:1 - handleRequest CC=16 out:12 - limit CC=1 out:1 - offset CC=1 out:1 + handleEventList CC=1 out:5 + handleEventPublish CC=4 out:6 + handleHealth CC=1 out:2 + handleRequest CC=9 out:5 + parseLimit CC=2 out:2 + parseOffset CC=2 out:2 readBody CC=3 out:5 sendJson CC=1 out:4 + examples.backend.src.server [5 funcs] + createBackend CC=4 out:5 + sendJson CC=1 out:4 server CC=3 out:4 - size CC=3 out:3 startBackend CC=3 out:3 + store CC=3 out:4 examples.backend.src.validation [7 funcs] ALLOWED_ACTIONS CC=10 out:5 action CC=2 out:3 @@ -119,21 +125,9 @@ MODULES: execFileAsync CC=3 out:0 result CC=2 out:1 runExternalAstAdapter CC=9 out:6 - src.extractors.ast.records [7 funcs] + src.extractors.ast.records [2 funcs] adapterRecords CC=2 out:3 - boundedCapabilities CC=1 out:6 - capabilities CC=1 out:2 - end CC=1 out:2 moduleRecords CC=6 out:14 - moduleTopicText CC=2 out:1 - start CC=1 out:2 - src.extractors.ast.typescript [6 funcs] - context CC=1 out:4 - createTypeScriptExtractionContext CC=1 out:0 - extractTypeScriptFile CC=1 out:7 - recordModuleFact CC=1 out:2 - scriptKind CC=4 out:3 - visitTypeScriptNode CC=2 out:2 src.extractors.changelog [5 funcs] body CC=7 out:15 changelogAction CC=11 out:3 @@ -273,7 +267,9 @@ MODULES: client CC=2 out:2 extractNlIntentAudited CC=10 out:22 fallbackOrThrow CC=1 out:0 - src.extractors.nl-llm-helpers [15 funcs] + src.extractors.nl-llm-helpers [18 funcs] + NL_ACTION_SET CC=1 out:7 + NL_MODALITY_SET CC=1 out:7 NL_RECORD_CONTRACT CC=1 out:7 action CC=1 out:1 allowedAction CC=1 out:1 @@ -282,8 +278,6 @@ MODULES: isPlaceholder CC=2 out:3 lines CC=1 out:1 nlStrings CC=1 out:6 - nonEmptyText CC=3 out:1 - normalizedText CC=1 out:1 src.extractors.runtime-cycle [17 funcs] MAX_PER_SECTION CC=8 out:12 boundedArray CC=8 out:4 @@ -334,27 +328,27 @@ EDGES: rust-ast.src.main.type_item → rust-ast.src.main.qualified rust-ast.src.main.type_item → rust-ast.src.main.add rust-ast.src.main.type_item → rust-ast.src.main.modifiers + examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleHealth + examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleEventPublish + examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleEventList + examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.sendJson + examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleHealth + examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleEventPublish + examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleEventList + examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.sendJson + examples.backend.src.request-handlers.handleHealth → examples.backend.src.request-handlers.sendJson + examples.backend.src.request-handlers.handleHealth → examples.backend.src.request-handlers.size + examples.backend.src.request-handlers.handleEventPublish → examples.backend.src.request-handlers.readBody + examples.backend.src.request-handlers.handleEventPublish → examples.backend.src.request-handlers.sendJson + examples.backend.src.request-handlers.validation → examples.backend.src.request-handlers.sendJson + examples.backend.src.request-handlers.event → examples.backend.src.request-handlers.sendJson + examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.parseOffset + examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.parseLimit + examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.sendJson examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid examples.backend.src.validation.record → examples.backend.src.validation.invalid examples.backend.src.validation.agent → examples.backend.src.validation.invalid examples.backend.src.validation.action → examples.backend.src.validation.invalid examples.backend.src.validation.object → examples.backend.src.validation.invalid - examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest examples.backend.src.server.createBackend → examples.backend.src.server.sendJson - examples.backend.src.server.store → examples.backend.src.server.handleRequest - examples.backend.src.server.store → examples.backend.src.server.sendJson - examples.backend.src.server.server → examples.backend.src.server.handleRequest - examples.backend.src.server.server → examples.backend.src.server.sendJson - examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson - examples.backend.src.server.handleRequest → examples.backend.src.server.size - examples.backend.src.server.handleRequest → examples.backend.src.server.readBody - examples.backend.src.server.validation → examples.backend.src.server.sendJson - examples.backend.src.server.event → examples.backend.src.server.sendJson - examples.backend.src.server.offset → examples.backend.src.server.sendJson - examples.backend.src.server.limit → examples.backend.src.server.sendJson - examples.backend.src.server.startBackend → examples.backend.src.server.createBackend - examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent - examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow - examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState - examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh diff --git a/project/calls.yaml b/project/calls.yaml index 90c5219..068d077 100644 --- a/project/calls.yaml +++ b/project/calls.yaml @@ -1,59 +1,122 @@ project: /home/tom/github/semcod/todo2code generated_from: code2llm call graph analysis stats: - total_nodes: 402 + total_nodes: 399 total_edges: 500 modules_count: 30 nodes: - src.extractors.docs-record.isPlaceholder: - name: isPlaceholder - module: src.extractors.docs-record - line: 75 - cyclomatic_complexity: 3 - calls_out: 3 + src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage: + name: errorMessage + module: src.extractors.docs-llm + line: 267 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 3 + examples.backend.src.request-handlers.handleHealth: + name: handleHealth + module: examples.backend.src.request-handlers + line: 25 + cyclomatic_complexity: 1 + calls_out: 2 calls_in: 2 - src.extractors.communication-helpers.listValue: - name: listValue - module: src.extractors.communication-helpers - line: 259 + src.extractors.nl.absolute: + name: absolute + module: src.extractors.nl + line: 40 cyclomatic_complexity: 2 + calls_out: 14 + calls_in: 0 + rust-ast.src.main.visit_item_use: + name: visit_item_use + module: rust-ast.src.main + line: 216 + cyclomatic_complexity: 1 calls_out: 8 calls_in: 0 - examples.backend.src.server.readBody: - name: readBody - module: examples.backend.src.server - line: 70 + src.extractors.markdown-paths.addBasenameIndexMatch: + name: addBasenameIndexMatch + module: src.extractors.markdown-paths + line: 148 cyclomatic_complexity: 3 - calls_out: 5 + calls_out: 4 calls_in: 1 - src.cli.optionNlMode: - name: optionNlMode - module: src.cli - line: 850 + java.JavaAstExtract.JavaAstExtract.slash: + name: slash + module: java.JavaAstExtract + line: 259 cyclomatic_complexity: 1 calls_out: 1 calls_in: 2 - src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch: - name: enrichSplitBatch + src.cli.main: + name: main + module: src.cli + line: 61 + cyclomatic_complexity: 9 + calls_out: 12 + calls_in: 1 + src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract: + name: markdownResponseContract module: src.extractors.markdown-llm-helpers - line: 153 - cyclomatic_complexity: 2 + line: 369 + cyclomatic_complexity: 1 calls_out: 7 calls_in: 1 - src.extractors.communication-helpers.normalize: - name: normalize - module: src.extractors.communication-helpers - line: 282 + examples.backend.src.validation.agent: + name: agent + module: examples.backend.src.validation + line: 22 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 0 + src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment: + name: enrichment + module: src.extractors.markdown-llm-helpers + line: 371 cyclomatic_complexity: 1 - calls_out: 0 + calls_out: 6 + calls_in: 0 + src.extractors.git.extractChangedSymbols: + name: extractChangedSymbols + module: src.extractors.git + line: 376 + cyclomatic_complexity: 9 + calls_out: 3 calls_in: 1 - examples.src.runtime.validateContract: - name: validateContract - module: examples.src.runtime - line: 6 + src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent: + name: extractDocumentationIntent + module: src.extractors.docs-llm + line: 45 + cyclomatic_complexity: 3 + calls_out: 12 + calls_in: 0 + src.cli.svg: + name: svg + module: src.cli + line: 564 cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 1 + calls_out: 5 + calls_in: 0 + src.cli.handleExtractAst: + name: handleExtractAst + module: src.cli + line: 619 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 0 + src.cli.handleDiagnose: + name: handleDiagnose + module: src.cli + line: 139 + cyclomatic_complexity: 2 + calls_out: 5 + calls_in: 0 + src.cli.handleExtract: + name: handleExtract + module: src.cli + line: 577 + cyclomatic_complexity: 4 + calls_out: 5 + calls_in: 0 src.cli.result: name: result module: src.cli @@ -61,159 +124,68 @@ nodes: cyclomatic_complexity: 1 calls_out: 1 calls_in: 0 - src.cli.parseDiffMode: - name: parseDiffMode - module: src.cli - line: 488 - cyclomatic_complexity: 5 - calls_out: 3 - calls_in: 1 - src.extractors.ast.records.end: - name: end - module: src.extractors.ast.records - line: 48 + src.extractors.nl.confidence: + name: confidence + module: src.extractors.nl + line: 53 cyclomatic_complexity: 1 - calls_out: 2 + calls_out: 9 calls_in: 0 - src.extractors.docs-deterministic.match: - name: match - module: src.extractors.docs-deterministic - line: 160 + src.extractors.runtime-cycle.sourcePathFor: + name: sourcePathFor + module: src.extractors.runtime-cycle + line: 89 cyclomatic_complexity: 2 - calls_out: 0 - calls_in: 4 - src.extractors.git.execFileAsync: - name: execFileAsync - module: src.extractors.git - line: 12 - cyclomatic_complexity: 1 - calls_out: 0 + calls_out: 3 calls_in: 2 - src.extractors.git.resolveDiscoveryPrefix: - name: resolveDiscoveryPrefix - module: src.extractors.git - line: 264 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 1 - src.extractors.communication-helpers.nestedParticipant: - name: nestedParticipant - module: src.extractors.communication-helpers - line: 157 + src.extractors.docs-deterministic.primePathMapper: + name: primePathMapper + module: src.extractors.docs-deterministic + line: 87 cyclomatic_complexity: 5 - calls_out: 2 - calls_in: 0 - src.extractors.ast.typescript.createTypeScriptExtractionContext: - name: createTypeScriptExtractionContext - module: src.extractors.ast.typescript - line: 35 - cyclomatic_complexity: 1 - calls_out: 0 - calls_in: 2 - java.JavaAstExtract.JavaAstExtract.add: - name: add - module: java.JavaAstExtract - line: 181 - cyclomatic_complexity: 1 - calls_out: 0 + calls_out: 6 + calls_in: 3 + src.extractors.markdown-paths.buildBasenameIndex: + name: buildBasenameIndex + module: src.extractors.markdown-paths + line: 90 + cyclomatic_complexity: 7 + calls_out: 7 calls_in: 1 - src.extractors.nl.missing: - name: missing - module: src.extractors.nl - line: 52 - cyclomatic_complexity: 1 - calls_out: 9 + src.extractors.docs-chunks.sectionText: + name: sectionText + module: src.extractors.docs-chunks + line: 76 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 0 - rust-ast.src.main.visit_item_type: - name: visit_item_type - module: rust-ast.src.main - line: 238 + src.cli.taskFile: + name: taskFile + module: src.cli + line: 348 cyclomatic_complexity: 1 - calls_out: 2 + calls_out: 5 calls_in: 0 - src.cli.handleProposeCodeChange: - name: handleProposeCodeChange + src.cli.handleCommunication: + name: handleCommunication module: src.cli - line: 222 - cyclomatic_complexity: 5 - calls_out: 5 + line: 666 + cyclomatic_complexity: 11 + calls_out: 18 calls_in: 0 - src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract: - name: markdownResponseContract - module: src.extractors.markdown-llm-helpers - line: 369 + src.extractors.docs-deterministic.heading: + name: heading + module: src.extractors.docs-deterministic + line: 180 cyclomatic_complexity: 1 - calls_out: 7 - calls_in: 1 - src.extractors.docs-llm.DocumentationLlmRequiredError.files: - name: files - module: src.extractors.docs-llm - line: 110 - cyclomatic_complexity: 3 - calls_out: 7 + calls_out: 1 calls_in: 0 - src.extractors.communication-helpers.match: - name: match + src.extractors.communication-helpers.nestedRoleIndex: + name: nestedRoleIndex module: src.extractors.communication-helpers - line: 125 - cyclomatic_complexity: 1 + line: 155 + cyclomatic_complexity: 5 calls_out: 2 - calls_in: 5 - src.extractors.nl.body: - name: body - module: src.extractors.nl - line: 41 - cyclomatic_complexity: 2 - calls_out: 14 - calls_in: 0 - src.extractors.docs-record.hasTarget: - name: hasTarget - module: src.extractors.docs-record - line: 152 - cyclomatic_complexity: 4 - calls_out: 1 - calls_in: 1 - examples.frontend.src.app.reload: - name: reload - module: examples.frontend.src.app - line: 38 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 1 - rust-ast.src.main.visit_item_static: - name: visit_item_static - module: rust-ast.src.main - line: 250 - cyclomatic_complexity: 1 - calls_out: 9 - calls_in: 0 - src.cli.formatWatchEvent: - name: formatWatchEvent - module: src.cli - line: 448 - cyclomatic_complexity: 10 - calls_out: 7 - calls_in: 5 - src.extractors.communication-file-helpers.shouldSkipCommunicationFile: - name: shouldSkipCommunicationFile - module: src.extractors.communication-file-helpers - line: 102 - cyclomatic_complexity: 8 - calls_out: 3 - calls_in: 2 - src.extractors.nl-llm-helpers.NlAttemptError.resolveObject: - name: resolveObject - module: src.extractors.nl-llm-helpers - line: 194 - cyclomatic_complexity: 6 - calls_out: 3 - calls_in: 3 - src.cli.handleProposeSourcePatch: - name: handleProposeSourcePatch - module: src.cli - line: 257 - cyclomatic_complexity: 6 - calls_out: 6 calls_in: 0 src.cli.isPlanSet: name: isPlanSet @@ -222,13 +194,20 @@ nodes: cyclomatic_complexity: 3 calls_out: 2 calls_in: 0 - src.cli.reportPipelineDegradation: - name: reportPipelineDegradation - module: src.cli - line: 882 - cyclomatic_complexity: 6 - calls_out: 2 + src.extractors.ast.isIntentRecords: + name: isIntentRecords + module: src.extractors.ast + line: 153 + cyclomatic_complexity: 2 + calls_out: 1 calls_in: 1 + src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords: + name: enrichMarkdownRecords + module: src.extractors.markdown-llm-helpers + line: 57 + cyclomatic_complexity: 13 + calls_out: 9 + calls_in: 0 src.extractors.todo.body: name: body module: src.extractors.todo @@ -236,158 +215,333 @@ nodes: cyclomatic_complexity: 5 calls_out: 20 calls_in: 0 - src.cli.emitJson: - name: emitJson + src.extractors.communication-file-helpers.buildLocalWarnings: + name: buildLocalWarnings + module: src.extractors.communication-file-helpers + line: 254 + cyclomatic_complexity: 3 + calls_out: 5 + calls_in: 0 + src.cli.doctor: + name: doctor module: src.cli - line: 701 - cyclomatic_complexity: 2 - calls_out: 4 - calls_in: 2 - src.extractors.todo.heading: - name: heading - module: src.extractors.todo - line: 36 + line: 757 + cyclomatic_complexity: 6 + calls_out: 7 + calls_in: 1 + examples.backend.src.request-handlers.size: + name: size + module: examples.backend.src.request-handlers + line: 71 + cyclomatic_complexity: 3 + calls_out: 3 + calls_in: 1 + examples.backend.src.server.createBackend: + name: createBackend + module: examples.backend.src.server + line: 16 + cyclomatic_complexity: 4 + calls_out: 5 + calls_in: 1 + src.extractors.runtime-cycle.MAX_PER_SECTION: + name: MAX_PER_SECTION + module: src.extractors.runtime-cycle + line: 15 + cyclomatic_complexity: 8 + calls_out: 12 + calls_in: 0 + src.extractors.markdown-paths.createMarkdownPathResolver: + name: createMarkdownPathResolver + module: src.extractors.markdown-paths + line: 39 + cyclomatic_complexity: 12 + calls_out: 12 + calls_in: 0 + examples.frontend.src.app.state: + name: state + module: examples.frontend.src.app + line: 37 cyclomatic_complexity: 1 calls_out: 1 + calls_in: 1 + src.cli.handleLink: + name: handleLink + module: src.cli + line: 131 + cyclomatic_complexity: 2 + calls_out: 9 calls_in: 0 - src.extractors.configuration.dockerEntries: - name: dockerEntries - module: src.extractors.configuration - line: 173 + src.extractors.docs-deterministic.parseBulletStatement: + name: parseBulletStatement + module: src.extractors.docs-deterministic + line: 191 cyclomatic_complexity: 6 - calls_out: 6 - calls_in: 1 - src.extractors.communication-helpers.inferGovernanceIdentityFromFilename: - name: inferGovernanceIdentityFromFilename - module: src.extractors.communication-helpers - line: 141 - cyclomatic_complexity: 7 calls_out: 3 calls_in: 1 - rust-ast.src.main.visit_item_mod: - name: visit_item_mod - module: rust-ast.src.main - line: 206 + java.JavaAstExtract.JavaAstExtract.collect: + name: collect + module: java.JavaAstExtract + line: 58 cyclomatic_complexity: 1 calls_out: 11 + calls_in: 1 + src.extractors.docs-record.anchorToSource: + name: anchorToSource + module: src.extractors.docs-record + line: 93 + cyclomatic_complexity: 7 + calls_out: 10 + calls_in: 2 + src.extractors.docs-record.allowedAction: + name: allowedAction + module: src.extractors.docs-record + line: 183 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 1 + src.extractors.communication-helpers.listValue: + name: listValue + module: src.extractors.communication-helpers + line: 259 + cyclomatic_complexity: 2 + calls_out: 8 calls_in: 0 - src.extractors.todo.classified: - name: classified + src.extractors.todo.resolvedPaths: + name: resolvedPaths module: src.extractors.todo - line: 49 + line: 51 cyclomatic_complexity: 2 calls_out: 12 calls_in: 0 - src.extractors.todo.extractTodo: - name: extractTodo - module: src.extractors.todo - line: 19 - cyclomatic_complexity: 5 - calls_out: 24 + rust-ast.src.main.visit_impl_item_fn: + name: visit_impl_item_fn + module: rust-ast.src.main + line: 275 + cyclomatic_complexity: 2 + calls_out: 10 calls_in: 0 - src.extractors.docs-schema.strings: - name: strings - module: src.extractors.docs-schema - line: 12 + examples.backend.src.request-handlers.handleEventList: + name: handleEventList + module: examples.backend.src.request-handlers + line: 50 cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 2 - src.extractors.runtime-cycle.parseCycle: - name: parseCycle - module: src.extractors.runtime-cycle - line: 68 - cyclomatic_complexity: 7 calls_out: 5 calls_in: 2 - src.extractors.markdown-paths.isNestedCheckout: - name: isNestedCheckout - module: src.extractors.markdown-paths - line: 121 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 3 - src.extractors.runtime-cycle.results: - name: results - module: src.extractors.runtime-cycle - line: 46 - cyclomatic_complexity: 3 - calls_out: 5 - calls_in: 0 - src.extractors.ast.records.moduleTopicText: - name: moduleTopicText - module: src.extractors.ast.records - line: 93 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 4 - src.cli.optionLlmMode: - name: optionLlmMode + src.cli.emitExtraction: + name: emitExtraction module: src.cli - line: 854 - cyclomatic_complexity: 6 - calls_out: 3 + line: 691 + cyclomatic_complexity: 4 + calls_out: 4 calls_in: 8 - src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage: - name: errorMessage - module: src.extractors.docs-llm - line: 267 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 3 - src.extractors.nl-llm.NlLlmRequiredError.client: + src.extractors.communication-file-helpers.appendRegistryAlignmentWarnings: + name: appendRegistryAlignmentWarnings + module: src.extractors.communication-file-helpers + line: 299 + cyclomatic_complexity: 7 + calls_out: 2 + calls_in: 1 + src.extractors.markdown-llm.MarkdownLlmRequiredError.client: name: client - module: src.extractors.nl-llm - line: 61 + module: src.extractors.markdown-llm + line: 78 cyclomatic_complexity: 2 calls_out: 2 calls_in: 0 - src.extractors.docs-record.allowedModality: - name: allowedModality - module: src.extractors.docs-record - line: 187 - cyclomatic_complexity: 1 + rust-ast.src.main.visit_item_static: + name: visit_item_static + module: rust-ast.src.main + line: 250 + cyclomatic_complexity: 1 + calls_out: 9 + calls_in: 0 + rust-ast.src.main.visit_item_const: + name: visit_item_const + module: rust-ast.src.main + line: 243 + cyclomatic_complexity: 1 + calls_out: 9 + calls_in: 0 + java.JavaAstExtract.JavaAstExtract.json: + name: json + module: java.JavaAstExtract + line: 237 + cyclomatic_complexity: 1 calls_out: 1 calls_in: 1 - src.extractors.docs-chunks.mapConcurrent: - name: mapConcurrent - module: src.extractors.docs-chunks + src.extractors.runtime-cycle.proposalAction: + name: proposalAction + module: src.extractors.runtime-cycle + line: 285 + cyclomatic_complexity: 5 + calls_out: 0 + calls_in: 1 + src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited: + name: extractNlIntentAudited + module: src.extractors.nl-llm line: 33 + cyclomatic_complexity: 10 + calls_out: 22 + calls_in: 0 + src.extractors.docs-deterministic.qualifyingStatement: + name: qualifyingStatement + module: src.extractors.docs-deterministic + line: 270 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 2 + src.extractors.runtime-cycle.results: + name: results + module: src.extractors.runtime-cycle + line: 46 cyclomatic_complexity: 3 - calls_out: 7 + calls_out: 5 calls_in: 0 - src.extractors.git.finishDiscovery: - name: finishDiscovery - module: src.extractors.git - line: 268 + src.extractors.docs-deterministic.resolver: + name: resolver + module: src.extractors.docs-deterministic + line: 63 cyclomatic_complexity: 4 - calls_out: 1 + calls_out: 6 + calls_in: 0 + src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks: + name: loadDocumentChunks + module: src.extractors.docs-llm + line: 104 + cyclomatic_complexity: 4 + calls_out: 8 calls_in: 1 - src.cli.printHelp: - name: printHelp + src.cli.parseArgs: + name: parseArgs module: src.cli - line: 890 + line: 779 + cyclomatic_complexity: 13 + calls_out: 5 + calls_in: 1 + src.extractors.docs-schema.documentRecord: + name: documentRecord + module: src.extractors.docs-schema + line: 15 cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 3 - src.extractors.runtime-cycle.extractRuntimeCycleIntent: - name: extractRuntimeCycleIntent - module: src.extractors.runtime-cycle - line: 29 - cyclomatic_complexity: 8 - calls_out: 12 + calls_out: 8 calls_in: 0 - java.JavaAstExtract.JavaAstExtract.emit: - name: emit - module: java.JavaAstExtract - line: 219 + examples.frontend.src.render.renderTable: + name: renderTable + module: examples.frontend.src.render + line: 23 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 0 + src.extractors.configuration.uniqueEntries: + name: uniqueEntries + module: src.extractors.configuration + line: 195 + cyclomatic_complexity: 3 + calls_out: 3 + calls_in: 2 + examples.src.runtime.executeContract: + name: executeContract + module: examples.src.runtime + line: 10 cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.extractors.runtime-cycle.tags: + name: tags + module: src.extractors.runtime-cycle + line: 119 + cyclomatic_complexity: 2 calls_out: 3 + calls_in: 3 + src.extractors.nl-llm-helpers.NlAttemptError.action: + name: action + module: src.extractors.nl-llm-helpers + line: 88 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.extractors.git.resolveDiscoveryPrefix: + name: resolveDiscoveryPrefix + module: src.extractors.git + line: 264 + cyclomatic_complexity: 2 + calls_out: 1 calls_in: 1 - src.extractors.configuration.line: - name: line + src.extractors.docs-record.hasTarget: + name: hasTarget + module: src.extractors.docs-record + line: 152 + cyclomatic_complexity: 4 + calls_out: 1 + calls_in: 1 + src.extractors.configuration.yamlOrAssignmentEntries: + name: yamlOrAssignmentEntries module: src.extractors.configuration - line: 149 + line: 162 + cyclomatic_complexity: 7 + calls_out: 6 + calls_in: 1 + src.cli.handleDiff: + name: handleDiff + module: src.cli + line: 468 + cyclomatic_complexity: 9 + calls_out: 12 + calls_in: 0 + src.cli.optionTaskMode: + name: optionTaskMode + module: src.cli + line: 860 + cyclomatic_complexity: 5 + calls_out: 3 + calls_in: 1 + src.cli.handleCompareWorkspace: + name: handleCompareWorkspace + module: src.cli + line: 330 + cyclomatic_complexity: 1 + calls_out: 5 + calls_in: 0 + src.extractors.docs-deterministic.extractDocumentationBaseline: + name: extractDocumentationBaseline + module: src.extractors.docs-deterministic + line: 56 cyclomatic_complexity: 4 + calls_out: 8 + calls_in: 0 + rust-ast.src.main.add: + name: add + module: rust-ast.src.main + line: 158 + cyclomatic_complexity: 1 + calls_out: 10 + calls_in: 9 + src.cli.handleEvaluateCodeChange: + name: handleEvaluateCodeChange + module: src.cli + line: 290 + cyclomatic_complexity: 6 + calls_out: 5 + calls_in: 0 + src.extractors.configuration.entry: + name: entry + module: src.extractors.configuration + line: 191 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 5 + src.extractors.todo.match: + name: match + module: src.extractors.todo + line: 87 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 8 + src.extractors.docs-chunks.workerCount: + name: workerCount + module: src.extractors.docs-chunks + line: 50 + cyclomatic_complexity: 1 calls_out: 3 calls_in: 0 examples.frontend.src.app.refresh: @@ -397,383 +551,236 @@ nodes: cyclomatic_complexity: 4 calls_out: 6 calls_in: 3 - src.extractors.nl.classified: - name: classified - module: src.extractors.nl - line: 49 - cyclomatic_complexity: 1 - calls_out: 9 - calls_in: 0 - src.extractors.runtime-cycle.MAX_PER_SECTION: - name: MAX_PER_SECTION - module: src.extractors.runtime-cycle - line: 15 - cyclomatic_complexity: 8 - calls_out: 12 - calls_in: 0 - src.cli.execFileAsync: - name: execFileAsync - module: src.cli - line: 41 + src.extractors.git.registerDiscoveredRepository: + name: registerDiscoveredRepository + module: src.extractors.git + line: 252 cyclomatic_complexity: 2 calls_out: 2 - calls_in: 2 - src.extractors.communication-file-helpers.appendRoleAndParticipantWarnings: - name: appendRoleAndParticipantWarnings - module: src.extractors.communication-file-helpers - line: 273 - cyclomatic_complexity: 3 - calls_out: 2 calls_in: 1 - src.extractors.communication-helpers.communicationSegments: - name: communicationSegments + src.extractors.communication-helpers.match: + name: match module: src.extractors.communication-helpers - line: 181 - cyclomatic_complexity: 14 + line: 125 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 5 + src.extractors.todo.checked: + name: checked + module: src.extractors.todo + line: 45 + cyclomatic_complexity: 2 calls_out: 12 calls_in: 0 - src.cli.handleDiagnose: - name: handleDiagnose + src.cli.handleWatch: + name: handleWatch module: src.cli - line: 139 - cyclomatic_complexity: 2 - calls_out: 5 - calls_in: 0 - src.extractors.docs-chunks.needles: - name: needles - module: src.extractors.docs-chunks - line: 7 + line: 346 cyclomatic_complexity: 1 - calls_out: 2 + calls_out: 11 calls_in: 0 - src.extractors.docs-record.anchorToSource: - name: anchorToSource - module: src.extractors.docs-record - line: 93 - cyclomatic_complexity: 7 - calls_out: 10 + src.extractors.ast.records.moduleRecords: + name: moduleRecords + module: src.extractors.ast.records + line: 34 + cyclomatic_complexity: 6 + calls_out: 14 + calls_in: 1 + src.extractors.runtime-cycle.proposalRecord: + name: proposalRecord + module: src.extractors.runtime-cycle + line: 250 + cyclomatic_complexity: 4 + calls_out: 3 calls_in: 2 - examples.frontend.src.app.mountPanel: - name: mountPanel - module: examples.frontend.src.app - line: 36 + rust-ast.src.main.visit_item_mod: + name: visit_item_mod + module: rust-ast.src.main + line: 206 cyclomatic_complexity: 1 - calls_out: 4 + calls_out: 11 calls_in: 0 - src.extractors.docs-deterministic.root: - name: root - module: src.extractors.docs-deterministic - line: 60 - cyclomatic_complexity: 4 + src.cli.handleExtractCommunication: + name: handleExtractCommunication + module: src.cli + line: 656 + cyclomatic_complexity: 2 calls_out: 6 calls_in: 0 - examples.backend.src.server.createBackend: - name: createBackend - module: examples.backend.src.server - line: 18 - cyclomatic_complexity: 4 - calls_out: 5 - calls_in: 1 - java.JavaAstExtract.JavaAstExtract.escape: - name: escape - module: java.JavaAstExtract - line: 240 - cyclomatic_complexity: 9 - calls_out: 6 - calls_in: 1 - src.extractors.markdown-paths.buildBasenameIndex: - name: buildBasenameIndex - module: src.extractors.markdown-paths - line: 90 - cyclomatic_complexity: 7 - calls_out: 7 + src.extractors.runtime-cycle.factsMetadata: + name: factsMetadata + module: src.extractors.runtime-cycle + line: 293 + cyclomatic_complexity: 5 + calls_out: 3 calls_in: 1 - src.extractors.nl.detectMissingFields: - name: detectMissingFields - module: src.extractors.nl - line: 95 - cyclomatic_complexity: 10 - calls_out: 5 - calls_in: 4 - src.extractors.docs-record.resolveTarget: - name: resolveTarget - module: src.extractors.docs-record - line: 128 - cyclomatic_complexity: 12 - calls_out: 7 - calls_in: 2 - src.extractors.docs-record.action: - name: action - module: src.extractors.docs-record - line: 36 - cyclomatic_complexity: 11 + src.extractors.git.extractGitIntent: + name: extractGitIntent + module: src.extractors.git + line: 40 + cyclomatic_complexity: 6 calls_out: 7 calls_in: 0 - examples.frontend.src.render.toRows: - name: toRows - module: examples.frontend.src.render - line: 19 + src.extractors.docs-schema.target: + name: target + module: src.extractors.docs-schema + line: 13 cyclomatic_complexity: 1 calls_out: 2 - calls_in: 0 - src.extractors.ast.records.boundedCapabilities: - name: boundedCapabilities - module: src.extractors.ast.records - line: 86 - cyclomatic_complexity: 1 - calls_out: 6 calls_in: 1 - src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings: - name: strings - module: src.extractors.markdown-llm-helpers - line: 370 + src.extractors.nl.object: + name: object + module: src.extractors.nl + line: 51 cyclomatic_complexity: 1 - calls_out: 5 - calls_in: 2 - src.extractors.docs-chunks.item: - name: item - module: src.extractors.docs-chunks - line: 45 + calls_out: 9 + calls_in: 0 + rust-ast.src.main.visit_item_fn: + name: visit_item_fn + module: rust-ast.src.main + line: 257 cyclomatic_complexity: 1 - calls_out: 3 + calls_out: 13 calls_in: 0 - examples.backend.src.validation.action: - name: action - module: examples.backend.src.validation - line: 23 + src.extractors.communication-helpers.heading: + name: heading + module: src.extractors.communication-helpers + line: 207 cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 0 + src.extractors.configuration.bounded: + name: bounded + module: src.extractors.configuration + line: 50 + cyclomatic_complexity: 1 calls_out: 3 calls_in: 0 - src.extractors.docs-deterministic.readParagraph: - name: readParagraph - module: src.extractors.docs-deterministic - line: 235 - cyclomatic_complexity: 11 - calls_out: 5 + src.extractors.ast.external.execFileAsync: + name: execFileAsync + module: src.extractors.ast.external + line: 8 + cyclomatic_complexity: 3 + calls_out: 0 + calls_in: 2 + src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata: + name: hasExplicitEnvelopeMetadata + module: src.extractors.communication-file-helpers + line: 116 + cyclomatic_complexity: 1 + calls_out: 2 calls_in: 1 - src.extractors.markdown-paths.basenames: - name: basenames - module: src.extractors.markdown-paths - line: 42 - cyclomatic_complexity: 11 - calls_out: 10 - calls_in: 3 - src.cli.handleDiff: - name: handleDiff - module: src.cli - line: 468 - cyclomatic_complexity: 9 - calls_out: 12 - calls_in: 0 - rust-ast.src.main.type_item: - name: type_item + rust-ast.src.main.qualified: + name: qualified module: rust-ast.src.main - line: 306 - cyclomatic_complexity: 1 - calls_out: 8 - calls_in: 4 - src.extractors.runtime-cycle.tags: - name: tags - module: src.extractors.runtime-cycle - line: 119 + line: 154 cyclomatic_complexity: 2 calls_out: 3 + calls_in: 5 + java.JavaAstExtract.JavaAstExtract.map: + name: map + module: java.JavaAstExtract + line: 182 + cyclomatic_complexity: 1 + calls_out: 0 calls_in: 3 - src.cli.parseArgs: - name: parseArgs + src.cli.handleGraphDiff: + name: handleGraphDiff module: src.cli - line: 779 - cyclomatic_complexity: 13 - calls_out: 5 - calls_in: 1 - src.extractors.ast.isExtractionResult: - name: isExtractionResult - module: src.extractors.ast - line: 162 - cyclomatic_complexity: 5 - calls_out: 3 - calls_in: 0 - src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks: - name: loadDocumentChunks - module: src.extractors.docs-llm - line: 104 - cyclomatic_complexity: 4 - calls_out: 8 + line: 494 + cyclomatic_complexity: 7 + calls_out: 11 calls_in: 1 - src.extractors.configuration.isConfigurationPath: - name: isConfigurationPath - module: src.extractors.configuration - line: 30 - cyclomatic_complexity: 10 - calls_out: 6 - calls_in: 2 - src.extractors.ast.typescript.visitTypeScriptNode: - name: visitTypeScriptNode - module: src.extractors.ast.typescript - line: 46 + src.extractors.nl-llm.NlLlmRequiredError.client: + name: client + module: src.extractors.nl-llm + line: 61 cyclomatic_complexity: 2 calls_out: 2 - calls_in: 2 - src.extractors.configuration.tomlEntries: - name: tomlEntries - module: src.extractors.configuration - line: 145 - cyclomatic_complexity: 3 - calls_out: 7 - calls_in: 1 - src.cli.handleExtractRuntime: - name: handleExtractRuntime - module: src.cli - line: 629 + calls_in: 0 + src.extractors.git.root: + name: root + module: src.extractors.git + line: 41 cyclomatic_complexity: 2 - calls_out: 3 + calls_out: 2 calls_in: 0 - src.extractors.runtime-cycle.label: - name: label + examples.backend.src.request-handlers.handleRequest: + name: handleRequest + module: examples.backend.src.request-handlers + line: 7 + cyclomatic_complexity: 9 + calls_out: 5 + calls_in: 0 + rust-ast.src.main.modifiers: + name: modifiers + module: rust-ast.src.main + line: 193 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 4 + src.extractors.runtime-cycle.violationRecord: + name: violationRecord module: src.extractors.runtime-cycle - line: 111 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 5 - src.extractors.nl-llm-helpers.NlAttemptError.resolveAction: - name: resolveAction - module: src.extractors.nl-llm-helpers - line: 168 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 1 - src.extractors.docs-deterministic.primePathMapper: - name: primePathMapper - module: src.extractors.docs-deterministic - line: 87 - cyclomatic_complexity: 5 - calls_out: 6 - calls_in: 3 - src.extractors.markdown-paths.headingScopes: - name: headingScopes - module: src.extractors.markdown-paths - line: 83 + line: 173 cyclomatic_complexity: 4 - calls_out: 6 + calls_out: 7 calls_in: 3 - src.extractors.communication-file-helpers.appendIdentityWarnings: - name: appendIdentityWarnings - module: src.extractors.communication-file-helpers - line: 282 - cyclomatic_complexity: 4 - calls_out: 2 + java.JavaAstExtract.JavaAstExtract.try: + name: try + module: java.JavaAstExtract + line: 83 + cyclomatic_complexity: 3 + calls_out: 13 calls_in: 1 - src.extractors.ast.external.result: - name: result - module: src.extractors.ast.external - line: 32 + src.extractors.todo.text: + name: text + module: src.extractors.todo + line: 48 cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 0 - examples.frontend.src.render.classifyEvent: - name: classifyEvent - module: examples.frontend.src.render - line: 13 - cyclomatic_complexity: 4 - calls_out: 0 - calls_in: 1 - src.extractors.communication-file-helpers.appendA2aAgentWarnings: - name: appendA2aAgentWarnings - module: src.extractors.communication-file-helpers - line: 314 - cyclomatic_complexity: 5 - calls_out: 4 - calls_in: 1 - src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord: - name: toIntentRecord - module: src.extractors.nl-llm-helpers - line: 86 - cyclomatic_complexity: 12 - calls_out: 11 - calls_in: 0 - src.extractors.runtime-cycle.jsonScalar: - name: jsonScalar - module: src.extractors.runtime-cycle - line: 302 - cyclomatic_complexity: 6 - calls_out: 1 - calls_in: 3 - src.cli.handleExtractNl: - name: handleExtractNl - module: src.cli - line: 601 - cyclomatic_complexity: 5 - calls_out: 6 - calls_in: 0 - src.extractors.configuration.extractConfigurationIntent: - name: extractConfigurationIntent - module: src.extractors.configuration - line: 11 - cyclomatic_complexity: 4 - calls_out: 10 + calls_out: 12 calls_in: 0 - examples.backend.src.validation.agent: - name: agent + examples.backend.src.validation.invalid: + name: invalid module: examples.backend.src.validation - line: 22 - cyclomatic_complexity: 2 - calls_out: 3 - calls_in: 0 - src.extractors.docs-deterministic.resolver: - name: resolver - module: src.extractors.docs-deterministic - line: 63 - cyclomatic_complexity: 4 - calls_out: 6 - calls_in: 0 - src.extractors.communication-helpers.inferIdentityFromPathAndFilename: - name: inferIdentityFromPathAndFilename + line: 14 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 6 + src.extractors.communication-helpers.inferGovernanceIdentityFromFilename: + name: inferGovernanceIdentityFromFilename module: src.extractors.communication-helpers + line: 141 + cyclomatic_complexity: 7 + calls_out: 3 + calls_in: 1 + src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch: + name: enrichSplitBatch + module: src.extractors.markdown-llm-helpers line: 153 - cyclomatic_complexity: 9 - calls_out: 5 + cyclomatic_complexity: 2 + calls_out: 7 calls_in: 1 - src.extractors.communication-helpers.fileParts: - name: fileParts - module: src.extractors.communication-helpers - line: 154 - cyclomatic_complexity: 5 - calls_out: 2 - calls_in: 0 - src.cli.parsed: - name: parsed - module: src.cli - line: 71 + java.JavaAstExtract.JavaAstExtract.containsIgnored: + name: containsIgnored + module: java.JavaAstExtract + line: 70 cyclomatic_complexity: 3 calls_out: 2 - calls_in: 0 - src.extractors.docs-record.fallback: - name: fallback - module: src.extractors.docs-record - line: 81 + calls_in: 1 + src.cli.emitJson: + name: emitJson + module: src.cli + line: 701 cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 0 - src.extractors.ast.typescript.scriptKind: - name: scriptKind - module: src.extractors.ast.typescript - line: 255 - cyclomatic_complexity: 4 - calls_out: 3 - calls_in: 2 - examples.backend.src.server.sendJson: - name: sendJson - module: examples.backend.src.server - line: 82 - cyclomatic_complexity: 1 calls_out: 4 - calls_in: 8 - src.cli.optionTaskMode: - name: optionTaskMode - module: src.cli - line: 860 - cyclomatic_complexity: 5 - calls_out: 3 + calls_in: 2 + src.extractors.configuration.tomlEntries: + name: tomlEntries + module: src.extractors.configuration + line: 145 + cyclomatic_complexity: 3 + calls_out: 7 calls_in: 1 src.extractors.ast.records.adapterRecords: name: adapterRecords @@ -782,461 +789,90 @@ nodes: cyclomatic_complexity: 2 calls_out: 3 calls_in: 0 - src.cli.handler: - name: handler + src.cli.view: + name: view module: src.cli - line: 594 + line: 561 cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 2 - src.extractors.configuration.files: - name: files - module: src.extractors.configuration - line: 15 - cyclomatic_complexity: 4 calls_out: 5 calls_in: 0 - src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes: - name: outcomes - module: src.extractors.markdown-llm-helpers - line: 71 - cyclomatic_complexity: 4 - calls_out: 2 + src.cli.controller: + name: controller + module: src.cli + line: 351 + cyclomatic_complexity: 1 + calls_out: 5 calls_in: 0 - src.extractors.git.count: - name: count - module: src.extractors.git - line: 42 + src.extractors.communication-helpers.raw: + name: raw + module: src.extractors.communication-helpers + line: 206 cyclomatic_complexity: 2 - calls_out: 2 + calls_out: 1 calls_in: 0 - src.cli.commandHandlers: - name: commandHandlers - module: src.cli - line: 89 + examples.frontend.src.render.headerRow: + name: headerRow + module: examples.frontend.src.render + line: 55 cyclomatic_complexity: 2 - calls_out: 6 + calls_out: 2 calls_in: 1 - src.cli.view: - name: view + examples.backend.src.server.sendJson: + name: sendJson + module: examples.backend.src.server + line: 26 + cyclomatic_complexity: 1 + calls_out: 4 + calls_in: 3 + rust-ast.src.main.visit_item_type: + name: visit_item_type + module: rust-ast.src.main + line: 238 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 0 + src.cli.handleApplySourcePatch: + name: handleApplySourcePatch module: src.cli - line: 561 - cyclomatic_complexity: 2 + line: 272 + cyclomatic_complexity: 6 calls_out: 5 calls_in: 0 - src.cli.handleExtractConfig: - name: handleExtractConfig - module: src.cli - line: 624 - cyclomatic_complexity: 2 - calls_out: 3 - calls_in: 0 - src.extractors.configuration.MAX_ENTRIES_PER_FILE: - name: MAX_ENTRIES_PER_FILE - module: src.extractors.configuration - line: 8 - cyclomatic_complexity: 4 - calls_out: 10 - calls_in: 0 - examples.frontend.src.app.state: - name: state - module: examples.frontend.src.app - line: 37 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 1 - rust-ast.src.main.excerpt: - name: excerpt - module: rust-ast.src.main - line: 186 - cyclomatic_complexity: 1 - calls_out: 7 - calls_in: 1 - src.cli.buildFileDiff: - name: buildFileDiff - module: src.cli - line: 517 - cyclomatic_complexity: 3 - calls_out: 6 - calls_in: 1 - src.extractors.configuration.uniqueEntries: - name: uniqueEntries - module: src.extractors.configuration - line: 195 - cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 2 - examples.backend.src.server.startBackend: - name: startBackend - module: examples.backend.src.server - line: 91 - cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 0 - rust-ast.src.main.visit_item_enum: - name: visit_item_enum - module: rust-ast.src.main - line: 228 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 0 - src.extractors.docs-chunks.sectionLines: - name: sectionLines - module: src.extractors.docs-chunks - line: 75 - cyclomatic_complexity: 2 - calls_out: 3 - calls_in: 0 - src.extractors.docs-schema.documentResponseContract: - name: documentResponseContract - module: src.extractors.docs-schema - line: 31 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 1 - rust-ast.src.main.qualified: - name: qualified - module: rust-ast.src.main - line: 154 - cyclomatic_complexity: 2 - calls_out: 3 - calls_in: 5 - src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget: - name: selectWithinBudget - module: src.extractors.docs-llm - line: 147 - cyclomatic_complexity: 2 - calls_out: 3 - calls_in: 1 - rust-ast.src.main.slash: - name: slash - module: rust-ast.src.main - line: 320 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 2 - src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection: - name: enrichMarkdownBatchWithCorrection - module: src.extractors.markdown-llm-helpers - line: 187 - cyclomatic_complexity: 1 - calls_out: 0 - calls_in: 1 - src.extractors.docs-record.modality: - name: modality - module: src.extractors.docs-record - line: 37 + src.extractors.markdown-paths.basenames: + name: basenames + module: src.extractors.markdown-paths + line: 42 cyclomatic_complexity: 11 - calls_out: 7 - calls_in: 0 - rust-ast.src.main.add: - name: add - module: rust-ast.src.main - line: 158 - cyclomatic_complexity: 1 calls_out: 10 - calls_in: 9 - src.cli.absolute: - name: absolute - module: src.cli - line: 712 - cyclomatic_complexity: 3 - calls_out: 1 - calls_in: 0 - src.cli.buildPipelineOptions: - name: buildPipelineOptions - module: src.cli - line: 371 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 2 - src.extractors.docs-deterministic.heading: - name: heading - module: src.extractors.docs-deterministic - line: 180 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 0 - src.extractors.communication-file-helpers.buildLocalWarnings: - name: buildLocalWarnings - module: src.extractors.communication-file-helpers - line: 254 - cyclomatic_complexity: 3 - calls_out: 5 - calls_in: 0 - src.cli.handleSummarize: - name: handleSummarize - module: src.cli - line: 146 - cyclomatic_complexity: 5 - calls_out: 8 - calls_in: 0 - src.extractors.git.mapWithConcurrency: - name: mapWithConcurrency - module: src.extractors.git - line: 306 - cyclomatic_complexity: 3 - calls_out: 4 - calls_in: 1 - src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT: - name: NL_RECORD_CONTRACT - module: src.extractors.nl-llm-helpers - line: 237 - cyclomatic_complexity: 1 - calls_out: 7 - calls_in: 0 - examples.backend.src.server.size: - name: size - module: examples.backend.src.server - line: 72 - cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 1 - src.extractors.communication-helpers.heading: - name: heading - module: src.extractors.communication-helpers - line: 207 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 0 - src.cli.resolveMainCommand: - name: resolveMainCommand - module: src.cli - line: 125 - cyclomatic_complexity: 5 - calls_out: 0 - calls_in: 1 - examples.backend.src.server.server: - name: server - module: examples.backend.src.server - line: 20 - cyclomatic_complexity: 3 - calls_out: 4 - calls_in: 0 - src.extractors.todo.task: - name: task - module: src.extractors.todo - line: 43 - cyclomatic_complexity: 2 - calls_out: 12 - calls_in: 0 - src.extractors.ast.external.execFileAsync: - name: execFileAsync - module: src.extractors.ast.external - line: 8 - cyclomatic_complexity: 3 - calls_out: 0 - calls_in: 2 - src.cli.handleExtractCommunication: - name: handleExtractCommunication - module: src.cli - line: 656 - cyclomatic_complexity: 2 - calls_out: 6 - calls_in: 0 - src.cli.context: - name: context - module: src.cli - line: 535 - cyclomatic_complexity: 2 - calls_out: 4 - calls_in: 0 - src.cli.handleRenderTodo: - name: handleRenderTodo - module: src.cli - line: 180 - cyclomatic_complexity: 8 - calls_out: 5 - calls_in: 0 - src.cli.diagnosticsPath: - name: diagnosticsPath - module: src.cli - line: 557 - cyclomatic_complexity: 2 - calls_out: 5 - calls_in: 0 - src.cli.handleReality: - name: handleReality - module: src.cli - line: 551 - cyclomatic_complexity: 9 - calls_out: 12 - calls_in: 0 - src.extractors.docs-schema.target: - name: target - module: src.extractors.docs-schema - line: 13 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 1 - src.extractors.nl-llm-helpers.NlAttemptError.allowedModality: - name: allowedModality - module: src.extractors.nl-llm-helpers - line: 223 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 2 - src.cli.optionSummaryMode: - name: optionSummaryMode - module: src.cli - line: 866 - cyclomatic_complexity: 4 - calls_out: 3 - calls_in: 1 - src.extractors.runtime-cycle.text: - name: text - module: src.extractors.runtime-cycle - line: 115 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 5 - rust-ast.src.main.visit_item_use: - name: visit_item_use - module: rust-ast.src.main - line: 216 - cyclomatic_complexity: 1 - calls_out: 8 - calls_in: 0 - src.cli.handleRenderCodeChange: - name: handleRenderCodeChange - module: src.cli - line: 241 - cyclomatic_complexity: 5 - calls_out: 5 - calls_in: 0 - src.extractors.ast.records.start: - name: start - module: src.extractors.ast.records - line: 47 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 0 - src.extractors.git.discoverGitRepositories: - name: discoverGitRepositories - module: src.extractors.git - line: 171 - cyclomatic_complexity: 4 - calls_out: 7 - calls_in: 1 - src.extractors.docs-chunks.sectionText: - name: sectionText - module: src.extractors.docs-chunks - line: 76 - cyclomatic_complexity: 2 - calls_out: 3 - calls_in: 0 - src.extractors.nl.absolute: - name: absolute - module: src.extractors.nl - line: 40 - cyclomatic_complexity: 2 - calls_out: 14 - calls_in: 0 - src.cli.resolveWatchTaskFile: - name: resolveWatchTaskFile - module: src.cli - line: 409 - cyclomatic_complexity: 3 - calls_out: 4 - calls_in: 1 - src.extractors.configuration.entries: - name: entries - module: src.extractors.configuration - line: 43 - cyclomatic_complexity: 1 - calls_out: 3 - calls_in: 2 - src.extractors.git.extractRepositoryGitIntent: - name: extractRepositoryGitIntent - module: src.extractors.git - line: 74 - cyclomatic_complexity: 11 - calls_out: 21 calls_in: 3 - src.extractors.ast.external.runExternalAstAdapter: - name: runExternalAstAdapter - module: src.extractors.ast.external - line: 23 - cyclomatic_complexity: 9 - calls_out: 6 - calls_in: 0 - src.extractors.git.readDiscoveryEntries: - name: readDiscoveryEntries - module: src.extractors.git - line: 209 - cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 2 - src.cli.handleCommunication: - name: handleCommunication - module: src.cli - line: 666 - cyclomatic_complexity: 11 - calls_out: 18 - calls_in: 0 - examples.backend.src.validation.object: - name: object - module: examples.backend.src.validation - line: 24 - cyclomatic_complexity: 2 - calls_out: 3 - calls_in: 0 - src.extractors.configuration.configurationFormat: - name: configurationFormat - module: src.extractors.configuration - line: 113 - cyclomatic_complexity: 6 - calls_out: 4 - calls_in: 1 - src.extractors.todo.raw: - name: raw - module: src.extractors.todo - line: 35 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 0 - src.cli.optionNullableString: - name: optionNullableString - module: src.cli - line: 823 - cyclomatic_complexity: 6 - calls_out: 3 - calls_in: 8 - src.extractors.docs-deterministic.parseSectionHeading: - name: parseSectionHeading - module: src.extractors.docs-deterministic - line: 173 - cyclomatic_complexity: 9 - calls_out: 4 - calls_in: 1 - src.extractors.nl.inferActor: - name: inferActor - module: src.extractors.nl - line: 87 - cyclomatic_complexity: 5 - calls_out: 2 - calls_in: 9 - src.extractors.git.registerDiscoveredRepository: - name: registerDiscoveredRepository + src.extractors.changelog.relative: + name: relative + module: src.extractors.changelog + line: 28 + cyclomatic_complexity: 7 + calls_out: 15 + calls_in: 0 + src.extractors.git.readStats: + name: readStats module: src.extractors.git - line: 252 - cyclomatic_complexity: 2 - calls_out: 2 + line: 364 + cyclomatic_complexity: 6 + calls_out: 4 calls_in: 1 - src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt: - name: sourceExcerpt - module: src.extractors.nl-llm-helpers - line: 158 - cyclomatic_complexity: 5 - calls_out: 3 - calls_in: 2 - src.extractors.configuration.entry: - name: entry - module: src.extractors.configuration - line: 191 - cyclomatic_complexity: 1 + src.extractors.runtime-cycle.jsonScalar: + name: jsonScalar + module: src.extractors.runtime-cycle + line: 302 + cyclomatic_complexity: 6 calls_out: 1 - calls_in: 5 + calls_in: 3 + src.extractors.docs-deterministic.match: + name: match + module: src.extractors.docs-deterministic + line: 160 + cyclomatic_complexity: 2 + calls_out: 0 + calls_in: 4 src.extractors.docs-record.OBJECT_PLACEHOLDERS: name: OBJECT_PLACEHOLDERS module: src.extractors.docs-record @@ -1244,41 +880,20 @@ nodes: cyclomatic_complexity: 14 calls_out: 13 calls_in: 0 - src.extractors.nl-llm-helpers.NlAttemptError.normalizedText: - name: normalizedText - module: src.extractors.nl-llm-helpers - line: 90 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 0 - src.cli.diagnostics: - name: diagnostics + src.cli.buildDiffPayload: + name: buildDiffPayload module: src.cli - line: 558 - cyclomatic_complexity: 2 - calls_out: 5 - calls_in: 0 - src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk: - name: extractChunk - module: src.extractors.docs-llm - line: 161 - cyclomatic_complexity: 12 - calls_out: 8 - calls_in: 1 - src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions: - name: assertNlExtractionOptions - module: src.extractors.nl-llm - line: 38 + line: 512 cyclomatic_complexity: 2 - calls_out: 4 + calls_out: 2 calls_in: 1 - src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent: - name: extractDocumentationIntent - module: src.extractors.docs-llm - line: 45 - cyclomatic_complexity: 3 - calls_out: 12 - calls_in: 0 + src.extractors.git.runGit: + name: runGit + module: src.extractors.git + line: 325 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 5 src.extractors.git.readCommits: name: readCommits module: src.extractors.git @@ -1286,62 +901,181 @@ nodes: cyclomatic_complexity: 1 calls_out: 7 calls_in: 1 - src.extractors.docs-record.target: - name: target - module: src.extractors.docs-record - line: 35 - cyclomatic_complexity: 11 - calls_out: 7 - calls_in: 0 - src.cli.main: - name: main + src.cli.context: + name: context module: src.cli - line: 61 - cyclomatic_complexity: 9 - calls_out: 12 - calls_in: 1 - src.extractors.docs-chunks.workerCount: - name: workerCount - module: src.extractors.docs-chunks - line: 50 - cyclomatic_complexity: 1 + line: 535 + cyclomatic_complexity: 2 + calls_out: 4 + calls_in: 0 + src.extractors.markdown-paths.headingScopes: + name: headingScopes + module: src.extractors.markdown-paths + line: 83 + cyclomatic_complexity: 4 + calls_out: 6 + calls_in: 3 + src.extractors.ast.isExtractionResult: + name: isExtractionResult + module: src.extractors.ast + line: 162 + cyclomatic_complexity: 5 calls_out: 3 calls_in: 0 - src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient: - name: requireConfiguredClient - module: src.extractors.docs-llm - line: 85 - cyclomatic_complexity: 3 + src.cli.handleRenderTodo: + name: handleRenderTodo + module: src.cli + line: 180 + cyclomatic_complexity: 8 + calls_out: 5 + calls_in: 0 + src.extractors.markdown-paths.index: + name: index + module: src.extractors.markdown-paths + line: 91 + cyclomatic_complexity: 6 calls_out: 4 - calls_in: 1 - src.extractors.communication-helpers.unquote: - name: unquote - module: src.extractors.communication-helpers - line: 318 - cyclomatic_complexity: 1 - calls_out: 2 + calls_in: 0 + examples.backend.src.request-handlers.handleEventPublish: + name: handleEventPublish + module: examples.backend.src.request-handlers + line: 29 + cyclomatic_complexity: 4 + calls_out: 6 calls_in: 2 - src.cli.handleExtractGit: - name: handleExtractGit + src.cli.handleExtractDocs: + name: handleExtractDocs module: src.cli - line: 614 + line: 646 + cyclomatic_complexity: 1 + calls_out: 4 + calls_in: 0 + src.extractors.communication-file-helpers.envelope: + name: envelope + module: src.extractors.communication-file-helpers + line: 51 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 0 + src.cli.printHelp: + name: printHelp + module: src.cli + line: 890 cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 3 + src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT: + name: NL_RECORD_CONTRACT + module: src.extractors.nl-llm-helpers + line: 242 + cyclomatic_complexity: 1 + calls_out: 7 + calls_in: 0 + src.extractors.todo.block: + name: block + module: src.extractors.todo + line: 46 + cyclomatic_complexity: 2 + calls_out: 12 + calls_in: 0 + src.cli.optionNullableString: + name: optionNullableString + module: src.cli + line: 823 + cyclomatic_complexity: 6 calls_out: 3 + calls_in: 8 + src.extractors.nl-llm-helpers.NlAttemptError.resolveAction: + name: resolveAction + module: src.extractors.nl-llm-helpers + line: 167 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 1 + src.extractors.configuration.lines: + name: lines + module: src.extractors.configuration + line: 134 + cyclomatic_complexity: 3 + calls_out: 4 calls_in: 0 - src.extractors.runtime-cycle.boundedArray: - name: boundedArray - module: src.extractors.runtime-cycle + src.extractors.docs-chunks.markdownSections: + name: markdownSections + module: src.extractors.docs-chunks line: 94 - cyclomatic_complexity: 8 - calls_out: 4 + cyclomatic_complexity: 4 + calls_out: 2 + calls_in: 1 + src.extractors.markdown-paths.readBasenameDirectoryEntries: + name: readBasenameDirectoryEntries + module: src.extractors.markdown-paths + line: 113 + cyclomatic_complexity: 2 + calls_out: 1 calls_in: 3 - src.extractors.docs-deterministic.handleDocumentationLine: - name: handleDocumentationLine - module: src.extractors.docs-deterministic + src.extractors.git.extractRepositoryGitIntent: + name: extractRepositoryGitIntent + module: src.extractors.git + line: 74 + cyclomatic_complexity: 11 + calls_out: 21 + calls_in: 3 + src.extractors.todo.raw: + name: raw + module: src.extractors.todo + line: 35 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.extractors.runtime-cycle.text: + name: text + module: src.extractors.runtime-cycle + line: 115 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 5 + src.extractors.communication-helpers.basename: + name: basename + module: src.extractors.communication-helpers + line: 168 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 2 + src.extractors.git.filterDiscoveryChildren: + name: filterDiscoveryChildren + module: src.extractors.git + line: 221 + cyclomatic_complexity: 5 + calls_out: 6 + calls_in: 2 + src.extractors.configuration.parsed: + name: parsed + module: src.extractors.configuration line: 132 - cyclomatic_complexity: 5 + cyclomatic_complexity: 3 calls_out: 4 + calls_in: 0 + src.extractors.docs-schema.documentResponseSchema: + name: documentResponseSchema + module: src.extractors.docs-schema + line: 41 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.cli.optionPipelineTaskMode: + name: optionPipelineTaskMode + module: src.cli + line: 876 + cyclomatic_complexity: 6 + calls_out: 3 calls_in: 1 + src.extractors.configuration.isConfigurationPath: + name: isConfigurationPath + module: src.extractors.configuration + line: 30 + cyclomatic_complexity: 10 + calls_out: 6 + calls_in: 2 src.extractors.docs-record.resolveAction: name: resolveAction module: src.extractors.docs-record @@ -1349,363 +1083,321 @@ nodes: cyclomatic_complexity: 5 calls_out: 4 calls_in: 2 - src.extractors.ast.typescript.recordModuleFact: - name: recordModuleFact - module: src.extractors.ast.typescript - line: 229 - cyclomatic_complexity: 1 + src.extractors.nl-llm-helpers.NlAttemptError.resolveModality: + name: resolveModality + module: src.extractors.nl-llm-helpers + line: 171 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 2 + src.cli.handleReality: + name: handleReality + module: src.cli + line: 551 + cyclomatic_complexity: 9 + calls_out: 12 + calls_in: 0 + examples.backend.src.request-handlers.parseOffset: + name: parseOffset + module: examples.backend.src.request-handlers + line: 59 + cyclomatic_complexity: 2 calls_out: 2 calls_in: 1 - src.extractors.markdown-paths.index: - name: index - module: src.extractors.markdown-paths - line: 91 - cyclomatic_complexity: 6 - calls_out: 4 - calls_in: 0 - src.extractors.git.isGitWorkTree: - name: isGitWorkTree + src.extractors.git.readChangedFiles: + name: readChangedFiles module: src.extractors.git - line: 287 + line: 352 + cyclomatic_complexity: 6 + calls_out: 5 + calls_in: 1 + src.cli.optionString: + name: optionString + module: src.cli + line: 818 cyclomatic_complexity: 2 - calls_out: 2 - calls_in: 4 - src.extractors.communication-helpers.nestedRoleIndex: - name: nestedRoleIndex - module: src.extractors.communication-helpers - line: 155 - cyclomatic_complexity: 5 - calls_out: 2 - calls_in: 0 - src.extractors.changelog.body: - name: body - module: src.extractors.changelog - line: 27 - cyclomatic_complexity: 7 - calls_out: 15 - calls_in: 0 - src.extractors.changelog.relative: - name: relative - module: src.extractors.changelog - line: 28 - cyclomatic_complexity: 7 - calls_out: 15 - calls_in: 0 - src.extractors.nl-llm-helpers.NlAttemptError.lines: - name: lines - module: src.extractors.nl-llm-helpers - line: 87 - cyclomatic_complexity: 1 calls_out: 1 + calls_in: 33 + src.cli.handleProposeTodo: + name: handleProposeTodo + module: src.cli + line: 163 + cyclomatic_complexity: 5 + calls_out: 6 calls_in: 0 - src.extractors.configuration.heading: - name: heading - module: src.extractors.configuration - line: 150 - cyclomatic_complexity: 4 - calls_out: 3 + src.extractors.docs-record.modality: + name: modality + module: src.extractors.docs-record + line: 37 + cyclomatic_complexity: 11 + calls_out: 7 calls_in: 0 - examples.backend.src.validation.ALLOWED_ACTIONS: - name: ALLOWED_ACTIONS + examples.backend.src.validation.record: + name: record module: examples.backend.src.validation - line: 11 - cyclomatic_complexity: 10 - calls_out: 5 - calls_in: 0 - src.extractors.todo.text: - name: text - module: src.extractors.todo - line: 48 + line: 21 cyclomatic_complexity: 2 - calls_out: 12 + calls_out: 3 calls_in: 0 - src.cli.optionNumber: - name: optionNumber - module: src.cli - line: 837 + src.extractors.git.processDiscoveryDirectory: + name: processDiscoveryDirectory + module: src.extractors.git + line: 228 cyclomatic_complexity: 5 calls_out: 5 - calls_in: 20 - src.extractors.docs-record.clampLine: - name: clampLine - module: src.extractors.docs-record - line: 179 - cyclomatic_complexity: 1 + calls_in: 2 + src.extractors.docs-deterministic.parseParagraphStatement: + name: parseParagraphStatement + module: src.extractors.docs-deterministic + line: 212 + cyclomatic_complexity: 4 calls_out: 3 calls_in: 1 - src.extractors.nl.confidence: - name: confidence - module: src.extractors.nl - line: 53 + examples.backend.src.request-handlers.event: + name: event + module: examples.backend.src.request-handlers + line: 46 cyclomatic_complexity: 1 - calls_out: 9 - calls_in: 0 - src.extractors.markdown-paths.scanDirectoryForBasenames: - name: scanDirectoryForBasenames - module: src.extractors.markdown-paths - line: 125 - cyclomatic_complexity: 8 - calls_out: 8 - calls_in: 3 - src.extractors.configuration.parsed: - name: parsed - module: src.extractors.configuration - line: 132 - cyclomatic_complexity: 3 - calls_out: 4 + calls_out: 1 calls_in: 0 - src.extractors.todo.checked: - name: checked - module: src.extractors.todo - line: 45 + src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget: + name: selectWithinBudget + module: src.extractors.docs-llm + line: 147 cyclomatic_complexity: 2 - calls_out: 12 + calls_out: 3 + calls_in: 1 + src.extractors.communication-helpers.item: + name: item + module: src.extractors.communication-helpers + line: 197 + cyclomatic_complexity: 3 + calls_out: 3 calls_in: 0 - src.extractors.docs-deterministic.statementRecord: - name: statementRecord + src.extractors.docs-deterministic.parseFenceBlock: + name: parseFenceBlock module: src.extractors.docs-deterministic - line: 288 - cyclomatic_complexity: 1 - calls_out: 0 + line: 154 + cyclomatic_complexity: 7 + calls_out: 5 calls_in: 1 - src.extractors.markdown-paths.readBasenameDirectoryEntries: - name: readBasenameDirectoryEntries - module: src.extractors.markdown-paths - line: 113 - cyclomatic_complexity: 2 - calls_out: 1 + src.extractors.configuration.fileAggregate: + name: fileAggregate + module: src.extractors.configuration + line: 82 + cyclomatic_complexity: 3 + calls_out: 10 calls_in: 3 - src.extractors.nl-llm-helpers.NlAttemptError.action: - name: action + src.extractors.nl-llm-helpers.NlAttemptError.clampLine: + name: clampLine module: src.extractors.nl-llm-helpers - line: 89 + line: 218 + cyclomatic_complexity: 1 + calls_out: 3 + calls_in: 1 + src.extractors.markdown-paths.createBasenameIndexState: + name: createBasenameIndexState + module: src.extractors.markdown-paths + line: 105 cyclomatic_complexity: 1 calls_out: 1 + calls_in: 1 + src.extractors.nl.sourcePath: + name: sourcePath + module: src.extractors.nl + line: 42 + cyclomatic_complexity: 2 + calls_out: 14 calls_in: 0 - src.cli.handleExtractAst: - name: handleExtractAst + src.cli.resolveMainCommand: + name: resolveMainCommand module: src.cli - line: 619 - cyclomatic_complexity: 2 + line: 125 + cyclomatic_complexity: 5 + calls_out: 0 + calls_in: 1 + src.extractors.git.readDiscoveryEntries: + name: readDiscoveryEntries + module: src.extractors.git + line: 209 + cyclomatic_complexity: 3 calls_out: 3 + calls_in: 2 + rust-ast.src.main.visit_item_enum: + name: visit_item_enum + module: rust-ast.src.main + line: 228 + cyclomatic_complexity: 1 + calls_out: 2 calls_in: 0 - examples.backend.src.server.store: - name: store - module: examples.backend.src.server - line: 19 + src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText: + name: nonEmptyText + module: src.extractors.nl-llm-helpers + line: 188 + cyclomatic_complexity: 3 + calls_out: 1 + calls_in: 3 + src.extractors.git.mapWithConcurrency: + name: mapWithConcurrency + module: src.extractors.git + line: 306 cyclomatic_complexity: 3 calls_out: 4 + calls_in: 1 + src.extractors.docs-chunks.prioritizeDocumentChunks: + name: prioritizeDocumentChunks + module: src.extractors.docs-chunks + line: 3 + cyclomatic_complexity: 3 + calls_out: 6 calls_in: 0 - src.cli.pipeline: - name: pipeline - module: src.cli - line: 349 + src.extractors.nl.assertNlExtractionOptions: + name: assertNlExtractionOptions + module: src.extractors.nl + line: 25 + cyclomatic_complexity: 9 + calls_out: 2 + calls_in: 1 + src.extractors.nl-llm-helpers.NlAttemptError.NL_ACTION_SET: + name: NL_ACTION_SET + module: src.extractors.nl-llm-helpers + line: 234 cyclomatic_complexity: 1 - calls_out: 5 + calls_out: 7 calls_in: 0 - src.extractors.docs-deterministic.qualifyingStatement: - name: qualifyingStatement - module: src.extractors.docs-deterministic - line: 270 + src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow: + name: fallbackOrThrow + module: src.extractors.nl-llm + line: 116 cyclomatic_complexity: 1 calls_out: 0 calls_in: 2 - src.cli.buildDiffPayload: - name: buildDiffPayload - module: src.cli - line: 512 + examples.backend.src.request-handlers.parseLimit: + name: parseLimit + module: examples.backend.src.request-handlers + line: 64 cyclomatic_complexity: 2 calls_out: 2 calls_in: 1 - src.cli.handleExtractDocs: - name: handleExtractDocs - module: src.cli - line: 646 - cyclomatic_complexity: 1 - calls_out: 4 - calls_in: 0 - src.cli.handleLink: - name: handleLink - module: src.cli - line: 131 - cyclomatic_complexity: 2 - calls_out: 9 - calls_in: 0 - src.extractors.configuration.bounded: - name: bounded + src.extractors.configuration.pair: + name: pair module: src.extractors.configuration + line: 156 + cyclomatic_complexity: 3 + calls_out: 2 + calls_in: 0 + src.extractors.nl.action: + name: action + module: src.extractors.nl line: 50 cyclomatic_complexity: 1 - calls_out: 3 + calls_out: 9 calls_in: 0 - src.cli.handleExtractMarkdown: - name: handleExtractMarkdown - module: src.cli - line: 636 - cyclomatic_complexity: 1 - calls_out: 5 + src.extractors.docs-deterministic.action: + name: action + module: src.extractors.docs-deterministic + line: 296 + cyclomatic_complexity: 3 + calls_out: 6 calls_in: 0 - examples.frontend.src.render.headerRow: - name: headerRow - module: examples.frontend.src.render - line: 55 - cyclomatic_complexity: 2 + rust-ast.src.main.slash: + name: slash + module: rust-ast.src.main + line: 320 + cyclomatic_complexity: 1 calls_out: 2 - calls_in: 1 - src.extractors.todo.block: - name: block - module: src.extractors.todo - line: 46 - cyclomatic_complexity: 2 + calls_in: 2 + src.extractors.runtime-cycle.extractRuntimeCycleIntent: + name: extractRuntimeCycleIntent + module: src.extractors.runtime-cycle + line: 29 + cyclomatic_complexity: 8 calls_out: 12 calls_in: 0 - src.cli.handleExtract: - name: handleExtract - module: src.cli - line: 577 - cyclomatic_complexity: 4 - calls_out: 5 - calls_in: 0 - src.extractors.configuration.relative: - name: relative + src.extractors.configuration.jsonEntries: + name: jsonEntries module: src.extractors.configuration - line: 19 - cyclomatic_complexity: 3 - calls_out: 4 - calls_in: 0 - java.JavaAstExtract.JavaAstExtract.json: - name: json - module: java.JavaAstExtract - line: 237 - cyclomatic_complexity: 1 - calls_out: 1 + line: 131 + cyclomatic_complexity: 7 + calls_out: 7 calls_in: 1 - src.extractors.communication-file-helpers.inferred: - name: inferred - module: src.extractors.communication-file-helpers - line: 52 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 0 - src.cli.root: - name: root - module: src.cli - line: 667 - cyclomatic_complexity: 2 - calls_out: 4 - calls_in: 0 - examples.frontend.src.render.renderTable: - name: renderTable - module: examples.frontend.src.render - line: 23 - cyclomatic_complexity: 3 - calls_out: 4 + src.extractors.nl-llm-helpers.NlAttemptError.statementText: + name: statementText + module: src.extractors.nl-llm-helpers + line: 91 + cyclomatic_complexity: 10 + calls_out: 6 calls_in: 0 - src.cli.optionBoolean: - name: optionBoolean - module: src.cli - line: 830 + src.extractors.runtime-cycle.watched: + name: watched + module: src.extractors.runtime-cycle + line: 129 cyclomatic_complexity: 3 calls_out: 3 - calls_in: 17 - src.extractors.configuration.fileAggregate: - name: fileAggregate - module: src.extractors.configuration - line: 82 - cyclomatic_complexity: 3 - calls_out: 10 - calls_in: 3 - src.cli.handleCompareWorkspace: - name: handleCompareWorkspace - module: src.cli - line: 330 - cyclomatic_complexity: 1 - calls_out: 5 - calls_in: 0 - src.extractors.docs-chunks.markdownSections: - name: markdownSections - module: src.extractors.docs-chunks - line: 94 - cyclomatic_complexity: 4 - calls_out: 2 - calls_in: 1 - src.extractors.docs-record.statementText: - name: statementText + calls_in: 2 + src.extractors.docs-record.fallback: + name: fallback module: src.extractors.docs-record - line: 32 - cyclomatic_complexity: 1 + line: 81 + cyclomatic_complexity: 2 calls_out: 1 calls_in: 0 - src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment: - name: enrichment - module: src.extractors.markdown-llm-helpers - line: 371 - cyclomatic_complexity: 1 - calls_out: 6 - calls_in: 0 - src.extractors.communication-helpers.inferIdentity: - name: inferIdentity + src.extractors.communication-helpers.fileParts: + name: fileParts module: src.extractors.communication-helpers - line: 132 - cyclomatic_complexity: 2 - calls_out: 5 + line: 154 + cyclomatic_complexity: 5 + calls_out: 2 calls_in: 0 - src.extractors.todo.match: - name: match - module: src.extractors.todo - line: 87 - cyclomatic_complexity: 1 - calls_out: 0 - calls_in: 8 - src.cli.svg: - name: svg - module: src.cli - line: 564 - cyclomatic_complexity: 2 - calls_out: 5 + src.extractors.changelog.extractChangelog: + name: extractChangelog + module: src.extractors.changelog + line: 18 + cyclomatic_complexity: 10 + calls_out: 19 calls_in: 0 - src.extractors.docs-record.keywordOverlap: - name: keywordOverlap - module: src.extractors.docs-record - line: 119 - cyclomatic_complexity: 3 - calls_out: 3 + src.extractors.nl-llm-helpers.NlAttemptError.allowedAction: + name: allowedAction + module: src.extractors.nl-llm-helpers + line: 222 + cyclomatic_complexity: 1 + calls_out: 1 calls_in: 1 - src.cli.handleApplyTodo: - name: handleApplyTodo - module: src.cli - line: 201 - cyclomatic_complexity: 8 - calls_out: 5 - calls_in: 0 - src.extractors.docs-chunks.chunkMarkdown: - name: chunkMarkdown + src.extractors.docs-chunks.needles: + name: needles module: src.extractors.docs-chunks - line: 55 - cyclomatic_complexity: 8 - calls_out: 9 - calls_in: 0 - examples.backend.src.validation.invalid: - name: invalid - module: examples.backend.src.validation - line: 14 + line: 7 cyclomatic_complexity: 1 - calls_out: 0 - calls_in: 6 - src.cli.controller: - name: controller + calls_out: 2 + calls_in: 0 + src.cli.handleExtractConfig: + name: handleExtractConfig module: src.cli - line: 351 - cyclomatic_complexity: 1 - calls_out: 5 + line: 624 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 0 - src.extractors.runtime-cycle.factsMetadata: - name: factsMetadata - module: src.extractors.runtime-cycle - line: 293 - cyclomatic_complexity: 5 + src.extractors.docs-chunks.chunkPriority: + name: chunkPriority + module: src.extractors.docs-chunks + line: 23 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 2 + src.extractors.configuration.heading: + name: heading + module: src.extractors.configuration + line: 150 + cyclomatic_complexity: 4 calls_out: 3 - calls_in: 1 + calls_in: 0 + src.extractors.git.count: + name: count + module: src.extractors.git + line: 42 + cyclomatic_complexity: 2 + calls_out: 2 + calls_in: 0 src.extractors.nl.extractNlIntent: name: extractNlIntent module: src.extractors.nl @@ -1713,125 +1405,230 @@ nodes: cyclomatic_complexity: 5 calls_out: 20 calls_in: 0 - src.extractors.docs-record.allowedAction: - name: allowedAction - module: src.extractors.docs-record - line: 183 + src.extractors.communication-file-helpers.appendIdentityWarnings: + name: appendIdentityWarnings + module: src.extractors.communication-file-helpers + line: 282 + cyclomatic_complexity: 4 + calls_out: 2 + calls_in: 1 + examples.frontend.src.app.mountPanel: + name: mountPanel + module: examples.frontend.src.app + line: 36 cyclomatic_complexity: 1 - calls_out: 1 + calls_out: 4 + calls_in: 0 + src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder: + name: isPlaceholder + module: src.extractors.nl-llm-helpers + line: 192 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 1 - src.extractors.todo.resolvedPaths: - name: resolvedPaths - module: src.extractors.todo - line: 51 + src.cli.buildCommonPipelineOptions: + name: buildCommonPipelineOptions + module: src.cli + line: 384 + cyclomatic_complexity: 3 + calls_out: 8 + calls_in: 1 + examples.backend.src.request-handlers.validation: + name: validation + module: examples.backend.src.request-handlers + line: 39 cyclomatic_complexity: 2 - calls_out: 12 + calls_out: 2 calls_in: 0 - examples.backend.src.validation.record: - name: record - module: examples.backend.src.validation - line: 21 + src.cli.diff: + name: diff + module: src.cli + line: 504 cyclomatic_complexity: 2 - calls_out: 3 + calls_out: 4 calls_in: 0 - src.extractors.ast.typescript.extractTypeScriptFile: - name: extractTypeScriptFile - module: src.extractors.ast.typescript - line: 11 + src.extractors.nl-llm-helpers.NlAttemptError.NL_MODALITY_SET: + name: NL_MODALITY_SET + module: src.extractors.nl-llm-helpers + line: 236 cyclomatic_complexity: 1 calls_out: 7 calls_in: 0 - rust-ast.src.main.visit_expr_method_call: - name: visit_expr_method_call - module: rust-ast.src.main - line: 296 - cyclomatic_complexity: 1 - calls_out: 7 + src.cli.optionNumber: + name: optionNumber + module: src.cli + line: 837 + cyclomatic_complexity: 5 + calls_out: 5 + calls_in: 20 + src.cli.handler: + name: handler + module: src.cli + line: 594 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 2 + src.cli.resolvePipelineRoot: + name: resolvePipelineRoot + module: src.cli + line: 367 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 3 + src.extractors.communication-helpers.nestedParticipant: + name: nestedParticipant + module: src.extractors.communication-helpers + line: 157 + cyclomatic_complexity: 5 + calls_out: 2 calls_in: 0 - rust-ast.src.main.collect_files: - name: collect_files - module: rust-ast.src.main - line: 101 - cyclomatic_complexity: 9 - calls_out: 20 + src.extractors.docs-deterministic.codeBlockRecord: + name: codeBlockRecord + module: src.extractors.docs-deterministic + line: 325 + cyclomatic_complexity: 2 + calls_out: 2 + calls_in: 2 + src.extractors.nl-llm-helpers.NlAttemptError.resolveObject: + name: resolveObject + module: src.extractors.nl-llm-helpers + line: 197 + cyclomatic_complexity: 6 + calls_out: 3 + calls_in: 3 + src.extractors.docs-deterministic.handleDocumentationLine: + name: handleDocumentationLine + module: src.extractors.docs-deterministic + line: 132 + cyclomatic_complexity: 5 + calls_out: 4 calls_in: 1 - src.extractors.docs-chunks.flush: - name: flush + src.extractors.docs-chunks.sectionLines: + name: sectionLines module: src.extractors.docs-chunks - line: 63 + line: 75 cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 0 + java.JavaAstExtract.JavaAstExtract.escape: + name: escape + module: java.JavaAstExtract + line: 240 + cyclomatic_complexity: 9 + calls_out: 6 + calls_in: 1 + src.extractors.configuration.relative: + name: relative + module: src.extractors.configuration + line: 19 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 0 + src.extractors.communication-helpers.nestedRole: + name: nestedRole + module: src.extractors.communication-helpers + line: 156 + cyclomatic_complexity: 5 + calls_out: 2 + calls_in: 0 + src.extractors.docs-chunks.takeLineBatch: + name: takeLineBatch + module: src.extractors.docs-chunks + line: 128 + cyclomatic_complexity: 8 + calls_out: 2 + calls_in: 1 + src.extractors.configuration.match: + name: match + module: src.extractors.configuration + line: 175 + cyclomatic_complexity: 5 calls_out: 2 calls_in: 3 - rust-ast.src.main.modifiers: - name: modifiers - module: rust-ast.src.main - line: 193 - cyclomatic_complexity: 3 + java.JavaAstExtract.JavaAstExtract.add: + name: add + module: java.JavaAstExtract + line: 181 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 1 + src.cli.root: + name: root + module: src.cli + line: 667 + cyclomatic_complexity: 2 calls_out: 4 - calls_in: 4 - src.extractors.runtime-cycle.watched: - name: watched - module: src.extractors.runtime-cycle - line: 129 - cyclomatic_complexity: 3 - calls_out: 3 - calls_in: 2 - src.extractors.changelog.changelogAction: - name: changelogAction + calls_in: 0 + src.extractors.changelog.lines: + name: lines module: src.extractors.changelog - line: 87 - cyclomatic_complexity: 11 + line: 30 + cyclomatic_complexity: 7 + calls_out: 15 + calls_in: 0 + src.cli.handleIntake: + name: handleIntake + module: src.cli + line: 706 + cyclomatic_complexity: 13 + calls_out: 13 + calls_in: 0 + examples.backend.src.server.startBackend: + name: startBackend + module: examples.backend.src.server + line: 35 + cyclomatic_complexity: 3 calls_out: 3 - calls_in: 4 - java.JavaAstExtract.JavaAstExtract.try: - name: try - module: java.JavaAstExtract - line: 83 + calls_in: 0 + src.cli.handleProposeSourcePatch: + name: handleProposeSourcePatch + module: src.cli + line: 257 + cyclomatic_complexity: 6 + calls_out: 6 + calls_in: 0 + src.extractors.docs-record.isPlaceholder: + name: isPlaceholder + module: src.extractors.docs-record + line: 75 cyclomatic_complexity: 3 - calls_out: 13 - calls_in: 1 - src.extractors.docs-record.toDocumentIntentRecord: - name: toDocumentIntentRecord + calls_out: 3 + calls_in: 2 + src.extractors.docs-record.allowedLifecycle: + name: allowedLifecycle module: src.extractors.docs-record - line: 25 - cyclomatic_complexity: 14 - calls_out: 13 - calls_in: 0 - examples.backend.src.server.handleRequest: - name: handleRequest - module: examples.backend.src.server - line: 28 - cyclomatic_complexity: 16 - calls_out: 12 + line: 191 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 5 + src.extractors.nl-llm-helpers.NlAttemptError.nlStrings: + name: nlStrings + module: src.extractors.nl-llm-helpers + line: 241 + cyclomatic_complexity: 1 + calls_out: 6 calls_in: 3 - src.extractors.docs-record.resolveModality: - name: resolveModality - module: src.extractors.docs-record - line: 164 + src.cli.handleProposeCodeChange: + name: handleProposeCodeChange + module: src.cli + line: 222 cyclomatic_complexity: 5 - calls_out: 4 - calls_in: 2 - src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords: - name: enrichMarkdownRecords - module: src.extractors.markdown-llm-helpers - line: 57 - cyclomatic_complexity: 13 - calls_out: 9 + calls_out: 5 calls_in: 0 - rust-ast.src.main.visit_item_const: - name: visit_item_const + rust-ast.src.main.visit_expr_call: + name: visit_expr_call module: rust-ast.src.main - line: 243 + line: 288 cyclomatic_complexity: 1 calls_out: 9 calls_in: 0 - src.extractors.runtime-cycle.proposalAction: - name: proposalAction - module: src.extractors.runtime-cycle - line: 285 - cyclomatic_complexity: 5 - calls_out: 0 - calls_in: 1 + rust-ast.src.main.visit_item_trait: + name: visit_item_trait + module: rust-ast.src.main + line: 233 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 0 src.extractors.markdown-paths.isRepositoryPath: name: isRepositoryPath module: src.extractors.markdown-paths @@ -1839,167 +1636,160 @@ nodes: cyclomatic_complexity: 5 calls_out: 3 calls_in: 4 - rust-ast.src.main.visit_impl_item_fn: - name: visit_impl_item_fn - module: rust-ast.src.main - line: 275 - cyclomatic_complexity: 2 - calls_out: 10 + src.extractors.git.result: + name: result + module: src.extractors.git + line: 326 + cyclomatic_complexity: 1 + calls_out: 1 calls_in: 0 - src.cli.initProject: - name: initProject - module: src.cli - line: 736 - cyclomatic_complexity: 6 - calls_out: 9 - calls_in: 1 - src.extractors.communication-helpers.basename: - name: basename + src.extractors.todo.lines: + name: lines + module: src.extractors.todo + line: 32 + cyclomatic_complexity: 5 + calls_out: 20 + calls_in: 0 + src.extractors.communication-helpers.normalize: + name: normalize module: src.extractors.communication-helpers - line: 168 + line: 282 cyclomatic_complexity: 1 calls_out: 0 - calls_in: 2 - src.extractors.docs-deterministic.parseParagraphStatement: - name: parseParagraphStatement - module: src.extractors.docs-deterministic - line: 212 - cyclomatic_complexity: 4 - calls_out: 3 calls_in: 1 - src.extractors.configuration.pair: - name: pair - module: src.extractors.configuration - line: 156 - cyclomatic_complexity: 3 - calls_out: 2 - calls_in: 0 - src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText: - name: nonEmptyText - module: src.extractors.nl-llm-helpers - line: 185 - cyclomatic_complexity: 3 - calls_out: 1 - calls_in: 3 - src.extractors.configuration.lines: - name: lines - module: src.extractors.configuration - line: 134 + examples.backend.src.server.store: + name: store + module: examples.backend.src.server + line: 17 cyclomatic_complexity: 3 calls_out: 4 calls_in: 0 - src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage: - name: emptyCoverage - module: src.extractors.markdown-llm-helpers - line: 179 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 1 - src.extractors.git.runGit: - name: runGit + src.extractors.git.execFileAsync: + name: execFileAsync module: src.extractors.git - line: 325 + line: 12 cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 5 - src.cli.handleWatch: - name: handleWatch + calls_out: 0 + calls_in: 2 + src.cli.optionNlMode: + name: optionNlMode module: src.cli - line: 346 + line: 850 cyclomatic_complexity: 1 - calls_out: 11 + calls_out: 1 + calls_in: 2 + src.extractors.configuration.extractConfigurationIntent: + name: extractConfigurationIntent + module: src.extractors.configuration + line: 11 + cyclomatic_complexity: 4 + calls_out: 10 calls_in: 0 - src.extractors.markdown-paths.headingDirectories: - name: headingDirectories + src.extractors.docs-deterministic.statementRecord: + name: statementRecord + module: src.extractors.docs-deterministic + line: 288 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 1 + src.extractors.docs-deterministic.root: + name: root + module: src.extractors.docs-deterministic + line: 60 + cyclomatic_complexity: 4 + calls_out: 6 + calls_in: 0 + src.extractors.markdown-paths.repositoryRoot: + name: repositoryRoot module: src.extractors.markdown-paths - line: 46 + line: 40 cyclomatic_complexity: 11 - calls_out: 9 + calls_out: 11 calls_in: 0 - src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder: - name: isPlaceholder - module: src.extractors.nl-llm-helpers - line: 189 + src.extractors.nl.detectMissingFields: + name: detectMissingFields + module: src.extractors.nl + line: 95 + cyclomatic_complexity: 10 + calls_out: 5 + calls_in: 4 + src.cli.commandHandlers: + name: commandHandlers + module: src.cli + line: 89 cyclomatic_complexity: 2 - calls_out: 3 + calls_out: 6 calls_in: 1 - src.cli.handleEvaluateCodeChange: - name: handleEvaluateCodeChange - module: src.cli - line: 290 - cyclomatic_complexity: 6 - calls_out: 5 - calls_in: 0 - src.extractors.markdown-paths.createBasenameIndexState: - name: createBasenameIndexState - module: src.extractors.markdown-paths - line: 105 + rust-ast.src.main.excerpt: + name: excerpt + module: rust-ast.src.main + line: 186 cyclomatic_complexity: 1 - calls_out: 1 + calls_out: 7 calls_in: 1 - src.extractors.markdown-llm.MarkdownLlmRequiredError.client: - name: client - module: src.extractors.markdown-llm - line: 78 + src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord: + name: toIntentRecord + module: src.extractors.nl-llm-helpers + line: 85 + cyclomatic_complexity: 11 + calls_out: 11 + calls_in: 0 + src.extractors.ast.external.result: + name: result + module: src.extractors.ast.external + line: 32 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 0 + src.cli.execFileAsync: + name: execFileAsync + module: src.cli + line: 41 cyclomatic_complexity: 2 calls_out: 2 + calls_in: 2 + src.extractors.todo.extractTodo: + name: extractTodo + module: src.extractors.todo + line: 19 + cyclomatic_complexity: 5 + calls_out: 24 calls_in: 0 - src.extractors.nl.object: - name: object - module: src.extractors.nl - line: 51 - cyclomatic_complexity: 1 - calls_out: 9 + src.extractors.communication-helpers.parseEnvelope: + name: parseEnvelope + module: src.extractors.communication-helpers + line: 118 + cyclomatic_complexity: 5 + calls_out: 8 calls_in: 0 - src.extractors.todo.relative: - name: relative - module: src.extractors.todo - line: 29 + src.extractors.docs-record.resolveModality: + name: resolveModality + module: src.extractors.docs-record + line: 164 cyclomatic_complexity: 5 - calls_out: 20 + calls_out: 4 + calls_in: 2 + src.extractors.todo.task: + name: task + module: src.extractors.todo + line: 43 + cyclomatic_complexity: 2 + calls_out: 12 calls_in: 0 - src.cli.buildWorkspaceComparisonOptions: - name: buildWorkspaceComparisonOptions - module: src.cli - line: 414 + examples.backend.src.request-handlers.readBody: + name: readBody + module: examples.backend.src.request-handlers + line: 69 cyclomatic_complexity: 3 - calls_out: 6 - calls_in: 1 - src.extractors.changelog.extractChangelog: - name: extractChangelog - module: src.extractors.changelog - line: 18 - cyclomatic_complexity: 10 - calls_out: 19 - calls_in: 0 - src.cli.handleCloseCodeChange: - name: handleCloseCodeChange - module: src.cli - line: 310 - cyclomatic_complexity: 6 calls_out: 5 - calls_in: 0 - src.extractors.communication-helpers.isCommunicationType: - name: isCommunicationType + calls_in: 1 + src.extractors.communication-helpers.inferIdentityFromPathAndFilename: + name: inferIdentityFromPathAndFilename module: src.extractors.communication-helpers - line: 251 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 6 - src.cli.handleGraphDiff: - name: handleGraphDiff - module: src.cli - line: 494 - cyclomatic_complexity: 7 - calls_out: 11 + line: 153 + cyclomatic_complexity: 9 + calls_out: 5 calls_in: 1 - src.extractors.docs-chunks.worker: - name: worker - module: src.extractors.docs-chunks - line: 41 - cyclomatic_complexity: 3 - calls_out: 1 - calls_in: 4 src.extractors.docs-deterministic.targetsOf: name: targetsOf module: src.extractors.docs-deterministic @@ -2007,159 +1797,222 @@ nodes: cyclomatic_complexity: 1 calls_out: 5 calls_in: 1 - src.extractors.docs-chunks.splitLongSection: - name: splitLongSection - module: src.extractors.docs-chunks - line: 107 + src.extractors.markdown-paths.isNestedCheckout: + name: isNestedCheckout + module: src.extractors.markdown-paths + line: 121 cyclomatic_complexity: 2 - calls_out: 3 + calls_out: 1 calls_in: 3 - examples.backend.src.server.event: - name: event - module: examples.backend.src.server - line: 52 + rust-ast.src.main.main: + name: main + module: rust-ast.src.main + line: 36 + cyclomatic_complexity: 6 + calls_out: 21 + calls_in: 0 + src.extractors.communication-helpers.unquote: + name: unquote + module: src.extractors.communication-helpers + line: 318 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 2 + src.extractors.docs-chunks.item: + name: item + module: src.extractors.docs-chunks + line: 45 + cyclomatic_complexity: 1 + calls_out: 3 + calls_in: 0 + examples.frontend.src.app.reload: + name: reload + module: examples.frontend.src.app + line: 38 cyclomatic_complexity: 1 calls_out: 1 + calls_in: 1 + src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes: + name: outcomes + module: src.extractors.markdown-llm-helpers + line: 71 + cyclomatic_complexity: 4 + calls_out: 2 calls_in: 0 - src.extractors.git.extractChangedSymbols: - name: extractChangedSymbols - module: src.extractors.git - line: 376 - cyclomatic_complexity: 9 + src.extractors.markdown-paths.scanDirectoryForBasenames: + name: scanDirectoryForBasenames + module: src.extractors.markdown-paths + line: 125 + cyclomatic_complexity: 8 + calls_out: 8 + calls_in: 3 + java.JavaAstExtract.JavaAstExtract.emit: + name: emit + module: java.JavaAstExtract + line: 219 + cyclomatic_complexity: 1 calls_out: 3 calls_in: 1 - src.extractors.markdown-paths.state: - name: state - module: src.extractors.markdown-paths - line: 92 - cyclomatic_complexity: 6 + src.extractors.docs-deterministic.convertDocument: + name: convertDocument + module: src.extractors.docs-deterministic + line: 100 + cyclomatic_complexity: 4 calls_out: 4 - calls_in: 0 - src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited: - name: extractMarkdownIntentAudited - module: src.extractors.markdown-llm - line: 34 + calls_in: 3 + src.extractors.ast.external.runExternalAstAdapter: + name: runExternalAstAdapter + module: src.extractors.ast.external + line: 23 cyclomatic_complexity: 9 - calls_out: 14 + calls_out: 6 calls_in: 0 - src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt: - name: readPrompt + src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk: + name: extractChunk module: src.extractors.docs-llm - line: 261 - cyclomatic_complexity: 2 - calls_out: 6 + line: 161 + cyclomatic_complexity: 12 + calls_out: 8 calls_in: 1 - src.extractors.configuration.findKeyLine: - name: findKeyLine - module: src.extractors.configuration - line: 204 - cyclomatic_complexity: 3 + src.extractors.docs-schema.strings: + name: strings + module: src.extractors.docs-schema + line: 12 + cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 2 + src.extractors.runtime-cycle.label: + name: label + module: src.extractors.runtime-cycle + line: 111 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 5 + examples.backend.src.request-handlers.sendJson: + name: sendJson + module: examples.backend.src.request-handlers + line: 81 + cyclomatic_complexity: 1 calls_out: 4 - calls_in: 3 - src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow: - name: fallbackOrThrow - module: src.extractors.markdown-llm - line: 135 + calls_in: 7 + src.cli.optionList: + name: optionList + module: src.cli + line: 845 cyclomatic_complexity: 2 calls_out: 5 - calls_in: 2 - src.extractors.communication-helpers.parseEnvelope: - name: parseEnvelope - module: src.extractors.communication-helpers - line: 118 - cyclomatic_complexity: 5 - calls_out: 8 + calls_in: 3 + src.cli.handleExtractGit: + name: handleExtractGit + module: src.cli + line: 614 + cyclomatic_complexity: 1 + calls_out: 3 calls_in: 0 - src.extractors.nl-llm-helpers.NlAttemptError.statementText: - name: statementText - module: src.extractors.nl-llm-helpers - line: 92 - cyclomatic_complexity: 11 + src.extractors.todo.extractExplicitId: + name: extractExplicitId + module: src.extractors.todo + line: 91 + cyclomatic_complexity: 5 + calls_out: 3 + calls_in: 11 + src.cli.handleExtractNl: + name: handleExtractNl + module: src.cli + line: 601 + cyclomatic_complexity: 5 calls_out: 6 calls_in: 0 - src.extractors.git.extractGitIntent: - name: extractGitIntent - module: src.extractors.git - line: 40 - cyclomatic_complexity: 6 - calls_out: 7 + src.cli.command: + name: command + module: src.cli + line: 72 + cyclomatic_complexity: 3 + calls_out: 2 calls_in: 0 - src.cli.optionPipelineTaskMode: - name: optionPipelineTaskMode + src.cli.formatWatchEvent: + name: formatWatchEvent module: src.cli - line: 876 - cyclomatic_complexity: 6 - calls_out: 3 - calls_in: 1 - src.extractors.nl-llm-helpers.NlAttemptError.nlStrings: - name: nlStrings + line: 448 + cyclomatic_complexity: 10 + calls_out: 7 + calls_in: 5 + src.extractors.nl-llm-helpers.NlAttemptError.normalizedText: + name: normalizedText module: src.extractors.nl-llm-helpers - line: 236 + line: 89 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 0 + src.cli.diagnosticsPath: + name: diagnosticsPath + module: src.cli + line: 557 + cyclomatic_complexity: 2 + calls_out: 5 + calls_in: 0 + src.extractors.communication-helpers.sameStrings: + name: sameStrings + module: src.extractors.communication-helpers + line: 281 cyclomatic_complexity: 1 calls_out: 6 - calls_in: 1 - src.cli.handlePipeline: - name: handlePipeline - module: src.cli - line: 338 - cyclomatic_complexity: 1 - calls_out: 7 calls_in: 0 - examples.backend.src.validation.validateEventPayload: - name: validateEventPayload + examples.backend.src.validation.ALLOWED_ACTIONS: + name: ALLOWED_ACTIONS module: examples.backend.src.validation - line: 13 + line: 11 cyclomatic_complexity: 10 calls_out: 5 calls_in: 0 - src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited: - name: extractNlIntentAudited - module: src.extractors.nl-llm - line: 33 - cyclomatic_complexity: 10 - calls_out: 22 + src.extractors.communication-file-helpers.appendTimestampWarnings: + name: appendTimestampWarnings + module: src.extractors.communication-file-helpers + line: 328 + cyclomatic_complexity: 3 + calls_out: 2 + calls_in: 1 + rust-ast.src.main.type_item: + name: type_item + module: rust-ast.src.main + line: 306 + cyclomatic_complexity: 1 + calls_out: 8 + calls_in: 4 + src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient: + name: requireConfiguredClient + module: src.extractors.docs-llm + line: 85 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 1 + src.cli.handleRenderCodeChange: + name: handleRenderCodeChange + module: src.cli + line: 241 + cyclomatic_complexity: 5 + calls_out: 5 calls_in: 0 - src.extractors.docs-deterministic.convertDocument: - name: convertDocument + src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt: + name: sourceExcerpt + module: src.extractors.nl-llm-helpers + line: 157 + cyclomatic_complexity: 5 + calls_out: 3 + calls_in: 2 + src.extractors.docs-deterministic.parseSectionHeading: + name: parseSectionHeading module: src.extractors.docs-deterministic - line: 100 - cyclomatic_complexity: 4 + line: 173 + cyclomatic_complexity: 9 calls_out: 4 - calls_in: 3 - src.extractors.todo.inferOwner: - name: inferOwner - module: src.extractors.todo - line: 86 - cyclomatic_complexity: 4 - calls_out: 1 - calls_in: 11 - src.extractors.git.createDiscoveryState: - name: createDiscoveryState - module: src.extractors.git - line: 184 - cyclomatic_complexity: 1 - calls_out: 0 - calls_in: 1 - src.extractors.configuration.yamlOrAssignmentEntries: - name: yamlOrAssignmentEntries - module: src.extractors.configuration - line: 162 - cyclomatic_complexity: 7 - calls_out: 6 calls_in: 1 - src.extractors.docs-record.resolveObject: - name: resolveObject - module: src.extractors.docs-record - line: 79 - cyclomatic_complexity: 4 - calls_out: 2 - calls_in: 3 - src.extractors.communication-file-helpers.envelope: - name: envelope - module: src.extractors.communication-file-helpers - line: 51 + src.extractors.communication-helpers.inferIdentity: + name: inferIdentity + module: src.extractors.communication-helpers + line: 132 cyclomatic_complexity: 2 - calls_out: 1 + calls_out: 5 calls_in: 0 src.extractors.git.takeNextDiscoveryDirectory: name: takeNextDiscoveryDirectory @@ -2168,62 +2021,34 @@ nodes: cyclomatic_complexity: 2 calls_out: 0 calls_in: 2 - src.extractors.docs-deterministic.extractDocumentationBaseline: - name: extractDocumentationBaseline - module: src.extractors.docs-deterministic - line: 56 - cyclomatic_complexity: 4 - calls_out: 8 - calls_in: 0 - java.JavaAstExtract.JavaAstExtract.main: - name: main - module: java.JavaAstExtract - line: 21 - cyclomatic_complexity: 10 - calls_out: 16 - calls_in: 0 - src.cli.diff: - name: diff + src.cli.handleSummarize: + name: handleSummarize module: src.cli - line: 504 - cyclomatic_complexity: 2 - calls_out: 4 + line: 146 + cyclomatic_complexity: 5 + calls_out: 8 calls_in: 0 - src.cli.stamp: - name: stamp + src.cli.reportPipelineDegradation: + name: reportPipelineDegradation module: src.cli - line: 449 - cyclomatic_complexity: 10 - calls_out: 5 - calls_in: 0 - src.extractors.git.readChangedFiles: - name: readChangedFiles - module: src.extractors.git - line: 352 + line: 882 cyclomatic_complexity: 6 - calls_out: 5 + calls_out: 2 calls_in: 1 - src.extractors.docs-chunks.prioritizeDocumentChunks: - name: prioritizeDocumentChunks - module: src.extractors.docs-chunks - line: 3 - cyclomatic_complexity: 3 - calls_out: 6 - calls_in: 0 - src.extractors.runtime-cycle.proposalRecord: - name: proposalRecord - module: src.extractors.runtime-cycle - line: 250 + src.extractors.communication-helpers.isTicketEvidenceFile: + name: isTicketEvidenceFile + module: src.extractors.communication-helpers + line: 167 cyclomatic_complexity: 4 - calls_out: 3 - calls_in: 2 - src.extractors.ast.records.moduleRecords: - name: moduleRecords - module: src.extractors.ast.records - line: 34 - cyclomatic_complexity: 6 - calls_out: 14 - calls_in: 1 + calls_out: 4 + calls_in: 0 + src.extractors.markdown-paths.headingDirectories: + name: headingDirectories + module: src.extractors.markdown-paths + line: 46 + cyclomatic_complexity: 11 + calls_out: 9 + calls_in: 0 src.cli.file: name: file module: src.cli @@ -2231,335 +2056,363 @@ nodes: cyclomatic_complexity: 3 calls_out: 0 calls_in: 2 - rust-ast.src.main.main: - name: main - module: rust-ast.src.main - line: 36 - cyclomatic_complexity: 6 - calls_out: 21 + examples.backend.src.validation.validateEventPayload: + name: validateEventPayload + module: examples.backend.src.validation + line: 13 + cyclomatic_complexity: 10 + calls_out: 5 calls_in: 0 - src.cli.buildCommonPipelineOptions: - name: buildCommonPipelineOptions - module: src.cli - line: 384 - cyclomatic_complexity: 3 - calls_out: 8 - calls_in: 1 - src.extractors.ast.isIntentRecords: - name: isIntentRecords - module: src.extractors.ast - line: 153 - cyclomatic_complexity: 2 - calls_out: 1 + src.extractors.communication-file-helpers.appendA2aAgentWarnings: + name: appendA2aAgentWarnings + module: src.extractors.communication-file-helpers + line: 314 + cyclomatic_complexity: 5 + calls_out: 4 calls_in: 1 - java.JavaAstExtract.JavaAstExtract.slash: - name: slash - module: java.JavaAstExtract - line: 259 - cyclomatic_complexity: 1 + src.extractors.todo.inferOwner: + name: inferOwner + module: src.extractors.todo + line: 86 + cyclomatic_complexity: 4 calls_out: 1 - calls_in: 2 - src.extractors.docs-schema.documentRecord: - name: documentRecord - module: src.extractors.docs-schema - line: 15 - cyclomatic_complexity: 1 + calls_in: 11 + src.extractors.runtime-cycle.probeRecord: + name: probeRecord + module: src.extractors.runtime-cycle + line: 134 + cyclomatic_complexity: 9 calls_out: 8 + calls_in: 3 + src.extractors.docs-record.target: + name: target + module: src.extractors.docs-record + line: 35 + cyclomatic_complexity: 11 + calls_out: 7 calls_in: 0 - java.JavaAstExtract.JavaAstExtract.containsIgnored: - name: containsIgnored - module: java.JavaAstExtract - line: 70 + src.extractors.git.createDiscoveryState: + name: createDiscoveryState + module: src.extractors.git + line: 184 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 1 + src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering: + name: enrichBatchCovering + module: src.extractors.markdown-llm-helpers + line: 112 + cyclomatic_complexity: 6 + calls_out: 11 + calls_in: 3 + rust-ast.src.main.collect_files: + name: collect_files + module: rust-ast.src.main + line: 101 + cyclomatic_complexity: 9 + calls_out: 20 + calls_in: 1 + src.extractors.docs-chunks.worker: + name: worker + module: src.extractors.docs-chunks + line: 41 cyclomatic_complexity: 3 - calls_out: 2 + calls_out: 1 + calls_in: 4 + examples.frontend.src.render.classifyEvent: + name: classifyEvent + module: examples.frontend.src.render + line: 13 + cyclomatic_complexity: 4 + calls_out: 0 calls_in: 1 - src.cli.command: - name: command + src.cli.handleExtractMarkdown: + name: handleExtractMarkdown module: src.cli - line: 72 + line: 636 + cyclomatic_complexity: 1 + calls_out: 5 + calls_in: 0 + src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions: + name: assertNlExtractionOptions + module: src.extractors.nl-llm + line: 38 + cyclomatic_complexity: 2 + calls_out: 4 + calls_in: 1 + src.extractors.docs-llm.DocumentationLlmRequiredError.files: + name: files + module: src.extractors.docs-llm + line: 110 cyclomatic_complexity: 3 - calls_out: 2 + calls_out: 7 calls_in: 0 - src.extractors.communication-helpers.nestedRole: - name: nestedRole - module: src.extractors.communication-helpers - line: 156 - cyclomatic_complexity: 5 - calls_out: 2 + src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited: + name: extractMarkdownIntentAudited + module: src.extractors.markdown-llm + line: 34 + cyclomatic_complexity: 9 + calls_out: 14 calls_in: 0 - src.extractors.git.processDiscoveryDirectory: - name: processDiscoveryDirectory + src.extractors.git.gitMarkerState: + name: gitMarkerState module: src.extractors.git - line: 228 + line: 277 cyclomatic_complexity: 5 calls_out: 5 - calls_in: 2 - examples.backend.src.server.offset: - name: offset - module: examples.backend.src.server - line: 58 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 0 - src.cli.handleApplySourcePatch: - name: handleApplySourcePatch - module: src.cli - line: 272 - cyclomatic_complexity: 6 - calls_out: 5 - calls_in: 0 - src.extractors.configuration.jsonEntries: - name: jsonEntries - module: src.extractors.configuration - line: 131 - cyclomatic_complexity: 7 - calls_out: 7 calls_in: 1 - src.extractors.runtime-cycle.sourcePathFor: - name: sourcePathFor + src.extractors.runtime-cycle.parseCycle: + name: parseCycle module: src.extractors.runtime-cycle - line: 89 - cyclomatic_complexity: 2 - calls_out: 3 + line: 68 + cyclomatic_complexity: 7 + calls_out: 5 calls_in: 2 - src.extractors.communication-file-helpers.appendTimestampWarnings: - name: appendTimestampWarnings + src.extractors.communication-file-helpers.shouldSkipCommunicationFile: + name: shouldSkipCommunicationFile module: src.extractors.communication-file-helpers - line: 328 - cyclomatic_complexity: 3 - calls_out: 2 - calls_in: 1 - src.extractors.communication-helpers.item: - name: item - module: src.extractors.communication-helpers - line: 197 - cyclomatic_complexity: 3 + line: 102 + cyclomatic_complexity: 8 calls_out: 3 - calls_in: 0 - src.extractors.docs-deterministic.codeBlockRecord: - name: codeBlockRecord - module: src.extractors.docs-deterministic - line: 325 - cyclomatic_complexity: 2 - calls_out: 2 calls_in: 2 - src.extractors.runtime-cycle.probeRecord: - name: probeRecord - module: src.extractors.runtime-cycle - line: 134 - cyclomatic_complexity: 9 - calls_out: 8 - calls_in: 3 - rust-ast.src.main.visit_item_struct: - name: visit_item_struct + rust-ast.src.main.visit_expr_method_call: + name: visit_expr_method_call module: rust-ast.src.main - line: 223 - cyclomatic_complexity: 1 - calls_out: 2 - calls_in: 0 - src.cli.handleProposeTodo: - name: handleProposeTodo - module: src.cli - line: 163 - cyclomatic_complexity: 5 - calls_out: 6 - calls_in: 0 - src.extractors.nl-llm-helpers.NlAttemptError.allowedAction: - name: allowedAction - module: src.extractors.nl-llm-helpers - line: 219 - cyclomatic_complexity: 1 - calls_out: 1 - calls_in: 1 - src.extractors.git.hasMoreDiscoveryWork: - name: hasMoreDiscoveryWork - module: src.extractors.git - line: 195 - cyclomatic_complexity: 3 - calls_out: 0 - calls_in: 2 - src.extractors.ast.records.capabilities: - name: capabilities - module: src.extractors.ast.records - line: 49 + line: 296 cyclomatic_complexity: 1 - calls_out: 2 + calls_out: 7 calls_in: 0 - src.cli.doctor: - name: doctor - module: src.cli - line: 757 + src.extractors.configuration.dockerEntries: + name: dockerEntries + module: src.extractors.configuration + line: 173 cyclomatic_complexity: 6 - calls_out: 7 + calls_out: 6 calls_in: 1 - src.extractors.todo.action: - name: action - module: src.extractors.todo - line: 50 - cyclomatic_complexity: 2 - calls_out: 12 - calls_in: 0 - src.cli.taskFile: - name: taskFile + src.cli.pipeline: + name: pipeline module: src.cli - line: 348 + line: 349 cyclomatic_complexity: 1 calls_out: 5 calls_in: 0 - src.extractors.nl.sourcePath: - name: sourcePath - module: src.extractors.nl - line: 42 + src.extractors.git.isGitWorkTree: + name: isGitWorkTree + module: src.extractors.git + line: 287 cyclomatic_complexity: 2 - calls_out: 14 + calls_out: 2 + calls_in: 4 + src.extractors.communication-helpers.communicationSegments: + name: communicationSegments + module: src.extractors.communication-helpers + line: 181 + cyclomatic_complexity: 14 + calls_out: 12 calls_in: 0 - src.extractors.changelog.lines: - name: lines + src.extractors.changelog.body: + name: body module: src.extractors.changelog - line: 30 + line: 27 cyclomatic_complexity: 7 calls_out: 15 calls_in: 0 - src.extractors.docs-deterministic.action: - name: action - module: src.extractors.docs-deterministic - line: 296 + src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection: + name: enrichMarkdownBatchWithCorrection + module: src.extractors.markdown-llm-helpers + line: 187 + cyclomatic_complexity: 1 + calls_out: 0 + calls_in: 1 + src.cli.buildWorkspaceComparisonOptions: + name: buildWorkspaceComparisonOptions + module: src.cli + line: 414 cyclomatic_complexity: 3 calls_out: 6 + calls_in: 1 + src.cli.handleExtractRuntime: + name: handleExtractRuntime + module: src.cli + line: 629 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 0 - src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata: - name: hasExplicitEnvelopeMetadata - module: src.extractors.communication-file-helpers - line: 116 - cyclomatic_complexity: 1 - calls_out: 2 + src.extractors.configuration.configurationFormat: + name: configurationFormat + module: src.extractors.configuration + line: 113 + cyclomatic_complexity: 6 + calls_out: 4 calls_in: 1 - src.extractors.git.gitMarkerState: - name: gitMarkerState - module: src.extractors.git - line: 277 + rust-ast.src.main.arguments: + name: arguments + module: rust-ast.src.main + line: 82 cyclomatic_complexity: 5 - calls_out: 5 + calls_out: 9 calls_in: 1 - java.JavaAstExtract.JavaAstExtract.collect: - name: collect - module: java.JavaAstExtract - line: 58 - cyclomatic_complexity: 1 - calls_out: 11 + src.extractors.docs-deterministic.marker: + name: marker + module: src.extractors.docs-deterministic + line: 162 + cyclomatic_complexity: 4 + calls_out: 2 + calls_in: 0 + src.cli.absolute: + name: absolute + module: src.cli + line: 712 + cyclomatic_complexity: 3 + calls_out: 1 + calls_in: 0 + src.extractors.configuration.findKeyLine: + name: findKeyLine + module: src.extractors.configuration + line: 204 + cyclomatic_complexity: 3 + calls_out: 4 + calls_in: 3 + src.cli.resolveWatchTaskFile: + name: resolveWatchTaskFile + module: src.cli + line: 409 + cyclomatic_complexity: 3 + calls_out: 4 calls_in: 1 - src.extractors.ast.typescript.context: - name: context - module: src.extractors.ast.typescript - line: 12 + src.extractors.communication-file-helpers.inferred: + name: inferred + module: src.extractors.communication-file-helpers + line: 52 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 0 + src.extractors.todo.heading: + name: heading + module: src.extractors.todo + line: 36 cyclomatic_complexity: 1 - calls_out: 4 + calls_out: 1 calls_in: 0 - src.extractors.nl-llm-helpers.NlAttemptError.clampLine: - name: clampLine - module: src.extractors.nl-llm-helpers - line: 215 + src.extractors.docs-chunks.flush: + name: flush + module: src.extractors.docs-chunks + line: 63 + cyclomatic_complexity: 2 + calls_out: 2 + calls_in: 3 + src.extractors.communication-helpers.isCommunicationType: + name: isCommunicationType + module: src.extractors.communication-helpers + line: 251 cyclomatic_complexity: 1 + calls_out: 2 + calls_in: 6 + examples.backend.src.validation.action: + name: action + module: examples.backend.src.validation + line: 23 + cyclomatic_complexity: 2 calls_out: 3 - calls_in: 1 - src.extractors.nl.assertNlExtractionOptions: - name: assertNlExtractionOptions - module: src.extractors.nl - line: 25 - cyclomatic_complexity: 9 + calls_in: 0 + src.extractors.communication-helpers.normalizeType: + name: normalizeType + module: src.extractors.communication-helpers + line: 246 + cyclomatic_complexity: 4 calls_out: 2 - calls_in: 1 - src.cli.handleIntake: - name: handleIntake - module: src.cli - line: 706 - cyclomatic_complexity: 13 - calls_out: 13 calls_in: 0 - src.cli.invokedPath: - name: invokedPath + src.cli.diagnostics: + name: diagnostics module: src.cli - line: 936 - cyclomatic_complexity: 4 - calls_out: 4 + line: 558 + cyclomatic_complexity: 2 + calls_out: 5 calls_in: 0 - src.extractors.markdown-paths.addBasenameIndexMatch: - name: addBasenameIndexMatch - module: src.extractors.markdown-paths - line: 148 + examples.backend.src.request-handlers.MAX_BODY_BYTES: + name: MAX_BODY_BYTES + module: examples.backend.src.request-handlers + line: 5 + cyclomatic_complexity: 9 + calls_out: 5 + calls_in: 0 + examples.backend.src.server.server: + name: server + module: examples.backend.src.server + line: 18 cyclomatic_complexity: 3 calls_out: 4 - calls_in: 1 - src.cli.emitExtraction: - name: emitExtraction - module: src.cli - line: 691 + calls_in: 0 + src.extractors.configuration.files: + name: files + module: src.extractors.configuration + line: 15 cyclomatic_complexity: 4 - calls_out: 4 - calls_in: 8 - src.extractors.docs-schema.documentResponseSchema: - name: documentResponseSchema - module: src.extractors.docs-schema - line: 41 - cyclomatic_complexity: 1 - calls_out: 1 + calls_out: 5 calls_in: 0 - src.extractors.docs-record.allowedLifecycle: - name: allowedLifecycle + src.extractors.docs-deterministic.readParagraph: + name: readParagraph + module: src.extractors.docs-deterministic + line: 235 + cyclomatic_complexity: 11 + calls_out: 5 + calls_in: 1 + src.extractors.docs-record.linesFromChunk: + name: linesFromChunk module: src.extractors.docs-record - line: 191 + line: 172 cyclomatic_complexity: 1 - calls_out: 1 + calls_out: 5 calls_in: 5 - rust-ast.src.main.arguments: - name: arguments - module: rust-ast.src.main - line: 82 + src.extractors.nl.inferActor: + name: inferActor + module: src.extractors.nl + line: 87 cyclomatic_complexity: 5 - calls_out: 9 - calls_in: 1 - src.extractors.communication-file-helpers.appendRegistryAlignmentWarnings: - name: appendRegistryAlignmentWarnings - module: src.extractors.communication-file-helpers - line: 299 - cyclomatic_complexity: 7 - calls_out: 2 - calls_in: 1 - examples.backend.src.server.validation: - name: validation - module: examples.backend.src.server - line: 45 - cyclomatic_complexity: 2 calls_out: 2 + calls_in: 9 + src.extractors.docs-record.action: + name: action + module: src.extractors.docs-record + line: 36 + cyclomatic_complexity: 11 + calls_out: 7 calls_in: 0 - src.extractors.runtime-cycle.violationRecord: - name: violationRecord + src.extractors.docs-record.clampLine: + name: clampLine + module: src.extractors.docs-record + line: 179 + cyclomatic_complexity: 1 + calls_out: 3 + calls_in: 1 + src.extractors.runtime-cycle.boundedArray: + name: boundedArray module: src.extractors.runtime-cycle - line: 173 - cyclomatic_complexity: 4 - calls_out: 7 + line: 94 + cyclomatic_complexity: 8 + calls_out: 4 calls_in: 3 - src.extractors.markdown-paths.createMarkdownPathResolver: - name: createMarkdownPathResolver - module: src.extractors.markdown-paths - line: 39 - cyclomatic_complexity: 12 + src.extractors.docs-chunks.splitLongSection: + name: splitLongSection + module: src.extractors.docs-chunks + line: 107 + cyclomatic_complexity: 2 + calls_out: 3 + calls_in: 3 + src.extractors.todo.classified: + name: classified + module: src.extractors.todo + line: 49 + cyclomatic_complexity: 2 calls_out: 12 calls_in: 0 - src.extractors.todo.lines: - name: lines - module: src.extractors.todo - line: 32 - cyclomatic_complexity: 5 - calls_out: 20 + src.extractors.git.state: + name: state + module: src.extractors.git + line: 172 + cyclomatic_complexity: 4 + calls_out: 5 calls_in: 0 - java.JavaAstExtract.JavaAstExtract.map: - name: map - module: java.JavaAstExtract - line: 182 - cyclomatic_complexity: 1 - calls_out: 0 - calls_in: 3 src.extractors.runtime-cycle.driftRecord: name: driftRecord module: src.extractors.runtime-cycle @@ -2567,118 +2420,97 @@ nodes: cyclomatic_complexity: 5 calls_out: 5 calls_in: 2 - src.extractors.docs-record.linesFromChunk: - name: linesFromChunk - module: src.extractors.docs-record - line: 172 - cyclomatic_complexity: 1 - calls_out: 5 - calls_in: 5 - src.extractors.configuration.configurationRecords: - name: configurationRecords - module: src.extractors.configuration - line: 41 - cyclomatic_complexity: 4 - calls_out: 12 - calls_in: 4 - src.extractors.configuration.match: - name: match + src.extractors.configuration.entries: + name: entries module: src.extractors.configuration - line: 175 - cyclomatic_complexity: 5 - calls_out: 2 - calls_in: 3 - src.extractors.nl.action: - name: action - module: src.extractors.nl - line: 50 + line: 43 cyclomatic_complexity: 1 - calls_out: 9 + calls_out: 3 + calls_in: 2 + examples.src.runtime.validateContract: + name: validateContract + module: examples.src.runtime + line: 6 + cyclomatic_complexity: 2 + calls_out: 1 + calls_in: 1 + src.cli.parsed: + name: parsed + module: src.cli + line: 71 + cyclomatic_complexity: 3 + calls_out: 2 calls_in: 0 - src.extractors.git.result: - name: result - module: src.extractors.git - line: 326 - cyclomatic_complexity: 1 + src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage: + name: emptyCoverage + module: src.extractors.markdown-llm-helpers + line: 179 + cyclomatic_complexity: 2 calls_out: 1 + calls_in: 1 + src.extractors.todo.relative: + name: relative + module: src.extractors.todo + line: 29 + cyclomatic_complexity: 5 + calls_out: 20 calls_in: 0 - rust-ast.src.main.visit_item_trait: - name: visit_item_trait + src.extractors.docs-chunks.chunkMarkdown: + name: chunkMarkdown + module: src.extractors.docs-chunks + line: 55 + cyclomatic_complexity: 8 + calls_out: 9 + calls_in: 0 + rust-ast.src.main.visit_item_struct: + name: visit_item_struct module: rust-ast.src.main - line: 233 + line: 223 cyclomatic_complexity: 1 calls_out: 2 calls_in: 0 - src.extractors.communication-helpers.isTicketEvidenceFile: - name: isTicketEvidenceFile - module: src.extractors.communication-helpers - line: 167 - cyclomatic_complexity: 4 - calls_out: 4 + src.extractors.communication-file-helpers.appendRoleAndParticipantWarnings: + name: appendRoleAndParticipantWarnings + module: src.extractors.communication-file-helpers + line: 273 + cyclomatic_complexity: 3 + calls_out: 2 + calls_in: 1 + examples.backend.src.validation.object: + name: object + module: examples.backend.src.validation + line: 24 + cyclomatic_complexity: 2 + calls_out: 3 calls_in: 0 - examples.backend.src.server.limit: - name: limit - module: examples.backend.src.server - line: 59 + src.extractors.nl.classified: + name: classified + module: src.extractors.nl + line: 49 cyclomatic_complexity: 1 - calls_out: 1 + calls_out: 9 calls_in: 0 - src.extractors.communication-helpers.sameStrings: - name: sameStrings - module: src.extractors.communication-helpers - line: 281 + src.extractors.docs-chunks.index: + name: index + module: src.extractors.docs-chunks + line: 43 cyclomatic_complexity: 1 - calls_out: 6 - calls_in: 0 - src.extractors.git.state: - name: state - module: src.extractors.git - line: 172 - cyclomatic_complexity: 4 - calls_out: 5 + calls_out: 3 calls_in: 0 - rust-ast.src.main.visit_item_fn: - name: visit_item_fn - module: rust-ast.src.main - line: 257 - cyclomatic_complexity: 1 - calls_out: 13 + src.extractors.todo.action: + name: action + module: src.extractors.todo + line: 50 + cyclomatic_complexity: 2 + calls_out: 12 calls_in: 0 - src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering: - name: enrichBatchCovering - module: src.extractors.markdown-llm-helpers - line: 112 - cyclomatic_complexity: 6 - calls_out: 11 - calls_in: 3 - src.extractors.communication-helpers.flush: - name: flush - module: src.extractors.communication-helpers - line: 195 - cyclomatic_complexity: 5 + src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow: + name: fallbackOrThrow + module: src.extractors.markdown-llm + line: 135 + cyclomatic_complexity: 2 calls_out: 5 - calls_in: 1 - src.extractors.git.filterDiscoveryChildren: - name: filterDiscoveryChildren - module: src.extractors.git - line: 221 - cyclomatic_complexity: 5 - calls_out: 6 calls_in: 2 - src.extractors.communication-helpers.raw: - name: raw - module: src.extractors.communication-helpers - line: 206 - cyclomatic_complexity: 2 - calls_out: 1 - calls_in: 0 - src.extractors.todo.extractExplicitId: - name: extractExplicitId - module: src.extractors.todo - line: 91 - cyclomatic_complexity: 5 - calls_out: 3 - calls_in: 11 src.extractors.communication-helpers.isCommunicationNoise: name: isCommunicationNoise module: src.extractors.communication-helpers @@ -2686,68 +2518,173 @@ nodes: cyclomatic_complexity: 3 calls_out: 2 calls_in: 3 - src.extractors.git.root: - name: root - module: src.extractors.git - line: 41 - cyclomatic_complexity: 2 - calls_out: 2 + src.cli.initProject: + name: initProject + module: src.cli + line: 736 + cyclomatic_complexity: 6 + calls_out: 9 + calls_in: 1 + src.extractors.nl-llm-helpers.NlAttemptError.lines: + name: lines + module: src.extractors.nl-llm-helpers + line: 86 + cyclomatic_complexity: 1 + calls_out: 1 calls_in: 0 - src.extractors.communication-helpers.normalizeType: - name: normalizeType - module: src.extractors.communication-helpers - line: 246 + src.cli.invokedPath: + name: invokedPath + module: src.cli + line: 936 cyclomatic_complexity: 4 - calls_out: 2 + calls_out: 4 calls_in: 0 - src.extractors.docs-chunks.takeLineBatch: - name: takeLineBatch - module: src.extractors.docs-chunks - line: 128 + src.extractors.configuration.configurationRecords: + name: configurationRecords + module: src.extractors.configuration + line: 41 + cyclomatic_complexity: 4 + calls_out: 12 + calls_in: 4 + src.cli.handleCloseCodeChange: + name: handleCloseCodeChange + module: src.cli + line: 310 + cyclomatic_complexity: 6 + calls_out: 5 + calls_in: 0 + src.cli.buildGitDiff: + name: buildGitDiff + module: src.cli + line: 534 + cyclomatic_complexity: 5 + calls_out: 6 + calls_in: 1 + src.cli.stop: + name: stop + module: src.cli + line: 352 + cyclomatic_complexity: 1 + calls_out: 5 + calls_in: 0 + src.extractors.docs-record.toDocumentIntentRecord: + name: toDocumentIntentRecord + module: src.extractors.docs-record + line: 25 + cyclomatic_complexity: 14 + calls_out: 13 + calls_in: 0 + src.extractors.docs-record.allowedModality: + name: allowedModality + module: src.extractors.docs-record + line: 187 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 1 + src.cli.handleApplyTodo: + name: handleApplyTodo + module: src.cli + line: 201 cyclomatic_complexity: 8 - calls_out: 2 + calls_out: 5 + calls_in: 0 + src.cli.optionBoolean: + name: optionBoolean + module: src.cli + line: 830 + cyclomatic_complexity: 3 + calls_out: 3 + calls_in: 17 + src.cli.optionLlmMode: + name: optionLlmMode + module: src.cli + line: 854 + cyclomatic_complexity: 6 + calls_out: 3 + calls_in: 8 + src.cli.parseDiffMode: + name: parseDiffMode + module: src.cli + line: 488 + cyclomatic_complexity: 5 + calls_out: 3 calls_in: 1 - src.extractors.docs-deterministic.marker: - name: marker - module: src.extractors.docs-deterministic - line: 162 - cyclomatic_complexity: 4 - calls_out: 2 + src.cli.stamp: + name: stamp + module: src.cli + line: 449 + cyclomatic_complexity: 10 + calls_out: 5 calls_in: 0 - src.cli.optionList: - name: optionList + src.cli.optionSummaryMode: + name: optionSummaryMode module: src.cli - line: 845 + line: 866 + cyclomatic_complexity: 4 + calls_out: 3 + calls_in: 1 + src.cli.buildFileDiff: + name: buildFileDiff + module: src.cli + line: 517 + cyclomatic_complexity: 3 + calls_out: 6 + calls_in: 1 + src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt: + name: readPrompt + module: src.extractors.docs-llm + line: 261 cyclomatic_complexity: 2 + calls_out: 6 + calls_in: 1 + src.extractors.communication-helpers.flush: + name: flush + module: src.extractors.communication-helpers + line: 195 + cyclomatic_complexity: 5 calls_out: 5 - calls_in: 3 - src.extractors.docs-chunks.index: - name: index - module: src.extractors.docs-chunks - line: 43 - cyclomatic_complexity: 1 + calls_in: 1 + src.extractors.docs-record.keywordOverlap: + name: keywordOverlap + module: src.extractors.docs-record + line: 119 + cyclomatic_complexity: 3 calls_out: 3 - calls_in: 0 - src.extractors.docs-deterministic.parseFenceBlock: - name: parseFenceBlock - module: src.extractors.docs-deterministic - line: 154 - cyclomatic_complexity: 7 - calls_out: 5 calls_in: 1 - src.extractors.markdown-paths.repositoryRoot: - name: repositoryRoot - module: src.extractors.markdown-paths - line: 40 + src.extractors.changelog.changelogAction: + name: changelogAction + module: src.extractors.changelog + line: 87 cyclomatic_complexity: 11 - calls_out: 11 + calls_out: 3 + calls_in: 4 + src.extractors.configuration.MAX_ENTRIES_PER_FILE: + name: MAX_ENTRIES_PER_FILE + module: src.extractors.configuration + line: 8 + cyclomatic_complexity: 4 + calls_out: 10 calls_in: 0 - examples.src.runtime.executeContract: - name: executeContract - module: examples.src.runtime - line: 10 + examples.frontend.src.render.toRows: + name: toRows + module: examples.frontend.src.render + line: 19 cyclomatic_complexity: 1 - calls_out: 1 + calls_out: 2 + calls_in: 0 + src.extractors.git.hasMoreDiscoveryWork: + name: hasMoreDiscoveryWork + module: src.extractors.git + line: 195 + cyclomatic_complexity: 3 + calls_out: 0 + calls_in: 2 + src.cli.handlePipeline: + name: handlePipeline + module: src.cli + line: 338 + cyclomatic_complexity: 1 + calls_out: 7 calls_in: 0 examples.frontend.src.app.createState: name: createState @@ -2756,69 +2693,111 @@ nodes: cyclomatic_complexity: 1 calls_out: 0 calls_in: 1 - src.cli.optionString: - name: optionString - module: src.cli - line: 818 - cyclomatic_complexity: 2 + src.extractors.configuration.line: + name: line + module: src.extractors.configuration + line: 149 + cyclomatic_complexity: 4 + calls_out: 3 + calls_in: 0 + src.extractors.docs-record.statementText: + name: statementText + module: src.extractors.docs-record + line: 32 + cyclomatic_complexity: 1 calls_out: 1 - calls_in: 33 - src.extractors.docs-chunks.chunkPriority: - name: chunkPriority - module: src.extractors.docs-chunks - line: 23 - cyclomatic_complexity: 3 - calls_out: 4 - calls_in: 2 - src.cli.buildGitDiff: - name: buildGitDiff - module: src.cli - line: 534 - cyclomatic_complexity: 5 - calls_out: 6 - calls_in: 1 - src.cli.stop: - name: stop - module: src.cli - line: 352 + calls_in: 0 + src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings: + name: strings + module: src.extractors.markdown-llm-helpers + line: 370 cyclomatic_complexity: 1 calls_out: 5 + calls_in: 2 + src.extractors.nl.body: + name: body + module: src.extractors.nl + line: 41 + cyclomatic_complexity: 2 + calls_out: 14 calls_in: 0 - src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow: - name: fallbackOrThrow - module: src.extractors.nl-llm - line: 116 - cyclomatic_complexity: 1 - calls_out: 0 + src.extractors.docs-record.resolveTarget: + name: resolveTarget + module: src.extractors.docs-record + line: 128 + cyclomatic_complexity: 12 + calls_out: 7 calls_in: 2 - src.extractors.docs-deterministic.parseBulletStatement: - name: parseBulletStatement - module: src.extractors.docs-deterministic - line: 191 - cyclomatic_complexity: 6 - calls_out: 3 + src.extractors.git.discoverGitRepositories: + name: discoverGitRepositories + module: src.extractors.git + line: 171 + cyclomatic_complexity: 4 + calls_out: 7 calls_in: 1 - rust-ast.src.main.visit_expr_call: - name: visit_expr_call - module: rust-ast.src.main - line: 288 + src.extractors.git.finishDiscovery: + name: finishDiscovery + module: src.extractors.git + line: 268 + cyclomatic_complexity: 4 + calls_out: 1 + calls_in: 1 + src.cli.buildPipelineOptions: + name: buildPipelineOptions + module: src.cli + line: 371 + cyclomatic_complexity: 1 + calls_out: 1 + calls_in: 2 + src.extractors.nl.missing: + name: missing + module: src.extractors.nl + line: 52 cyclomatic_complexity: 1 calls_out: 9 calls_in: 0 - src.extractors.git.readStats: - name: readStats - module: src.extractors.git - line: 364 - cyclomatic_complexity: 6 - calls_out: 4 + src.extractors.docs-chunks.mapConcurrent: + name: mapConcurrent + module: src.extractors.docs-chunks + line: 33 + cyclomatic_complexity: 3 + calls_out: 7 + calls_in: 0 + src.extractors.docs-schema.documentResponseContract: + name: documentResponseContract + module: src.extractors.docs-schema + line: 31 + cyclomatic_complexity: 1 + calls_out: 2 calls_in: 1 - src.cli.resolvePipelineRoot: - name: resolvePipelineRoot - module: src.cli - line: 367 - cyclomatic_complexity: 2 + src.extractors.nl-llm-helpers.NlAttemptError.allowedModality: + name: allowedModality + module: src.extractors.nl-llm-helpers + line: 226 + cyclomatic_complexity: 1 calls_out: 1 + calls_in: 1 + src.extractors.markdown-paths.state: + name: state + module: src.extractors.markdown-paths + line: 92 + cyclomatic_complexity: 6 + calls_out: 4 + calls_in: 0 + src.extractors.docs-record.resolveObject: + name: resolveObject + module: src.extractors.docs-record + line: 79 + cyclomatic_complexity: 4 + calls_out: 2 calls_in: 3 + java.JavaAstExtract.JavaAstExtract.main: + name: main + module: java.JavaAstExtract + line: 21 + cyclomatic_complexity: 10 + calls_out: 16 + calls_in: 0 edges: - caller: rust-ast.src.main.main callee: rust-ast.src.main.arguments @@ -2898,6 +2877,57 @@ edges: - caller: rust-ast.src.main.type_item callee: rust-ast.src.main.modifiers call_type: resolved +- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES + callee: examples.backend.src.request-handlers.handleHealth + call_type: resolved +- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES + callee: examples.backend.src.request-handlers.handleEventPublish + call_type: resolved +- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES + callee: examples.backend.src.request-handlers.handleEventList + call_type: resolved +- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES + callee: examples.backend.src.request-handlers.sendJson + call_type: resolved +- caller: examples.backend.src.request-handlers.handleRequest + callee: examples.backend.src.request-handlers.handleHealth + call_type: resolved +- caller: examples.backend.src.request-handlers.handleRequest + callee: examples.backend.src.request-handlers.handleEventPublish + call_type: resolved +- caller: examples.backend.src.request-handlers.handleRequest + callee: examples.backend.src.request-handlers.handleEventList + call_type: resolved +- caller: examples.backend.src.request-handlers.handleRequest + callee: examples.backend.src.request-handlers.sendJson + call_type: resolved +- caller: examples.backend.src.request-handlers.handleHealth + callee: examples.backend.src.request-handlers.sendJson + call_type: resolved +- caller: examples.backend.src.request-handlers.handleHealth + callee: examples.backend.src.request-handlers.size + call_type: resolved +- caller: examples.backend.src.request-handlers.handleEventPublish + callee: examples.backend.src.request-handlers.readBody + call_type: resolved +- caller: examples.backend.src.request-handlers.handleEventPublish + callee: examples.backend.src.request-handlers.sendJson + call_type: resolved +- caller: examples.backend.src.request-handlers.validation + callee: examples.backend.src.request-handlers.sendJson + call_type: resolved +- caller: examples.backend.src.request-handlers.event + callee: examples.backend.src.request-handlers.sendJson + call_type: resolved +- caller: examples.backend.src.request-handlers.handleEventList + callee: examples.backend.src.request-handlers.parseOffset + call_type: resolved +- caller: examples.backend.src.request-handlers.handleEventList + callee: examples.backend.src.request-handlers.parseLimit + call_type: resolved +- caller: examples.backend.src.request-handlers.handleEventList + callee: examples.backend.src.request-handlers.sendJson + call_type: resolved - caller: examples.backend.src.validation.ALLOWED_ACTIONS callee: examples.backend.src.validation.invalid call_type: resolved @@ -2916,43 +2946,13 @@ edges: - caller: examples.backend.src.validation.object callee: examples.backend.src.validation.invalid call_type: resolved -- caller: examples.backend.src.server.createBackend - callee: examples.backend.src.server.handleRequest - call_type: resolved - caller: examples.backend.src.server.createBackend callee: examples.backend.src.server.sendJson call_type: resolved -- caller: examples.backend.src.server.store - callee: examples.backend.src.server.handleRequest - call_type: resolved - caller: examples.backend.src.server.store callee: examples.backend.src.server.sendJson call_type: resolved - caller: examples.backend.src.server.server - callee: examples.backend.src.server.handleRequest - call_type: resolved -- caller: examples.backend.src.server.server - callee: examples.backend.src.server.sendJson - call_type: resolved -- caller: examples.backend.src.server.handleRequest - callee: examples.backend.src.server.sendJson - call_type: resolved -- caller: examples.backend.src.server.handleRequest - callee: examples.backend.src.server.size - call_type: resolved -- caller: examples.backend.src.server.handleRequest - callee: examples.backend.src.server.readBody - call_type: resolved -- caller: examples.backend.src.server.validation - callee: examples.backend.src.server.sendJson - call_type: resolved -- caller: examples.backend.src.server.event - callee: examples.backend.src.server.sendJson - call_type: resolved -- caller: examples.backend.src.server.offset - callee: examples.backend.src.server.sendJson - call_type: resolved -- caller: examples.backend.src.server.limit callee: examples.backend.src.server.sendJson call_type: resolved - caller: examples.backend.src.server.startBackend @@ -4249,7 +4249,7 @@ edges: callee: src.extractors.nl-llm-helpers.NlAttemptError.resolveObject call_type: resolved - caller: src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord - callee: src.extractors.nl-llm-helpers.NlAttemptError.allowedModality + callee: src.extractors.nl-llm-helpers.NlAttemptError.resolveModality call_type: resolved - caller: src.extractors.nl-llm-helpers.NlAttemptError.lines callee: src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt @@ -4261,7 +4261,7 @@ edges: callee: src.extractors.nl-llm-helpers.NlAttemptError.resolveObject call_type: resolved - caller: src.extractors.nl-llm-helpers.NlAttemptError.statementText - callee: src.extractors.nl-llm-helpers.NlAttemptError.allowedModality + callee: src.extractors.nl-llm-helpers.NlAttemptError.resolveModality call_type: resolved - caller: src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt callee: src.extractors.nl-llm-helpers.NlAttemptError.clampLine @@ -4269,6 +4269,9 @@ edges: - caller: src.extractors.nl-llm-helpers.NlAttemptError.resolveAction callee: src.extractors.nl-llm-helpers.NlAttemptError.allowedAction call_type: resolved +- caller: src.extractors.nl-llm-helpers.NlAttemptError.resolveModality + callee: src.extractors.nl-llm-helpers.NlAttemptError.allowedModality + call_type: resolved - caller: src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder callee: src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText call_type: resolved @@ -4278,6 +4281,12 @@ edges: - caller: src.extractors.nl-llm-helpers.NlAttemptError.resolveObject callee: src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText call_type: resolved +- caller: src.extractors.nl-llm-helpers.NlAttemptError.NL_ACTION_SET + callee: src.extractors.nl-llm-helpers.NlAttemptError.nlStrings + call_type: resolved +- caller: src.extractors.nl-llm-helpers.NlAttemptError.NL_MODALITY_SET + callee: src.extractors.nl-llm-helpers.NlAttemptError.nlStrings + call_type: resolved - caller: src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT callee: src.extractors.nl-llm-helpers.NlAttemptError.nlStrings call_type: resolved @@ -4290,50 +4299,26 @@ edges: - caller: src.extractors.ast.records.adapterRecords callee: src.extractors.ast.records.moduleRecords call_type: resolved -- caller: src.extractors.ast.records.moduleRecords - callee: src.extractors.ast.records.boundedCapabilities - call_type: resolved -- caller: src.extractors.ast.records.start - callee: src.extractors.ast.records.moduleTopicText - call_type: resolved -- caller: src.extractors.ast.records.end - callee: src.extractors.ast.records.moduleTopicText - call_type: resolved -- caller: src.extractors.ast.records.capabilities - callee: src.extractors.ast.records.moduleTopicText - call_type: resolved -- caller: src.extractors.ast.typescript.extractTypeScriptFile - callee: src.extractors.ast.typescript.createTypeScriptExtractionContext - call_type: resolved -- caller: src.extractors.ast.typescript.extractTypeScriptFile - callee: src.extractors.ast.typescript.scriptKind - call_type: resolved -- caller: src.extractors.ast.typescript.extractTypeScriptFile - callee: src.extractors.ast.typescript.visitTypeScriptNode - call_type: resolved -- caller: src.extractors.ast.typescript.extractTypeScriptFile - callee: src.extractors.ast.typescript.recordModuleFact - call_type: resolved -- caller: src.extractors.ast.typescript.context - callee: src.extractors.ast.typescript.createTypeScriptExtractionContext - call_type: resolved -- caller: src.extractors.ast.typescript.context - callee: src.extractors.ast.typescript.scriptKind - call_type: resolved modules: + examples.backend.src.request-handlers: + - examples.backend.src.request-handlers.MAX_BODY_BYTES + - examples.backend.src.request-handlers.event + - examples.backend.src.request-handlers.handleEventList + - examples.backend.src.request-handlers.handleEventPublish + - examples.backend.src.request-handlers.handleHealth + - examples.backend.src.request-handlers.handleRequest + - examples.backend.src.request-handlers.parseLimit + - examples.backend.src.request-handlers.parseOffset + - examples.backend.src.request-handlers.readBody + - examples.backend.src.request-handlers.sendJson + - examples.backend.src.request-handlers.size + - examples.backend.src.request-handlers.validation examples.backend.src.server: - examples.backend.src.server.createBackend - - examples.backend.src.server.event - - examples.backend.src.server.handleRequest - - examples.backend.src.server.limit - - examples.backend.src.server.offset - - examples.backend.src.server.readBody - examples.backend.src.server.sendJson - examples.backend.src.server.server - - examples.backend.src.server.size - examples.backend.src.server.startBackend - examples.backend.src.server.store - - examples.backend.src.server.validation examples.backend.src.validation: - examples.backend.src.validation.ALLOWED_ACTIONS - examples.backend.src.validation.action @@ -4479,19 +4464,7 @@ modules: - src.extractors.ast.external.runExternalAstAdapter src.extractors.ast.records: - src.extractors.ast.records.adapterRecords - - src.extractors.ast.records.boundedCapabilities - - src.extractors.ast.records.capabilities - - src.extractors.ast.records.end - src.extractors.ast.records.moduleRecords - - src.extractors.ast.records.moduleTopicText - - src.extractors.ast.records.start - src.extractors.ast.typescript: - - src.extractors.ast.typescript.context - - src.extractors.ast.typescript.createTypeScriptExtractionContext - - src.extractors.ast.typescript.extractTypeScriptFile - - src.extractors.ast.typescript.recordModuleFact - - src.extractors.ast.typescript.scriptKind - - src.extractors.ast.typescript.visitTypeScriptNode src.extractors.changelog: - src.extractors.changelog.body - src.extractors.changelog.changelogAction @@ -4703,6 +4676,8 @@ modules: - src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited - src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow src.extractors.nl-llm-helpers: + - src.extractors.nl-llm-helpers.NlAttemptError.NL_ACTION_SET + - src.extractors.nl-llm-helpers.NlAttemptError.NL_MODALITY_SET - src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT - src.extractors.nl-llm-helpers.NlAttemptError.action - src.extractors.nl-llm-helpers.NlAttemptError.allowedAction @@ -4714,6 +4689,7 @@ modules: - src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText - src.extractors.nl-llm-helpers.NlAttemptError.normalizedText - src.extractors.nl-llm-helpers.NlAttemptError.resolveAction + - src.extractors.nl-llm-helpers.NlAttemptError.resolveModality - src.extractors.nl-llm-helpers.NlAttemptError.resolveObject - src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt - src.extractors.nl-llm-helpers.NlAttemptError.statementText @@ -4754,19 +4730,22 @@ modules: - src.extractors.todo.task - src.extractors.todo.text entry_points: -- examples.backend.src.server.MAX_BODY_BYTES +- examples.backend.src.request-handlers.MAX_BODY_BYTES +- examples.backend.src.request-handlers.body +- examples.backend.src.request-handlers.buffer +- examples.backend.src.request-handlers.event +- examples.backend.src.request-handlers.handleRequest +- examples.backend.src.request-handlers.limit +- examples.backend.src.request-handlers.offset +- examples.backend.src.request-handlers.parsed +- examples.backend.src.request-handlers.url +- examples.backend.src.request-handlers.validation - examples.backend.src.server.body -- examples.backend.src.server.buffer -- examples.backend.src.server.event - examples.backend.src.server.host -- examples.backend.src.server.limit -- examples.backend.src.server.offset - examples.backend.src.server.port - examples.backend.src.server.server - examples.backend.src.server.startBackend - examples.backend.src.server.store -- examples.backend.src.server.url -- examples.backend.src.server.validation - examples.backend.src.store.EventStore.enqueueEvent - examples.backend.src.store.EventStore.listEvents - examples.backend.src.store.EventStore.size @@ -5315,6 +5294,7 @@ entry_points: - src.communication.analyzer.output - src.communication.analyzer.participant - src.communication.analyzer.participantGit +- src.communication.analyzer.participantRows - src.communication.analyzer.participants - src.communication.analyzer.plans - src.communication.analyzer.record @@ -5331,6 +5311,7 @@ entry_points: - src.communication.analyzer.sortedRespondents - src.communication.analyzer.sourceRecords - src.communication.analyzer.type +- src.communication.analyzer.uniqueIssues - src.communication.analyzer.value - src.communication.identity.allowed - src.communication.identity.entry @@ -5343,15 +5324,19 @@ entry_points: - src.communication.identity.missing - src.communication.identity.normalized - src.communication.identity.owner +- src.communication.identity.participantId - src.communication.identity.participants - src.communication.identity.principals - src.communication.identity.registry - src.communication.identity.registryPath +- src.communication.identity.role - src.communication.identity.v1Path - src.communication.identity.v2Path - src.communication.identity.values - src.communication.intake-contract.IntakeError.allowed - src.communication.intake-contract.IntakeError.assertIntakeEnvelope +- src.communication.intake-contract.IntakeError.assertParticipant +- src.communication.intake-contract.IntakeError.assertPrincipal - src.communication.intake-contract.IntakeError.base - src.communication.intake-contract.IntakeError.diagnostic - src.communication.intake-contract.IntakeError.entry @@ -5363,6 +5348,7 @@ entry_points: - src.communication.intake-contract.IntakeError.principalKey - src.communication.intake-contract.IntakeError.record - src.communication.intake-contract.IntakeError.super +- src.communication.intake-contract.IntakeError.ticketId - src.communication.intake-contract.IntakeError.type - src.communication.intake-protobuf.byte - src.communication.intake-protobuf.data @@ -5370,16 +5356,18 @@ entry_points: - src.communication.intake-protobuf.decodeIntakeResult - src.communication.intake-protobuf.encodeIntakeEnvelope - src.communication.intake-protobuf.encodeIntakeResult +- src.communication.intake-protobuf.envelope - src.communication.intake-protobuf.field - src.communication.intake-protobuf.fieldStart -- src.communication.intake-protobuf.number - src.communication.intake-protobuf.numbers - src.communication.intake-protobuf.offset - src.communication.intake-protobuf.operation +- src.communication.intake-protobuf.parsed - src.communication.intake-protobuf.payload - src.communication.intake-protobuf.raw - src.communication.intake-protobuf.remaining - src.communication.intake-protobuf.strings +- src.communication.intake-protobuf.unknownFields - src.communication.intake-protobuf.value - src.communication.intake-protobuf.values - src.communication.intake-protobuf.wire @@ -5582,10 +5570,11 @@ entry_points: - src.core.io.writeJson - src.core.io.writeJsonl - src.core.io.writeText +- src.core.record-metadata.generationMetadata +- src.core.record-metadata.separator - src.core.record.buildRecord - src.core.record.rawExcerpt - src.core.record.seed -- src.core.record.separator - src.core.record.withRecordGeneration - src.core.schema.code-change.acceptance - src.core.schema.code-change.afterKnown @@ -5659,6 +5648,7 @@ entry_points: - src.core.schema.intent.lines - src.core.schema.intent.metadata - src.core.schema.intent.record +- src.core.schema.intent.recordId - src.core.schema.intent.recordIds - src.core.schema.intent.records - src.core.schema.intent.relation @@ -5761,27 +5751,30 @@ entry_points: - src.core.text.value - src.core.text.values - src.core.text.withoutAction -- src.diff.git.BINARY_EXTENSIONS +- src.diff.git-binary.BINARY_EXTENSIONS +- src.diff.git-binary.isProbablyBinary - src.diff.git.after +- src.diff.git.args - src.diff.git.before - src.diff.git.beforePath - src.diff.git.collectGitDiff - src.diff.git.diff -- src.diff.git.inside -- src.diff.git.maxFiles +- src.diff.git.diffs +- src.diff.git.normalized - src.diff.git.parts - src.diff.git.result -- src.diff.git.revision -- src.diff.git.root -- src.diff.git.staged +- src.diff.git.selected - src.diff.git.status +- src.diff.git.worktree - src.diff.reality.BADGE_CHAR - src.diff.reality.LABEL_CHAR - src.diff.reality.aligned - src.diff.reality.alignment - src.diff.reality.anchor - src.diff.reality.anchors +- src.diff.reality.body - src.diff.reality.bucket +- src.diff.reality.buildRealityRow - src.diff.reality.buildRealityView - src.diff.reality.bySeverity - src.diff.reality.bySize @@ -5789,6 +5782,7 @@ entry_points: - src.diff.reality.changelog - src.diff.reality.codes - src.diff.reality.color +- src.diff.reality.compareRealityRows - src.diff.reality.components - src.diff.reality.count - src.diff.reality.cx @@ -5798,8 +5792,10 @@ entry_points: - src.diff.reality.diagnosticsByRecord - src.diff.reality.documentedObservedTopics - src.diff.reality.fill +- src.diff.reality.footer - src.diff.reality.groups -- src.diff.reality.headerY +- src.diff.reality.header +- src.diff.reality.height - src.diff.reality.implementationAlignedTopics - src.diff.reality.index - src.diff.reality.isDeclared @@ -5808,12 +5804,14 @@ entry_points: - src.diff.reality.laneStep - src.diff.reality.laneX - src.diff.reality.lanes +- src.diff.reality.layout - src.diff.reality.maxRows - src.diff.reality.modulePaths - src.diff.reality.object - src.diff.reality.observed - src.diff.reality.observedRecords - src.diff.reality.observedTopics +- src.diff.reality.overflow - src.diff.reality.path - src.diff.reality.paths - src.diff.reality.pillWidth @@ -5821,7 +5819,6 @@ entry_points: - src.diff.reality.renderRealityMarkdown - src.diff.reality.renderRealitySvg - src.diff.reality.resolved -- src.diff.reality.rowHeight - src.diff.reality.rows - src.diff.reality.separator - src.diff.reality.status @@ -5833,13 +5830,31 @@ entry_points: - src.diff.reality.title - src.diff.reality.value - src.diff.reality.visible -- src.diff.reality.width - src.diff.reality.y - src.diff.svg.metricCard - src.diff.svg.sanitizeSourceLine - src.diff.svg.svgDocument - src.diff.svg.theme - src.diff.svg.truncate +- src.diff.text-myers.afterEqualX +- src.diff.text-myers.afterEqualY +- src.diff.text-myers.diag +- src.diff.text-myers.k +- src.diff.text-myers.m +- src.diff.text-myers.myers +- src.diff.text-myers.n +- src.diff.text-myers.nextX +- src.diff.text-myers.nextY +- src.diff.text-myers.point +- src.diff.text-myers.previous +- src.diff.text-myers.previousK +- src.diff.text-myers.previousX +- src.diff.text-myers.previousY +- src.diff.text-myers.startX +- src.diff.text-myers.state +- src.diff.text-myers.v +- src.diff.text-myers.x +- src.diff.text-myers.y - src.diff.text-render.changed - src.diff.text-render.charWidth - src.diff.text-render.columnWidth @@ -5880,28 +5895,18 @@ entry_points: - src.diff.text.context - src.diff.text.diffText - src.diff.text.end -- src.diff.text.k - src.diff.text.last - src.diff.text.lines -- src.diff.text.m - src.diff.text.maxCompareLines - src.diff.text.middleAfter - src.diff.text.middleBefore - src.diff.text.middleOps -- src.diff.text.n - src.diff.text.normalized -- src.diff.text.offset - src.diff.text.prefix -- src.diff.text.previousK -- src.diff.text.previousX -- src.diff.text.previousY - src.diff.text.start - src.diff.text.suffix - src.diff.text.summarizeLines - src.diff.text.truncated -- src.diff.text.v -- src.diff.text.x -- src.diff.text.y - src.evaluation.gold-cases.actual - src.evaluation.gold-cases.augmented - src.evaluation.gold-cases.byClass @@ -5933,10 +5938,14 @@ entry_points: - src.evaluation.gold-cases.observed - src.evaluation.gold-cases.proposals - src.evaluation.gold-cases.record +- src.evaluation.gold-cases.recordId - src.evaluation.gold-cases.recordIds - src.evaluation.gold-cases.records - src.evaluation.gold-cases.report +- src.evaluation.gold-cases.requestedCandidates - src.evaluation.gold-cases.rerank +- src.evaluation.gold-cases.reranker +- src.evaluation.gold-cases.restricted - src.evaluation.gold-cases.validation - src.evaluation.gold-cli.arg - src.evaluation.gold-cli.args @@ -5966,8 +5975,9 @@ entry_points: - src.evaluation.gold-types.assertGoldDataset - src.evaluation.gold-types.channels - src.evaluation.gold-types.dataset -- src.evaluation.gold-types.labels -- src.evaluation.gold-types.modules +- src.evaluation.gold-types.decisions +- src.evaluation.gold-types.recordLabels +- src.evaluation.gold-types.seenModules - src.evaluation.gold.actual - src.evaluation.gold.byChannel - src.evaluation.gold.byClass @@ -6355,6 +6365,8 @@ entry_points: - src.extractors.markdown.extractMarkdownIntent - src.extractors.markdown.pathResolver - src.extractors.markdown.todo +- src.extractors.nl-llm-helpers.NlAttemptError.NL_ACTION_SET +- src.extractors.nl-llm-helpers.NlAttemptError.NL_MODALITY_SET - src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT - src.extractors.nl-llm-helpers.NlAttemptError.NL_RESPONSE_CONTRACT - src.extractors.nl-llm-helpers.NlAttemptError.OBJECT_PLACEHOLDERS @@ -6462,6 +6474,7 @@ entry_points: - src.graph.diagnostics.detail - src.graph.diagnostics.diagnoseGraph - src.graph.diagnostics.grounded +- src.graph.diagnostics.hasDocumentedTargetEvidence - src.graph.diagnostics.hasLocationOnlyEvidence - src.graph.diagnostics.isEvidence - src.graph.diagnostics.left @@ -6571,53 +6584,58 @@ entry_points: - src.interfaces.a2a-card.payload - src.interfaces.a2a-card.sendAgentCard - src.interfaces.a2a-card.serialized -- src.interfaces.a2a-history.absolute -- src.interfaces.a2a-history.filePath -- src.interfaces.a2a-history.files +- src.interfaces.a2a-history.entries - src.interfaces.a2a-history.graphPath -- src.interfaces.a2a-history.issues - src.interfaces.a2a-history.items - src.interfaces.a2a-history.listIntentRuns -- src.interfaces.a2a-history.llm - src.interfaces.a2a-history.manifest - src.interfaces.a2a-history.manifestPath - src.interfaces.a2a-history.participant -- src.interfaces.a2a-history.participantSummary -- src.interfaces.a2a-history.participants - src.interfaces.a2a-history.role - src.interfaces.a2a-history.runDirectory - src.interfaces.a2a-history.runsDirectory -- src.interfaces.a2a-history.runtime - src.interfaces.a2a-history.severity - src.interfaces.a2a-history.ticket -- src.interfaces.a2a-history.value -- src.interfaces.a2a-history.warnings -- src.interfaces.a2a-message.action +- src.interfaces.a2a-message-command.action +- src.interfaces.a2a-message-command.first +- src.interfaces.a2a-message-command.key +- src.interfaces.a2a-message-command.nested +- src.interfaces.a2a-message-command.normalized +- src.interfaces.a2a-message-command.objectCommand +- src.interfaces.a2a-message-command.objectData +- src.interfaces.a2a-message-command.parseCommand +- src.interfaces.a2a-message-command.protobuf +- src.interfaces.a2a-message-command.protobufCommand +- src.interfaces.a2a-message-command.raw +- src.interfaces.a2a-message-command.stringValue +- src.interfaces.a2a-message-command.text - src.interfaces.a2a-message.clonePart - src.interfaces.a2a-message.content - src.interfaces.a2a-message.contextId - src.interfaces.a2a-message.ensureSupportedMessageContent - src.interfaces.a2a-message.extensions -- src.interfaces.a2a-message.first -- src.interfaces.a2a-message.key - src.interfaces.a2a-message.messageId - src.interfaces.a2a-message.metadata -- src.interfaces.a2a-message.nested - src.interfaces.a2a-message.normalizeUserMessage -- src.interfaces.a2a-message.normalized -- src.interfaces.a2a-message.objectData - src.interfaces.a2a-message.output -- src.interfaces.a2a-message.parseCommand - src.interfaces.a2a-message.parseMessage - src.interfaces.a2a-message.parseSendConfiguration -- src.interfaces.a2a-message.protobuf - src.interfaces.a2a-message.qualifier -- src.interfaces.a2a-message.raw - src.interfaces.a2a-message.referenceTaskIds -- src.interfaces.a2a-message.stringValue - src.interfaces.a2a-message.supported - src.interfaces.a2a-message.taskId -- src.interfaces.a2a-message.text +- src.interfaces.a2a-run-list-item.absolute +- src.interfaces.a2a-run-list-item.filePath +- src.interfaces.a2a-run-list-item.files +- src.interfaces.a2a-run-list-item.issues +- src.interfaces.a2a-run-list-item.llm +- src.interfaces.a2a-run-list-item.participantSummary +- src.interfaces.a2a-run-list-item.participants +- src.interfaces.a2a-run-list-item.runListItem +- src.interfaces.a2a-run-list-item.runtime +- src.interfaces.a2a-run-list-item.safePath +- src.interfaces.a2a-run-list-item.value +- src.interfaces.a2a-run-list-item.warnings - src.interfaces.a2a-task-store.cloneArtifact - src.interfaces.a2a-task-store.command - src.interfaces.a2a-task-store.compareTasksByUpdate @@ -6795,17 +6813,24 @@ entry_points: - src.llm.failure.classifyLlmFailure - src.llm.failure.message - src.llm.failure.rejectedLlmResponseMetadata -- src.llm.openrouter.OpenRouterClient.abortFromExternal -- src.llm.openrouter.OpenRouterClient.apiKey -- src.llm.openrouter.OpenRouterClient.availableModels +- src.llm.openrouter-request.abortFromExternal +- src.llm.openrouter-request.availableModels +- src.llm.openrouter-request.controller +- src.llm.openrouter-request.error +- src.llm.openrouter-request.listErrorMessage +- src.llm.openrouter-request.message +- src.llm.openrouter-request.parsed +- src.llm.openrouter-request.requestOpenRouter +- src.llm.openrouter-request.resolution +- src.llm.openrouter-request.response +- src.llm.openrouter-request.shouldRetryRequestWithoutSchema +- src.llm.openrouter-request.timeout - src.llm.openrouter.OpenRouterClient.chatJson - src.llm.openrouter.OpenRouterClient.chatJsonWithMetadata -- src.llm.openrouter.OpenRouterClient.chatText - src.llm.openrouter.OpenRouterClient.content - src.llm.openrouter.OpenRouterClient.controller +- src.llm.openrouter.OpenRouterClient.createModelError - src.llm.openrouter.OpenRouterClient.end -- src.llm.openrouter.OpenRouterClient.error -- src.llm.openrouter.OpenRouterClient.externalSignal - src.llm.openrouter.OpenRouterClient.fallback - src.llm.openrouter.OpenRouterClient.isConfigured - src.llm.openrouter.OpenRouterClient.message @@ -6868,6 +6893,7 @@ entry_points: - src.operations.validation.assertOperationPlan - src.operations.validation.assertVariableContract - src.operations.validation.byId +- src.operations.validation.castPlan - src.operations.validation.contract - src.operations.validation.coveredSteps - src.operations.validation.decision @@ -6875,8 +6901,10 @@ entry_points: - src.operations.validation.expectation - src.operations.validation.expectationIds - src.operations.validation.expectedHash +- src.operations.validation.expectedId - src.operations.validation.founderDecisionRequired - src.operations.validation.generation +- src.operations.validation.hasCommandStep - src.operations.validation.ids - src.operations.validation.parameters - src.operations.validation.plan @@ -6896,61 +6924,78 @@ entry_points: - src.operations.validation.visited - src.operations.validation.visiting - src.operations.validation.writers +- src.pipeline.run-helpers.appendLlmNotConfigured +- src.pipeline.run-helpers.codeChangePlans +- src.pipeline.run-helpers.codeChangeReview +- src.pipeline.run-helpers.codeChangeSourcePatches +- src.pipeline.run-helpers.collectCommunicationAnalysis +- src.pipeline.run-helpers.collectTargetHints +- src.pipeline.run-helpers.collectTaskSynthesis +- src.pipeline.run-helpers.communication +- src.pipeline.run-helpers.communicationStartedAt +- src.pipeline.run-helpers.createCodeChangeArtifacts +- src.pipeline.run-helpers.foundMissingDirectory +- src.pipeline.run-helpers.includeCommunication +- src.pipeline.run-helpers.missingDirectory +- src.pipeline.run-helpers.taskSynthesisAudit +- src.pipeline.run-helpers.taskSynthesisMode +- src.pipeline.run-helpers.todoContent +- src.pipeline.run-persistence.codeChangePlansPath +- src.pipeline.run-persistence.codeChangeReviewAuditPath +- src.pipeline.run-persistence.codeChangeReviewPath +- src.pipeline.run-persistence.codeChangeSourcePatchesPath +- src.pipeline.run-persistence.communicationAnalysisPath +- src.pipeline.run-persistence.communicationMarkdownPath +- src.pipeline.run-persistence.diagnosticsPath +- src.pipeline.run-persistence.filePath +- src.pipeline.run-persistence.graphPath +- src.pipeline.run-persistence.knownAudit +- src.pipeline.run-persistence.makePipelineManifest +- src.pipeline.run-persistence.message +- src.pipeline.run-persistence.persistFailedRun +- src.pipeline.run-persistence.persistPipelineArtifacts +- src.pipeline.run-persistence.reason +- src.pipeline.run-persistence.summaryConclusionsPath +- src.pipeline.run-persistence.summaryPath +- src.pipeline.run-persistence.taskSynthesisPath +- src.pipeline.run-persistence.todoPatchAuditPath +- src.pipeline.run-persistence.todoPatchPath +- src.pipeline.run-persistence.todoValidationPath +- src.pipeline.run-summary.collectSummary +- src.pipeline.run-summary.includeSummaryLlm +- src.pipeline.run-summary.summary +- src.pipeline.run-summary.summaryStartedAt - src.pipeline.run.allRecords - src.pipeline.run.ast - src.pipeline.run.baseOutput -- src.pipeline.run.codeChangePlans -- src.pipeline.run.codeChangePlansPath -- src.pipeline.run.codeChangeReview -- src.pipeline.run.codeChangeReviewAuditPath -- src.pipeline.run.codeChangeReviewPath -- src.pipeline.run.codeChangeSourcePatches -- src.pipeline.run.codeChangeSourcePatchesPath -- src.pipeline.run.communication - src.pipeline.run.communicationAnalysis -- src.pipeline.run.communicationAnalysisPath - src.pipeline.run.communicationAudit -- src.pipeline.run.communicationInputPresent -- src.pipeline.run.communicationMarkdownPath -- src.pipeline.run.communicationStartedAt -- src.pipeline.run.configuration +- src.pipeline.run.communicationInput +- src.pipeline.run.communicationSyntheses - src.pipeline.run.configurationExtraction +- src.pipeline.run.context - src.pipeline.run.deterministicDocs - src.pipeline.run.deterministicDocumentFiles - src.pipeline.run.diagnostics -- src.pipeline.run.diagnosticsPath - src.pipeline.run.docs - src.pipeline.run.documentationStartedAt -- src.pipeline.run.filePath +- src.pipeline.run.execution - src.pipeline.run.generatedAt - src.pipeline.run.git - src.pipeline.run.graph -- src.pipeline.run.graphPath -- src.pipeline.run.includeCommunication -- src.pipeline.run.includeSummaryLlm -- src.pipeline.run.knownAudit +- src.pipeline.run.manifest +- src.pipeline.run.manifestPath - src.pipeline.run.markdown -- src.pipeline.run.message -- src.pipeline.run.missingDirectory +- src.pipeline.run.markdownAudit - src.pipeline.run.naturalLanguageAudit -- src.pipeline.run.reason +- src.pipeline.run.persisted - src.pipeline.run.result - src.pipeline.run.root - src.pipeline.run.runDirectory - src.pipeline.run.runId - src.pipeline.run.runPipeline - src.pipeline.run.runtime -- src.pipeline.run.summary -- src.pipeline.run.summaryConclusionsPath -- src.pipeline.run.summaryPath -- src.pipeline.run.summaryStartedAt -- src.pipeline.run.taskSynthesisAudit -- src.pipeline.run.taskSynthesisMode -- src.pipeline.run.taskSynthesisPath -- src.pipeline.run.todoContent -- src.pipeline.run.todoPatchAuditPath -- src.pipeline.run.todoPatchPath -- src.pipeline.run.todoValidationPath +- src.pipeline.run.taskSynthesis - src.sdk.typescript.Todo2CodeClient.a2a - src.sdk.typescript.Todo2CodeClient.applySourcePatch - src.sdk.typescript.Todo2CodeClient.applyTodo @@ -7157,74 +7202,50 @@ entry_points: - src.synthesis.code-change-path.normalized - src.synthesis.code-change-path.segments - src.synthesis.code-change-plan.implementation-diagnostics.collectImplementationDiagnostics -- src.synthesis.code-change-plan.implementation-helpers.absolute -- src.synthesis.code-change-plan.implementation-helpers.acceptance -- src.synthesis.code-change-plan.implementation-helpers.acceptances -- src.synthesis.code-change-plan.implementation-helpers.accepted -- src.synthesis.code-change-plan.implementation-helpers.acceptedCount -- src.synthesis.code-change-plan.implementation-helpers.after -- src.synthesis.code-change-plan.implementation-helpers.afterById -- src.synthesis.code-change-plan.implementation-helpers.afterDiagnostics -- src.synthesis.code-change-plan.implementation-helpers.applyCodeChangeSourcePatch -- src.synthesis.code-change-plan.implementation-helpers.base -- src.synthesis.code-change-plan.implementation-helpers.baseLines -- src.synthesis.code-change-plan.implementation-helpers.before -- src.synthesis.code-change-plan.implementation-helpers.beforeDiagnosticIds -- src.synthesis.code-change-plan.implementation-helpers.body -- src.synthesis.code-change-plan.implementation-helpers.candidates -- src.synthesis.code-change-plan.implementation-helpers.changes -- src.synthesis.code-change-plan.implementation-helpers.closeCodeChanges -- src.synthesis.code-change-plan.implementation-helpers.conclusions -- src.synthesis.code-change-plan.implementation-helpers.confidence -- src.synthesis.code-change-plan.implementation-helpers.context -- src.synthesis.code-change-plan.implementation-helpers.createRepositoryPathProbe -- src.synthesis.code-change-plan.implementation-helpers.current -- src.synthesis.code-change-plan.implementation-helpers.evaluatedAt -- src.synthesis.code-change-plan.implementation-helpers.evidence -- src.synthesis.code-change-plan.implementation-helpers.existed -- src.synthesis.code-change-plan.implementation-helpers.existing -- src.synthesis.code-change-plan.implementation-helpers.exists -- src.synthesis.code-change-plan.implementation-helpers.expectedPaths -- src.synthesis.code-change-plan.implementation-helpers.fileHashesAfter -- src.synthesis.code-change-plan.implementation-helpers.generatedAt -- src.synthesis.code-change-plan.implementation-helpers.hashPaths -- src.synthesis.code-change-plan.implementation-helpers.header -- src.synthesis.code-change-plan.implementation-helpers.hunks -- src.synthesis.code-change-plan.implementation-helpers.idempotentResult -- src.synthesis.code-change-plan.implementation-helpers.lines -- src.synthesis.code-change-plan.implementation-helpers.lock -- src.synthesis.code-change-plan.implementation-helpers.mark -- src.synthesis.code-change-plan.implementation-helpers.matchingConclusions -- src.synthesis.code-change-plan.implementation-helpers.matchingProposals -- src.synthesis.code-change-plan.implementation-helpers.maxPlans -- src.synthesis.code-change-plan.implementation-helpers.newCount -- src.synthesis.code-change-plan.implementation-helpers.normalized -- src.synthesis.code-change-plan.implementation-helpers.normalizedDiff -- src.synthesis.code-change-plan.implementation-helpers.now -- src.synthesis.code-change-plan.implementation-helpers.oldCount -- src.synthesis.code-change-plan.implementation-helpers.oldIndex -- src.synthesis.code-change-plan.implementation-helpers.output -- src.synthesis.code-change-plan.implementation-helpers.patch -- src.synthesis.code-change-plan.implementation-helpers.plan -- src.synthesis.code-change-plan.implementation-helpers.planIds -- src.synthesis.code-change-plan.implementation-helpers.plans -- src.synthesis.code-change-plan.implementation-helpers.prepared -- src.synthesis.code-change-plan.implementation-helpers.proposals -- src.synthesis.code-change-plan.implementation-helpers.proposeCodeChangePlans -- src.synthesis.code-change-plan.implementation-helpers.rationale -- src.synthesis.code-change-plan.implementation-helpers.reasons -- src.synthesis.code-change-plan.implementation-helpers.receipt -- src.synthesis.code-change-plan.implementation-helpers.receiptPath -- src.synthesis.code-change-plan.implementation-helpers.relatedRecords -- src.synthesis.code-change-plan.implementation-helpers.relative -- src.synthesis.code-change-plan.implementation-helpers.request -- src.synthesis.code-change-plan.implementation-helpers.rollbackErrors -- src.synthesis.code-change-plan.implementation-helpers.root -- src.synthesis.code-change-plan.implementation-helpers.semantic -- src.synthesis.code-change-plan.implementation-helpers.sourceIntents -- src.synthesis.code-change-plan.implementation-helpers.symbols -- src.synthesis.code-change-plan.implementation-helpers.target -- src.synthesis.code-change-plan.implementation-helpers.targetedDiagnosticIds +- src.synthesis.code-change-plan.implementation-helpers-acceptance.acceptance +- src.synthesis.code-change-plan.implementation-helpers-acceptance.accepted +- src.synthesis.code-change-plan.implementation-helpers-acceptance.afterById +- src.synthesis.code-change-plan.implementation-helpers-acceptance.afterDiagnostics +- src.synthesis.code-change-plan.implementation-helpers-acceptance.beforeDiagnosticIds +- src.synthesis.code-change-plan.implementation-helpers-acceptance.context +- src.synthesis.code-change-plan.implementation-helpers-acceptance.evaluateCodeChangeAcceptance +- src.synthesis.code-change-plan.implementation-helpers-acceptance.evaluatedAt +- src.synthesis.code-change-plan.implementation-helpers-acceptance.reasons +- src.synthesis.code-change-plan.implementation-helpers-acceptance.targetedDiagnosticIds +- src.synthesis.code-change-plan.implementation-helpers-close.acceptances +- src.synthesis.code-change-plan.implementation-helpers-close.acceptedCount +- src.synthesis.code-change-plan.implementation-helpers-close.afterDiagnostics +- src.synthesis.code-change-plan.implementation-helpers-close.closeCodeChanges +- src.synthesis.code-change-plan.implementation-helpers-close.context +- src.synthesis.code-change-plan.implementation-helpers-close.evaluatedAt +- src.synthesis.code-change-plan.implementation-helpers-close.planIds +- src.synthesis.code-change-plan.implementation-helpers-plans.absolute +- src.synthesis.code-change-plan.implementation-helpers-plans.base +- src.synthesis.code-change-plan.implementation-helpers-plans.candidates +- src.synthesis.code-change-plan.implementation-helpers-plans.changes +- src.synthesis.code-change-plan.implementation-helpers-plans.conclusions +- src.synthesis.code-change-plan.implementation-helpers-plans.confidence +- src.synthesis.code-change-plan.implementation-helpers-plans.context +- src.synthesis.code-change-plan.implementation-helpers-plans.createRepositoryPathProbe +- src.synthesis.code-change-plan.implementation-helpers-plans.evidence +- src.synthesis.code-change-plan.implementation-helpers-plans.exists +- src.synthesis.code-change-plan.implementation-helpers-plans.generatedAt +- src.synthesis.code-change-plan.implementation-helpers-plans.matchingConclusions +- src.synthesis.code-change-plan.implementation-helpers-plans.matchingProposals +- src.synthesis.code-change-plan.implementation-helpers-plans.maxPlans +- src.synthesis.code-change-plan.implementation-helpers-plans.normalized +- src.synthesis.code-change-plan.implementation-helpers-plans.plan +- src.synthesis.code-change-plan.implementation-helpers-plans.plans +- src.synthesis.code-change-plan.implementation-helpers-plans.proposals +- src.synthesis.code-change-plan.implementation-helpers-plans.proposeCodeChangePlans +- src.synthesis.code-change-plan.implementation-helpers-plans.rationale +- src.synthesis.code-change-plan.implementation-helpers-plans.relatedRecords +- src.synthesis.code-change-plan.implementation-helpers-plans.semantic +- src.synthesis.code-change-plan.implementation-helpers-plans.sourceIntents +- src.synthesis.code-change-plan.implementation-helpers-plans.symbols +- src.synthesis.code-change-plan.implementation-helpers-plans.target +- src.synthesis.code-change-plan.implementation-helpers-shared.deterministicGeneration +- src.synthesis.code-change-plan.implementation-helpers-shared.uniqueSorted - src.synthesis.code-change-plan.implementation-indexing.index - src.synthesis.code-change-plan.implementation-indexing.indexConclusionsByDiagnostic - src.synthesis.code-change-plan.implementation-indexing.indexProposalsByDiagnostic @@ -7235,49 +7256,93 @@ entry_points: - src.synthesis.code-change-plan.implementation-review.generation - src.synthesis.code-change-plan.implementation-review.lines - src.synthesis.code-change-plan.implementation-review.markdown +- src.synthesis.code-change-plan.implementation-review.planHashes +- src.synthesis.code-change-plan.implementation-review.planIds - src.synthesis.code-change-plan.implementation-review.symbols - src.synthesis.code-change-plan.implementation-semantic.buildPlanEvidence - src.synthesis.code-change-plan.implementation-semantic.buildPlanSemantic - src.synthesis.code-change-plan.implementation-semantic.level - src.synthesis.code-change-plan.implementation-semantic.object - src.synthesis.code-change-plan.implementation-semantic.record -- src.synthesis.code-change-plan.implementation-source-patch.actual -- src.synthesis.code-change-plan.implementation-source-patch.allowed -- src.synthesis.code-change-plan.implementation-source-patch.allowedPaths -- src.synthesis.code-change-plan.implementation-source-patch.assertSourcePatchObject -- src.synthesis.code-change-plan.implementation-source-patch.bare -- src.synthesis.code-change-plan.implementation-source-patch.context -- src.synthesis.code-change-plan.implementation-source-patch.createCodeChangeSourcePatchSet -- src.synthesis.code-change-plan.implementation-source-patch.createdAt -- src.synthesis.code-change-plan.implementation-source-patch.criteria -- src.synthesis.code-change-plan.implementation-source-patch.editContext -- src.synthesis.code-change-plan.implementation-source-patch.editPath -- src.synthesis.code-change-plan.implementation-source-patch.editPaths -- src.synthesis.code-change-plan.implementation-source-patch.edits -- src.synthesis.code-change-plan.implementation-source-patch.ensureSourcePatchEditAction -- src.synthesis.code-change-plan.implementation-source-patch.ensureSourcePatchEditInstruction -- src.synthesis.code-change-plan.implementation-source-patch.expectedChanges -- src.synthesis.code-change-plan.implementation-source-patch.expectedHash -- src.synthesis.code-change-plan.implementation-source-patch.expectedPlan -- src.synthesis.code-change-plan.implementation-source-patch.expectedPlanIds -- src.synthesis.code-change-plan.implementation-source-patch.generatedAt -- src.synthesis.code-change-plan.implementation-source-patch.graphFingerprint -- src.synthesis.code-change-plan.implementation-source-patch.normalized -- src.synthesis.code-change-plan.implementation-source-patch.normalizedEdit -- src.synthesis.code-change-plan.implementation-source-patch.normalizedPath -- src.synthesis.code-change-plan.implementation-source-patch.patch -- src.synthesis.code-change-plan.implementation-source-patch.patchHash -- src.synthesis.code-change-plan.implementation-source-patch.patchIds -- src.synthesis.code-change-plan.implementation-source-patch.patches -- src.synthesis.code-change-plan.implementation-source-patch.path -- src.synthesis.code-change-plan.implementation-source-patch.paths -- src.synthesis.code-change-plan.implementation-source-patch.rawDiff -- src.synthesis.code-change-plan.implementation-source-patch.result -- src.synthesis.code-change-plan.implementation-source-patch.semantic -- src.synthesis.code-change-plan.implementation-source-patch.set -- src.synthesis.code-change-plan.implementation-source-patch.stripped -- src.synthesis.code-change-plan.implementation-source-patch.symbols -- src.synthesis.code-change-plan.implementation-source-patch.unifiedDiff +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.absolute +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.actual +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.after +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.applyCodeChangeSourcePatch +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.before +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.current +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.existed +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.existing +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.exists +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.expectedPaths +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.fileHashesAfter +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.hashPaths +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.idempotentResult +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.lock +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.now +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.patch +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.prepared +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.receipt +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.receiptPath +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.relative +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.request +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.rollbackErrors +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.root +- src.synthesis.code-change-plan.implementation-source-patch-apply-core.target +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.applyUnifiedDiffToText +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.baseLines +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.body +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.context +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.header +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.hunks +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.lines +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.mark +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.newCount +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.normalizedDiff +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.oldCount +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.oldIndex +- src.synthesis.code-change-plan.implementation-source-patch-apply-diff.output +- src.synthesis.code-change-plan.implementation-source-patch-assert.actual +- src.synthesis.code-change-plan.implementation-source-patch-assert.allowed +- src.synthesis.code-change-plan.implementation-source-patch-assert.assertCodeChangeSourcePatchSet +- src.synthesis.code-change-plan.implementation-source-patch-assert.context +- src.synthesis.code-change-plan.implementation-source-patch-assert.editContext +- src.synthesis.code-change-plan.implementation-source-patch-assert.editPath +- src.synthesis.code-change-plan.implementation-source-patch-assert.editPaths +- src.synthesis.code-change-plan.implementation-source-patch-assert.ensureSourcePatchEditAction +- src.synthesis.code-change-plan.implementation-source-patch-assert.ensureSourcePatchEditInstruction +- src.synthesis.code-change-plan.implementation-source-patch-assert.expectedChanges +- src.synthesis.code-change-plan.implementation-source-patch-assert.expectedHash +- src.synthesis.code-change-plan.implementation-source-patch-assert.expectedPlan +- src.synthesis.code-change-plan.implementation-source-patch-assert.expectedPlanIds +- src.synthesis.code-change-plan.implementation-source-patch-assert.marker +- src.synthesis.code-change-plan.implementation-source-patch-assert.normalizedEdit +- src.synthesis.code-change-plan.implementation-source-patch-assert.normalizedPath +- src.synthesis.code-change-plan.implementation-source-patch-assert.patch +- src.synthesis.code-change-plan.implementation-source-patch-assert.patchIds +- src.synthesis.code-change-plan.implementation-source-patch-assert.paths +- src.synthesis.code-change-plan.implementation-source-patch-assert.set +- src.synthesis.code-change-plan.implementation-source-patch-create.allowedPaths +- src.synthesis.code-change-plan.implementation-source-patch-create.context +- src.synthesis.code-change-plan.implementation-source-patch-create.createCodeChangeSourcePatchSet +- src.synthesis.code-change-plan.implementation-source-patch-create.createdAt +- src.synthesis.code-change-plan.implementation-source-patch-create.criteria +- src.synthesis.code-change-plan.implementation-source-patch-create.edits +- src.synthesis.code-change-plan.implementation-source-patch-create.generatedAt +- src.synthesis.code-change-plan.implementation-source-patch-create.graphFingerprint +- src.synthesis.code-change-plan.implementation-source-patch-create.normalizedPath +- src.synthesis.code-change-plan.implementation-source-patch-create.patchHash +- src.synthesis.code-change-plan.implementation-source-patch-create.patches +- src.synthesis.code-change-plan.implementation-source-patch-create.path +- src.synthesis.code-change-plan.implementation-source-patch-create.rawDiff +- src.synthesis.code-change-plan.implementation-source-patch-create.result +- src.synthesis.code-change-plan.implementation-source-patch-create.semantic +- src.synthesis.code-change-plan.implementation-source-patch-create.symbols +- src.synthesis.code-change-plan.implementation-source-patch-create.unifiedDiff +- src.synthesis.code-change-plan.implementation-source-patch-diff.bare +- src.synthesis.code-change-plan.implementation-source-patch-diff.normalizeUnifiedDiff +- src.synthesis.code-change-plan.implementation-source-patch-diff.normalized +- src.synthesis.code-change-plan.implementation-source-patch-diff.normalizedPath +- src.synthesis.code-change-plan.implementation-source-patch-diff.stripped - src.synthesis.code-change-plan.implementation-targets.collectTarget - src.synthesis.code-change-plan.implementation-targets.paths - src.synthesis.code-change-plan.implementation-targets.symbols @@ -7419,25 +7484,25 @@ entry_points: - src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - src.watch.watcher.absolute - src.watch.watcher.absoluteRoot +- src.watch.watcher.configuration - src.watch.watcher.current - src.watch.watcher.defaultSleep - src.watch.watcher.delta -- src.watch.watcher.lastReportStartedAt +- src.watch.watcher.initialSnapshot - src.watch.watcher.matcher - src.watch.watcher.maxFiles - src.watch.watcher.minIntervalMs - src.watch.watcher.onAbort -- src.watch.watcher.pending - src.watch.watcher.previous - src.watch.watcher.rest - src.watch.watcher.result - src.watch.watcher.root +- src.watch.watcher.runtime - src.watch.watcher.scanIntervalMs - src.watch.watcher.shown -- src.watch.watcher.signal -- src.watch.watcher.snapshot - src.watch.watcher.startedAt - src.watch.watcher.timer - src.watch.watcher.waitMs - src.watch.watcher.watchRepository +- src.web.diff-ui-script.loadRuns - src.web.diff-ui.diffUiHtml diff --git a/project/compact_flow.mmd b/project/compact_flow.mmd index 55f03e8..173ecdf 100644 --- a/project/compact_flow.mmd +++ b/project/compact_flow.mmd @@ -1,18 +1,15 @@ flowchart TD -%% generated in 0.09s +%% generated in 0.04s examples__frontend["examples.frontend
25 funcs"] java__JavaAstExtract["java.JavaAstExtract
12 funcs"] python__ast_extract["python.ast_extract
18 funcs"] scripts__research["scripts.research
71 funcs"] sdk__python["sdk.python
68 funcs"] - src__diff["src.diff
183 funcs"] - src__graph["src.graph
226 funcs"] + src__graph["src.graph
227 funcs"] src__live["src.live
60 funcs"] - src__synthesis["src.synthesis
461 funcs"] + src__synthesis["src.synthesis
477 funcs"] scripts__research ==>|7| src__live - python__ast_extract ==>|4| src__diff sdk__python ==>|4| src__synthesis - scripts__research -->|2| src__diff sdk__python -->|2| java__JavaAstExtract scripts__research -->|1| src__synthesis scripts__research -->|1| src__graph diff --git a/project/compact_flow.png b/project/compact_flow.png index edddffb81fb4da5f281c9f87a989ee404ee425b7..ba631114b26c7b7a5ca34a348456761462417b4f 100644 GIT binary patch literal 32714 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

Uw8x+_|(Gsor{j&JGrSqL`pMHl?ny zchwlkT0j1nci7Pmkdg7B@3hl+)*oeW`S%6%aESNG|DV3{e|ustU*5fY_xEp`=iU|Y f;=>zkhI)s*@2#c9%UBP*^G;G!PNZ7MAmD!iP{}eM literal 37211 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 A%K!iX diff --git a/project/context.md b/project/context.md index 0207a49..c2c4270 100644 --- a/project/context.md +++ b/project/context.md @@ -5,12 +5,12 @@ - **Project**: /home/tom/github/semcod/todo2code - **Primary Language**: typescript -- **Languages**: typescript: 152, json: 40, python: 16, javascript: 15, shell: 8 +- **Languages**: typescript: 173, json: 40, python: 16, javascript: 15, shell: 8 - **Analysis Mode**: static -- **Total Functions**: 3918 -- **Total Classes**: 392 -- **Modules**: 260 -- **Entry Points**: 2687 +- **Total Functions**: 4129 +- **Total Classes**: 404 +- **Modules**: 281 +- **Entry Points**: 2776 ## Architecture by Module @@ -19,50 +19,49 @@ - **Classes**: 1 - **File**: `cli.ts` -### src.synthesis.code-change-plan.implementation-helpers -- **Functions**: 147 -- **Classes**: 16 -- **File**: `implementation-helpers.ts` - ### src.services.actions - **Functions**: 145 - **Classes**: 1 - **File**: `actions.ts` -### src.synthesis.code-change-plan.implementation-source-patch -- **Functions**: 103 -- **Classes**: 5 -- **File**: `implementation-source-patch.ts` - ### src.interfaces.a2a-task-store - **Functions**: 101 - **Classes**: 3 - **File**: `a2a-task-store.ts` +### src.diff.reality +- **Functions**: 97 +- **Classes**: 4 +- **File**: `reality.ts` + +### src.communication.analyzer +- **Functions**: 88 +- **Classes**: 3 +- **File**: `analyzer.ts` + ### src.communication.intake-service - **Functions**: 82 - **Classes**: 2 - **File**: `intake-service.ts` -### src.communication.analyzer -- **Functions**: 79 -- **Classes**: 3 -- **File**: `analyzer.ts` +### src.communication.intake-contract +- **Functions**: 76 +- **Classes**: 7 +- **File**: `intake-contract.ts` -### src.diff.reality -- **Functions**: 78 -- **Classes**: 3 -- **File**: `reality.ts` +### src.evaluation.gold-cases +- **Functions**: 75 +- **Classes**: 4 +- **File**: `gold-cases.ts` + +### src.operations.validation +- **Functions**: 75 +- **File**: `validation.ts` ### src.core.text - **Functions**: 66 - **File**: `text.ts` -### src.pipeline.run -- **Functions**: 65 -- **Classes**: 1 -- **File**: `run.ts` - ### src.extractors.git - **Functions**: 64 - **Classes**: 6 @@ -73,11 +72,6 @@ - **Classes**: 1 - **File**: `diagnostics.ts` -### src.evaluation.gold-cases -- **Functions**: 57 -- **Classes**: 4 -- **File**: `gold-cases.ts` - ### src.comparison.workspace - **Functions**: 56 - **Classes**: 3 @@ -88,30 +82,35 @@ - **Classes**: 1 - **File**: `linker.ts` +### src.synthesis.code-change-plan.implementation-source-patch-assert +- **Functions**: 55 +- **Classes**: 2 +- **File**: `implementation-source-patch-assert.ts` + +### src.synthesis.code-change-plan.implementation-source-patch-apply-core +- **Functions**: 54 +- **Classes**: 6 +- **File**: `implementation-source-patch-apply-core.ts` + ### src.synthesis.todo-patch - **Functions**: 53 - **Classes**: 5 - **File**: `todo-patch.ts` -### src.diff.text -- **Functions**: 53 -- **Classes**: 1 -- **File**: `text.ts` - ### src.extractors.communication-helpers - **Functions**: 49 - **Classes**: 3 - **File**: `communication-helpers.ts` -### src.llm.openrouter -- **Functions**: 49 -- **Classes**: 7 -- **File**: `openrouter.ts` - ### src.interfaces.a2a - **Functions**: 48 - **File**: `a2a.ts` +### sdk.typescript.src +- **Functions**: 48 +- **Classes**: 14 +- **File**: `index.ts` + ## Key Entry Points Main execution flows into the system: @@ -119,30 +118,18 @@ Main execution flows into the system: ### sdk.python.examples.basic.main - **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result -### src.pipeline.run.runPipeline -- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited - ### scripts.research.rank-intent-graph-embeddings.main - **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode ### src.comparison.workspace.compareWorkspaceIntent - **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory -### src.communication.analyzer.analyzeCommunication -- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set - -### src.interfaces.a2a-message.parseCommand -- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim - ### scripts.research.evaluate-embedding-pairs.main - **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation-indexing.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text ### src.interfaces.intake_cli.main - **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument -### src.operations.validation.assertOperationPlan -- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration - ### src.comparison.workspace.temporaryParent - **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs @@ -206,6 +193,18 @@ Main execution flows into the system: ### src.synthesis.todo-patch.applyTodoPatch - **Calls**: src.synthesis.todo-patch.all, src.synthesis.todo-patch.readText, src.synthesis.todo-patch.assertTodoPatchArtifact, src.synthesis.todo-patch.sha256, src.synthesis.todo-patch.Error, src.synthesis.todo-patch.assertApproval, src.synthesis.todo-patch.ensureDir, src.synthesis.todo-patch.dirname +### src.extractors.changelog.extractChangelog +- **Calls**: src.extractors.changelog.resolve, src.extractors.changelog.pathExists, src.extractors.changelog.readText, src.extractors.changelog.relativePosix, src.extractors.changelog.split, src.extractors.changelog.match, src.extractors.changelog.trim, src.extractors.changelog.readListBlock + +### src.graph.diff.diffIntentGraphs +- **Calls**: src.graph.diff.assertGraph, src.graph.diff.Map, src.graph.diff.map, src.graph.diff.has, src.graph.diff.push, src.graph.diff.groupRecords, src.graph.diff.Set, src.graph.diff.keys + +### php.ast_extract.parseFile +- **Calls**: php.ast_extract.file_get_contents, php.ast_extract.RuntimeException, php.ast_extract.preg_split, php.ast_extract.token_get_all, php.ast_extract.foreach, php.ast_extract.normalizedToken, php.ast_extract.substr_count, php.ast_extract.defined + +### src.cli.handleCommunication +- **Calls**: src.cli.resolve, src.cli.all, src.cli.extractCommunicationIntentAudited, src.cli.optionString, src.cli.optionNullableString, src.cli.optionLlmMode, src.cli.extractGitIntent, src.cli.optionNumber + ## Process Flows Key execution flows identified: @@ -215,57 +214,57 @@ Key execution flows identified: main [sdk.python.examples.basic] ``` -### Flow 2: runPipeline +### Flow 2: compareWorkspaceIntent ``` -runPipeline [src.pipeline.run] +compareWorkspaceIntent [src.comparison.workspace] + └─> git + └─> execFileAsync ``` -### Flow 3: compareWorkspaceIntent +### Flow 3: temporaryParent ``` -compareWorkspaceIntent [src.comparison.workspace] +temporaryParent [src.comparison.workspace] └─> git └─> execFileAsync ``` -### Flow 4: analyzeCommunication +### Flow 4: baseWorktree ``` -analyzeCommunication [src.communication.analyzer] +baseWorktree [src.comparison.workspace] + └─> git + └─> execFileAsync ``` -### Flow 5: parseCommand +### Flow 5: extractTodo ``` -parseCommand [src.interfaces.a2a-message] +extractTodo [src.extractors.todo] ``` -### Flow 6: assertOperationPlan +### Flow 6: makefile ``` -assertOperationPlan [src.operations.validation] - └─> objectValue - └─> exactKeys +makefile [scripts.verify-env-contract] ``` -### Flow 7: temporaryParent +### Flow 7: extractCommunicationIntentAudited ``` -temporaryParent [src.comparison.workspace] - └─> git - └─> execFileAsync +extractCommunicationIntentAudited [src.communication.llm.implementation.CommunicationLlmRequiredError] ``` -### Flow 8: baseWorktree +### Flow 8: extractNlIntentAudited ``` -baseWorktree [src.comparison.workspace] - └─> git - └─> execFileAsync +extractNlIntentAudited [src.extractors.nl-llm.NlLlmRequiredError] + └─> assertNlExtractionOptions ``` -### Flow 9: extractTodo +### Flow 9: linkIntentRecords ``` -extractTodo [src.extractors.todo] +linkIntentRecords [src.graph.linker] ``` -### Flow 10: makefile +### Flow 10: baseUrl ``` -makefile [scripts.verify-env-contract] +baseUrl [sdk.typescript.examples.basic] + └─> health ``` ## Key Classes @@ -274,18 +273,14 @@ makefile [scripts.verify-env-contract] - **Methods**: 82 - **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId -### src.llm.openrouter.OpenRouterClient -- **Methods**: 48 -- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response +### src.communication.intake-contract.IntakeError +- **Methods**: 76 +- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.validateIntakeEnvelopeHeader, src.communication.intake-contract.IntakeError.validateIntakeEnvelopeTimestamp, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.assertQuery ### sdk.typescript.src.T2CClient - **Methods**: 46 - **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask -### src.communication.intake-contract.IntakeError -- **Methods**: 44 -- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base - ### src.semantic.reranker-llm.SemanticRerankerRequiredError - **Methods**: 43 - **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response @@ -302,6 +297,14 @@ Example: - **Methods**: 34 - **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace +### src.llm.openrouter.OpenRouterClient +- **Methods**: 33 +- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response + +### src.extractors.nl-llm-helpers.NlAttemptError +- **Methods**: 31 +- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit + ### src.extractors.markdown-llm-helpers.MarkdownAttemptError - **Methods**: 30 - **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering @@ -310,10 +313,6 @@ Example: - **Methods**: 29 - **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results -### src.extractors.nl-llm-helpers.NlAttemptError -- **Methods**: 28 -- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit - ### sdk.php.src.Client.Todo2Code.Client - **Methods**: 27 - **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs @@ -359,6 +358,14 @@ Example: Key functions that process and transform data: +### examples.backend.src.request-handlers.parseOffset +- **Output to**: examples.backend.src.request-handlers.Number, examples.backend.src.request-handlers.isFinite + +### examples.backend.src.request-handlers.parsed + +### examples.backend.src.request-handlers.parseLimit +- **Output to**: examples.backend.src.request-handlers.Number, examples.backend.src.request-handlers.isFinite + ### examples.backend.src.validation.validateEventPayload - **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join @@ -423,15 +430,6 @@ Key functions that process and transform data: ### src.services.actions.parseCommunicationGraphFilter - **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue -### src.core.ignore.parseIgnoreFile -- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter - -### src.core.schema.code-change.validateCodeChangePlanContext -- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue - -### src.core.schema.conclusions.validateGroundedContext -- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test - ## Behavioral Patterns ### recursion_dotted_name @@ -449,21 +447,18 @@ Key functions that process and transform data: Functions exposed as public API (no underscore prefix): - `sdk.python.examples.basic.main` - 62 calls -- `src.pipeline.run.runPipeline` - 56 calls - `scripts.research.rank-intent-graph-embeddings.main` - 43 calls - `src.comparison.workspace.compareWorkspaceIntent` - 40 calls - `sdk.rust.src.client.parse_http_response` - 37 calls -- `src.web.diff-ui.diffUiScriptMarkup` - 36 calls -- `src.communication.analyzer.analyzeCommunication` - 35 calls -- `src.interfaces.a2a-message.parseCommand` - 33 calls - `sdk.rust.examples.basic.run` - 33 calls +- `src.pipeline.run.executePipeline` - 31 calls - `scripts.research.evaluate-embedding-pairs.main` - 30 calls - `src.interfaces.intake_cli.main` - 29 calls -- `src.operations.validation.assertOperationPlan` - 28 calls - `src.comparison.workspace.temporaryParent` - 25 calls - `src.comparison.workspace.baseWorktree` - 25 calls - `sdk.go.examples.basic.main.run` - 25 calls - `src.extractors.todo.extractTodo` - 24 calls +- `src.interfaces.a2a-message-command.looksLikeJson` - 24 calls - `scripts.verify-env-contract.makefile` - 24 calls - `python.ast_extract.main` - 24 calls - `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls @@ -486,8 +481,11 @@ Functions exposed as public API (no underscore prefix): - `src.extractors.todo.lines` - 20 calls - `src.synthesis.todo-patch.createTodoPatch` - 20 calls - `src.synthesis.todo-patch.applyTodoPatch` - 20 calls -- `src.llm.openrouter.OpenRouterClient.request` - 20 calls -- `src.diff.reality.buildRealityView` - 20 calls +- `src.communication.intake-service.GovernedIntakeService.validateProjection` - 20 calls +- `src.extractors.changelog.extractChangelog` - 19 calls +- `src.graph.diff.diffIntentGraphs` - 19 calls +- `php.ast_extract.parseFile` - 19 calls +- `src.cli.handleCommunication` - 18 calls ## System Interactions @@ -498,11 +496,6 @@ graph TD main --> get main --> T2CClient main --> print - runPipeline --> resolve - runPipeline --> pathExists - runPipeline --> Error - runPipeline --> newRunId - runPipeline --> join main --> parse_args main --> read_bytes main --> loads @@ -512,19 +505,24 @@ graph TD compareWorkspaceInte --> trim compareWorkspaceInte --> relative compareWorkspaceInte --> startsWith - analyzeCommunication --> assertIntentGraph - analyzeCommunication --> filter - analyzeCommunication --> validateSyntheses - analyzeCommunication --> evidenceNeighbors - analyzeCommunication --> participantOf - parseCommand --> find - parseCommand --> from - parseCommand --> decodeIntakeEnvelope - parseCommand --> isRecord - parseCommand --> commandFromData main --> list main --> monotonic main --> SentenceTransformer + main --> ArgumentParser + main --> add_subparsers + main --> add_parser + main --> add_argument + temporaryParent --> git + temporaryParent --> join + temporaryParent --> commonPipelineOption + temporaryParent --> optionsForRoot + temporaryParent --> runPipeline + baseWorktree --> git + baseWorktree --> join + baseWorktree --> commonPipelineOption + baseWorktree --> optionsForRoot + baseWorktree --> runPipeline + extractTodo --> resolve ``` ## Reverse Engineering Guidelines diff --git a/project/evolution.toon.yaml b/project/evolution.toon.yaml index d460002..78036dd 100644 --- a/project/evolution.toon.yaml +++ b/project/evolution.toon.yaml @@ -1,58 +1,58 @@ -# code2llm/evolution | 3609 func | 145f | 2026-08-04 +# code2llm/evolution | 3812 func | 162f | 2026-08-04 # generated in 0.01s NEXT[10] (ranked by impact): - [1] !! SPLIT src/synthesis/code-change-plan/implementation-helpers.ts - WHY: 1148L, 16 classes, max CC=13 - EFFORT: ~4h IMPACT: 14924 - - [2] !! SPLIT src/cli.ts + [1] !! SPLIT src/cli.ts WHY: 942L, 1 classes, max CC=13 EFFORT: ~4h IMPACT: 12246 - [3] !! SPLIT-FUNC runPipeline CC=56 fan=56 - WHY: CC=56 exceeds 15 - EFFORT: ~1h IMPACT: 3136 - - [4] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28 - WHY: CC=84 exceeds 15 - EFFORT: ~1h IMPACT: 2352 - - [5] !! SPLIT-FUNC parseCommand CC=63 fan=33 - WHY: CC=63 exceeds 15 - EFFORT: ~1h IMPACT: 2079 - - [6] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35 - WHY: CC=48 exceeds 15 - EFFORT: ~1h IMPACT: 1680 - - [7] !! SPLIT-FUNC diffUiScriptMarkup CC=46 fan=36 - WHY: CC=46 exceeds 15 - EFFORT: ~1h IMPACT: 1656 + [2] !! SPLIT src/services/actions.ts + WHY: 806L, 1 classes, max CC=13 + EFFORT: ~4h IMPACT: 10478 - [8] !! SPLIT-FUNC parseFile CC=38 fan=19 + [3] !! SPLIT-FUNC parseFile CC=38 fan=19 WHY: CC=38 exceeds 15 EFFORT: ~1h IMPACT: 722 - [9] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37 + [4] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37 WHY: CC=18 exceeds 15 EFFORT: ~1h IMPACT: 666 - [10] !! SPLIT-FUNC OpenRouterClient.request CC=31 fan=20 - WHY: CC=31 exceeds 15 + [5] ! SPLIT-FUNC executePipeline CC=20 fan=31 + WHY: CC=20 exceeds 15 EFFORT: ~1h IMPACT: 620 + [6] ! SPLIT-FUNC looksLikeJson CC=20 fan=24 + WHY: CC=20 exceeds 15 + EFFORT: ~1h IMPACT: 480 + + [7] ! SPLIT-FUNC validateOperationStep CC=23 fan=13 + WHY: CC=23 exceeds 15 + EFFORT: ~1h IMPACT: 299 + + [8] ! SPLIT-FUNC iter_python_files CC=16 fan=15 + WHY: CC=16 exceeds 15 + EFFORT: ~1h IMPACT: 240 + + [9] ! SPLIT-FUNC persistFailedRunState CC=19 fan=12 + WHY: CC=19 exceeds 15 + EFFORT: ~1h IMPACT: 228 + + [10] ! SPLIT-FUNC collectAgentActionIssues CC=15 fan=15 + WHY: CC=15 exceeds 15 + EFFORT: ~1h IMPACT: 225 + RISKS[3]: ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths - ⚠ Splitting src/synthesis/code-change-plan/implementation-helpers.ts may break 133 import paths ⚠ Splitting src/cli.ts may break 124 import paths + ⚠ Splitting src/services/actions.ts may break 106 import paths METRICS-TARGET: - CC̄: 3.3 → ≤2.3 - max-CC: 84 → ≤20 - god-modules: 13 → 0 - high-CC(≥15): 52 → ≤26 + CC̄: 3.0 → ≤2.1 + max-CC: 38 → ≤19 + god-modules: 10 → 0 + high-CC(≥15): 14 → ≤7 hub-types: 0 → ≤0 PATTERNS (language parser shared logic): @@ -80,4 +80,4 @@ PATTERNS (language parser shared logic): - Standardized FunctionInfo/ClassInfo models HISTORY: - prev CC̄=3.3 → now CC̄=3.3 + prev CC̄=3.0 → now CC̄=3.0 diff --git a/project/flow.mmd b/project/flow.mmd index 1350e9a..eb3602f 100644 --- a/project/flow.mmd +++ b/project/flow.mmd @@ -1,5 +1,5 @@ flowchart TD -%% generated in 0.09s +%% generated in 0.04s %% Entry points (blue) classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff @@ -39,7 +39,7 @@ flowchart TD rust_ast__src__main__visit_item_static["visit_item_static"] rust_ast__src__main__visit_item_fn["visit_item_fn"] rust_ast__src__main__visit_item_impl["visit_item_impl"] - ...["+2443 more"] + ...["+2517 more"] end subgraph Exporters diff --git a/project/flow.png b/project/flow.png index c80d0cc8b94b37a40e1c5f20031f2071c013fc79..64ba21ebcfb63e7dcde5e8a49bc77d1fc41399f4 100644 GIT binary patch literal 14203 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 literal 14204 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 Results // Initialize mermaid mermaid.initialize({ startOnLoad: false, theme: 'dark' }); - const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "96.3KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "36.3KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 3918 \n**Total Classes**: 392 \n**Modules**: 260 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "34.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 152, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 3918\n- **Total Classes**: 392\n- **Modules**: 260\n- **Entry Points**: 2687\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.synthesis.code-change-plan.implementation-helpers\n- **Functions**: 147\n- **Classes**: 16\n- **File**: `implementation-helpers.ts`\n\n### src.services.actions\n- **Functions**: 145\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.synthesis.code-change-plan.implementation-source-patch\n- **Functions**: 103\n- **Classes**: 5\n- **File**: `implementation-source-patch.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.analyzer\n- **Functions**: 79\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.diff.reality\n- **Functions**: 78\n- **Classes**: 3\n- **File**: `reality.ts`\n\n### src.core.text\n- **Functions**: 66\n- **File**: `text.ts`\n\n### src.pipeline.run\n- **Functions**: 65\n- **Classes**: 1\n- **File**: `run.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 57\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.graph.linker\n- **Functions**: 55\n- **Classes**: 1\n- **File**: `linker.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.diff.text\n- **Functions**: 53\n- **Classes**: 1\n- **File**: `text.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.llm.openrouter\n- **Functions**: 49\n- **Classes**: 7\n- **File**: `openrouter.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### src.pipeline.run.runPipeline\n- **Calls**: src.pipeline.run.resolve, src.pipeline.run.pathExists, src.pipeline.run.Error, src.pipeline.run.newRunId, src.pipeline.run.join, src.pipeline.run.ensureDir, src.pipeline.run.skippedAudit, src.pipeline.run.extractNlIntentAudited\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### src.communication.analyzer.analyzeCommunication\n- **Calls**: src.communication.analyzer.assertIntentGraph, src.communication.analyzer.filter, src.communication.analyzer.validateSyntheses, src.communication.analyzer.evidenceNeighbors, src.communication.analyzer.participantOf, src.communication.analyzer.get, src.communication.analyzer.push, src.communication.analyzer.set\n\n### src.interfaces.a2a-message.parseCommand\n- **Calls**: src.interfaces.a2a-message.find, src.interfaces.a2a-message.from, src.interfaces.a2a-message.decodeIntakeEnvelope, src.interfaces.a2a-message.isRecord, src.interfaces.a2a-message.commandFromData, src.interfaces.a2a-message.map, src.interfaces.a2a-message.join, src.interfaces.a2a-message.trim\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation-indexing.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.operations.validation.assertOperationPlan\n- **Calls**: src.operations.validation.objectValue, src.operations.validation.exactKeys, src.operations.validation.Error, src.operations.validation.test, src.operations.validation.dateString, src.operations.validation.nonBlank, src.operations.validation.uniqueStrings, src.operations.validation.assertGeneration\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.python.todo2code.runtime.TypeScriptRuntime.reality\n- **Calls**: tempfile.TemporaryDirectory, self.invoke, Path, Path, Path, str, str, str\n\n### src.extractors.nl.extractNlIntent\n- **Calls**: src.extractors.nl.assertNlExtractionOptions, src.extractors.nl.resolve, src.extractors.nl.readText, src.extractors.nl.isAbsolute, src.extractors.nl.relativePosix, src.extractors.nl.replace, src.extractors.nl.splitIntentLines, src.extractors.nl.classifyAction\n\n### src.extractors.ast.extractAstIntent\n- **Calls**: src.extractors.ast.resolve, src.extractors.ast.ContentCache, src.extractors.ast.loadIgnoreMatcher, src.extractors.ast.walkFiles, src.extractors.ast.readText, src.extractors.ast.relativePosix, src.extractors.ast.getOrCompute, src.extractors.ast.sha256\n\n### src.extractors.todo.body\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.relative\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.lines\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.synthesis.todo-patch.applyTodoPatch\n- **Calls**: src.synthesis.todo-patch.all, src.synthesis.todo-patch.readText, src.synthesis.todo-patch.assertTodoPatchArtifact, src.synthesis.todo-patch.sha256, src.synthesis.todo-patch.Error, src.synthesis.todo-patch.assertApproval, src.synthesis.todo-patch.ensureDir, src.synthesis.todo-patch.dirname\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 2: runPipeline\n```\nrunPipeline [src.pipeline.run]\n```\n\n### Flow 3: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 4: analyzeCommunication\n```\nanalyzeCommunication [src.communication.analyzer]\n```\n\n### Flow 5: parseCommand\n```\nparseCommand [src.interfaces.a2a-message]\n```\n\n### Flow 6: assertOperationPlan\n```\nassertOperationPlan [src.operations.validation]\n └─> objectValue\n └─> exactKeys\n```\n\n### Flow 7: temporaryParent\n```\ntemporaryParent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 8: baseWorktree\n```\nbaseWorktree [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 9: extractTodo\n```\nextractTodo [src.extractors.todo]\n```\n\n### Flow 10: makefile\n```\nmakefile [scripts.verify-env-contract]\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 48\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 44\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.invalid, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.base\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 43\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 28\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `sdk.python.examples.basic.main` - 62 calls\n- `src.pipeline.run.runPipeline` - 56 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `src.web.diff-ui.diffUiScriptMarkup` - 36 calls\n- `src.communication.analyzer.analyzeCommunication` - 35 calls\n- `src.interfaces.a2a-message.parseCommand` - 33 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.operations.validation.assertOperationPlan` - 28 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n- `src.extractors.ast.extractAstIntent` - 20 calls\n- `src.extractors.todo.body` - 20 calls\n- `src.extractors.todo.relative` - 20 calls\n- `src.extractors.todo.lines` - 20 calls\n- `src.synthesis.todo-patch.createTodoPatch` - 20 calls\n- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls\n- `src.llm.openrouter.OpenRouterClient.request` - 20 calls\n- `src.diff.reality.buildRealityView` - 20 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n main --> get\n main --> T2CClient\n main --> print\n runPipeline --> resolve\n runPipeline --> pathExists\n runPipeline --> Error\n runPipeline --> newRunId\n runPipeline --> join\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n compareWorkspaceInte --> relative\n compareWorkspaceInte --> startsWith\n analyzeCommunication --> assertIntentGraph\n analyzeCommunication --> filter\n analyzeCommunication --> validateSyntheses\n analyzeCommunication --> evidenceNeighbors\n analyzeCommunication --> participantOf\n parseCommand --> find\n parseCommand --> from\n parseCommand --> decodeIntakeEnvelope\n parseCommand --> isRecord\n parseCommand --> commandFromData\n main --> list\n main --> monotonic\n main --> SentenceTransformer\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "70.7KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.09s\n subgraph examples__backend\n examples__backend__src__server__readBody["readBody"]\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__validation__agent["agent"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__size["size"]\n examples__backend__src__server__server["server"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__server__store["store"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__server__handleRequest["handleRequest"]\n examples__backend__src__server__event["event"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__server__offset["offset"]\n examples__backend__src__server__validation["validation"]\n examples__backend__src__server__limit["limit"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__app__refresh["refresh"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__createState["createState"]\n end\n subgraph examples__src\n examples__src__runtime__validateContract["validateContract"]\n examples__src__runtime__executeContract["executeContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n end\n subgraph src__cli\n src__cli__optionNlMode["optionNlMode"]\n src__cli__result["result"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__emitJson["emitJson"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__printHelp["printHelp"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__handleDiff["handleDiff"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__parsed["parsed"]\n src__cli__optionTaskMode["optionTaskMode"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__view["view"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__absolute["absolute"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__context["context"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__handleReality["handleReality"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__optionNullableString["optionNullableString"]\n src__cli__diagnostics["diagnostics"]\n src__cli__main["main"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__optionNumber["optionNumber"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__pipeline["pipeline"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__handleLink["handleLink"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__handleExtract["handleExtract"]\n src__cli__root["root"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__svg["svg"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__controller["controller"]\n src__cli__initProject["initProject"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__diff["diff"]\n src__cli__stamp["stamp"]\n src__cli__file["file"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__command["command"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__doctor["doctor"]\n src__cli__taskFile["taskFile"]\n src__cli__handleIntake["handleIntake"]\n src__cli__invokedPath["invokedPath"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__optionList["optionList"]\n src__cli__optionString["optionString"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__stop["stop"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n end\n subgraph src__extractors\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__ast__records__end["end"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"]\n src__extractors__nl__missing["missing"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__nl__body["body"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__todo__body["body"]\n src__extractors__todo__heading["heading"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__todo__classified["classified"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__configuration__line["line"]\n src__extractors__nl__classified["classified"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__docs_record__action["action"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"]\n src__extractors__ast__external__result["result"]\n src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__configuration__files["files"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__git__count["count"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__todo__task["task"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__docs_schema__target["target"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__ast__records__start["start"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__configuration__entries["entries"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__todo__raw["raw"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__configuration__entry["entry"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__docs_record__target["target"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__ast__typescript__recordModuleFact["recordModuleFact"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__changelog__body["body"]\n src__extractors__changelog__relative["relative"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__configuration__heading["heading"]\n src__extractors__todo__text["text"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__todo__checked["checked"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__todo__block["block"]\n src__extractors__configuration__relative["relative"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__todo__match["match"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__configuration__pair["pair"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__configuration__lines["lines"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__git__runGit["runGit"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__nl__object["object"]\n src__extractors__todo__relative["relative"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__todo__action["action"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__changelog__lines["lines"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__ast__typescript__context["context"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__todo__lines["lines"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__configuration__match["match"]\n src__extractors__nl__action["action"]\n src__extractors__git__result["result"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__git__state["state"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__git__root["root"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__git__readStats["readStats"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__handleRequest\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__handleRequest\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson\n examples__backend__src__server__handleRequest --> examples__backend__src__server__size\n examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody\n examples__backend__src__server__validation --> examples__backend__src__server__sendJson\n examples__backend__src__server__event --> examples__backend__src__server__sendJson\n examples__backend__src__server__offset --> examples__backend__src__server__sendJson\n examples__backend__src__server__limit --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "884B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.09s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__diff["src.diff<br/>183 funcs"]\n src__graph["src.graph<br/>226 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>461 funcs"]\n scripts__research ==>|7| src__live\n python__ast_extract ==>|4| src__diff\n sdk__python ==>|4| src__synthesis\n scripts__research -->|2| src__diff\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.09s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2443 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [24KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [168KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [34KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "165.1KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "24.6KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 260f 41965L | typescript:152,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.32s\n# CC̅=3.3 | critical:63/3918 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/synthesis/code-change-plan/implementation-helpers.ts = 1148L, 16 classes, 133m, max CC=13\n 🔴 GOD src/synthesis/code-change-plan/implementation-source-patch.ts = 694L, 5 classes, 95m, max CC=11\n 🟡 CC handleRequest CC=16 (limit:15)\n 🟡 CC generationMetadata CC=17 (limit:15)\n 🟡 CC diffUiScriptMarkup CC=46 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC timeout CC=26 (limit:15)\n 🟡 CC request CC=31 (limit:15)\n 🟡 CC parseCommand CC=63 (limit:15)\n 🟡 CC runListItem CC=18 (limit:15)\n 🟡 CC myers CC=19 (limit:15)\n 🟡 CC n CC=15 (limit:15)\n 🟡 CC m CC=15 (limit:15)\n 🟡 CC max CC=15 (limit:15)\n 🟡 CC offset CC=15 (limit:15)\n 🟡 CC y CC=15 (limit:15)\n 🟡 CC backtrack CC=18 (limit:15)\n 🟡 CC x CC=15 (limit:15)\n 🟡 CC buildRealityView CC=26 (limit:15)\n 🟡 CC resolveStatus CC=15 (limit:15)\n\nREFACTOR[3]:\n 1. split src/synthesis/code-change-plan/implementation-helpers.ts (god module)\n 2. split src/synthesis/code-change-plan/implementation-source-patch.ts (god module)\n 3. split 18 high-CC methods (CC>15)\n\nPIPELINES[2088]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [17] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [18] Src [record]: record → invalid\n PURITY: 100% pure\n [19] Src [agent]: agent → invalid\n PURITY: 100% pure\n [20] Src [action]: action → invalid\n PURITY: 100% pure\n [21] Src [object]: object → invalid\n PURITY: 100% pure\n [22] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [23] Src [listEvents]: listEvents\n PURITY: 100% pure\n [24] Src [start]: start\n PURITY: 100% pure\n [25] Src [store]: store → handleRequest → sendJson\n PURITY: 100% pure\n [26] Src [server]: server → handleRequest → sendJson\n PURITY: 100% pure\n [27] Src [url]: url\n PURITY: 100% pure\n [28] Src [body]: body\n PURITY: 100% pure\n [29] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [30] Src [event]: event → sendJson\n PURITY: 100% pure\n [31] Src [offset]: offset → sendJson\n PURITY: 100% pure\n [32] Src [limit]: limit → sendJson\n PURITY: 100% pure\n [33] Src [startBackend]: startBackend → createBackend → handleRequest → sendJson\n PURITY: 100% pure\n [34] Src [port]: port\n PURITY: 100% pure\n [35] Src [host]: host\n PURITY: 100% pure\n [36] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [37] Src [url]: url\n PURITY: 100% pure\n [38] Src [response]: response\n PURITY: 100% pure\n [39] Src [payload]: payload\n PURITY: 100% pure\n [40] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [41] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [42] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [43] Src [table]: table\n PURITY: 100% pure\n [44] Src [head]: head\n PURITY: 100% pure\n [45] Src [body]: body\n PURITY: 100% pure\n [46] Src [tr]: tr\n PURITY: 100% pure\n [47] Src [renderError]: renderError\n PURITY: 100% pure\n [48] Src [message]: message\n PURITY: 100% pure\n [49] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n [50] Src [load_task]: load_task\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:5\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.4 ←in:0 →out:0\n │ !! implementation-helpers.ts 1148L 16C 133m CC=13 ←0\n │ !! cli.ts 942L 1C 124m CC=13 ←0\n │ !! actions.ts 806L 1C 106m CC=13 ←0\n │ !! implementation-source-patch.ts 694L 5C 95m CC=11 ←0\n │ !! reality.ts 619L 3C 74m CC=26 ←0\n │ !! run.ts 617L 1C 65m CC=56 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! analyzer.ts 542L 3C 72m CC=48 ←0\n │ !! text.ts 530L 0C 61m CC=14 ←0\n │ diagnostics.ts 459L 1C 58m CC=11 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ !! gold-types.ts 378L 15C 11m CC=32 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ !! gold-cases.ts 366L 4C 42m CC=18 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ !! openrouter.ts 338L 7C 39m CC=31 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ result.ts 311L 0C 23m CC=7 ←0\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ intent.ts 306L 4C 36m CC=12 ←0\n │ reranker-llm.ts 291L 2C 35m CC=9 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ linker.ts 286L 1C 52m CC=8 ←3\n │ !! validation.ts 281L 0C 47m CC=84 ←0\n │ !! intake-contract.ts 273L 7C 30m CC=18 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ implementation-review.ts 269L 3C 31m CC=7 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ nl-llm-helpers.ts 256L 3C 28m CC=12 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ candidate.ts 250L 1C 19m CC=8 ←0\n │ code-change.ts 250L 19C 0m CC=0.0 ←0\n │ !! watcher.ts 243L 4C 37m CC=19 ←0\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ !! text.ts 239L 1C 48m CC=19 ←2\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ code-change-path.ts 232L 0C 23m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ !! a2a-history.ts 226L 3C 37m CC=18 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ intent.ts 212L 13C 0m CC=0.0 ←0\n │ io.ts 211L 2C 30m CC=11 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ !! a2a-message.ts 197L 0C 35m CC=63 ←1\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ !! record.ts 183L 2C 13m CC=17 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ markdown-llm.ts 178L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ !! diff-ui.ts 167L 0C 15m CC=46 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ linker-candidates.ts 163L 1C 23m CC=10 ←0\n │ !! git.ts 161L 3C 21m CC=22 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ !! identity.ts 146L 3C 22m CC=30 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ implementation-semantic.ts 125L 1C 13m CC=9 ←0\n │ !! intake-protobuf.ts 125L 0C 23m CC=18 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ linker-relations.ts 83L 3C 7m CC=7 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ implementation-targets.ts 61L 0C 9m CC=5 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ implementation-indexing.ts 25L 0C 4m CC=4 ←3\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ implementation-diagnostics.ts 17L 0C 2m CC=2 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ implementation.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.4 ←in:0 →out:0\n │ !! server.ts 99L 1C 18m CC=16 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.diff python src.synthesis src.graph java examples.frontend\n scripts.research ── 7 2 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.diff ←2 ── ←4 hub\n python 4 ── 1 \n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ←1 ── \n java ←2 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.diff/ (fan-in=6)\n HUB: src.live/ (fan-in=7)\n HUB: src.synthesis/ (fan-in=5)\n SMELL: sdk.python/ fan-out=8 → split needed\n SMELL: scripts.research/ fan-out=11 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.33s\n# nodes: 402 | edges: 500 | modules: 30\n# CC̄=3.3\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n src.extractors.changelog.body\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n examples.backend.src.server.handleRequest\n CC=16 in:3 out:12 total:15\n\nMODULES:\n examples.backend.src.server [12 funcs]\n createBackend CC=4 out:5\n event CC=1 out:1\n handleRequest CC=16 out:12\n limit CC=1 out:1\n offset CC=1 out:1\n readBody CC=3 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n size CC=3 out:3\n startBackend CC=3 out:3\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [6 funcs]\n context CC=1 out:4\n createTypeScriptExtractionContext CC=1 out:0\n extractTypeScriptFile CC=1 out:7\n recordModuleFact CC=1 out:2\n scriptKind CC=4 out:3\n visitTypeScriptNode CC=2 out:2\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [10 funcs]\n appendA2aAgentWarnings CC=5 out:4\n appendIdentityWarnings CC=4 out:2\n appendRegistryAlignmentWarnings CC=7 out:2\n appendRoleAndParticipantWarnings CC=3 out:2\n appendTimestampWarnings CC=3 out:2\n buildLocalWarnings CC=3 out:5\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [15 funcs]\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n nonEmptyText CC=3 out:1\n normalizedText CC=1 out:1\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.handleRequest\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n examples.backend.src.server.store → examples.backend.src.server.handleRequest\n examples.backend.src.server.store → examples.backend.src.server.sendJson\n examples.backend.src.server.server → examples.backend.src.server.handleRequest\n examples.backend.src.server.server → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.sendJson\n examples.backend.src.server.handleRequest → examples.backend.src.server.size\n examples.backend.src.server.handleRequest → examples.backend.src.server.readBody\n examples.backend.src.server.validation → examples.backend.src.server.sendJson\n examples.backend.src.server.event → examples.backend.src.server.sendJson\n examples.backend.src.server.offset → examples.backend.src.server.sendJson\n examples.backend.src.server.limit → examples.backend.src.server.sendJson\n examples.backend.src.server.startBackend → examples.backend.src.server.createBackend\n examples.frontend.src.render.toRows → examples.frontend.src.render.classifyEvent\n examples.frontend.src.render.renderTable → examples.frontend.src.render.headerRow\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.createState\n examples.frontend.src.app.mountPanel → examples.frontend.src.app.refresh\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "256.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 402\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n examples.backend.src.server.readBody:\n name: readBody\n module: examples.backend.src.server\n line: 70\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 850\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.result:\n name: result\n module: src.cli\n line: 770\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 488\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.createTypeScriptExtractionContext:\n name: createTypeScriptExtractionContext\n module: src.extractors.ast.typescript\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 222\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 448\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 194\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 257\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 263\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 882\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 701\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 854\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 890\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.communication-file-helpers.appendRoleAndParticipantWarnings:\n name: appendRoleAndParticipantWarnings\n module: src.extractors.communication-file-helpers\n line: 273\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 139\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 468\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 779\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.ast.typescript.visitTypeScriptNode:\n name: visitTypeScriptNode\n module: src.extractors.ast.typescript\n line: 46\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 629\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 168\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.communication-file-helpers.appendIdentityWarnings:\n name: appendIdentityWarnings\n module: src.extractors.communication-file-helpers\n line: 282\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.extractors.communication-file-helpers.appendA2aAgentWarnings:\n name: appendA2aAgentWarnings\n module: src.extractors.communication-file-helpers\n line: 314\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 12\n calls_out: 11\n calls_in: 0\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 601\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 255\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 82\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 8\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 860\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.handler:\n name: handler\n module: src.cli\n line: 594\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.cli.view:\n name: view\n module: src.cli\n line: 561\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 624\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 517\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 91\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 712\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 371\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-file-helpers.buildLocalWarnings:\n name: buildLocalWarnings\n module: src.extractors.communication-file-helpers\n line: 254\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 146\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 237\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n examples.backend.src.server.size:\n name: size\n module: examples.backend.src.server\n line: 72\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 125\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 20\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 656\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.cli.context:\n name: context\n module: src.cli\n line: 535\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 180\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 551\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 866\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 241\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 409\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 666\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 823\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 158\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 90\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 558\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 614\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.ast.typescript.recordModuleFact:\n name: recordModuleFact\n module: src.extractors.ast.typescript\n line: 229\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 87\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 837\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 619\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 349\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 512\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 646\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 131\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 636\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 577\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.root:\n name: root\n module: src.cli\n line: 667\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 830\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 330\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.cli.svg:\n name: svg\n module: src.cli\n line: 564\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 201\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.cli.controller:\n name: controller\n module: src.cli\n line: 351\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n examples.backend.src.server.handleRequest:\n name: handleRequest\n module: examples.backend.src.server\n line: 28\n cyclomatic_complexity: 16\n calls_out: 12\n calls_in: 3\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 736\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 185\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 346\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 189\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 290\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 78\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 414\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 310\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 494\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n examples.backend.src.server.event:\n name: event\n module: examples.backend.src.server\n line: 52\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 34\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 92\n cyclomatic_complexity: 11\n calls_out: 6\n calls_in: 0\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 876\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 338\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n src.cli.diff:\n name: diff\n module: src.cli\n line: 504\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 449\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.cli.file:\n name: file\n module: src.cli\n line: 602\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 384\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n examples.backend.src.server.offset:\n name: offset\n module: examples.backend.src.server\n line: 58\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 272\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.communication-file-helpers.appendTimestampWarnings:\n name: appendTimestampWarnings\n module: src.extractors.communication-file-helpers\n line: 328\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 163\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 219\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 757\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.ast.typescript.context:\n name: context\n module: src.extractors.ast.typescript\n line: 12\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 215\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 706\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 936\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 691\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n src.extractors.communication-file-helpers.appendRegistryAlignmentWarnings:\n name: appendRegistryAlignmentWarnings\n module: src.extractors.communication-file-helpers\n line: 299\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 1\n examples.backend.src.server.validation:\n name: validation\n module: examples.backend.src.server\n line: 45\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n examples.backend.src.server.limit:\n name: limit\n module: examples.backend.src.server\n line: 59\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 845\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 818\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 534\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.cli.stop:\n name: stop\n module: src.cli\n line: 352\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 367\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.handleRequest\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.size\n call_type: resolved\n- caller: examples.backend.src.server.handleRequest\n callee: examples.backend.src.server.readBody\n call_type: resolved\n- caller: examples.backend.src.server.validation\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.event\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.offset\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.limit\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntri\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3609 func | 145f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/synthesis/code-change-plan/implementation-helpers.ts\n WHY: 1148L, 16 classes, max CC=13\n EFFORT: ~4h IMPACT: 14924\n\n [2] !! SPLIT src/cli.ts\n WHY: 942L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12246\n\n [3] !! SPLIT-FUNC runPipeline CC=56 fan=56\n WHY: CC=56 exceeds 15\n EFFORT: ~1h IMPACT: 3136\n\n [4] !! SPLIT-FUNC assertOperationPlan CC=84 fan=28\n WHY: CC=84 exceeds 15\n EFFORT: ~1h IMPACT: 2352\n\n [5] !! SPLIT-FUNC parseCommand CC=63 fan=33\n WHY: CC=63 exceeds 15\n EFFORT: ~1h IMPACT: 2079\n\n [6] !! SPLIT-FUNC analyzeCommunication CC=48 fan=35\n WHY: CC=48 exceeds 15\n EFFORT: ~1h IMPACT: 1680\n\n [7] !! SPLIT-FUNC diffUiScriptMarkup CC=46 fan=36\n WHY: CC=46 exceeds 15\n EFFORT: ~1h IMPACT: 1656\n\n [8] !! SPLIT-FUNC parseFile CC=38 fan=19\n WHY: CC=38 exceeds 15\n EFFORT: ~1h IMPACT: 722\n\n [9] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37\n WHY: CC=18 exceeds 15\n EFFORT: ~1h IMPACT: 666\n\n [10] !! SPLIT-FUNC OpenRouterClient.request CC=31 fan=20\n WHY: CC=31 exceeds 15\n EFFORT: ~1h IMPACT: 620\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/synthesis/code-change-plan/implementation-helpers.ts may break 133 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n\nMETRICS-TARGET:\n CC̄: 3.3 → ≤2.3\n max-CC: 84 → ≤20\n god-modules: 13 → 0\n high-CC(≥15): 52 → ≤26\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.3 → now CC̄=3.3\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "168.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 260f 41965L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:152,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.04s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 3918 func | 0 cls | 260 mod | CC̄=3.3 | critical:63 | cycles:0\n# alerts[5]: CC assertOperationPlan=84; CC parseCommand=63; CC runPipeline=56; fan-out runPipeline=56; CC analyzeCommunication=48\n# hotspots[5]: runPipeline fan=56; compareWorkspaceIntent fan=40; Client.parse_http_response fan=37; diffUiScriptMarkup fan=36; analyzeCommunication fan=35\n# evolution: CC̄ 3.3→3.3 (flat 0.0)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[260]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/server.ts,99\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,942\n src/communication/analyzer.ts,542\n src/communication/identity.ts,146\n src/communication/intake-contract.ts,273\n src/communication/intake-protobuf.ts,125\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,211\n src/core/record.ts,183\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,306\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,530\n src/core/types/index.ts,4\n src/core/types/code-change.ts,250\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,212\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,161\n src/diff/reality.ts,619\n src/diff/svg.ts,104\n src/diff/text.ts,239\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,366\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,378\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,342\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,178\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,256\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,286\n src/graph/linker-candidates.ts,163\n src/graph/linker-relations.ts,83\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,226\n src/interfaces/a2a-message.ts,197\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,338\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,281\n src/pipeline/run.ts,617\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,291\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,250\n src/semantic/reranker/result.ts,311\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,806\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,232\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/code-change-plan/implementation-diagnostics.ts,17\n src/synthesis/code-change-plan/implementation-helpers.ts,1148\n src/synthesis/code-change-plan/implementation-indexing.ts,25\n src/synthesis/code-change-plan/implementation-review.ts,269\n src/synthesis/code-change-plan/implementation-semantic.ts,125\n src/synthesis/code-change-plan/implementation-source-patch.ts,694\n src/synthesis/code-change-plan/implementation-targets.ts,61\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,243\n src/web/diff-ui.ts,167\n tsconfig.json,23\nD:\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n evidence()\n variables()\n variableById()\n steps()\n stepIds()\n founderDecisionRequired()\n step()\n parameters()\n reference()\n variable()\n rollback()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n decision()\n verification()\n expectedHash()\n src/interfaces/a2a-message.ts:\n i: ../communication/intake-protobuf.js\n e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseCommand()\n protobuf()\n bytes()\n objectData()\n text()\n first()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n normalizeAction()\n normalized()\n action()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path\n e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured\n PipelineResult:\n runPipeline()\n root()\n runId()\n baseOutput()\n runDirectory()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n deterministicDocumentFiles()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n includeCommunication()\n communicationStartedAt()\n communicationAudit()\n communicationInputPresent()\n communication()\n missingDirectory()\n allRecords()\n generatedAt()\n graph()\n communicationAnalysis()\n diagnostics()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n summaryStartedAt()\n includeSummaryLlm()\n summary()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n configuration()\n manifestConfiguration()\n collectTargetHints()\n values()\n persistFailedRun()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n failureCode()\n skippedAudit()\n appendLlmNotConfigured()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n participants()\n participant()\n values()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n humanRequests()\n agentMessages()\n response()\n type()\n participantGit()\n linked()\n matchedRequest()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n src/web/diff-ui.ts:\n e: diffUiStyles,diffUiRunPanel,diffUiFiltersPanel,diffUiBodyMarkup,diffUiScriptMarkup,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs,diffUiTemplate,diffUiHtml\n diffUiStyles()\n diffUiRunPanel()\n diffUiFiltersPanel()\n diffUiBodyMarkup()\n diffUiScriptMarkup()\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n diffUiTemplate()\n diffUiHtml()\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n labels()\n modules()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterChoice:\n OpenRouterResponse:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1)\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n entry()\n values()\n normalized()\n owner()\n exactKeys()\n allowed()\n missing()\n extra()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n buildRealityView()\n components()\n diagnosticsByRecord()\n codes()\n status()\n bySeverity()\n alignment()\n bySize()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n width()\n rowHeight()\n headerY()\n y()\n isDeclared()\n color()\n count()\n cx()\n fill()\n label()\n pillWidth()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/diff/git.ts:\n i: ./text.js,node:child_process,node:fs,node:path,node:util\n e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result\n GitDiffOptions:\n GitDiffResult:\n ChangedEntry:\n execFileAsync()\n BINARY_EXTENSIONS()\n collectGitDiff()\n root()\n revision()\n staged()\n maxFiles()\n inside()\n beforePath()\n before()\n after()\n diff()\n parseNameStatus()\n parts()\n status()\n isProbablyBinary()\n readBlob()\n readStagedBlob()\n readWorkingFile()\n runGit()\n result()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/diff/text.ts:\n i: ./text-types.js\n e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers\n RawOp:\n DEFAULT_CONTEXT()\n DEFAULT_MAX_COMPARE_LINES()\n splitLines()\n normalized()\n lines()\n diffText()\n diffLineArrays()\n context()\n maxCompareLines()\n beforePath()\n afterPath()\n summarizeLines()\n computeLineDiff()\n prefix()\n suffix()\n lines()\n middleBefore()\n middleAfter()\n truncated()\n middleOps()\n sharedPrefixLength()\n prefix()\n sharedSuffixLength()\n suffix()\n prefixLines()\n suffixLines()\n beforeIndex()\n afterIndex()\n blockReplace()\n myers()\n n()\n m()\n max()\n offset()\n v()\n y()\n backtrack()\n x()\n y()\n v()\n k()\n previousK()\n previousX()\n previousY()\n buildHunks()\n changeIndexes()\n start()\n end()\n last()\n hunkFromRange()\n slice()\n beforeNumbers()\n afterNumbers()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n signal()\n matcher()\n runReport()\n result()\n snapshot()\n lastReportStartedAt()\n pending()\n current()\n delta()\n waitMs()\n generate()\n startedAt()\n result()\n defaultSleep()\n timer()\n onAbort()\n finish()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path\n e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath\n IntentRunListItem:\n CommunicationRunSummary:\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n safeRunPath()\n runListItem()\n files()\n llm()\n runtime()\n warnings()\n validTimestamp()\n validStatus()\n llmSummary()\n readCommunicationSummary()\n relative()\n filePath()\n stat()\n value()\n participants()\n issues()\n participantSummary()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n stringArray()\n safeManifestFiles()\n absolute()\n relative()\n relativeApiPath()\n src/evaluation/gold-cases.ts:\n i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js\n e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration\n LinkingCaseResult:\n RerankingCaseResult:\n DiagnosticsCaseResult:\n Dsl2TodoCaseResult:\n evaluateLinkingCase()\n idToLabel()\n graph()\n observed()\n actual()\n expected()\n byClass()\n forbidden()\n forbiddenViolations()\n evaluateRerankingCase()\n idToLabel()\n declarationRecordId()\n graph()\n candidates()\n moduleRecordId()\n candidateByModule()\n decisions()\n moduleRecordId()\n candidate()\n rerank()\n augmented()\n observed()\n expected()\n forbidden()\n forbiddenViolations()\n classifyRelation()\n exact()\n evaluateDiagnosticsCase()\n idToLabel()\n graph()\n report()\n observed()\n forbidden()\n forbiddenViolations()\n evaluateDsl2TodoCase()\n graph()\n diagnostics()\n diagnosticIds()\n conclusion()\n proposals()\n validation()\n duplicateIds()\n actual()\n expected()\n citations()\n buildConclusion()\n buildProposal()\n recordIds()\n id()\n countCitations()\n citationRequired()\n citationCited()\n buildFixtureRecords()\n labels()\n records()\n record()\n deterministicGeneration()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n values()\n offset()\n fieldStart()\n number()\n wire()\n raw()\n payload()\n encodeIntakeResult()\n decodeIntakeResult()\n strings()\n numbers()\n offset()\n field()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/core/record.ts:\n i: ./id.js,./target.js,./version.js\n e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix\n BuildRecordGenerationInput:\n BuildRecordInput:\n buildRecord()\n rawExcerpt()\n seed()\n buildRecordSeed()\n buildRecordStatement()\n buildRecordSource()\n buildRecordEpistemic()\n withRecordGeneration()\n generationMetadata()\n generationIdentity()\n separator()\n clamp()\n sourcePrefix()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n examples/backend/src/server.ts:\n i: ./store.js,./validation.js,node:http\n e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host\n BackendOptions:\n MAX_BODY_BYTES()\n createBackend()\n store()\n server()\n handleRequest()\n url()\n body()\n validation()\n event()\n offset()\n limit()\n readBody()\n size()\n buffer()\n sendJson()\n body()\n startBackend()\n port()\n host()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n appendRoleAndParticipantWarnings()\n appendIdentityWarnings()\n appendRegistryAlignmentWarnings()\n appendA2aAgentWarnings()\n declaredA2aAgentId()\n hasRegistryEntry()\n appendTimestampWarnings()\n rawTimestamp()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n withoutAction()\n result()\n normalizeForObject()\n removeObjectAction()\n stripObjectConnector()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n handler()\n executeExtractNlAction()\n file()\n text()\n executeExtractGitAction()\n executeExtractAstAction()\n executeExtractConfigAction()\n executeExtractMarkdownAction()\n executeExtractDocsAction()\n executeExtractCommunicationAction()\n executeAnalyzeCommunicationAction()\n analysis()\n executeLinkAction()\n records()\n executeDiagnoseAction()\n graph()\n executeSummarizeAction()\n graph()\n diagnostics()\n executeProposeTodoAction()\n graph()\n diagnostics()\n result()\n output()\n executeRenderTodoAction()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n executeApplyTodoAction()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n executeProposeCodeChangeAction()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n executeRenderCodeChangeAction()\n planSet()\n review()\n patchPath()\n auditPath()\n executeProposeSourcePatchAction()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n executeApplySourcePatchAction()\n patch()\n receiptPath()\n result()\n executeEvaluateCodeChangeAction()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n executeCloseCodeChangeAction()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n executeDiffAction()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n executeDiffFilesAction()\n beforePath()\n afterPath()\n diff()\n executeDiffGitAction()\n result()\n executeRealityAction()\n graph()\n diagnostics()\n view()\n executeCompareWorkspaceAction()\n executePipelineAction()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/synthesis/code-change-plan/implementation-helpers.ts:\n i: ../../core/io.js,../../core/security.js,../../graph/diagnostics.js,../../version.js,./implementation-source-patch.js,./implementation-targets.js,node:crypto,node:fs,node:path\n e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,PlanContext,AcceptanceContext,CloseCodeChangeContext,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,proposeCodeChangePlans,generatedAt,maxPlans,context,candidates,plans,buildPlansForCandidates,plan,buildPlanSetResult,parseIsoDateTime,generatedAt,parseMaxPlans,maxPlans,buildPlanContext,conclusions,proposals,findRelatedRecords,createPlanForDiagnostic,relatedRecords,matchingProposals,matchingConclusions,target,changes,evidence,confidence,semantic,confidenceForDiagnostic,buildPlanResult,createRepositoryPathProbe,base,absolute,evaluateCodeChangeAcceptance,context,reasons,accepted,acceptance,buildAcceptanceContext,evaluatedAt,afterDiagnostics,beforeDiagnosticIds,afterById,targetedDiagnosticIds,buildAcceptanceReasons,isAcceptancePassed,appendAcceptanceGateReason,buildAcceptanceResult,closeCodeChanges,context,acceptances,acceptedCount,buildCloseCodeChangeContext,evaluatedAt,afterDiagnostics,ensureClosePlanIdsAreUnique,planIds,buildCloseResult,buildChanges,symbols,sourceIntents,rationale,normalized,exists,confidenceFor,uniqueSorted,deterministicGeneration,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertCodeChangeSourcePatchAndActorAndEdits,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines\n ProposeCodeChangePlansOptions:\n ProposeCodeChangePlansResult:\n EvaluateCodeChangeAcceptanceOptions:\n CloseCodeChangesOptions:\n PlanContext:\n AcceptanceContext:\n CloseCodeChangeContext:\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n NormalizedApplyCodeChangeSourcePatchRequest:\n SourcePatchApplyLock:\n SourcePatchEditTarget:\n PreparedSourceEdit:\n ParsedUnifiedDiffHunk:\n UnifiedDiffParsingContext:\n UnifiedDiffCursor:\n proposeCodeChangePlans()\n generatedAt()\n maxPlans()\n context()\n candidates()\n plans()\n buildPlansForCandidates()\n plan()\n buildPlanSetResult()\n parseIsoDateTime()\n generatedAt()\n parseMaxPlans()\n maxPlans()\n buildPlanContext()\n conclusions()\n proposals()\n findRelatedRecords()\n createPlanForDiagnostic()\n relatedRecords()\n matchingProposals()\n matchingConclusions()\n target()\n changes()\n evidence()\n confidence()\n semantic()\n confidenceForDiagnostic()\n buildPlanResult()\n createRepositoryPathProbe()\n base()\n absolute()\n evaluateCodeChangeAcceptance()\n context()\n reasons()\n accepted()\n acceptance()\n buildAcceptanceContext()\n evaluatedAt()\n afterDiagnostics()\n beforeDiagnosticIds()\n afterById()\n targetedDiagnosticIds()\n buildAcceptanceReasons()\n isAcceptancePassed()\n appendAcceptanceGateReason()\n buildAcceptanceResult()\n closeCodeChanges()\n context()\n acceptances()\n acceptedCount()\n buildCloseCodeChangeContext()\n evaluatedAt()\n afterDiagnostics()\n ensureClosePlanIdsAreUnique()\n planIds()\n buildCloseResult()\n buildChanges()\n symbols()\n sourceIntents()\n rationale()\n normalized()\n exists()\n confidenceFor()\n uniqueSorted()\n deterministicGeneration()\n applyCodeChangeSourcePatch()\n request()\n root()\n receiptPath()\n lock()\n idempotentResult()\n prepared()\n now()\n receipt()\n readExistingReceipt()\n existing()\n assertPatchApplicationRequest()\n patch()\n assertCodeChangeSourcePatchAndActorAndEdits()\n assertPatchApprovalActor()\n assertPatchApprovalHash()\n assertPatchEditsContainDiffs()\n acquireApplyLock()\n lock()\n prepareSourceEdits()\n target()\n before()\n after()\n prepareSourceEditTarget()\n relative()\n absolute()\n existed()\n assertSourcePatchTargetNotSymlink()\n assertDeleteEditClearsAll()\n validatePatchTargetForEdit()\n applyPreparedEdits()\n receipt()\n rollbackErrors()\n writePreparedEdits()\n buildPatchApplyReceipt()\n fileHashesAfter()\n rollbackPreparedEdits()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n validateSourceApplyReceiptShape()\n validateSourceApplyReceiptIdentity()\n validateSourceApplyReceiptTimestamps()\n validateSourceApplyReceiptPathHashes()\n expectedPaths()\n hashPaths()\n validateSourceApplyReceiptGeneration()\n atomicWriteRaw()\n applyUnifiedDiffToText()\n baseLines()\n hunks()\n output()\n joinAppliedText()\n parseUnifiedDiffIntoHunks()\n normalizedDiff()\n context()\n createEmptyUnifiedDiffContext()\n parseUnifiedDiffLines()\n finalizeUnifiedDiffContext()\n applyUnifiedDiffLineToContext()\n header()\n parseUnifiedDiffHeader()\n buildParsedUnifiedDiffHunk()\n applyUnifiedDiffHunks()\n applyUnifiedDiffHunk()\n oldIndex()\n copyBaseLinesToCursor()\n appendRemainingBaseLines()\n validateHunkCounts()\n oldCount()\n newCount()\n applyUnifiedDiffLine()\n mark()\n body()\n applyUnifiedDiffContextLine()\n applyUnifiedDiffDeletionLine()\n applyUnifiedDiffAdditionLine()\n splitKeep()\n lines()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTarget()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,WalkState,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,state,createWalkState,walkDirectory,entries,walkEntry,absolute,relative,isTargetFile,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n WalkState:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n state()\n createWalkState()\n walkDirectory()\n entries()\n walkEntry()\n absolute()\n relative()\n isTargetFile()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isUsefulCodeChangePath,isPlannablePath,normalized,segments,lowerSegments,basename,normalizePlannablePath,isCandidatePathSyntax,splitPathSegments,isInvalidSegmentShape,isConcretePath,hasShellPattern,isDisallowedSegment,isPlannableBasename,lowerBasename,dot,ext,isGeneratedArtifactPath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isUsefulCodeChangePath()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n normalizePlannablePath()\n isCandidatePathSyntax()\n splitPathSegments()\n isInvalidSegmentShape()\n isConcretePath()\n hasShellPattern()\n isDisallowedSegment()\n isPlannableBasename()\n lowerBasename()\n dot()\n ext()\n isGeneratedArtifactPath()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskStore()\n removeTemporaryFile()\n prepareTask()\n key()\n indexedTask()\n taskForMessage()\n indexedTaskId()\n task()\n continueTask()\n existing()\n continuationError()\n message()\n createTask()\n taskId()\n contextId()\n executeMessage()\n command()\n result()\n domainResult()\n rejectTask()\n protobuf()\n diagnostic()\n message()\n currentTaskState()\n completeTask()\n protobuf()\n message()\n protobufResult()\n intakeDomainResult()\n record()\n failTask()\n message()\n agentMessage()\n listTasks()\n contextId()\n status()\n pageSize()\n historyLength()\n includeArtifacts()\n statusTimestampAfter()\n filter()\n filtered()\n pageCursor()\n start()\n page()\n last()\n filteredTasks()\n compareTasksByUpdate()\n timestampOrder()\n indexAfterCursor()\n exact()\n cursorTime()\n next()\n taskTime()\n \n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "165.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.18s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication\n (CC=48)'\n description: 'code2llm reports `src.communication.analyzer.analyzeCommunication`\n at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry\n (CC=30)'\n description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry`\n at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)'\n description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)'\n description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)'\n description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99`\n with cyclomatic complexity 25 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/identity.ts\n dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)'\n description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts\n (CC=32)'\n description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts`\n at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)'\n description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42`\n with cyclomatic complexity 63 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request\n (CC=31)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at\n `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout\n (CC=26)'\n description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at\n `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/llm/openrouter.ts\n dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan\n (CC=84)'\n description: 'code2llm reports `src.operations.validation.assertOperationPlan` at\n `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired\n (CC=44)'\n description: 'code2llm reports `src.operations.validation.founderDecisionRequired`\n at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)'\n description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)'\n description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)'\n description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)'\n description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177`\n with cyclomatic complexity 44 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)'\n description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56`\n with cyclomatic complexity 56 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiScriptMarkup (CC=46)'\n description: 'code2llm reports `src.web.diff-ui.diffUiScriptMarkup` at `src/web/diff-ui.ts:127`\n with cyclomatic complexity 46 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiScriptMarkup\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation-helpers.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation-helpers.ts`\n as a large module (1148 lines, 16 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-helpers.ts\n- signal: code2llm_god\n title: 'Split god module: src/synthesis/code-change-plan/implementation-source-patch.ts'\n description: 'code2llm reports `src/synthesis/code-change-plan/implementation-source-patch.ts`\n as a large module (694 lines, 5 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/synthesis/code-change-plan/implementation-source-patch.ts\n dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-source-patch.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-helpers'\n description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-helpers`\n in `src/synthesis/code-change-plan/implementation-helpers.ts:1`.\n\n\n Module ''src.synthesis.code-change-plan.implementation-helpers'' is too large\n (147 functions, 16 classes). Consider splitting into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1:God\n Module: src.synthesis.code-change-plan.implementation-helpers'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest\n (CC=16)'\n description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - examples/backend/src/server.ts\n dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope`\n at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-contract.ts\n dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope\n (CC=16)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope`\n at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult\n (CC=18)'\n description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult`\n at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)'\n description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record.ts\n dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)'\n description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)'\n description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46`\n with cyclomatic complexity 22 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/git.ts\n dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)'\n description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)'\n description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)'\n description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)'\n description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)'\n description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)'\n description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with\n cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)'\n description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)'\n description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)'\n description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)'\n description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with\n cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/text.ts\n dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords\n (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at\n `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase`\n at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)'\n description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)'\n description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract\n (CC=20)'\n description: 'code2llm reports `src.operations.validation.assertVariableContract`\n at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)'\n description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n (CC=19)'\n description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)'\n description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147`\n with cyclomatic complexity 19 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/watch/watcher.ts\n dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:139`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui.ts\n dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, self, excludes, patterns'\n description: 'code2llm reports `Data Clump: root, self, excludes, patterns` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (root, self, excludes, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n root, self, excludes, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, self, excludes, patterns'\n description: 'code2llm reports `Data Clump: root, self, excludes, patterns` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (root, self, excludes, patterns) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n root, self, excludes, patterns'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, self, file, nl_mode'\n description: 'code2llm reports `Data Clump: root, self, file, nl_mode` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (root, self, file, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n root, self, file, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, self, file, nl_mode'\n description: 'code2llm reports `Data Clump: root, self, file, nl_mode` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (root, self, file, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n root, self, file, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, action, payload'\n description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n self, action, payload'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, changelog, markdown_mode, todo'\n description: 'code2llm reports `Data Clump: self, root, changelog, markdown_mode,\n todo` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (self, root, changelog, markdown_mode, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n self, root, changelog, markdown_mode, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, changelog, markdown_mode, todo'\n description: 'code2llm reports `Data Clump: self, root, changelog, markdown_mode,\n todo` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (self, root, changelog, markdown_mode, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n self, root, changelog, markdown_mode, todo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:251`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:226`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:226:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-helpers.ts:572`.\n\n\n Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:572:God\n Function: applyCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCommand'\n description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`.\n\n\n Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God\n Function: assertCommand'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildAcceptanceContext'\n description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers.ts:325`.\n\n\n Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:325:God\n Function: buildAcceptanceContext'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:16:God\n Function: createSemanticCandidateSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticRerankResult'\n description: 'code2llm reports `God Function: createSemanticRerankResult` in `src/semantic/reranker/result.ts:23`.\n\n\n Function ''createSemanticRerankResult'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:23:God\n Function: createSemanticRerankResult'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createTodoPatch'\n description: 'code2llm reports `God Function: createTodoPatch` in `src/synthesis/todo-patch.ts:69`.\n\n\n Function ''createTodoPatch'' is oversized: CC=8, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:69:God Function:\n createTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_chunked'\n description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:189`.\n\n\n Function ''decode_chunked'' is oversized: CC=7, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:189:God Function:\n decode_chunked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diagnoseGraph'\n description: 'code2llm reports `God Function: diagnoseGraph` in `src/graph/diagnostics.ts:16`.\n\n\n Function ''diagnoseGraph'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:16:God Function:\n diagnoseGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diffIntentGraphs'\n description: 'code2llm reports `God Function: diffIntentGraphs` in `src/graph/diff.ts:16`.\n\n\n Function ''diffIntentGraphs'' is oversized: CC=11, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diff.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diff.ts:16:God Function: diffIntentGraphs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: encode_envelope'\n description: 'code2llm reports `God Function: encode_envelope` in `src/interfaces/intake_cli.py:55`.\n\n\n Function ''encode_envelope'' is oversized: CC=6, fan-out=11, mutations=11.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:55:God Function:\n encode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichBatchCovering'\n description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm-helpers.ts:112`.\n\n\n Function ''enrichBatchCovering'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:112:God\n Function: enrichBatchCovering'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichMarkdownRecords'\n description: 'code2llm reports `God Function: enrichMarkdownRecords` in `src/extractors/markdown-llm-helpers.ts:57`.\n\n\n Function ''enrichMarkdownRecords'' is oversized: CC=13, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:57:God\n Function: enrichMarkdownRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichRecord'\n description: 'code2llm reports `God Function: enrichRecord` in `src/extractors/markdown-llm-helpers.ts:274`.\n\n\n Function ''enrichRecord'' is oversized: CC=14, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God\n Function: enrichRecord'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDiagnosticsCase'\n description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:182`.\n\n\n Function ''evaluateDiagnosticsCase'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:182:God Function:\n evaluateDiagnosticsCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDsl2TodoCase'\n description: 'code2llm reports `God Function: evaluateDsl2TodoCase` in `src/evaluation/gold-cases.ts:210`.\n\n\n Function ''evaluateDsl2TodoCase'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:210:God Function:\n evaluateDsl2TodoCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: exchange'\n description: 'code2llm reports `God Function: exchange` in `sdk/rust/src/client.rs:125`.\n\n\n Function ''exchange'' is oversized: CC=10, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function:\n exchange'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeAnalyzeCommunicationAction'\n description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction`\n in `src/services/actions.ts:158`.\n\n\n Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:158:God Function:\n executeAnalyzeCommunicationAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeCloseCodeChangeAction'\n description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:413`.\n\n\n Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:413:God Function:\n executeCloseCodeChangeAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executePipelineAction'\n description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:556`.\n\n\n Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:556:God Function:\n executePipelineAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractAstIntent'\n description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`.\n\n\n Function ''extractAstIntent'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast.ts:23:God Function:\n extractAstIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractChangelog'\n description: 'code2llm reports `God Function: extractChangelog` in `src/extractors/changelog.ts:18`.\n\n\n Function ''extractChangelog'' is oversized: CC=10, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:18:God Function:\n extractChangelog'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractCommunicationIntentAudited'\n description: 'code2llm reports `God Function: extractCommunicationIntentAudited`\n in `src/communication/llm/implementation.ts:63`.\n\n\n Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:63:God\n Function: extractCommunicationIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractConventionalAction'\n description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`.\n\n\n Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractDocumentationIntent'\n description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`.\n\n\n Function ''extractDocumentationIntent'' is oversized: CC=3, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-llm.ts:45:God Function:\n extractDocumentationIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractMarkdownIntentAudited'\n description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:34`.\n\n\n Function ''extractMarkdownIntentAudited'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:34:God Function:\n extractMarkdownIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntent'\n description: 'code2llm reports `God Function: extractNlIntent` in `src/extractors/nl.ts:38`.\n\n\n Function ''extractNlIntent'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:38:God Function: extractNlIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntentAudited'\n description: 'code2llm reports `God Function: extractNlIntentAudited` in `src/extractors/nl-llm.ts:33`.\n\n\n Function ''extractNlIntentAudited'' is oversized: CC=10, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:33:God Function:\n extractNlIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPhpAst'\n description: 'code2llm reports `God Function: extractPhpAst` in `src/extractors/ast/php.ts:11`.\n\n\n Function ''extractPhpAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/php.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/php.ts:11:God Function:\n extractPhpAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPythonAst'\n description: 'code2llm reports `God Function: extractPythonAst` in `src/extractors/ast/python.ts:11`.\n\n\n Function ''extractPythonAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/python.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/python.ts:11:God Function:\n extractPythonAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRepositoryGitIntent'\n description: 'code2llm reports `God Function: extractRepositoryGitIntent` in `src/extractors/git.ts:74`.\n\n\n Function ''extractRepositoryGitIntent'' is oversized: CC=11, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/git.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:74:God Function:\n extractRepositoryGitIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRuntimeCycleIntent'\n description: 'code2llm reports `God Function: extractRuntimeCycleIntent` in `src/extractors/runtime-cycle.ts:29`.\n\n\n Function ''extractRuntimeCycleIntent'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:29:God\n Function: extractRuntimeCycleIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractSymbols'\n description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`.\n\n\n Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractTodo'\n description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`.\n\n\n Function ''extractTodo'' is oversized: CC=5, fan-out=24, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:19:God Function:\n extractTodo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `scripts/verify-module-boundaries.mjs:6`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:6:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: goldReportIsPerfect'\n description: 'code2llm reports `God Function: goldReportIsPerfect` in `src/evaluation/gold.ts:100`.\n\n\n Function ''goldReportIsPerfect'' is oversized: CC=14, fan-out=0, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold.ts:100:God Function:\n goldReportIsPerfect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: graph'\n description: 'code2llm reports `God Function: graph` in `scripts/verify-module-boundaries.mjs:7`.\n\n\n Function ''graph'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:7:God\n Function: graph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleCommunication'\n description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:666`.\n\n\n Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:666:God Function: handleCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleDiff'\n description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:468`.\n\n\n Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:468:God Function: handleDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleGraphDiff'\n description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:494`.\n\n\n Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:494:God Function: handleGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleIntake'\n description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:706`.\n\n\n Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:706:God Function: handleIntake'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleReality'\n description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:551`.\n\n\n Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:551:God Function: handleReality'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleWatch'\n description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:346`.\n\n\n Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:346:God Function: handleWatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: index'\n description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`.\n\n\n Function ''index'' is oversized: CC=13, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/text-render.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/text-render.ts:43:God Function:\n index'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: indexModuleAnchors'\n description: 'code2llm reports `God Function: indexModuleAnchors` in `src/diff/reality.ts:308`.\n\n\n Function ''indexModuleAnchors'' is oversized: CC=12, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 3918 func | 179f | 41965L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.3 critical=220 (limit:10) dup=28 cycles=0\n\nALERTS[20]:\n !!! cc_exceeded assertOperationPlan = 84 (limit:15)\n !!! cc_exceeded parseCommand = 63 (limit:15)\n !!! cc_exceeded runPipeline = 56 (limit:15)\n !!! high_fan_out runPipeline = 56 (limit:10)\n !!! cc_exceeded analyzeCommunication = 48 (limit:15)\n !!! cc_exceeded diffUiScriptMarkup = 46 (limit:15)\n !!! cc_exceeded variables = 44 (limit:15)\n !!! cc_exceeded variableById = 44 (limit:15)\n !!! cc_exceeded steps = 44 (limit:15)\n !!! cc_exceeded stepIds = 44 (limit:15)\n\nMODULES[260] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/synthesis/code-change-plan/implementation-helpers.ts] 1148L C:16 F:133 CC↑13 D:0 (typescript)\n M[src/cli.ts] 942L C:1 F:124 CC↑13 D:0 (typescript)\n M[src/services/actions.ts] 806L C:1 F:106 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/synthesis/code-change-plan/implementation-source-patch.ts] 694L C:5 F:95 CC↑11 D:0 (typescript)\n M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript)\n M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript)\n M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript)\n LANGS: typescript:152/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ runPipeline fan=56 // Orchestrates 56 calls\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n ★ Client.parse_http_response fan=37 // Orchestrates 37 calls\n ★ diffUiScriptMarkup fan=36 // Orchestrates 36 calls\n ★ analyzeCommunication fan=35 // Analysis pipeline, 35 stages\n\nREFACTOR[15]:\n [1] H/L Split diffUiScriptMarkup (CC=46)\n [2] H/L Split OpenRouterClient.timeout (CC=26)\n [3] H/L Split OpenRouterClient.request (CC=31)\n [4] H/L Split parseCommand (CC=63)\n [5] H/L Split buildRealityView (CC=26)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.3 crit=220 41965L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; + const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "97.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "31.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 4129 \n**Total Classes**: 404 \n**Modules**: 281 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "33.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 173, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 4129\n- **Total Classes**: 404\n- **Modules**: 281\n- **Entry Points**: 2776\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.services.actions\n- **Functions**: 145\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.diff.reality\n- **Functions**: 97\n- **Classes**: 4\n- **File**: `reality.ts`\n\n### src.communication.analyzer\n- **Functions**: 88\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.intake-contract\n- **Functions**: 76\n- **Classes**: 7\n- **File**: `intake-contract.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 75\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.operations.validation\n- **Functions**: 75\n- **File**: `validation.ts`\n\n### src.core.text\n- **Functions**: 66\n- **File**: `text.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.graph.linker\n- **Functions**: 55\n- **Classes**: 1\n- **File**: `linker.ts`\n\n### src.synthesis.code-change-plan.implementation-source-patch-assert\n- **Functions**: 55\n- **Classes**: 2\n- **File**: `implementation-source-patch-assert.ts`\n\n### src.synthesis.code-change-plan.implementation-source-patch-apply-core\n- **Functions**: 54\n- **Classes**: 6\n- **File**: `implementation-source-patch-apply-core.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation-indexing.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.python.todo2code.runtime.TypeScriptRuntime.reality\n- **Calls**: tempfile.TemporaryDirectory, self.invoke, Path, Path, Path, str, str, str\n\n### src.extractors.nl.extractNlIntent\n- **Calls**: src.extractors.nl.assertNlExtractionOptions, src.extractors.nl.resolve, src.extractors.nl.readText, src.extractors.nl.isAbsolute, src.extractors.nl.relativePosix, src.extractors.nl.replace, src.extractors.nl.splitIntentLines, src.extractors.nl.classifyAction\n\n### src.extractors.ast.extractAstIntent\n- **Calls**: src.extractors.ast.resolve, src.extractors.ast.ContentCache, src.extractors.ast.loadIgnoreMatcher, src.extractors.ast.walkFiles, src.extractors.ast.readText, src.extractors.ast.relativePosix, src.extractors.ast.getOrCompute, src.extractors.ast.sha256\n\n### src.extractors.todo.body\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.relative\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.lines\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.synthesis.todo-patch.applyTodoPatch\n- **Calls**: src.synthesis.todo-patch.all, src.synthesis.todo-patch.readText, src.synthesis.todo-patch.assertTodoPatchArtifact, src.synthesis.todo-patch.sha256, src.synthesis.todo-patch.Error, src.synthesis.todo-patch.assertApproval, src.synthesis.todo-patch.ensureDir, src.synthesis.todo-patch.dirname\n\n### src.extractors.changelog.extractChangelog\n- **Calls**: src.extractors.changelog.resolve, src.extractors.changelog.pathExists, src.extractors.changelog.readText, src.extractors.changelog.relativePosix, src.extractors.changelog.split, src.extractors.changelog.match, src.extractors.changelog.trim, src.extractors.changelog.readListBlock\n\n### src.graph.diff.diffIntentGraphs\n- **Calls**: src.graph.diff.assertGraph, src.graph.diff.Map, src.graph.diff.map, src.graph.diff.has, src.graph.diff.push, src.graph.diff.groupRecords, src.graph.diff.Set, src.graph.diff.keys\n\n### php.ast_extract.parseFile\n- **Calls**: php.ast_extract.file_get_contents, php.ast_extract.RuntimeException, php.ast_extract.preg_split, php.ast_extract.token_get_all, php.ast_extract.foreach, php.ast_extract.normalizedToken, php.ast_extract.substr_count, php.ast_extract.defined\n\n### src.cli.handleCommunication\n- **Calls**: src.cli.resolve, src.cli.all, src.cli.extractCommunicationIntentAudited, src.cli.optionString, src.cli.optionNullableString, src.cli.optionLlmMode, src.cli.extractGitIntent, src.cli.optionNumber\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 2: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 3: temporaryParent\n```\ntemporaryParent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 4: baseWorktree\n```\nbaseWorktree [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 5: extractTodo\n```\nextractTodo [src.extractors.todo]\n```\n\n### Flow 6: makefile\n```\nmakefile [scripts.verify-env-contract]\n```\n\n### Flow 7: extractCommunicationIntentAudited\n```\nextractCommunicationIntentAudited [src.communication.llm.implementation.CommunicationLlmRequiredError]\n```\n\n### Flow 8: extractNlIntentAudited\n```\nextractNlIntentAudited [src.extractors.nl-llm.NlLlmRequiredError]\n └─> assertNlExtractionOptions\n```\n\n### Flow 9: linkIntentRecords\n```\nlinkIntentRecords [src.graph.linker]\n```\n\n### Flow 10: baseUrl\n```\nbaseUrl [sdk.typescript.examples.basic]\n └─> health\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 76\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.validateIntakeEnvelopeHeader, src.communication.intake-contract.IntakeError.validateIntakeEnvelopeTimestamp, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.assertQuery\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 43\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 33\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 31\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.request-handlers.parseOffset\n- **Output to**: examples.backend.src.request-handlers.Number, examples.backend.src.request-handlers.isFinite\n\n### examples.backend.src.request-handlers.parsed\n\n### examples.backend.src.request-handlers.parseLimit\n- **Output to**: examples.backend.src.request-handlers.Number, examples.backend.src.request-handlers.isFinite\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `sdk.python.examples.basic.main` - 62 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `src.pipeline.run.executePipeline` - 31 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `src.interfaces.a2a-message-command.looksLikeJson` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n- `src.extractors.ast.extractAstIntent` - 20 calls\n- `src.extractors.todo.body` - 20 calls\n- `src.extractors.todo.relative` - 20 calls\n- `src.extractors.todo.lines` - 20 calls\n- `src.synthesis.todo-patch.createTodoPatch` - 20 calls\n- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls\n- `src.communication.intake-service.GovernedIntakeService.validateProjection` - 20 calls\n- `src.extractors.changelog.extractChangelog` - 19 calls\n- `src.graph.diff.diffIntentGraphs` - 19 calls\n- `php.ast_extract.parseFile` - 19 calls\n- `src.cli.handleCommunication` - 18 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n main --> get\n main --> T2CClient\n main --> print\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n compareWorkspaceInte --> relative\n compareWorkspaceInte --> startsWith\n main --> list\n main --> monotonic\n main --> SentenceTransformer\n main --> ArgumentParser\n main --> add_subparsers\n main --> add_parser\n main --> add_argument\n temporaryParent --> git\n temporaryParent --> join\n temporaryParent --> commonPipelineOption\n temporaryParent --> optionsForRoot\n temporaryParent --> runPipeline\n baseWorktree --> git\n baseWorktree --> join\n baseWorktree --> commonPipelineOption\n baseWorktree --> optionsForRoot\n baseWorktree --> runPipeline\n extractTodo --> resolve\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "71.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__request_handlers__handleHealth["handleHealth"]\n examples__backend__src__validation__agent["agent"]\n examples__backend__src__request_handlers__size["size"]\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__request_handlers__handleEventList["handleEventList"]\n examples__backend__src__request_handlers__handleRequest["handleRequest"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__request_handlers__handleEventPublish["handleEventPublish"]\n examples__backend__src__request_handlers__parseOffset["parseOffset"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__request_handlers__event["event"]\n examples__backend__src__request_handlers__parseLimit["parseLimit"]\n examples__backend__src__request_handlers__validation["validation"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__store["store"]\n examples__backend__src__request_handlers__readBody["readBody"]\n examples__backend__src__request_handlers__sendJson["sendJson"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__request_handlers__MAX_BODY_BYTES["MAX_BODY_BYTES"]\n examples__backend__src__server__server["server"]\n examples__backend__src__validation__object["object"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__refresh["refresh"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__app__createState["createState"]\n end\n subgraph examples__src\n examples__src__runtime__executeContract["executeContract"]\n examples__src__runtime__validateContract["validateContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n end\n subgraph src__cli\n src__cli__main["main"]\n src__cli__svg["svg"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__handleExtract["handleExtract"]\n src__cli__result["result"]\n src__cli__taskFile["taskFile"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__doctor["doctor"]\n src__cli__handleLink["handleLink"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleDiff["handleDiff"]\n src__cli__optionTaskMode["optionTaskMode"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__emitJson["emitJson"]\n src__cli__view["view"]\n src__cli__controller["controller"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__context["context"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__printHelp["printHelp"]\n src__cli__optionNullableString["optionNullableString"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__handleReality["handleReality"]\n src__cli__optionString["optionString"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__diff["diff"]\n src__cli__optionNumber["optionNumber"]\n src__cli__handler["handler"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n src__cli__root["root"]\n src__cli__handleIntake["handleIntake"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__optionNlMode["optionNlMode"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__optionList["optionList"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__command["command"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__file["file"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__pipeline["pipeline"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__absolute["absolute"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__diagnostics["diagnostics"]\n src__cli__parsed["parsed"]\n src__cli__initProject["initProject"]\n src__cli__invokedPath["invokedPath"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__stop["stop"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__stamp["stamp"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n end\n subgraph src__extractors\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__todo__body["body"]\n src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__configuration__entry["entry"]\n src__extractors__todo__match["match"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__todo__checked["checked"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__docs_schema__target["target"]\n src__extractors__nl__object["object"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__git__root["root"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__todo__text["text"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__changelog__relative["relative"]\n src__extractors__git__readStats["readStats"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__git__runGit["runGit"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__todo__block["block"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__configuration__lines["lines"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__todo__raw["raw"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveModality["resolveModality"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET["NL_ACTION_SET"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__configuration__pair["pair"]\n src__extractors__nl__action["action"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__configuration__heading["heading"]\n src__extractors__git__count["count"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET["NL_MODALITY_SET"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__configuration__relative["relative"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__configuration__match["match"]\n src__extractors__changelog__lines["lines"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__git__result["result"]\n src__extractors__todo__lines["lines"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__ast__external__result["result"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__todo__task["task"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__docs_record__target["target"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__changelog__body["body"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__todo__heading["heading"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__configuration__files["files"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__docs_record__action["action"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__todo__classified["classified"]\n src__extractors__git__state["state"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__configuration__entries["entries"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__todo__relative["relative"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"]\n src__extractors__nl__classified["classified"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__todo__action["action"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__configuration__line["line"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__nl__body["body"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__nl__missing["missing"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleHealth\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventPublish\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventList\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleHealth\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventPublish\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventList\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__size\n examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__readBody\n examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__validation --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__event --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseOffset\n examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseLimit\n examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__resolveModality --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "764B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__graph["src.graph<br/>227 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>477 funcs"]\n scripts__research ==>|7| src__live\n sdk__python ==>|4| src__synthesis\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2517 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [25KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [181KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [33KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "168.7KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "25.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 281f 43441L | typescript:173,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.31s\n# CC̅=3.1 | critical:24/4129 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/diff/reality.ts = 690L, 4 classes, 89m, max CC=15\n 🟡 CC generationMetadata CC=17 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC looksLikeJson CC=20 (limit:15)\n 🟡 CC buildRealityTotals CC=15 (limit:15)\n 🟡 CC persistPipelineArtifacts CC=17 (limit:15)\n 🟡 CC persistFailedRunState CC=19 (limit:15)\n 🟡 CC assertRerankerDecision CC=17 (limit:15)\n 🟡 CC assertGeneration CC=16 (limit:15)\n 🟡 CC validateOperationStep CC=23 (limit:15)\n 🟡 CC collectAgentActionIssues CC=15 (limit:15)\n 🟡 CC parseFile CC=38 (limit:15)\n 🟡 CC makefile CC=28 (limit:15)\n 🟡 CC visited CC=15 (limit:15)\n 🟡 CC visit CC=15 (limit:15)\n 🟡 CC main CC=27 (limit:15)\n 🟡 CC iter_python_files CC=16 (limit:15)\n 🟡 CC run CC=26 (limit:15)\n 🟡 CC baseUrl CC=17 (limit:15)\n 🟡 CC token CC=17 (limit:15)\n\nREFACTOR[2]:\n 1. split src/diff/reality.ts (god module)\n 2. split 19 high-CC methods (CC>15)\n\nPIPELINES[2116]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [MAX_BODY_BYTES]: MAX_BODY_BYTES → handleHealth → sendJson\n PURITY: 100% pure\n [17] Src [handleRequest]: handleRequest → handleHealth → sendJson\n PURITY: 100% pure\n [18] Src [url]: url\n PURITY: 100% pure\n [19] Src [body]: body\n PURITY: 100% pure\n [20] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [21] Src [event]: event → sendJson\n PURITY: 100% pure\n [22] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [23] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [24] Src [record]: record → invalid\n PURITY: 100% pure\n [25] Src [agent]: agent → invalid\n PURITY: 100% pure\n [26] Src [action]: action → invalid\n PURITY: 100% pure\n [27] Src [object]: object → invalid\n PURITY: 100% pure\n [28] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [29] Src [listEvents]: listEvents\n PURITY: 100% pure\n [30] Src [start]: start\n PURITY: 100% pure\n [31] Src [store]: store → sendJson\n PURITY: 100% pure\n [32] Src [server]: server → sendJson\n PURITY: 100% pure\n [33] Src [body]: body\n PURITY: 100% pure\n [34] Src [startBackend]: startBackend → createBackend → sendJson\n PURITY: 100% pure\n [35] Src [port]: port\n PURITY: 100% pure\n [36] Src [host]: host\n PURITY: 100% pure\n [37] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [38] Src [url]: url\n PURITY: 100% pure\n [39] Src [response]: response\n PURITY: 100% pure\n [40] Src [payload]: payload\n PURITY: 100% pure\n [41] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [42] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [43] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [44] Src [table]: table\n PURITY: 100% pure\n [45] Src [head]: head\n PURITY: 100% pure\n [46] Src [body]: body\n PURITY: 100% pure\n [47] Src [tr]: tr\n PURITY: 100% pure\n [48] Src [renderError]: renderError\n PURITY: 100% pure\n [49] Src [message]: message\n PURITY: 100% pure\n [50] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:1\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.1 ←in:0 →out:0\n │ !! cli.ts 942L 1C 124m CC=13 ←0\n │ !! actions.ts 806L 1C 106m CC=13 ←0\n │ !! reality.ts 690L 4C 89m CC=15 ←0\n │ !! analyzer.ts 596L 3C 81m CC=15 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! text.ts 530L 0C 61m CC=14 ←0\n │ gold-cases.ts 489L 4C 62m CC=8 ←0\n │ diagnostics.ts 459L 1C 59m CC=11 ←0\n │ implementation-source-patch-apply-core.ts 434L 6C 50m CC=13 ←0\n │ !! validation.ts 429L 0C 69m CC=23 ←0\n │ !! gold-types.ts 405L 15C 17m CC=17 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ implementation-source-patch-assert.ts 397L 2C 52m CC=11 ←0\n │ !! run.ts 384L 4C 33m CC=20 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ intake-contract.ts 334L 7C 34m CC=14 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ result.ts 311L 0C 23m CC=7 ←0\n │ intent.ts 309L 4C 37m CC=12 ←0\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ !! run-persistence.ts 297L 0C 28m CC=19 ←0\n │ watcher.ts 292L 6C 42m CC=12 ←0\n │ reranker-llm.ts 291L 2C 35m CC=9 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ linker.ts 286L 1C 52m CC=8 ←3\n │ implementation-review.ts 274L 3C 33m CC=7 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ implementation-helpers-plans.ts 269L 3C 36m CC=9 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ nl-llm-helpers.ts 261L 3C 31m CC=11 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ candidate.ts 250L 1C 19m CC=8 ←0\n │ code-change.ts 250L 19C 0m CC=0.0 ←0\n │ openrouter-request.ts 242L 4C 30m CC=9 ←0\n │ openrouter.ts 240L 5C 31m CC=13 ←0\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ implementation-source-patch-create.ts 235L 3C 30m CC=6 ←0\n │ implementation-source-patch-apply-diff.ts 233L 3C 31m CC=11 ←0\n │ code-change-path.ts 232L 0C 23m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ identity.ts 216L 3C 33m CC=12 ←0\n │ intent.ts 212L 13C 0m CC=0.0 ←0\n │ io.ts 211L 2C 30m CC=11 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ git.ts 208L 4C 27m CC=6 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ run-helpers.ts 188L 0C 18m CC=11 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ markdown-llm.ts 178L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ a2a-run-list-item.ts 171L 2C 29m CC=8 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ linker-candidates.ts 163L 1C 23m CC=10 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ record.ts 158L 2C 10m CC=6 ←0\n │ intake-protobuf.ts 158L 0C 29m CC=13 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ text.ts 153L 0C 34m CC=6 ←0\n │ diff-ui.ts 152L 0C 7m CC=5 ←0\n │ text-myers.ts 152L 3C 27m CC=9 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ !! a2a-message-command.ts 144L 0C 30m CC=20 ←1\n │ implementation-helpers-acceptance.ts 141L 2C 15m CC=4 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ implementation-semantic.ts 125L 1C 13m CC=9 ←0\n │ a2a-message.ts 125L 0C 19m CC=12 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ a2a-history.ts 96L 1C 17m CC=13 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ linker-relations.ts 83L 3C 7m CC=7 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ implementation-helpers-close.ts 75L 2C 10m CC=4 ←0\n │ implementation-source-patch-diff.ts 74L 0C 16m CC=6 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ implementation-targets.ts 61L 0C 9m CC=5 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ run-summary.ts 58L 1C 4m CC=5 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ implementation-helpers.ts 39L 0C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ implementation-helpers-shared.ts 29L 0C 2m CC=1 ←0\n │ !! record-metadata.ts 27L 0C 3m CC=17 ←0\n │ implementation-indexing.ts 25L 0C 4m CC=4 ←3\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ !! diff-ui-script.ts 17L 0C 8m CC=15 ←0\n │ implementation-diagnostics.ts 17L 0C 2m CC=2 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ git-binary.ts 10L 0C 2m CC=1 ←0\n │ implementation-source-patch.ts 9L 0C 0m CC=0.0 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ implementation-source-patch-apply.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ implementation.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.3 ←in:0 →out:0\n │ request-handlers.ts 88L 0C 18m CC=9 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ server.ts 43L 1C 8m CC=4 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.synthesis src.graph java examples.frontend python\n scripts.research ── 7 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ── ←1\n java ←2 ── \n examples.frontend ←1 ── \n python 1 ──\n CYCLES: none\n HUB: src.live/ (fan-in=7)\n HUB: src.synthesis/ (fan-in=5)\n SMELL: scripts.research/ fan-out=9 → split needed\n SMELL: sdk.python/ fan-out=8 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 399 | edges: 500 | modules: 30\n# CC̄=3.1\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.ast.records.moduleRecords\n CC=6 in:1 out:14 total:15\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.lines\n CC=7 in:0 out:15 total:15\n\nMODULES:\n examples.backend.src.request-handlers [12 funcs]\n MAX_BODY_BYTES CC=9 out:5\n event CC=1 out:1\n handleEventList CC=1 out:5\n handleEventPublish CC=4 out:6\n handleHealth CC=1 out:2\n handleRequest CC=9 out:5\n parseLimit CC=2 out:2\n parseOffset CC=2 out:2\n readBody CC=3 out:5\n sendJson CC=1 out:4\n examples.backend.src.server [5 funcs]\n createBackend CC=4 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n startBackend CC=3 out:3\n store CC=3 out:4\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [2 funcs]\n adapterRecords CC=2 out:3\n moduleRecords CC=6 out:14\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [10 funcs]\n appendA2aAgentWarnings CC=5 out:4\n appendIdentityWarnings CC=4 out:2\n appendRegistryAlignmentWarnings CC=7 out:2\n appendRoleAndParticipantWarnings CC=3 out:2\n appendTimestampWarnings CC=3 out:2\n buildLocalWarnings CC=3 out:5\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [18 funcs]\n NL_ACTION_SET CC=1 out:7\n NL_MODALITY_SET CC=1 out:7\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleHealth\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleEventPublish\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleEventList\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleHealth\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleEventPublish\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleEventList\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleHealth → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleHealth → examples.backend.src.request-handlers.size\n examples.backend.src.request-handlers.handleEventPublish → examples.backend.src.request-handlers.readBody\n examples.backend.src.request-handlers.handleEventPublish → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.validation → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.event → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.parseOffset\n examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.parseLimit\n examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.sendJson\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "262.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 399\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n examples.backend.src.request-handlers.handleHealth:\n name: handleHealth\n module: examples.backend.src.request-handlers\n line: 25\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.cli.svg:\n name: svg\n module: src.cli\n line: 564\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 619\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 139\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 577\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.cli.result:\n name: result\n module: src.cli\n line: 770\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 666\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 263\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-file-helpers.buildLocalWarnings:\n name: buildLocalWarnings\n module: src.extractors.communication-file-helpers\n line: 254\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 757\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n examples.backend.src.request-handlers.size:\n name: size\n module: examples.backend.src.request-handlers\n line: 71\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 16\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 131\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n examples.backend.src.request-handlers.handleEventList:\n name: handleEventList\n module: examples.backend.src.request-handlers\n line: 50\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 691\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n src.extractors.communication-file-helpers.appendRegistryAlignmentWarnings:\n name: appendRegistryAlignmentWarnings\n module: src.extractors.communication-file-helpers\n line: 299\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 78\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 779\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 88\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 468\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 860\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 330\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 290\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 346\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 656\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 494\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.backend.src.request-handlers.handleRequest:\n name: handleRequest\n module: examples.backend.src.request-handlers\n line: 7\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 701\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.view:\n name: view\n module: src.cli\n line: 561\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.controller:\n name: controller\n module: src.cli\n line: 351\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 26\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 3\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 272\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 512\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.context:\n name: context\n module: src.cli\n line: 535\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 180\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n examples.backend.src.request-handlers.handleEventPublish:\n name: handleEventPublish\n module: examples.backend.src.request-handlers\n line: 29\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 2\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 646\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 890\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 242\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 823\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 167\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 876\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.resolveModality:\n name: resolveModality\n module: src.extractors.nl-llm-helpers\n line: 171\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 551\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n examples.backend.src.request-handlers.parseOffset:\n name: parseOffset\n module: examples.backend.src.request-handlers\n line: 59\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 818\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 163\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n examples.backend.src.request-handlers.event:\n name: event\n module: examples.backend.src.request-handlers\n line: 46\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 218\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 125\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 188\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.NL_ACTION_SET:\n name: NL_ACTION_SET\n module: src.extractors.nl-llm-helpers\n line: 234\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n examples.backend.src.request-handlers.parseLimit:\n name: parseLimit\n module: examples.backend.src.request-handlers\n line: 64\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 91\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 0\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 222\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 624\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-file-helpers.appendIdentityWarnings:\n name: appendIdentityWarnings\n module: src.extractors.communication-file-helpers\n line: 282\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 192\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 384\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n examples.backend.src.request-handlers.validation:\n name: validation\n module: examples.backend.src.request-handlers\n line: 39\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.cli.diff:\n name: diff\n module: src.cli\n line: 504\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.NL_MODALITY_SET:\n name: NL_MODALITY_SET\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 837\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.cli.handler:\n name: handler\n module: src.cli\n line: 594\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 367\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 197\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.root:\n name: root\n module: src.cli\n line: 667\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 706\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 35\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 257\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 241\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 3\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 222\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 17\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 850\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 85\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n examples.backend.src.request-handlers.readBody:\n name: readBody\n module: examples.backend.src.request-handlers\n line: 69\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n examples.backend.src.request-handlers.sendJson:\n name: sendJson\n module: examples.backend.src.request-handlers\n line: 81\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 7\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 845\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 614\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 601\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 448\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.communication-file-helpers.appendTimestampWarnings:\n name: appendTimestampWarnings\n module: src.extractors.communication-file-helpers\n line: 328\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 241\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 146\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 882\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.cli.file:\n name: file\n module: src.cli\n line: 602\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.communication-file-helpers.appendA2aAgentWarnings:\n name: appendA2aAgentWarnings\n module: src.extractors.communication-file-helpers\n line: 314\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 636\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 34\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 349\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 414\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 629\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 712\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 409\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 558\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n examples.backend.src.request-handlers.MAX_BODY_BYTES:\n name: MAX_BODY_BYTES\n module: examples.backend.src.request-handlers\n line: 5\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 0\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.communication-file-helpers.appendRoleAndParticipantWarnings:\n name: appendRoleAndParticipantWarnings\n module: src.extractors.communication-file-helpers\n line: 273\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 736\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 936\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 310\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 534\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.cli.stop:\n name: stop\n module: src.cli\n line: 352\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 201\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 830\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 854\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 488\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 449\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 866\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 517\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 338\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 371\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 226\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.handleHealth\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.handleEventPublish\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.handleEventList\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.handleHealth\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.handleEventPublish\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.handleEventList\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleHealth\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleHealth\n callee: examples.backend.src.request-handlers.size\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventPublish\n callee: examples.backend.src.request-handlers.readBody\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventPublish\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.validation\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.event\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventList\n callee: examples.backend.src.request-handlers.parseOffset\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventList\n callee: examples.backend.src.request-handlers.parseLimit\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventList\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntrie\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3812 func | 162f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/cli.ts\n WHY: 942L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12246\n\n [2] !! SPLIT src/services/actions.ts\n WHY: 806L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 10478\n\n [3] !! SPLIT-FUNC parseFile CC=38 fan=19\n WHY: CC=38 exceeds 15\n EFFORT: ~1h IMPACT: 722\n\n [4] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37\n WHY: CC=18 exceeds 15\n EFFORT: ~1h IMPACT: 666\n\n [5] ! SPLIT-FUNC executePipeline CC=20 fan=31\n WHY: CC=20 exceeds 15\n EFFORT: ~1h IMPACT: 620\n\n [6] ! SPLIT-FUNC looksLikeJson CC=20 fan=24\n WHY: CC=20 exceeds 15\n EFFORT: ~1h IMPACT: 480\n\n [7] ! SPLIT-FUNC validateOperationStep CC=23 fan=13\n WHY: CC=23 exceeds 15\n EFFORT: ~1h IMPACT: 299\n\n [8] ! SPLIT-FUNC iter_python_files CC=16 fan=15\n WHY: CC=16 exceeds 15\n EFFORT: ~1h IMPACT: 240\n\n [9] ! SPLIT-FUNC persistFailedRunState CC=19 fan=12\n WHY: CC=19 exceeds 15\n EFFORT: ~1h IMPACT: 228\n\n [10] ! SPLIT-FUNC collectAgentActionIssues CC=15 fan=15\n WHY: CC=15 exceeds 15\n EFFORT: ~1h IMPACT: 225\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n ⚠ Splitting src/services/actions.ts may break 106 import paths\n\nMETRICS-TARGET:\n CC̄: 3.0 → ≤2.1\n max-CC: 38 → ≤19\n god-modules: 10 → 0\n high-CC(≥15): 14 → ≤7\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.0 → now CC̄=3.0\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "181.1KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 281f 43441L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:173,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.04s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 4129 func | 0 cls | 281 mod | CC̄=3.1 | critical:24 | cycles:0\n# alerts[5]: fan-out compareWorkspaceIntent=40; CC parseFile=38; fan-out Client.parse_http_response=37; fan-out run=33; fan-out executePipeline=31\n# hotspots[5]: compareWorkspaceIntent fan=40; Client.parse_http_response fan=37; run fan=33; main fan=31; executePipeline fan=31\n# evolution: CC̄ 3.0→3.1 (regressed +0.1)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[281]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/request-handlers.ts,88\n examples/backend/src/server.ts,43\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,942\n src/communication/analyzer.ts,596\n src/communication/identity.ts,216\n src/communication/intake-contract.ts,334\n src/communication/intake-protobuf.ts,158\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,211\n src/core/record.ts,158\n src/core/record-metadata.ts,27\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,309\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,530\n src/core/types/index.ts,4\n src/core/types/code-change.ts,250\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,212\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,208\n src/diff/git-binary.ts,10\n src/diff/reality.ts,690\n src/diff/svg.ts,104\n src/diff/text.ts,153\n src/diff/text-myers.ts,152\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,489\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,405\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,342\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,178\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,261\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,286\n src/graph/linker-candidates.ts,163\n src/graph/linker-relations.ts,83\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,96\n src/interfaces/a2a-message.ts,125\n src/interfaces/a2a-message-command.ts,144\n src/interfaces/a2a-run-list-item.ts,171\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,240\n src/llm/openrouter-request.ts,242\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,429\n src/pipeline/run.ts,384\n src/pipeline/run-helpers.ts,188\n src/pipeline/run-persistence.ts,297\n src/pipeline/run-summary.ts,58\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,291\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,250\n src/semantic/reranker/result.ts,311\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,806\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,232\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/code-change-plan/implementation-diagnostics.ts,17\n src/synthesis/code-change-plan/implementation-helpers.ts,39\n src/synthesis/code-change-plan/implementation-helpers-acceptance.ts,141\n src/synthesis/code-change-plan/implementation-helpers-close.ts,75\n src/synthesis/code-change-plan/implementation-helpers-plans.ts,269\n src/synthesis/code-change-plan/implementation-helpers-shared.ts,29\n src/synthesis/code-change-plan/implementation-indexing.ts,25\n src/synthesis/code-change-plan/implementation-review.ts,274\n src/synthesis/code-change-plan/implementation-semantic.ts,125\n src/synthesis/code-change-plan/implementation-source-patch.ts,9\n src/synthesis/code-change-plan/implementation-source-patch-apply.ts,8\n src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts,434\n src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts,233\n src/synthesis/code-change-plan/implementation-source-patch-assert.ts,397\n src/synthesis/code-change-plan/implementation-source-patch-create.ts,235\n src/synthesis/code-change-plan/implementation-source-patch-diff.ts,74\n src/synthesis/code-change-plan/implementation-targets.ts,61\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,292\n src/web/diff-ui.ts,152\n src/web/diff-ui-script.ts,17\n tsconfig.json,23\nD:\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,expectedId,assertVariableContractShape,assertVariableContractCore,assertVariableSource,source,assertVariableAccess,access,assertVariableAuthoritativeness,assertVariableMutability,buildVariableContractId,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,variables,variableById,validateOperationPlanShape,validateOperationPlanMetadata,validateOperationPlanEvidence,evidence,collectOperationPlanVariables,variables,validateOperationSteps,stepIds,steps,hasCommandStep,founderDecisionRequired,step,validateOperationStep,step,parameters,rollback,validateOperationStepParameters,parameters,reference,variable,validateOperationStepRollback,rollback,validateOperationExpectations,coveredSteps,expectationIds,expectation,verifiedBy,validateOperationDecision,decision,validateOperationVerification,verification,validateOperationPlanHash,castPlan,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n expectedId()\n assertVariableContractShape()\n assertVariableContractCore()\n assertVariableSource()\n source()\n assertVariableAccess()\n access()\n assertVariableAuthoritativeness()\n assertVariableMutability()\n buildVariableContractId()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n variables()\n variableById()\n validateOperationPlanShape()\n validateOperationPlanMetadata()\n validateOperationPlanEvidence()\n evidence()\n collectOperationPlanVariables()\n variables()\n validateOperationSteps()\n stepIds()\n steps()\n hasCommandStep()\n founderDecisionRequired()\n step()\n validateOperationStep()\n step()\n parameters()\n rollback()\n validateOperationStepParameters()\n parameters()\n reference()\n variable()\n validateOperationStepRollback()\n rollback()\n validateOperationExpectations()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n validateOperationDecision()\n decision()\n validateOperationVerification()\n verification()\n validateOperationPlanHash()\n castPlan()\n expectedHash()\n src/interfaces/a2a-message-command.ts:\n i: ../communication/intake-protobuf.js\n e: parseCommand,protobufCommand,objectCommand,parseCommandFromProtobuf,protobuf,bytes,parseCommandFromObject,objectData,parseCommandFromText,text,looksLikeJson,parseCommandFromJson,parseCommandFromSentence,parseSentenceInput,defaultTextCommand,isSupportedAction,commandInputFromSentence,first,parseText,firstToken,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,normalizeAction,normalized,action\n parseCommand()\n protobufCommand()\n objectCommand()\n parseCommandFromProtobuf()\n protobuf()\n bytes()\n parseCommandFromObject()\n objectData()\n parseCommandFromText()\n text()\n looksLikeJson()\n parseCommandFromJson()\n parseCommandFromSentence()\n parseSentenceInput()\n defaultTextCommand()\n isSupportedAction()\n commandInputFromSentence()\n first()\n parseText()\n firstToken()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n normalizeAction()\n normalized()\n action()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../version.js,./run-summary.js,node:path\n e: PipelineContext,PipelineExecutionOutput,PipelinePersistedPaths,PipelineResult,runPipeline,context,execution,persisted,manifest,manifestPath,initializePipelineContext,root,runId,baseOutput,runDirectory,executePipeline,deterministicDocumentFiles,naturalLanguageAudit,result,git,ast,markdown,markdownAudit,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,communicationInput,communicationAudit,communicationSyntheses,allRecords,generatedAt,graph,diagnostics,communicationAnalysis,taskSynthesis\n PipelineContext:\n PipelineExecutionOutput:\n PipelinePersistedPaths:\n PipelineResult:\n runPipeline()\n context()\n execution()\n persisted()\n manifest()\n manifestPath()\n initializePipelineContext()\n root()\n runId()\n baseOutput()\n runDirectory()\n executePipeline()\n deterministicDocumentFiles()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n markdownAudit()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n communicationInput()\n communicationAudit()\n communicationSyntheses()\n allRecords()\n generatedAt()\n graph()\n diagnostics()\n communicationAnalysis()\n taskSynthesis()\n src/pipeline/run-persistence.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../extractors/docs-llm.js,../extractors/nl-llm.js,../llm/audit.js,../synthesis/tasks-llm.js,../version.js,./run.js,node:path\n e: makePipelineManifest,persistPipelineArtifacts,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,persistFailedRun,manifestConfiguration,persistFailedRunState,aborted,message,knownAudit,failedAudit,stageValue,reason,skippedAudit,failureCode\n makePipelineManifest()\n persistPipelineArtifacts()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n persistFailedRun()\n manifestConfiguration()\n persistFailedRunState()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n skippedAudit()\n failureCode()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/core/record-metadata.ts:\n i: ./types.js,./version.js\n e: generationMetadata,generationIdentity,separator\n generationMetadata()\n generationIdentity()\n separator()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,assertGoldLinkingCohort,assertRerankerFixture,assertRerankerModelIdentity,assertRerankerDecisions,decisions,recordLabels,seenModules,assertRerankerDecision\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n assertGoldLinkingCohort()\n assertRerankerFixture()\n assertRerankerModelIdentity()\n assertRerankerDecisions()\n decisions()\n recordLabels()\n seenModules()\n assertRerankerDecision()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n src/web/diff-ui-script.ts:\n e: byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,RealitySvgLayout,buildRealityView,components,diagnosticsByRecord,rows,buildRealityRows,rows,buildRealityRow,codes,status,compareRealityRows,bySeverity,alignment,bySize,buildRealityTotals,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,summarizeLaneTotals,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,layout,header,body,overflow,height,buildRealityLayout,laneX,laneStep,statusX,statusWidth,renderRealityLaneHeaders,isDeclared,renderRealityRow,y,color,renderRealityLanes,count,cx,renderRealityLaneCell,fill,label,pillWidth,renderMoreTopicsLabel,y,renderRealityHeight,footer,y,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n RealitySvgLayout:\n buildRealityView()\n components()\n diagnosticsByRecord()\n rows()\n buildRealityRows()\n rows()\n buildRealityRow()\n codes()\n status()\n compareRealityRows()\n bySeverity()\n alignment()\n bySize()\n buildRealityTotals()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n summarizeLaneTotals()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n layout()\n header()\n body()\n overflow()\n height()\n buildRealityLayout()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n renderRealityLaneHeaders()\n isDeclared()\n renderRealityRow()\n y()\n color()\n renderRealityLanes()\n count()\n cx()\n renderRealityLaneCell()\n fill()\n label()\n pillWidth()\n renderMoreTopicsLabel()\n y()\n renderRealityHeight()\n footer()\n y()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,humanRequests,agentMessages,uniqueIssues,participantRows,collectParticipantsAndIdentityIssues,participants,participant,values,collectConflictIssues,left,right,leftRole,rightRole,code,responseRequiredFrom,resolveConflictCode,collectRequestResponseIssues,response,collectAgentActionIssues,type,participantGit,linked,matchedRequest,deduplicateCommunicationIssues,buildParticipantRows,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n humanRequests()\n agentMessages()\n uniqueIssues()\n participantRows()\n collectParticipantsAndIdentityIssues()\n participants()\n participant()\n values()\n collectConflictIssues()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n resolveConflictCode()\n collectRequestResponseIssues()\n response()\n collectAgentActionIssues()\n type()\n participantGit()\n linked()\n matchedRequest()\n deduplicateCommunicationIssues()\n buildParticipantRows()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n appendRoleAndParticipantWarnings()\n appendIdentityWarnings()\n appendRegistryAlignmentWarnings()\n appendA2aAgentWarnings()\n declaredA2aAgentId()\n hasRegistryEntry()\n appendTimestampWarnings()\n rawTimestamp()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n withoutAction()\n result()\n normalizeForObject()\n removeObjectAction()\n stripObjectConnector()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),validateIntakeEnvelopeHeader(-1),validateIntakeEnvelopeTimestamp(-1),assertCommand(-1),assertQuery(-1),invalid(-1),validateIntakeEnvelopeHeader(-1),invalid(-1),invalid(-1),validateIntakeEnvelopeTimestamp(-1),invalid(-1),assertCommand(-1),base(-1),validateCommandPayload(-1),validateCommandPayload(-1),assertParticipant(-1),participantId(-1),assertPrincipal(-1),participantId(-1),role(-1),stringArray(-1),capabilities(-1),participantId(-1),role(-1),ticketId(-1),invalid(-1),invalid(-1),participantId(-1),ticketId(-1),invalid(-1),assertQuery(-1),base(-1),validateQueryPayload(-1),validateQueryPayload(-1),nonBlank(-1),participantId(-1),ticketId(-1),nonBlank(-1),participantId(-1),ticketId(-1),invalid(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n handler()\n executeExtractNlAction()\n file()\n text()\n executeExtractGitAction()\n executeExtractAstAction()\n executeExtractConfigAction()\n executeExtractMarkdownAction()\n executeExtractDocsAction()\n executeExtractCommunicationAction()\n executeAnalyzeCommunicationAction()\n analysis()\n executeLinkAction()\n records()\n executeDiagnoseAction()\n graph()\n executeSummarizeAction()\n graph()\n diagnostics()\n executeProposeTodoAction()\n graph()\n diagnostics()\n result()\n output()\n executeRenderTodoAction()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n executeApplyTodoAction()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n executeProposeCodeChangeAction()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n executeRenderCodeChangeAction()\n planSet()\n review()\n patchPath()\n auditPath()\n executeProposeSourcePatchAction()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n executeApplySourcePatchAction()\n patch()\n receiptPath()\n result()\n executeEvaluateCodeChangeAction()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n executeCloseCodeChangeAction()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n executeDiffAction()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n executeDiffFilesAction()\n beforePath()\n afterPath()\n diff()\n executeDiffGitAction()\n result()\n executeRealityAction()\n graph()\n diagnostics()\n view()\n executeCompareWorkspaceAction()\n executePipelineAction()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:\n i: ../../core/io.js,../../core/schema.js,../../core/security.js,../../version.js,./implementation-diagnostics.js,./implementation-source-patch-apply-diff.js,./implementation-source-patch-assert.js,node:crypto,node:fs,node:path\n e: ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,exactSourcePatchKeys,actual,exactSourcePatchSet,deterministicGeneration\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n NormalizedApplyCodeChangeSourcePatchRequest:\n SourcePatchApplyLock:\n SourcePatchEditTarget:\n PreparedSourceEdit:\n applyCodeChangeSourcePatch()\n request()\n root()\n receiptPath()\n lock()\n idempotentResult()\n prepared()\n now()\n receipt()\n readExistingReceipt()\n existing()\n assertPatchApplicationRequest()\n patch()\n assertPatchApprovalActor()\n assertPatchApprovalHash()\n assertPatchEditsContainDiffs()\n acquireApplyLock()\n lock()\n prepareSourceEdits()\n target()\n before()\n after()\n prepareSourceEditTarget()\n relative()\n absolute()\n existed()\n assertSourcePatchTargetNotSymlink()\n assertDeleteEditClearsAll()\n validatePatchTargetForEdit()\n applyPreparedEdits()\n receipt()\n rollbackErrors()\n writePreparedEdits()\n buildPatchApplyReceipt()\n fileHashesAfter()\n rollbackPreparedEdits()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n validateSourceApplyReceiptShape()\n validateSourceApplyReceiptIdentity()\n validateSourceApplyReceiptTimestamps()\n validateSourceApplyReceiptPathHashes()\n expectedPaths()\n hashPaths()\n validateSourceApplyReceiptGeneration()\n atomicWriteRaw()\n exactSourcePatchKeys()\n actual()\n exactSourcePatchSet()\n deterministicGeneration()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),createModelError(-1),formatInvalidModelError(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),shouldRetryWithoutJsonSchema(-1)\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,node:fs,node:path\n e: RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,matchesRunFilters,participant,role,ticket,severity,normalized,safeRunPath\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n safeRunPath()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,parsed,values,unknownFields,payload,envelope,encodeIntakeResult,decodeIntakeResult,parsed,strings,numbers,decodeDelimitedFields,values,strings,numbers,offset,fieldStart,field,wire,raw,value,parsePayloadJson,parseOptionalJson,buildIntakeEnvelope,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n parsed()\n values()\n unknownFields()\n payload()\n envelope()\n encodeIntakeResult()\n decodeIntakeResult()\n parsed()\n strings()\n numbers()\n decodeDelimitedFields()\n values()\n strings()\n numbers()\n offset()\n fieldStart()\n field()\n wire()\n raw()\n value()\n parsePayloadJson()\n parseOptionalJson()\n buildIntakeEnvelope()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,recordId,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n recordId()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/interfaces/a2a-message.ts:\n e: parseSendConfiguration,validateOutputModes,supported,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,WatchConfiguration,WatchRuntime,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,configuration,runtime,defaultSleep,timer,onAbort,finish,createWatchConfiguration,root,minIntervalMs,scanIntervalMs,emit,now,sleep,matcher,runReport,result,createWatchRuntime,initialSnapshot,scanTreeCurrent,evaluateChangeCycle,current,delta,handleDelta,maybeGenerateReport,waitMs,generateReportForReason,startedAt,result\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n WatchConfiguration:\n WatchRuntime:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n configuration()\n runtime()\n defaultSleep()\n timer()\n onAbort()\n finish()\n createWatchConfiguration()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n matcher()\n runReport()\n result()\n createWatchRuntime()\n initialSnapshot()\n scanTreeCurrent()\n evaluateChangeCycle()\n current()\n delta()\n handleDelta()\n maybeGenerateReport()\n waitMs()\n generateReportForReason()\n startedAt()\n result()\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,participants,validateRegistryShape,assertParticipantIdentityEntry,entry,participantId,role,values,assertParticipantIdentityId,assertParticipantIdentityRole,assertDisplayName,assertDuplicateId,assertParticipantIdentityField,values,assertParticipantIdentityFieldUnique,owner,assertRoleCompatibility,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n participants()\n validateRegistryShape()\n assertParticipantIdentityEntry()\n entry()\n participantId()\n role()\n values()\n assertParticipantIdentityId()\n assertParticipantIdentityRole()\n assertDisplayName()\n assertDuplicateId()\n assertParticipantIdentityField()\n values()\n assertParticipantIdentityFieldUnique()\n owner()\n assertRoleCompatibility()\n exactKeys()\n allowed()\n missing()\n extra()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),resolveModality(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),NL_ACTION_SET(-1),NL_MODALITY_SET(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTargetEvidence,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTargetEvidence()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,WalkState,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,state,createWalkState,walkDirectory,entries,walkEntry,absolute,relative,isTargetFile,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n WalkState:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n state()\n createWalkState()\n walkDirectory()\n entries()\n walkEntry()\n absolute()\n relative()\n isTargetFile()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isUsefulCodeChangePath,isPlannablePath,normalized,segments,lowerSegments,basename,normalizePlannablePath,isCandidatePathSyntax,splitPathSegments,isInvalidSegmentShape,isConcretePath,hasShellPattern,isDisallowedSegment,isPlannableBasename,lowerBasename,dot,ext,isGeneratedArtifactPath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isUsefulCodeChangePath()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n normalizePlannablePath()\n isCandidatePathSyntax()\n splitPathSegments()\n isInvalidSegmentShape()\n isConcretePath()\n hasShellPattern()\n isDisallowedSegment()\n isPlannableBasename()\n lowerBasename()\n dot()\n ext()\n isGeneratedArtifactPath()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/synthesis/code-change-plan/implementation-source-patch-assert.ts:\n i: ../../core/schema.js,./implementation-source-patch-diff.js\n e: SourcePatchEditValidationContext,SourcePatchSetValidationContext,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,marker,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet\n SourcePatchEditValidationContext:\n SourcePatchSetValidationContext:\n assertCodeChangeSourcePatch()\n patch()\n editPaths()\n assertCodeChangeSourcePatchObject()\n patch()\n validateSourcePatchSchema()\n validateSourcePatchIdentifiers()\n validateSourcePatchEdits()\n collectSourcePatchEditPathActions()\n paths()\n editContext()\n validateSourcePatchEdit()\n normalizedEdit()\n normalizedPath()\n assertSourcePatchEditObject()\n validateSourcePatchEditBody()\n validateSourcePatchEditDiff()\n assertUniqueSourcePatchEditPathAction()\n normalizeSourcePatchEditPath()\n normalizedPath()\n ensureSourcePatchEditAction()\n ensureSourcePatchEditInstruction()\n validateSourcePatchHashAndId()\n expectedHash()\n validateSourcePatchGeneration()\n validateSourcePatchAgainstPlan()\n expectedChanges()\n assertSourcePatchPlanBinding()\n collectExpectedPlanChanges()\n validateSourcePatchEditsAgainstPlan()\n allowed()\n editPath()\n validateSourcePatchEvidence()\n marker()\n assertCodeChangeSourcePatchSet()\n set()\n context()\n createSourcePatchSetValidationContext()\n expectedPlanIds()\n assertSourcePatchSetObject()\n set()\n validateSourcePatchSetSchema()\n validateSourcePatchSetPatches()\n patchIds()\n validateSetPatchAndTrackDuplicates()\n expectedPlan()\n validateSetPatchGraphFingerprint()\n assertUniqueSetPatchId()\n validateSetPatchesPlanCoverage()\n validateSourcePatchSetGeneration()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts:\n i: ./implementation-source-patch-diff.js\n e: ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines\n ParsedUnifiedDiffHunk:\n UnifiedDiffParsingContext:\n UnifiedDiffCursor:\n applyUnifiedDiffToText()\n baseLines()\n hunks()\n output()\n joinAppliedText()\n parseUnifiedDiffIntoHunks()\n normalizedDiff()\n context()\n createEmptyUnifiedDiffContext()\n parseUnifiedDiffLines()\n finalizeUnifiedDiffContext()\n applyUnifiedDiffLineToContext()\n header()\n parseUnifiedDiffHeader()\n buildParsedUnifiedDiffHunk()\n applyUnifiedDiffHunks()\n applyUnifiedDiffHunk()\n oldIndex()\n copyBaseLinesToCursor()\n appendRemainingBaseLines()\n validateHunkCounts()\n oldCount()\n newCount()\n applyUnifiedDiffLine()\n mark()\n body()\n applyUnifiedDiffContextLine()\n applyUnifiedDiffDeletionLine()\n applyUnifiedDiffAdditionLine()\n splitKeep()\n lines()\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskSt\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "149.6KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.13s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_god\n title: 'Split god module: src/diff/reality.ts'\n description: 'code2llm reports `src/diff/reality.ts` as a large module (690 lines,\n 4 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:god:src/diff/reality.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.collectAgentActionIssues\n (CC=15)'\n description: 'code2llm reports `src.communication.analyzer.collectAgentActionIssues`\n at `src/communication/analyzer.ts:173` with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.collectAgentActionIssues\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record-metadata.generationMetadata\n (CC=17)'\n description: 'code2llm reports `src.core.record-metadata.generationMetadata` at\n `src/core/record-metadata.ts:4` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record-metadata.ts\n dedupe_key: code2llm:cc:src/core/record-metadata.ts:src.core.record-metadata.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityTotals (CC=15)'\n description: 'code2llm reports `src.diff.reality.buildRealityTotals` at `src/diff/reality.ts:224`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityTotals\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertRerankerDecision\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-types.assertRerankerDecision`\n at `src/evaluation/gold-types.ts:383` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertRerankerDecision\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message-command.looksLikeJson\n (CC=20)'\n description: 'code2llm reports `src.interfaces.a2a-message-command.looksLikeJson`\n at `src/interfaces/a2a-message-command.ts:56` with cyclomatic complexity 20 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message-command.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message-command.ts:src.interfaces.a2a-message-command.looksLikeJson\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:162`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.validateOperationStep\n (CC=23)'\n description: 'code2llm reports `src.operations.validation.validateOperationStep`\n at `src/operations/validation.ts:277` with cyclomatic complexity 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.validateOperationStep\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run-persistence.persistFailedRunState\n (CC=19)'\n description: 'code2llm reports `src.pipeline.run-persistence.persistFailedRunState`\n at `src/pipeline/run-persistence.ts:206` with cyclomatic complexity 19 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run-persistence.ts\n dedupe_key: code2llm:cc:src/pipeline/run-persistence.ts:src.pipeline.run-persistence.persistFailedRunState\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run-persistence.persistPipelineArtifacts\n (CC=17)'\n description: 'code2llm reports `src.pipeline.run-persistence.persistPipelineArtifacts`\n at `src/pipeline/run-persistence.ts:57` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run-persistence.ts\n dedupe_key: code2llm:cc:src/pipeline/run-persistence.ts:src.pipeline.run-persistence.persistPipelineArtifacts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.executePipeline (CC=20)'\n description: 'code2llm reports `src.pipeline.run.executePipeline` at `src/pipeline/run.ts:198`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.executePipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui-script.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui-script.compareGraphs` at `src/web/diff-ui-script.ts:11`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui-script.ts\n dedupe_key: code2llm:cc:src/web/diff-ui-script.ts:src.web.diff-ui-script.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, self, root, nl_mode'\n description: 'code2llm reports `Data Clump: file, self, root, nl_mode` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (file, self, root, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n file, self, root, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, self, root, nl_mode'\n description: 'code2llm reports `Data Clump: file, self, root, nl_mode` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (file, self, root, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n file, self, root, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo'\n description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self,\n todo` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n root, markdown_mode, changelog, self, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo'\n description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self,\n todo` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n root, markdown_mode, changelog, self, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, payload, action'\n description: 'code2llm reports `Data Clump: self, payload, action` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (self, payload, action) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n self, payload, action'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, payload, action'\n description: 'code2llm reports `Data Clump: self, payload, action` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (self, payload, action) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n self, payload, action'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, patterns, excludes'\n description: 'code2llm reports `Data Clump: self, root, patterns, excludes` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (self, root, patterns, excludes) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n self, root, patterns, excludes'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, patterns, excludes'\n description: 'code2llm reports `Data Clump: self, root, patterns, excludes` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (self, root, patterns, excludes) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n self, root, patterns, excludes'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:305`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:305:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: analyzeCommunication'\n description: 'code2llm reports `God Function: analyzeCommunication` in `src/communication/analyzer.ts:56`.\n\n\n Function ''analyzeCommunication'' is oversized: CC=5, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:56:God Function:\n analyzeCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:226`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:226:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:59`.\n\n\n Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:59:God\n Function: applyCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:220`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:220:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:249`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:249:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertOperationPlan'\n description: 'code2llm reports `God Function: assertOperationPlan` in `src/operations/validation.ts:205`.\n\n\n Function ''assertOperationPlan'' is oversized: CC=1, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/validation.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:205:God Function:\n assertOperationPlan'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:248`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:248:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipantIdentityEntry'\n description: 'code2llm reports `God Function: assertParticipantIdentityEntry` in\n `src/communication/identity.ts:119`.\n\n\n Function ''assertParticipantIdentityEntry'' is oversized: CC=5, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/identity.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/identity.ts:119:God Function:\n assertParticipantIdentityEntry'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildAcceptanceContext'\n description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers-acceptance.ts:65`.\n\n\n Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers-acceptance.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers-acceptance.ts:65:God\n Function: buildAcceptanceContext'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildParticipantRows'\n description: 'code2llm reports `God Function: buildParticipantRows` in `src/communication/analyzer.ts:225`.\n\n\n Function ''buildParticipantRows'' is oversized: CC=7, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:225:God Function:\n buildParticipantRows'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectConflictIssues'\n description: 'code2llm reports `God Function: collectConflictIssues` in `src/communication/analyzer.ts:111`.\n\n\n Function ''collectConflictIssues'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:111:God Function:\n collectConflictIssues'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: controller'\n description: 'code2llm reports `God Function: controller` in `src/llm/openrouter.ts:45`.\n\n\n Function ''controller'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/llm/openrouter.ts\n dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:45:God Function:\n controller'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:16:God\n Function: createSemanticCandidateSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticRerankResult'\n description: 'code2llm reports `God Function: createSemanticRerankResult` in `src/semantic/reranker/result.ts:23`.\n\n\n Function ''createSemanticRerankResult'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:23:God\n Function: createSemanticRerankResult'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createTodoPatch'\n description: 'code2llm reports `God Function: createTodoPatch` in `src/synthesis/todo-patch.ts:69`.\n\n\n Function ''createTodoPatch'' is oversized: CC=8, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:69:God Function:\n createTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decodeDelimitedFields'\n description: 'code2llm reports `God Function: decodeDelimitedFields` in `src/communication/intake-protobuf.ts:69`.\n\n\n Function ''decodeDelimitedFields'' is oversized: CC=13, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:69:God\n Function: decodeDelimitedFields'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_chunked'\n description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:189`.\n\n\n Function ''decode_chunked'' is oversized: CC=7, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:189:God Function:\n decode_chunked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diagnoseGraph'\n description: 'code2llm reports `God Function: diagnoseGraph` in `src/graph/diagnostics.ts:16`.\n\n\n Function ''diagnoseGraph'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:16:God Function:\n diagnoseGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diffIntentGraphs'\n description: 'code2llm reports `God Function: diffIntentGraphs` in `src/graph/diff.ts:16`.\n\n\n Function ''diffIntentGraphs'' is oversized: CC=11, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diff.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diff.ts:16:God Function: diffIntentGraphs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: encode_envelope'\n description: 'code2llm reports `God Function: encode_envelope` in `src/interfaces/intake_cli.py:55`.\n\n\n Function ''encode_envelope'' is oversized: CC=6, fan-out=11, mutations=11.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:55:God Function:\n encode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichBatchCovering'\n description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm-helpers.ts:112`.\n\n\n Function ''enrichBatchCovering'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:112:God\n Function: enrichBatchCovering'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichMarkdownRecords'\n description: 'code2llm reports `God Function: enrichMarkdownRecords` in `src/extractors/markdown-llm-helpers.ts:57`.\n\n\n Function ''enrichMarkdownRecords'' is oversized: CC=13, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:57:God\n Function: enrichMarkdownRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichRecord'\n description: 'code2llm reports `God Function: enrichRecord` in `src/extractors/markdown-llm-helpers.ts:274`.\n\n\n Function ''enrichRecord'' is oversized: CC=14, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God\n Function: enrichRecord'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDiagnosticsCase'\n description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:277`.\n\n\n Function ''evaluateDiagnosticsCase'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:277:God Function:\n evaluateDiagnosticsCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDsl2TodoCase'\n description: 'code2llm reports `God Function: evaluateDsl2TodoCase` in `src/evaluation/gold-cases.ts:305`.\n\n\n Function ''evaluateDsl2TodoCase'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:305:God Function:\n evaluateDsl2TodoCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateRerankingCase'\n description: 'code2llm reports `God Function: evaluateRerankingCase` in `src/evaluation/gold-cases.ts:71`.\n\n\n Function ''evaluateRerankingCase'' is oversized: CC=1, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:71:God Function:\n evaluateRerankingCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: exchange'\n description: 'code2llm reports `God Function: exchange` in `sdk/rust/src/client.rs:125`.\n\n\n Function ''exchange'' is oversized: CC=10, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function:\n exchange'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeAnalyzeCommunicationAction'\n description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction`\n in `src/services/actions.ts:158`.\n\n\n Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:158:God Function:\n executeAnalyzeCommunicationAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeCloseCodeChangeAction'\n description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:413`.\n\n\n Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:413:God Function:\n executeCloseCodeChangeAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executePipelineAction'\n description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:556`.\n\n\n Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:556:God Function:\n executePipelineAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractAstIntent'\n description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`.\n\n\n Function ''extractAstIntent'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast.ts:23:God Function:\n extractAstIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractChangelog'\n description: 'code2llm reports `God Function: extractChangelog` in `src/extractors/changelog.ts:18`.\n\n\n Function ''extractChangelog'' is oversized: CC=10, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:18:God Function:\n extractChangelog'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractCommunicationIntentAudited'\n description: 'code2llm reports `God Function: extractCommunicationIntentAudited`\n in `src/communication/llm/implementation.ts:63`.\n\n\n Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:63:God\n Function: extractCommunicationIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractConventionalAction'\n description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`.\n\n\n Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractDocumentationIntent'\n description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`.\n\n\n Function ''extractDocumentationIntent'' is oversized: CC=3, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-llm.ts:45:God Function:\n extractDocumentationIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractMarkdownIntentAudited'\n description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:34`.\n\n\n Function ''extractMarkdownIntentAudited'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:34:God Function:\n extractMarkdownIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntent'\n description: 'code2llm reports `God Function: extractNlIntent` in `src/extractors/nl.ts:38`.\n\n\n Function ''extractNlIntent'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:38:God Function: extractNlIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntentAudited'\n description: 'code2llm reports `God Function: extractNlIntentAudited` in `src/extractors/nl-llm.ts:33`.\n\n\n Function ''extractNlIntentAudited'' is oversized: CC=10, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:33:God Function:\n extractNlIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPhpAst'\n description: 'code2llm reports `God Function: extractPhpAst` in `src/extractors/ast/php.ts:11`.\n\n\n Function ''extractPhpAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/php.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/php.ts:11:God Function:\n extractPhpAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPythonAst'\n description: 'code2llm reports `God Function: extractPythonAst` in `src/extractors/ast/python.ts:11`.\n\n\n Function ''extractPythonAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/python.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/python.ts:11:God Function:\n extractPythonAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRepositoryGitIntent'\n description: 'code2llm reports `God Function: extractRepositoryGitIntent` in `src/extractors/git.ts:74`.\n\n\n Function ''extractRepositoryGitIntent'' is oversized: CC=11, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/git.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:74:God Function:\n extractRepositoryGitIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRuntimeCycleIntent'\n description: 'code2llm reports `God Function: extractRuntimeCycleIntent` in `src/extractors/runtime-cycle.ts:29`.\n\n\n Function ''extractRuntimeCycleIntent'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:29:God\n Function: extractRuntimeCycleIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractSymbols'\n description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`.\n\n\n Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractTodo'\n description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`.\n\n\n Function ''extractTodo'' is oversized: CC=5, fan-out=24, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:19:God Function:\n extractTodo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `src/interfaces/a2a-run-list-item.ts:43`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-run-list-item.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-run-list-item.ts:43:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `scripts/verify-module-boundaries.mjs:6`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:6:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: goldReportIsPerfect'\n description: 'code2llm reports `God Function: goldReportIsPerfect` in `src/evaluation/gold.ts:100`.\n\n\n Function ''goldReportIsPerfect'' is oversized: CC=14, fan-out=0, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold.ts:100:God Function:\n goldReportIsPerfect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: graph'\n description: 'code2llm reports `God Function: graph` in `scripts/verify-module-boundaries.mjs:7`.\n\n\n Function ''graph'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:7:God\n Function: graph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleCommunication'\n description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:666`.\n\n\n Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:666:God Function: handleCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleDiff'\n description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:468`.\n\n\n Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:468:God Function: handleDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleGraphDiff'\n description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:494`.\n\n\n Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:494:God Function: handleGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleIntake'\n description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:706`.\n\n\n Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:706:God Function: handleIntake'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleReality'\n description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:551`.\n\n\n Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:551:God Function: handleReality'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleWatch'\n description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:346`.\n\n\n Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:346:God Function: handleWatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: index'\n description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`.\n\n\n Function ''index'' is oversized: CC=13, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/text-render.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/text-render.ts:43:God Function:\n index'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: indexModuleAnchors'\n description: 'code2llm reports `God Function: indexModuleAnchors` in `src/diff/reality.ts:324`.\n\n\n Function ''indexModuleAnchors'' is oversized: CC=12, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/reality.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:324:God Function: indexModuleAnchors'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: indexResolvableBasenames'\n description: 'code2llm reports `God Function: indexResolvableBasenames` in `src/graph/linker.ts:94`.\n\n\n Function ''indexResolvableBasenames'' is oversized: CC=8, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/linker.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:94:God Function: indexResolvableBasenames'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: isPathLike'\n description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:408`.\n\n\n Function ''isPathLike'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:408:God Function: isPathLike'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: lines'\n description: 'code2llm reports `God Function: lines` in `src/extractors/changelog.ts:30`.\n\n\n Function ''lines'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:30:God Function:\n lines'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: lines'\n description: 'code2llm reports `God Function: lines` in `src/extractors/todo.ts:32`.\n\n\n Function ''lines'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:32:God Function:\n lines'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: linkIntentRecords'\n description: 'code2llm reports `God Function: linkIntentRecords` in `src/graph/linker.ts:32`.\n\n\n Function ''linkIntentRecords'' is oversized: CC=5, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/linker.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:32:God Function: linkIntentRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: listAvailableModels'\n description: 'code2llm reports `God Function: listAvailableModels` in `src/llm/openrouter.ts:44`.\n\n\n Function ''listAvailableModels'' is oversized: CC=13, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/llm/openrouter.ts\n dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:44:God Function:\n listAvailableModels'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: listIntentRuns'\n description: 'code2llm reports `God Function: listIntentRuns` in `src/interfaces/a2a-history.ts:25`.\n\n\n Function ''listIntentRuns'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:25:God Function:\n listIntentRuns'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: listTasks'\n description: 'code2llm reports `God Function: listTasks` in `src/interfaces/a2a-task-store.ts:444`.\n\n\n Function ''listTasks'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-task-store.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-task-store.ts:444:God\n Function: listTasks'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: loadEnvFile'\n description: 'code2llm reports `God Function: loadEnvFile` in `src/config/env.ts:76`.\n\n\n Function ''loadEnvFile'' is oversized: CC=13, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/config/env.ts\n dedupe_key: 'code2llm:smell:god_function:src/config/env.ts:76:God Function: loadEnvFile'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: loadRuns'\n description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui-script.ts:9`.\n\n\n Function ''loadRuns'' is oversized: CC=12, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/web/diff-ui-script.ts\n dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui-script.ts:9:God Function:\n loadRuns'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: local'\n description: 'code2llm reports `God Function: local` in `scripts/verify-env-contract.mjs:52`.\n\n\n Function ''local'' is oversized: CC=13, fan-out=3, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-env-contract.mjs:52:God\n Function: local'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `rust-ast/src/main.rs:36`.\n\n\n Function ''main'' is oversized: CC=6, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:36:God Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `java/JavaAstExtract.java:21`.\n\n\n Function ''main'' is oversized: CC=10, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:21:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/cli.ts:61`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:61:God Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/evaluation/gold-cli.ts:11`.\n\n\n Function ''main'' is oversized: CC=12, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cli.ts:11:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `golang/ast_extract.go:53`.\n\n\n Function ''main'' is oversized: CC=14, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - golang/ast_extract.go\n dedupe_key: 'code2llm:smell:god_function:golang/ast_extract.go:53:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/live-model-comparison.mjs:27`.\n\n\n Function ''main'' is oversized: CC=13, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/live-model-comparison.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/live-model-comparison.mjs:27:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/live-contract-check.mjs:41`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/live-contract-check.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/live-contract-check.mjs:41:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `python/ast_extract.py:195`.\n\n\n Function ''main'' is oversized: CC=4, fan-out=19, mutations=12.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - python/ast_extract.py\n dedupe_key: 'code2llm:smell:god_function:python/ast_extract.py:195:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: matchesRunFilters'\n description: 'code2llm reports `God Function: matchesRunFilters` in `src/interfaces/a2a-history.ts:77`.\n\n\n Function ''matchesRunFilters'' is oversized: CC=13, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:77:God Function:\n matchesRunFilters'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: materializeSyntheses'\n description: 'code2llm reports `God Function: materializeSyntheses` in `src/communication/llm/implementation-helpers.ts:127`.\n\n\n Function ''materializeSyntheses'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:127:God\n Function: materializeSyntheses'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: materializeTaskSynthesisResponse'\n description: 'code2llm reports `God Function: materializeTaskSynthesisResponse`\n in `src/synthesis/task-synthesis-materialize.ts:14`.\n\n\n Function ''materializeTaskSynthesisResponse'' is oversized: CC=2, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/task-synthesis-materialize.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/task-synthesis-materialize.ts:14:God\n Function: materializeTaskSynthesisResponse'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: maxFiles'\n description: 'code2llm reports `God Function: maxFiles` in `src/watch/watcher.ts:38`.\n\n\n Function ''maxFiles'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:38:God Function: maxFiles'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: measureStage'\n description: 'code2llm reports `God Function: measureStage` in `src/live/contract-check.ts:115`.\n\n\n Function ''measureStage'' is oversized: CC=14, fan-out=3, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/live/contract-check.ts\n dedupe_key: 'code2llm:smell:god_function:src/live/contract-check.ts:115:God Function:\n measureStage'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: moduleRecords'\n description: 'code2llm reports `God Function: moduleRecords` in `src/extractors/ast/records.ts:34`.\n\n\n Function ''moduleRecords'' is oversized: CC=6, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/records.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/records.ts:34:God Function:\n moduleRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: normalizeParticipantIdentityRegistry'\n description: 'code2llm reports `God Function: normalizeParticipantIdentityRegistry`\n in `src/communication/identity.ts:53`.\n\n\n Function ''normalizeParticipantIdentityRegistry'' is oversized: CC=12, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/identity.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/identity.ts:53:God Function:\n normalizeParticipantIdentityRegistry'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: numbers'\n description: 'code2llm reports `God Function: numbers` in `src/communication/intake-protobuf.ts:77`.\n\n\n Function ''numbers'' is oversized: CC=13, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:77:God\n Function: numbers'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: object'\n description: 'code2llm reports `God Function: object` in `src/llm/structured-schema.ts:155`.\n\n\n Function ''object'' is oversized: CC=7, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/llm/structured-schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/llm/structured-schema.ts:155:God Function:\n object'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: offset'\n description: 'code2llm reports `God Function: offset` in `src/communication/intake-protobuf.ts:79`.\n\n\n Function ''offset'' is oversized: CC=13, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:79:God\n Function: offset'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: options'\n description: 'code2llm reports `God Function: options` in `src/cli.ts:781`.\n\n\n Function ''options'' is oversized: CC=13, fan-out=5, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:781:God Function: options'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: output'\n description: 'code2llm reports `God Function: output` in `src/communication/llm/implementation-helpers.ts:148`.\n\n\n Function ''output'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:148:God\n Function: output'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parseArgs'\n description: 'code2llm reports `God Function: parseArgs` in `src/cli.ts:779`.\n\n\n Function ''parseArgs'' is oversized: CC=13, fan-out=5, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:779:God Function: parseArgs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parseArgs'\n description: 'code2llm reports `God Function: parseArgs` in `scripts/research/rerank-embedding-shortlist.mjs:164`.\n\n\n Function ''parseArgs'' is oversized: CC=14, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/rerank-embedding-shortlist.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/research/rerank-embedding-shortlist.mjs:164:God\n Function: parseArgs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parse_args'\n description: 'code2llm reports `God Function: parse_args` in `scripts/research/evaluate-embedding-pairs.py:14`.\n\n\n Function ''parse_args'' is oversized: CC=1, fan-out=3, mutations=8.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:14:God\n Function: parse_args'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parse_args'\n description: 'code2llm reports `God Function: p\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 4129 func | 197f | 43441L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.1 critical=187 (limit:10) dup=29 cycles=0\n\nALERTS[20]:\n !!! high_fan_out compareWorkspaceIntent = 40 (limit:10)\n !!! cc_exceeded parseFile = 38 (limit:15)\n !!! high_fan_out Client.parse_http_response = 37 (limit:10)\n !!! high_fan_out run = 33 (limit:10)\n !!! high_fan_out main = 31 (limit:10)\n !!! high_fan_out executePipeline = 31 (limit:10)\n !!! cc_exceeded makefile = 28 (limit:15)\n !!! cc_exceeded main = 27 (limit:15)\n !!! cc_exceeded run = 26 (limit:15)\n !!! high_fan_out temporaryParent = 25 (limit:10)\n\nMODULES[281] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/cli.ts] 942L C:1 F:124 CC↑13 D:0 (typescript)\n M[src/services/actions.ts] 806L C:1 F:106 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/diff/reality.ts] 690L C:4 F:89 CC↑15 D:0 (typescript)\n M[src/communication/analyzer.ts] 596L C:3 F:81 CC↑15 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[src/evaluation/gold-cases.ts] 489L C:4 F:62 CC↑8 D:0 (typescript)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:59 CC↑11 D:0 (typescript)\n M[src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts] 434L C:6 F:50 CC↑13 D:0 (typescript)\n M[src/operations/validation.ts] 429L C:0 F:69 CC↑23 D:0 (typescript)\n LANGS: typescript:173/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n ★ Client.parse_http_response fan=37 // Orchestrates 37 calls\n ★ run fan=33 // Orchestrates 33 calls\n ★ main fan=31 // Orchestrates 31 calls\n ★ executePipeline fan=31 // Orchestrates 31 calls\n\nREFACTOR[15]:\n [1] H/L Split parseFile (CC=38)\n [2] H/L Split makefile (CC=28)\n [3] H/L Split main (CC=27)\n [4] H/L Split run (CC=26)\n [5] H/H Split god module src/communication/analyzer.ts (596L, 3 classes)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.1 crit=187 43441L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; let currentFile = null; function renderFileList(filter = '') { diff --git a/project/map.toon.yaml b/project/map.toon.yaml index 127367b..07bca57 100644 --- a/project/map.toon.yaml +++ b/project/map.toon.yaml @@ -1,12 +1,12 @@ -# todo2code | 260f 41965L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:152,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 +# todo2code | 281f 43441L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:173,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 # generated in 0.04s # producer: code2llm | artifact: map.toon.yaml | schema: 1 -# stats: 3918 func | 0 cls | 260 mod | CC̄=3.3 | critical:63 | cycles:0 -# alerts[5]: CC assertOperationPlan=84; CC parseCommand=63; CC runPipeline=56; fan-out runPipeline=56; CC analyzeCommunication=48 -# hotspots[5]: runPipeline fan=56; compareWorkspaceIntent fan=40; Client.parse_http_response fan=37; diffUiScriptMarkup fan=36; analyzeCommunication fan=35 -# evolution: CC̄ 3.3→3.3 (flat 0.0) +# stats: 4129 func | 0 cls | 281 mod | CC̄=3.1 | critical:24 | cycles:0 +# alerts[5]: fan-out compareWorkspaceIntent=40; CC parseFile=38; fan-out Client.parse_http_response=37; fan-out run=33; fan-out executePipeline=31 +# hotspots[5]: compareWorkspaceIntent fan=40; Client.parse_http_response fan=37; run fan=33; main fan=31; executePipeline fan=31 +# evolution: CC̄ 3.0→3.1 (regressed +0.1) # Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods -M[260]: +M[281]: Dockerfile,45 Makefile,132 adapters/tensorflow/package.json,14 @@ -14,7 +14,8 @@ M[260]: docker-compose.yml,18 evaluation/gold/v1/dataset.json,761 evaluation/gold/v2/dataset.json,2410 - examples/backend/src/server.ts,99 + examples/backend/src/request-handlers.ts,88 + examples/backend/src/server.ts,43 examples/backend/src/store.ts,48 examples/backend/src/validation.ts,31 examples/backend/tsconfig.json,14 @@ -116,10 +117,10 @@ M[260]: sdk/typescript/tsconfig.json,20 src/index.ts,53 src/cli.ts,942 - src/communication/analyzer.ts,542 - src/communication/identity.ts,146 - src/communication/intake-contract.ts,273 - src/communication/intake-protobuf.ts,125 + src/communication/analyzer.ts,596 + src/communication/identity.ts,216 + src/communication/intake-contract.ts,334 + src/communication/intake-protobuf.ts,158 src/communication/intake-service.ts,291 src/communication/intake-store.ts,161 src/communication/llm.ts,1 @@ -132,12 +133,13 @@ M[260]: src/core/id.ts,167 src/core/ignore.ts,200 src/core/io.ts,211 - src/core/record.ts,183 + src/core/record.ts,158 + src/core/record-metadata.ts,27 src/core/schema/index.ts,4 src/core/schema/code-change.ts,322 src/core/schema/conclusions.ts,210 src/core/schema/constants.ts,31 - src/core/schema/intent.ts,306 + src/core/schema/intent.ts,309 src/core/schema/utils.ts,239 src/core/security.ts,55 src/core/target.ts,57 @@ -148,18 +150,20 @@ M[260]: src/core/types/intent.ts,212 src/core/types/pipeline.ts,173 src/core/version.ts,2 - src/diff/git.ts,161 - src/diff/reality.ts,619 + src/diff/git.ts,208 + src/diff/git-binary.ts,10 + src/diff/reality.ts,690 src/diff/svg.ts,104 - src/diff/text.ts,239 + src/diff/text.ts,153 + src/diff/text-myers.ts,152 src/diff/text-render.ts,251 src/diff/text-types.ts,39 src/evaluation/gold.ts,329 - src/evaluation/gold-cases.ts,366 + src/evaluation/gold-cases.ts,489 src/evaluation/gold-cli.ts,44 src/evaluation/gold-extraction.ts,127 src/evaluation/gold-metrics.ts,50 - src/evaluation/gold-types.ts,378 + src/evaluation/gold-types.ts,405 src/extractors/ast.ts,167 src/extractors/ast/external.ts,48 src/extractors/ast/go.ts,20 @@ -190,7 +194,7 @@ M[260]: src/extractors/markdown-paths.ts,158 src/extractors/nl.ts,107 src/extractors/nl-llm.ts,163 - src/extractors/nl-llm-helpers.ts,256 + src/extractors/nl-llm-helpers.ts,261 src/extractors/runtime-cycle.ts,306 src/extractors/todo.ts,93 src/graph/capability-evidence.ts,62 @@ -203,8 +207,10 @@ M[260]: src/graph/symbol-resolution.ts,146 src/interfaces/a2a.ts,332 src/interfaces/a2a-card.ts,181 - src/interfaces/a2a-history.ts,226 - src/interfaces/a2a-message.ts,197 + src/interfaces/a2a-history.ts,96 + src/interfaces/a2a-message.ts,125 + src/interfaces/a2a-message-command.ts,144 + src/interfaces/a2a-run-list-item.ts,171 src/interfaces/a2a-task-store.ts,560 src/interfaces/a2a-types.ts,164 src/interfaces/governed-intake.proto,78 @@ -225,15 +231,19 @@ M[260]: src/live/model-comparison.ts,218 src/llm/audit.ts,19 src/llm/failure.ts,25 - src/llm/openrouter.ts,338 + src/llm/openrouter.ts,240 + src/llm/openrouter-request.ts,242 src/llm/structured-schema.ts,218 src/operations/artifact.ts,66 src/operations/compile-cli.ts,34 src/operations/contract.ts,84 src/operations/subactor.ts,122 src/operations/types.ts,155 - src/operations/validation.ts,281 - src/pipeline/run.ts,617 + src/operations/validation.ts,429 + src/pipeline/run.ts,384 + src/pipeline/run-helpers.ts,188 + src/pipeline/run-persistence.ts,297 + src/pipeline/run-summary.ts,58 src/sdk/typescript.ts,172 src/semantic/reranker/index.ts,8 src/semantic/reranker-llm.ts,291 @@ -250,11 +260,21 @@ M[260]: src/synthesis/code-change-plan/index.ts,1 src/synthesis/code-change-plan/implementation.ts,1 src/synthesis/code-change-plan/implementation-diagnostics.ts,17 - src/synthesis/code-change-plan/implementation-helpers.ts,1148 + src/synthesis/code-change-plan/implementation-helpers.ts,39 + src/synthesis/code-change-plan/implementation-helpers-acceptance.ts,141 + src/synthesis/code-change-plan/implementation-helpers-close.ts,75 + src/synthesis/code-change-plan/implementation-helpers-plans.ts,269 + src/synthesis/code-change-plan/implementation-helpers-shared.ts,29 src/synthesis/code-change-plan/implementation-indexing.ts,25 - src/synthesis/code-change-plan/implementation-review.ts,269 + src/synthesis/code-change-plan/implementation-review.ts,274 src/synthesis/code-change-plan/implementation-semantic.ts,125 - src/synthesis/code-change-plan/implementation-source-patch.ts,694 + src/synthesis/code-change-plan/implementation-source-patch.ts,9 + src/synthesis/code-change-plan/implementation-source-patch-apply.ts,8 + src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts,434 + src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts,233 + src/synthesis/code-change-plan/implementation-source-patch-assert.ts,397 + src/synthesis/code-change-plan/implementation-source-patch-create.ts,235 + src/synthesis/code-change-plan/implementation-source-patch-diff.ts,74 src/synthesis/code-change-plan/implementation-targets.ts,61 src/synthesis/task-synthesis-contract.ts,66 src/synthesis/task-synthesis-materialize.ts,172 @@ -264,13 +284,56 @@ M[260]: src/synthesis/validation.ts,113 src/tf/classifier.ts,135 src/version.ts,2 - src/watch/watcher.ts,243 - src/web/diff-ui.ts,167 + src/watch/watcher.ts,292 + src/web/diff-ui.ts,152 + src/web/diff-ui-script.ts,17 tsconfig.json,23 D: + php/ast_extract.php: + e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile + argumentValue() + normalizedToken() + significant() + qualifiedName() + sourceExcerpt() + addFact() + parseFile() + scripts/verify-env-contract.mjs: + i: node:fs,node:path + e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute + root() + examplePath() + example() + declared() + match() + expected() + configBody() + body() + makefile() + body() + local() + auditLocalKeys() + body() + keys() + collectExisting() + absolute() + collect() + absolute() + scripts/research/rank-intent-graph-embeddings.py: + e: parse_args,projection_text,main + parse_args() + projection_text(record;prefix) + main() + sdk/go/examples/basic/main.go: + e: main,run,envOr,truncate,joinedIDs + main() + run() + envOr() + truncate() + joinedIDs() src/operations/validation.ts: i: ../core/id.js,../core/types.js,./types.js - e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,evidence,variables,variableById,steps,stepIds,founderDecisionRequired,step,parameters,reference,variable,rollback,coveredSteps,expectationIds,expectation,verifiedBy,decision,verification,expectedHash + e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,expectedId,assertVariableContractShape,assertVariableContractCore,assertVariableSource,source,assertVariableAccess,access,assertVariableAuthoritativeness,assertVariableMutability,buildVariableContractId,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,variables,variableById,validateOperationPlanShape,validateOperationPlanMetadata,validateOperationPlanEvidence,evidence,collectOperationPlanVariables,variables,validateOperationSteps,stepIds,steps,hasCommandStep,founderDecisionRequired,step,validateOperationStep,step,parameters,rollback,validateOperationStepParameters,parameters,reference,variable,validateOperationStepRollback,rollback,validateOperationExpectations,coveredSteps,expectationIds,expectation,verifiedBy,validateOperationDecision,decision,validateOperationVerification,verification,validateOperationPlanHash,castPlan,expectedHash VALUE_TYPES() CLASSIFICATIONS() SOURCE_KINDS() @@ -290,6 +353,16 @@ D: access() readers() writers() + expectedId() + assertVariableContractShape() + assertVariableContractCore() + assertVariableSource() + source() + assertVariableAccess() + access() + assertVariableAuthoritativeness() + assertVariableMutability() + buildVariableContractId() assertGeneration() generation() assertAcyclic() @@ -300,36 +373,65 @@ D: visit() assertOperationPlan() plan() - evidence() variables() variableById() - steps() + validateOperationPlanShape() + validateOperationPlanMetadata() + validateOperationPlanEvidence() + evidence() + collectOperationPlanVariables() + variables() + validateOperationSteps() stepIds() + steps() + hasCommandStep() founderDecisionRequired() step() + validateOperationStep() + step() + parameters() + rollback() + validateOperationStepParameters() parameters() reference() variable() + validateOperationStepRollback() rollback() + validateOperationExpectations() coveredSteps() expectationIds() expectation() verifiedBy() + validateOperationDecision() decision() + validateOperationVerification() verification() + validateOperationPlanHash() + castPlan() expectedHash() - src/interfaces/a2a-message.ts: + src/interfaces/a2a-message-command.ts: i: ../communication/intake-protobuf.js - e: parseSendConfiguration,validateOutputModes,supported,parseCommand,protobuf,bytes,objectData,text,first,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,normalizeAction,normalized,action,cloneMessage,clonePart,normalizeUserMessage - parseSendConfiguration() - validateOutputModes() - supported() + e: parseCommand,protobufCommand,objectCommand,parseCommandFromProtobuf,protobuf,bytes,parseCommandFromObject,objectData,parseCommandFromText,text,looksLikeJson,parseCommandFromJson,parseCommandFromSentence,parseSentenceInput,defaultTextCommand,isSupportedAction,commandInputFromSentence,first,parseText,firstToken,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,normalizeAction,normalized,action parseCommand() + protobufCommand() + objectCommand() + parseCommandFromProtobuf() protobuf() bytes() + parseCommandFromObject() objectData() + parseCommandFromText() text() + looksLikeJson() + parseCommandFromJson() + parseCommandFromSentence() + parseSentenceInput() + defaultTextCommand() + isSupportedAction() + commandInputFromSentence() first() + parseText() + firstToken() commandFromData() action() nested() @@ -338,66 +440,60 @@ D: raw() stringValue() parseScalar() - parseMessage() - messageId() - contextId() - taskId() - referenceTaskIds() - extensions() - metadata() - parsePart() - output() - parsePartContent() - content() - qualifier() - ensureSupportedMessageContent() - supported() normalizeAction() normalized() action() - cloneMessage() - clonePart() - normalizeUserMessage() + sdk/rust/examples/basic.rs: + i: serde_json::json,std::env,todo2code::Client + e: main,run,joined_ids + main() + run() + joined_ids() src/pipeline/run.ts: - i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,node:path - e: PipelineResult,runPipeline,root,runId,baseOutput,runDirectory,naturalLanguageAudit,result,git,ast,markdown,deterministicDocumentFiles,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,includeCommunication,communicationStartedAt,communicationAudit,communicationInputPresent,communication,missingDirectory,allRecords,generatedAt,graph,communicationAnalysis,diagnostics,taskSynthesisMode,taskSynthesisAudit,todoContent,codeChangePlans,codeChangeReview,codeChangeSourcePatches,summaryStartedAt,includeSummaryLlm,summary,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,configuration,manifestConfiguration,collectTargetHints,values,persistFailedRun,aborted,message,knownAudit,failedAudit,stageValue,reason,failureCode,skippedAudit,appendLlmNotConfigured + i: ../communication/analyzer.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../version.js,./run-summary.js,node:path + e: PipelineContext,PipelineExecutionOutput,PipelinePersistedPaths,PipelineResult,runPipeline,context,execution,persisted,manifest,manifestPath,initializePipelineContext,root,runId,baseOutput,runDirectory,executePipeline,deterministicDocumentFiles,naturalLanguageAudit,result,git,ast,markdown,markdownAudit,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,communicationInput,communicationAudit,communicationSyntheses,allRecords,generatedAt,graph,diagnostics,communicationAnalysis,taskSynthesis + PipelineContext: + PipelineExecutionOutput: + PipelinePersistedPaths: PipelineResult: runPipeline() + context() + execution() + persisted() + manifest() + manifestPath() + initializePipelineContext() root() runId() baseOutput() runDirectory() + executePipeline() + deterministicDocumentFiles() naturalLanguageAudit() result() git() ast() markdown() - deterministicDocumentFiles() + markdownAudit() documentationStartedAt() deterministicDocs() docs() configurationExtraction() runtime() - includeCommunication() - communicationStartedAt() + communicationInput() communicationAudit() - communicationInputPresent() - communication() - missingDirectory() + communicationSyntheses() allRecords() generatedAt() graph() - communicationAnalysis() diagnostics() - taskSynthesisMode() - taskSynthesisAudit() - todoContent() - codeChangePlans() - codeChangeReview() - codeChangeSourcePatches() - summaryStartedAt() - includeSummaryLlm() - summary() + communicationAnalysis() + taskSynthesis() + src/pipeline/run-persistence.ts: + i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../extractors/docs-llm.js,../extractors/nl-llm.js,../llm/audit.js,../synthesis/tasks-llm.js,../version.js,./run.js,node:path + e: makePipelineManifest,persistPipelineArtifacts,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,persistFailedRun,manifestConfiguration,persistFailedRunState,aborted,message,knownAudit,failedAudit,stageValue,reason,skippedAudit,failureCode + makePipelineManifest() + persistPipelineArtifacts() filePath() graphPath() diagnosticsPath() @@ -413,133 +509,29 @@ D: codeChangeSourcePatchesPath() communicationAnalysisPath() communicationMarkdownPath() - configuration() - manifestConfiguration() - collectTargetHints() - values() persistFailedRun() + manifestConfiguration() + persistFailedRunState() aborted() message() knownAudit() failedAudit() stageValue() reason() - failureCode() skippedAudit() - appendLlmNotConfigured() - src/communication/analyzer.ts: - i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js - e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,participants,participant,values,left,right,leftRole,rightRole,code,responseRequiredFrom,humanRequests,agentMessages,response,type,participantGit,linked,matchedRequest,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex - CommunicationIssue: - ParticipantCommunicationAnalysis: - CommunicationAnalysis: - analyzeCommunication() - communication() - evidenceByRecord() - participants() - participant() - values() - left() - right() - leftRole() - rightRole() - code() - responseRequiredFrom() - humanRequests() - agentMessages() - response() - type() - participantGit() - linked() - matchedRequest() - aliases() - matchedGit() - evidence() - validateSyntheses() - byId() - ids() - record() - renderCommunicationMarkdown() - addCommunicationIssuesToDiagnostics() - hasSerious() - communicationIssueTitle() - evidenceNeighbors() - records() - output() - left() - right() - isEvidenceRecord() - matchedGitRecords() - aliases() - semanticMatch() - conflictSemanticMatch() - leftHasExplicitTarget() - rightHasExplicitTarget() - agentResponseCoversRequest() - candidates() - bySource() - values() - aggregateTopicMatch() - requested() - response() - shared() - agentWorkCoveredByHumanScope() - requests() - sourceRecords() - plans() - agentSourceRecords() - isBroadRequest() - isActionableAgentWork() - isPositiveImplementationClaim() - isHumanDecisionClaim() - hasImplementationVerb() - withoutTickets() - value() - intersects() - values() - participantOf() - participantsForRole() - roleOf() - typeOf() - ticketOf() - gitAliases() - normalizeIdentity() - append() - values() - issue() - sortedRespondents() - explicitResponseRoute() - severityRank() - escapeCell() - escapeRegex() - src/web/diff-ui.ts: - e: diffUiStyles,diffUiRunPanel,diffUiFiltersPanel,diffUiBodyMarkup,diffUiScriptMarkup,byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs,diffUiTemplate,diffUiHtml - diffUiStyles() - diffUiRunPanel() - diffUiFiltersPanel() - diffUiBodyMarkup() - diffUiScriptMarkup() - byId() - requestHeaders() - formatBytes() - selectedRun() - updateMeta() - fillSelect() - loadRuns() - compareGraphs() - diffUiTemplate() - diffUiHtml() - php/ast_extract.php: - e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile - argumentValue() - normalizedToken() - significant() - qualifiedName() - sourceExcerpt() - addFact() - parseFile() + failureCode() + sdk/rust/src/client.rs: + i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super:: + e: Client + Client: + src/core/record-metadata.ts: + i: ./types.js,./version.js + e: generationMetadata,generationIdentity,separator + generationMetadata() + generationIdentity() + separator() src/evaluation/gold-types.ts: - e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,labels,modules + e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,assertGoldLinkingCohort,assertRerankerFixture,assertRerankerModelIdentity,assertRerankerDecisions,decisions,recordLabels,seenModules,assertRerankerDecision GoldRecordProjection: GoldDocumentModelRecord: GoldExtractionCase: @@ -564,90 +556,75 @@ D: assertExtractionCoverage() channels() assertLinkingCohorts() - labels() - modules() - src/llm/openrouter.ts: - i: ../config/env.js,../core/types.js,./structured-schema.js - e: ChatMessage,OpenRouterChoice,OpenRouterResponse,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient - ChatMessage: - OpenRouterChoice: - OpenRouterResponse: - OpenRouterResult: - OpenRouterModelsResponse: - OpenRouterModelError: super(-1) - OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),apiKey(-1),controller(-1),externalSignal(-1),abortFromExternal(-1),timeout(-1),response(-1),text(-1),message(-1),error(-1),model(-1),availableModels(-1),formatInvalidModelError(-1),clearTimeout(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),shouldRetryWithoutJsonSchema(-1),isInvalidModelError(-1),formatInvalidModelError(-1),removeUndefined(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),sleep(-1) - src/communication/identity.ts: - i: ../core/io.js,../core/security.js,./intake-contract.js,node:path - e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,entry,values,normalized,owner,exactKeys,allowed,missing,extra - ParticipantIdentityEntry: - ParticipantIdentityRegistry: - LoadedParticipantIdentityRegistry: - loadParticipantIdentityRegistry() - v2Path() - v1Path() - registryPath() - normalized() - normalizeParticipantIdentityRegistry() - registry() - participants() - ids() - principals() - key() - normalizeV2Entry() - principals() - kind() - assertParticipantIdentityRegistry() - registry() - ids() - external() - entry() - values() - normalized() - owner() - exactKeys() - allowed() - missing() - extra() - scripts/verify-env-contract.mjs: - i: node:fs,node:path - e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute + assertGoldLinkingCohort() + assertRerankerFixture() + assertRerankerModelIdentity() + assertRerankerDecisions() + decisions() + recordLabels() + seenModules() + assertRerankerDecision() + sdk/typescript/examples/basic.ts: + i: ../src/index.js + e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison + baseUrl() + token() root() - examplePath() - example() - declared() - match() - expected() - configBody() - body() - makefile() - body() - local() - auditLocalKeys() - body() - keys() - collectExisting() - absolute() - collect() - absolute() - scripts/research/rank-intent-graph-embeddings.py: - e: parse_args,projection_text,main - parse_args() - projection_text(record;prefix) main() + client() + health() + card() + nl() + ast() + markdown() + graph() + diagnostics() + synthesis() + validation() + rendered() + artifact() + reality() + gitDiff() + comparison() + python/ast_extract.py: + e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main + FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1) + source_hash(value) + dotted_name(node) + is_module_entrypoint(node) + iter_python_files(root;files_from) + main() + src/web/diff-ui-script.ts: + e: byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs + byId() + requestHeaders() + formatBytes() + selectedRun() + updateMeta() + fillSelect() + loadRuns() + compareGraphs() src/diff/reality.ts: i: ../core/id.js,../core/schema.js,../core/target.js - e: RealityRow,IntentRealityView,RealitySvgOptions,buildRealityView,components,diagnosticsByRecord,codes,status,bySeverity,alignment,bySize,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,laneX,laneStep,statusX,statusWidth,width,rowHeight,headerY,y,isDeclared,color,count,cx,fill,label,pillWidth,renderRealityMarkdown,lanes,escapeMarkdown + e: RealityRow,IntentRealityView,RealitySvgOptions,RealitySvgLayout,buildRealityView,components,diagnosticsByRecord,rows,buildRealityRows,rows,buildRealityRow,codes,status,compareRealityRows,bySeverity,alignment,bySize,buildRealityTotals,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,summarizeLaneTotals,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,layout,header,body,overflow,height,buildRealityLayout,laneX,laneStep,statusX,statusWidth,renderRealityLaneHeaders,isDeclared,renderRealityRow,y,color,renderRealityLanes,count,cx,renderRealityLaneCell,fill,label,pillWidth,renderMoreTopicsLabel,y,renderRealityHeight,footer,y,renderRealityMarkdown,lanes,escapeMarkdown RealityRow: IntentRealityView: RealitySvgOptions: + RealitySvgLayout: buildRealityView() components() diagnosticsByRecord() + rows() + buildRealityRows() + rows() + buildRealityRow() codes() status() + compareRealityRows() bySeverity() alignment() bySize() + buildRealityTotals() declaredRecords() observedRecords() aligned() @@ -685,6 +662,7 @@ D: bucket() resolveEvidence() resolveStatus() + summarizeLaneTotals() declared() observed() changelog() @@ -700,386 +678,130 @@ D: title() rows() visible() + layout() + header() + body() + overflow() + height() + buildRealityLayout() laneX() laneStep() statusX() statusWidth() - width() - rowHeight() - headerY() - y() + renderRealityLaneHeaders() isDeclared() + renderRealityRow() + y() color() + renderRealityLanes() count() cx() + renderRealityLaneCell() fill() label() pillWidth() + renderMoreTopicsLabel() + y() + renderRealityHeight() + footer() + y() renderRealityMarkdown() lanes() escapeMarkdown() - sdk/go/examples/basic/main.go: - e: main,run,envOr,truncate,joinedIDs - main() - run() - envOr() - truncate() - joinedIDs() - src/diff/git.ts: - i: ./text.js,node:child_process,node:fs,node:path,node:util - e: GitDiffOptions,GitDiffResult,ChangedEntry,execFileAsync,BINARY_EXTENSIONS,collectGitDiff,root,revision,staged,maxFiles,inside,beforePath,before,after,diff,parseNameStatus,parts,status,isProbablyBinary,readBlob,readStagedBlob,readWorkingFile,runGit,result - GitDiffOptions: - GitDiffResult: - ChangedEntry: - execFileAsync() - BINARY_EXTENSIONS() - collectGitDiff() - root() - revision() - staged() - maxFiles() - inside() - beforePath() - before() - after() - diff() - parseNameStatus() - parts() - status() - isProbablyBinary() - readBlob() - readStagedBlob() - readWorkingFile() - runGit() - result() - sdk/rust/examples/basic.rs: - i: serde_json::json,std::env,todo2code::Client - e: main,run,joined_ids - main() - run() - joined_ids() - src/diff/text.ts: - i: ./text-types.js - e: RawOp,DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,blockReplace,myers,n,m,max,offset,v,y,backtrack,x,y,v,k,previousK,previousX,previousY,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers - RawOp: - DEFAULT_CONTEXT() - DEFAULT_MAX_COMPARE_LINES() - splitLines() - normalized() - lines() - diffText() - diffLineArrays() - context() - maxCompareLines() - beforePath() - afterPath() - summarizeLines() - computeLineDiff() - prefix() - suffix() - lines() - middleBefore() - middleAfter() - truncated() - middleOps() - sharedPrefixLength() - prefix() - sharedSuffixLength() - suffix() - prefixLines() - suffixLines() - beforeIndex() - afterIndex() - blockReplace() - myers() - n() - m() - max() - offset() - v() - y() - backtrack() - x() - y() - v() - k() - previousK() - previousX() - previousY() - buildHunks() - changeIndexes() - start() - end() - last() - hunkFromRange() - slice() - beforeNumbers() - afterNumbers() - src/watch/watcher.ts: - i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path - e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,root,minIntervalMs,scanIntervalMs,emit,now,sleep,signal,matcher,runReport,result,snapshot,lastReportStartedAt,pending,current,delta,waitMs,generate,startedAt,result,defaultSleep,timer,onAbort,finish - SnapshotDelta: - ScanOptions: - ReportResult: - WatchOptions: - scanTree() - maxFiles() - absoluteRoot() - visit() - absolute() - relative() - stat() - diffSnapshots() - previous() - describeDelta() - shown() - rest() - DEFAULT_MIN_INTERVAL_MS() - DEFAULT_SCAN_INTERVAL_MS() - watchRepository() - root() - minIntervalMs() - scanIntervalMs() - emit() - now() - sleep() - signal() - matcher() - runReport() - result() - snapshot() - lastReportStartedAt() - pending() - current() - delta() - waitMs() - generate() - startedAt() - result() - defaultSleep() - timer() - onAbort() - finish() - src/interfaces/a2a-history.ts: - i: ../config/env.js,../core/security.js,./a2a-types.js,node:fs,node:path - e: IntentRunListItem,CommunicationRunSummary,RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,safeRunPath,runListItem,files,llm,runtime,warnings,validTimestamp,validStatus,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,matchesRunFilters,participant,role,ticket,severity,normalized,stringArray,safeManifestFiles,absolute,relative,relativeApiPath - IntentRunListItem: - CommunicationRunSummary: - RunHistoryFilters: - listIntentRuns() - runsDirectory() - entries() - items() - readRunEntries() - readRun() - runDirectory() - graphPath() - manifestPath() - manifest() - safeRunPath() - runListItem() - files() - llm() - runtime() - warnings() - validTimestamp() - validStatus() - llmSummary() - readCommunicationSummary() - relative() - filePath() - stat() - value() + src/communication/analyzer.ts: + i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js + e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,humanRequests,agentMessages,uniqueIssues,participantRows,collectParticipantsAndIdentityIssues,participants,participant,values,collectConflictIssues,left,right,leftRole,rightRole,code,responseRequiredFrom,resolveConflictCode,collectRequestResponseIssues,response,collectAgentActionIssues,type,participantGit,linked,matchedRequest,deduplicateCommunicationIssues,buildParticipantRows,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex + CommunicationIssue: + ParticipantCommunicationAnalysis: + CommunicationAnalysis: + analyzeCommunication() + communication() + evidenceByRecord() + humanRequests() + agentMessages() + uniqueIssues() + participantRows() + collectParticipantsAndIdentityIssues() participants() - issues() - participantSummary() - matchesRunFilters() participant() - role() - ticket() - severity() - normalized() - stringArray() - safeManifestFiles() - absolute() - relative() - relativeApiPath() - src/evaluation/gold-cases.ts: - i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js - e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,idToLabel,declarationRecordId,graph,candidates,moduleRecordId,candidateByModule,decisions,moduleRecordId,candidate,rerank,augmented,observed,expected,forbidden,forbiddenViolations,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,deterministicGeneration - LinkingCaseResult: - RerankingCaseResult: - DiagnosticsCaseResult: - Dsl2TodoCaseResult: - evaluateLinkingCase() - idToLabel() - graph() - observed() - actual() - expected() - byClass() - forbidden() - forbiddenViolations() - evaluateRerankingCase() - idToLabel() - declarationRecordId() - graph() - candidates() - moduleRecordId() - candidateByModule() - decisions() - moduleRecordId() - candidate() - rerank() - augmented() - observed() - expected() - forbidden() - forbiddenViolations() - classifyRelation() - exact() - evaluateDiagnosticsCase() - idToLabel() - graph() - report() - observed() - forbidden() - forbiddenViolations() - evaluateDsl2TodoCase() - graph() - diagnostics() - diagnosticIds() - conclusion() - proposals() - validation() - duplicateIds() - actual() - expected() - citations() - buildConclusion() - buildProposal() - recordIds() - id() - countCitations() - citationRequired() - citationCited() - buildFixtureRecords() - labels() - records() + values() + collectConflictIssues() + left() + right() + leftRole() + rightRole() + code() + responseRequiredFrom() + resolveConflictCode() + collectRequestResponseIssues() + response() + collectAgentActionIssues() + type() + participantGit() + linked() + matchedRequest() + deduplicateCommunicationIssues() + buildParticipantRows() + aliases() + matchedGit() + evidence() + validateSyntheses() + byId() + ids() record() - deterministicGeneration() - src/communication/intake-contract.ts: - i: node:crypto - e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError - VerifiedPrincipal: - ParticipantV2: - ParticipantRegistryV2: - IntakeEnvelope: - IntakeDiagnostic: - IntakeResult: - IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),invalid(-1),invalid(-1),assertCommand(-1),base(-1),participantId(-1),participantId(-1),assertQuery(-1),base(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1) - src/communication/intake-protobuf.ts: - i: ./intake-contract.js - e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,values,offset,fieldStart,number,wire,raw,payload,encodeIntakeResult,decodeIntakeResult,strings,numbers,offset,field,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte - encodeIntakeEnvelope() - operation() - decodeIntakeEnvelope() + renderCommunicationMarkdown() + addCommunicationIssuesToDiagnostics() + hasSerious() + communicationIssueTitle() + evidenceNeighbors() + records() + output() + left() + right() + isEvidenceRecord() + matchedGitRecords() + aliases() + semanticMatch() + conflictSemanticMatch() + leftHasExplicitTarget() + rightHasExplicitTarget() + agentResponseCoversRequest() + candidates() + bySource() values() - offset() - fieldStart() - number() - wire() - raw() - payload() - encodeIntakeResult() - decodeIntakeResult() - strings() - numbers() - offset() - field() - bytesField() - data() - varintField() - writeVarint() - remaining() - readVarint() + aggregateTopicMatch() + requested() + response() + shared() + agentWorkCoveredByHumanScope() + requests() + sourceRecords() + plans() + agentSourceRecords() + isBroadRequest() + isActionableAgentWork() + isPositiveImplementationClaim() + isHumanDecisionClaim() + hasImplementationVerb() + withoutTickets() value() - byte() - sdk/rust/src/client.rs: - i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super:: - e: Client - Client: - src/core/record.ts: - i: ./id.js,./target.js,./version.js - e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,generationMetadata,generationIdentity,separator,clamp,sourcePrefix - BuildRecordGenerationInput: - BuildRecordInput: - buildRecord() - rawExcerpt() - seed() - buildRecordSeed() - buildRecordStatement() - buildRecordSource() - buildRecordEpistemic() - withRecordGeneration() - generationMetadata() - generationIdentity() - separator() - clamp() - sourcePrefix() - sdk/typescript/examples/basic.ts: - i: ../src/index.js - e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison - baseUrl() - token() - root() - main() - client() - health() - card() - nl() - ast() - markdown() - graph() - diagnostics() - synthesis() - validation() - rendered() - artifact() - reality() - gitDiff() - comparison() - examples/backend/src/server.ts: - i: ./store.js,./validation.js,node:http - e: BackendOptions,MAX_BODY_BYTES,createBackend,store,server,handleRequest,url,body,validation,event,offset,limit,readBody,size,buffer,sendJson,body,startBackend,port,host - BackendOptions: - MAX_BODY_BYTES() - createBackend() - store() - server() - handleRequest() - url() - body() - validation() - event() - offset() - limit() - readBody() - size() - buffer() - sendJson() - body() - startBackend() - port() - host() - python/ast_extract.py: - e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main - FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1) - source_hash(value) - dotted_name(node) - is_module_entrypoint(node) - iter_python_files(root;files_from) - main() + intersects() + values() + participantOf() + participantsForRole() + roleOf() + typeOf() + ticketOf() + gitAliases() + normalizeIdentity() + append() + values() + issue() + sortedRespondents() + explicitResponseRoute() + severityRank() + escapeCell() + escapeRegex() scripts/verify-no-llm-imports.mjs: i: node:fs,node:path e: visited,visit,body,resolved,resolveSource,raw @@ -1404,6 +1126,16 @@ D: value() ratio() round() + src/communication/intake-contract.ts: + i: node:crypto + e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError + VerifiedPrincipal: + ParticipantV2: + ParticipantRegistryV2: + IntakeEnvelope: + IntakeDiagnostic: + IntakeResult: + IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),validateIntakeEnvelopeHeader(-1),validateIntakeEnvelopeTimestamp(-1),assertCommand(-1),assertQuery(-1),invalid(-1),validateIntakeEnvelopeHeader(-1),invalid(-1),invalid(-1),validateIntakeEnvelopeTimestamp(-1),invalid(-1),assertCommand(-1),base(-1),validateCommandPayload(-1),validateCommandPayload(-1),assertParticipant(-1),participantId(-1),assertPrincipal(-1),participantId(-1),role(-1),stringArray(-1),capabilities(-1),participantId(-1),role(-1),ticketId(-1),invalid(-1),invalid(-1),participantId(-1),ticketId(-1),invalid(-1),assertQuery(-1),base(-1),validateQueryPayload(-1),validateQueryPayload(-1),nonBlank(-1),participantId(-1),ticketId(-1),nonBlank(-1),participantId(-1),ticketId(-1),invalid(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1) golang/ast_extract.go: e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash Fact: @@ -1812,197 +1544,15 @@ D: registerRunArtifacts() manifestPath() manifest() - src/config/env.ts: - i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path - e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter - T2CConfig: - loadEnvFile() - explicit() - candidates() - content() - trimmed() - separator() - key() - value() - envString() - value() - envOptional() - value() - envNumber() - raw() - value() - envBoolean() - raw() - envList() - raw() - envLlmMode() - value() - getConfig() - model() - root() - configForDisplay() - hasOpenRouter() - src/diff/text-render.ts: - i: ./text-types.js - e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number - TextDiffSvgOptions: - SideBySideRow: - renderUnifiedDiff() - marker() - toSideBySideRows() - index() - line() - pairs() - renderTextDiffSvg() - theme() - maxRows() - maxColumns() - title() - charWidth() - rowHeight() - gutterWidth() - columnWidth() - width() - totals() - y() - rendered() - skipped() - summarizeDiffs() - diffHeading() - svgBody() - sideBySideRowMarkup() - changed() - number() - renderTextDiffHtml() - title() - sections() - renderHtmlSection() - hunks() - rows() - htmlCell() - cssClass() - number() - src/operations/subactor.ts: - i: ../core/types.js,./validation.js - e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding - CompileSubactorEnvelopeOptions: - valueMatchesType() - assertBinding() - ageSeconds() - compileSubactorProcessEnvelope() - variableById() - referenced() - variable() - binding() - humanApproval() - binding() - src/communication/intake-service.ts: - i: ./intake-store.js,node:crypto,node:fs,node:path - e: IntakeState,GovernedIntakeService - IntakeState: - GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) - scripts/live-model-comparison.mjs: - i: node:fs,node:path,node:url - e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile - REPO_ROOT() - main() - probe() - timeoutMs() - models() - root() - config() - result() - comparison() - rendered() - jsonTarget() - markdownTarget() - failedAudit() - message() - writeFile() - src/synthesis/code-change-plan/implementation-helpers.ts: - i: ../../core/io.js,../../core/security.js,../../graph/diagnostics.js,../../version.js,./implementation-source-patch.js,./implementation-targets.js,node:crypto,node:fs,node:path - e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,EvaluateCodeChangeAcceptanceOptions,CloseCodeChangesOptions,PlanContext,AcceptanceContext,CloseCodeChangeContext,ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,proposeCodeChangePlans,generatedAt,maxPlans,context,candidates,plans,buildPlansForCandidates,plan,buildPlanSetResult,parseIsoDateTime,generatedAt,parseMaxPlans,maxPlans,buildPlanContext,conclusions,proposals,findRelatedRecords,createPlanForDiagnostic,relatedRecords,matchingProposals,matchingConclusions,target,changes,evidence,confidence,semantic,confidenceForDiagnostic,buildPlanResult,createRepositoryPathProbe,base,absolute,evaluateCodeChangeAcceptance,context,reasons,accepted,acceptance,buildAcceptanceContext,evaluatedAt,afterDiagnostics,beforeDiagnosticIds,afterById,targetedDiagnosticIds,buildAcceptanceReasons,isAcceptancePassed,appendAcceptanceGateReason,buildAcceptanceResult,closeCodeChanges,context,acceptances,acceptedCount,buildCloseCodeChangeContext,evaluatedAt,afterDiagnostics,ensureClosePlanIdsAreUnique,planIds,buildCloseResult,buildChanges,symbols,sourceIntents,rationale,normalized,exists,confidenceFor,uniqueSorted,deterministicGeneration,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertCodeChangeSourcePatchAndActorAndEdits,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines - ProposeCodeChangePlansOptions: - ProposeCodeChangePlansResult: - EvaluateCodeChangeAcceptanceOptions: - CloseCodeChangesOptions: - PlanContext: - AcceptanceContext: - CloseCodeChangeContext: + src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts: + i: ../../core/io.js,../../core/schema.js,../../core/security.js,../../version.js,./implementation-diagnostics.js,./implementation-source-patch-apply-diff.js,./implementation-source-patch-assert.js,node:crypto,node:fs,node:path + e: ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,exactSourcePatchKeys,actual,exactSourcePatchSet,deterministicGeneration ApplyCodeChangeSourcePatchOptions: ApplyCodeChangeSourcePatchResult: NormalizedApplyCodeChangeSourcePatchRequest: SourcePatchApplyLock: SourcePatchEditTarget: PreparedSourceEdit: - ParsedUnifiedDiffHunk: - UnifiedDiffParsingContext: - UnifiedDiffCursor: - proposeCodeChangePlans() - generatedAt() - maxPlans() - context() - candidates() - plans() - buildPlansForCandidates() - plan() - buildPlanSetResult() - parseIsoDateTime() - generatedAt() - parseMaxPlans() - maxPlans() - buildPlanContext() - conclusions() - proposals() - findRelatedRecords() - createPlanForDiagnostic() - relatedRecords() - matchingProposals() - matchingConclusions() - target() - changes() - evidence() - confidence() - semantic() - confidenceForDiagnostic() - buildPlanResult() - createRepositoryPathProbe() - base() - absolute() - evaluateCodeChangeAcceptance() - context() - reasons() - accepted() - acceptance() - buildAcceptanceContext() - evaluatedAt() - afterDiagnostics() - beforeDiagnosticIds() - afterById() - targetedDiagnosticIds() - buildAcceptanceReasons() - isAcceptancePassed() - appendAcceptanceGateReason() - buildAcceptanceResult() - closeCodeChanges() - context() - acceptances() - acceptedCount() - buildCloseCodeChangeContext() - evaluatedAt() - afterDiagnostics() - ensureClosePlanIdsAreUnique() - planIds() - buildCloseResult() - buildChanges() - symbols() - sourceIntents() - rationale() - normalized() - exists() - confidenceFor() - uniqueSorted() - deterministicGeneration() applyCodeChangeSourcePatch() request() root() @@ -2016,7 +1566,6 @@ D: existing() assertPatchApplicationRequest() patch() - assertCodeChangeSourcePatchAndActorAndEdits() assertPatchApprovalActor() assertPatchApprovalHash() assertPatchEditsContainDiffs() @@ -2054,37 +1603,183 @@ D: hashPaths() validateSourceApplyReceiptGeneration() atomicWriteRaw() - applyUnifiedDiffToText() - baseLines() + exactSourcePatchKeys() + actual() + exactSourcePatchSet() + deterministicGeneration() + src/llm/openrouter.ts: + i: ../config/env.js,../core/types.js,./structured-schema.js + e: ChatMessage,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient + ChatMessage: + OpenRouterResult: + OpenRouterModelsResponse: + OpenRouterModelError: super(-1) + OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),createModelError(-1),formatInvalidModelError(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),shouldRetryWithoutJsonSchema(-1) + src/config/env.ts: + i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path + e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter + T2CConfig: + loadEnvFile() + explicit() + candidates() + content() + trimmed() + separator() + key() + value() + envString() + value() + envOptional() + value() + envNumber() + raw() + value() + envBoolean() + raw() + envList() + raw() + envLlmMode() + value() + getConfig() + model() + root() + configForDisplay() + hasOpenRouter() + src/interfaces/a2a-history.ts: + i: ../config/env.js,../core/security.js,node:fs,node:path + e: RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,matchesRunFilters,participant,role,ticket,severity,normalized,safeRunPath + RunHistoryFilters: + listIntentRuns() + runsDirectory() + entries() + items() + readRunEntries() + readRun() + runDirectory() + graphPath() + manifestPath() + manifest() + matchesRunFilters() + participant() + role() + ticket() + severity() + normalized() + safeRunPath() + src/diff/text-render.ts: + i: ./text-types.js + e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number + TextDiffSvgOptions: + SideBySideRow: + renderUnifiedDiff() + marker() + toSideBySideRows() + index() + line() + pairs() + renderTextDiffSvg() + theme() + maxRows() + maxColumns() + title() + charWidth() + rowHeight() + gutterWidth() + columnWidth() + width() + totals() + y() + rendered() + skipped() + summarizeDiffs() + diffHeading() + svgBody() + sideBySideRowMarkup() + changed() + number() + renderTextDiffHtml() + title() + sections() + renderHtmlSection() hunks() - output() - joinAppliedText() - parseUnifiedDiffIntoHunks() - normalizedDiff() - context() - createEmptyUnifiedDiffContext() - parseUnifiedDiffLines() - finalizeUnifiedDiffContext() - applyUnifiedDiffLineToContext() - header() - parseUnifiedDiffHeader() - buildParsedUnifiedDiffHunk() - applyUnifiedDiffHunks() - applyUnifiedDiffHunk() - oldIndex() - copyBaseLinesToCursor() - appendRemainingBaseLines() - validateHunkCounts() - oldCount() - newCount() - applyUnifiedDiffLine() - mark() - body() - applyUnifiedDiffContextLine() - applyUnifiedDiffDeletionLine() - applyUnifiedDiffAdditionLine() - splitKeep() - lines() + rows() + htmlCell() + cssClass() + number() + src/operations/subactor.ts: + i: ../core/types.js,./validation.js + e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding + CompileSubactorEnvelopeOptions: + valueMatchesType() + assertBinding() + ageSeconds() + compileSubactorProcessEnvelope() + variableById() + referenced() + variable() + binding() + humanApproval() + binding() + src/communication/intake-protobuf.ts: + i: ./intake-contract.js + e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,parsed,values,unknownFields,payload,envelope,encodeIntakeResult,decodeIntakeResult,parsed,strings,numbers,decodeDelimitedFields,values,strings,numbers,offset,fieldStart,field,wire,raw,value,parsePayloadJson,parseOptionalJson,buildIntakeEnvelope,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte + encodeIntakeEnvelope() + operation() + decodeIntakeEnvelope() + parsed() + values() + unknownFields() + payload() + envelope() + encodeIntakeResult() + decodeIntakeResult() + parsed() + strings() + numbers() + decodeDelimitedFields() + values() + strings() + numbers() + offset() + fieldStart() + field() + wire() + raw() + value() + parsePayloadJson() + parseOptionalJson() + buildIntakeEnvelope() + bytesField() + data() + varintField() + writeVarint() + remaining() + readVarint() + value() + byte() + src/communication/intake-service.ts: + i: ./intake-store.js,node:crypto,node:fs,node:path + e: IntakeState,GovernedIntakeService + IntakeState: + GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) + scripts/live-model-comparison.mjs: + i: node:fs,node:path,node:url + e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile + REPO_ROOT() + main() + probe() + timeoutMs() + models() + root() + config() + result() + comparison() + rendered() + jsonTarget() + markdownTarget() + failedAudit() + message() + writeFile() src/extractors/ast.ts: i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result @@ -2140,21 +1835,16 @@ D: absolute() addBasenameIndexMatch() matches() - src/extractors/nl-llm-helpers.ts: - i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url - e: RawNlRecord,NlResponse,NlAttemptError - RawNlRecord: - NlResponse: - NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1) src/core/schema/intent.ts: i: ../id.js - e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation + e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,recordId,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation GroundedValidationContext: TodoProposalValidationContext: CodeChangePlanValidationContext: CodeChangeAcceptanceValidationContext: assertIntentRecord() record() + recordId() statement() lifecycle() source() @@ -2319,6 +2009,28 @@ D: documentationLine() git() result() + src/interfaces/a2a-message.ts: + e: parseSendConfiguration,validateOutputModes,supported,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,cloneMessage,clonePart,normalizeUserMessage + parseSendConfiguration() + validateOutputModes() + supported() + parseMessage() + messageId() + contextId() + taskId() + referenceTaskIds() + extensions() + metadata() + parsePart() + output() + parsePartContent() + content() + qualifier() + ensureSupportedMessageContent() + supported() + cloneMessage() + clonePart() + normalizeUserMessage() src/summary/payload.ts: i: ../core/types.js e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord @@ -2371,6 +2083,102 @@ D: sumUsage() values() round() + src/watch/watcher.ts: + i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path + e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,WatchConfiguration,WatchRuntime,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,configuration,runtime,defaultSleep,timer,onAbort,finish,createWatchConfiguration,root,minIntervalMs,scanIntervalMs,emit,now,sleep,matcher,runReport,result,createWatchRuntime,initialSnapshot,scanTreeCurrent,evaluateChangeCycle,current,delta,handleDelta,maybeGenerateReport,waitMs,generateReportForReason,startedAt,result + SnapshotDelta: + ScanOptions: + ReportResult: + WatchOptions: + WatchConfiguration: + WatchRuntime: + scanTree() + maxFiles() + absoluteRoot() + visit() + absolute() + relative() + stat() + diffSnapshots() + previous() + describeDelta() + shown() + rest() + DEFAULT_MIN_INTERVAL_MS() + DEFAULT_SCAN_INTERVAL_MS() + watchRepository() + configuration() + runtime() + defaultSleep() + timer() + onAbort() + finish() + createWatchConfiguration() + root() + minIntervalMs() + scanIntervalMs() + emit() + now() + sleep() + matcher() + runReport() + result() + createWatchRuntime() + initialSnapshot() + scanTreeCurrent() + evaluateChangeCycle() + current() + delta() + handleDelta() + maybeGenerateReport() + waitMs() + generateReportForReason() + startedAt() + result() + src/communication/identity.ts: + i: ../core/io.js,../core/security.js,./intake-contract.js,node:path + e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,participants,validateRegistryShape,assertParticipantIdentityEntry,entry,participantId,role,values,assertParticipantIdentityId,assertParticipantIdentityRole,assertDisplayName,assertDuplicateId,assertParticipantIdentityField,values,assertParticipantIdentityFieldUnique,owner,assertRoleCompatibility,exactKeys,allowed,missing,extra + ParticipantIdentityEntry: + ParticipantIdentityRegistry: + LoadedParticipantIdentityRegistry: + loadParticipantIdentityRegistry() + v2Path() + v1Path() + registryPath() + normalized() + normalizeParticipantIdentityRegistry() + registry() + participants() + ids() + principals() + key() + normalizeV2Entry() + principals() + kind() + assertParticipantIdentityRegistry() + registry() + ids() + external() + participants() + validateRegistryShape() + assertParticipantIdentityEntry() + entry() + participantId() + role() + values() + assertParticipantIdentityId() + assertParticipantIdentityRole() + assertDisplayName() + assertDuplicateId() + assertParticipantIdentityField() + values() + assertParticipantIdentityFieldUnique() + owner() + assertRoleCompatibility() + exactKeys() + allowed() + missing() + extra() src/communication/llm/implementation.ts: i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError @@ -2522,6 +2330,12 @@ D: output() symbol() isDocumentationPath() + src/extractors/nl-llm-helpers.ts: + i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url + e: RawNlRecord,NlResponse,NlAttemptError + RawNlRecord: + NlResponse: + NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),resolveModality(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),NL_ACTION_SET(-1),NL_MODALITY_SET(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1) src/graph/diff.ts: i: ../core/id.js,../core/schema.js e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate @@ -2566,7 +2380,7 @@ D: truncate() src/graph/diagnostics.ts: i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js - e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTarget,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank + e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTargetEvidence,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank DiagnosticContext: diagnoseGraph() context() @@ -2589,7 +2403,7 @@ D: collectMissingFields() collectSymbolIssues() isRecordEvidenced() - hasDocumentedTarget() + hasDocumentedTargetEvidence() buildPlannedNotImplementedDiagnostic() hasLocationOnlyEvidence() buildImplementedWithoutPlanDiagnostic() @@ -2781,6 +2595,103 @@ D: AuditedTaskSynthesisResult: TaskSynthesisRequiredError: super(-1) TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1) + src/synthesis/code-change-plan/implementation-source-patch-assert.ts: + i: ../../core/schema.js,./implementation-source-patch-diff.js + e: SourcePatchEditValidationContext,SourcePatchSetValidationContext,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,marker,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet + SourcePatchEditValidationContext: + SourcePatchSetValidationContext: + assertCodeChangeSourcePatch() + patch() + editPaths() + assertCodeChangeSourcePatchObject() + patch() + validateSourcePatchSchema() + validateSourcePatchIdentifiers() + validateSourcePatchEdits() + collectSourcePatchEditPathActions() + paths() + editContext() + validateSourcePatchEdit() + normalizedEdit() + normalizedPath() + assertSourcePatchEditObject() + validateSourcePatchEditBody() + validateSourcePatchEditDiff() + assertUniqueSourcePatchEditPathAction() + normalizeSourcePatchEditPath() + normalizedPath() + ensureSourcePatchEditAction() + ensureSourcePatchEditInstruction() + validateSourcePatchHashAndId() + expectedHash() + validateSourcePatchGeneration() + validateSourcePatchAgainstPlan() + expectedChanges() + assertSourcePatchPlanBinding() + collectExpectedPlanChanges() + validateSourcePatchEditsAgainstPlan() + allowed() + editPath() + validateSourcePatchEvidence() + marker() + assertCodeChangeSourcePatchSet() + set() + context() + createSourcePatchSetValidationContext() + expectedPlanIds() + assertSourcePatchSetObject() + set() + validateSourcePatchSetSchema() + validateSourcePatchSetPatches() + patchIds() + validateSetPatchAndTrackDuplicates() + expectedPlan() + validateSetPatchGraphFingerprint() + assertUniqueSetPatchId() + validateSetPatchesPlanCoverage() + validateSourcePatchSetGeneration() + exactSourcePatchKeys() + actual() + assertSourcePatchIds() + assertSourcePatchStrings() + exactSourcePatchSet() + src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts: + i: ./implementation-source-patch-diff.js + e: ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines + ParsedUnifiedDiffHunk: + UnifiedDiffParsingContext: + UnifiedDiffCursor: + applyUnifiedDiffToText() + baseLines() + hunks() + output() + joinAppliedText() + parseUnifiedDiffIntoHunks() + normalizedDiff() + context() + createEmptyUnifiedDiffContext() + parseUnifiedDiffLines() + finalizeUnifiedDiffContext() + applyUnifiedDiffLineToContext() + header() + parseUnifiedDiffHeader() + buildParsedUnifiedDiffHunk() + applyUnifiedDiffHunks() + applyUnifiedDiffHunk() + oldIndex() + copyBaseLinesToCursor() + appendRemainingBaseLines() + validateHunkCounts() + oldCount() + newCount() + applyUnifiedDiffLine() + mark() + body() + applyUnifiedDiffContextLine() + applyUnifiedDiffDeletionLine() + applyUnifiedDiffAdditionLine() + splitKeep() + lines() src/interfaces/a2a-task-store.ts: i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage @@ -2869,203 +2780,113 @@ D: start() page() last() - filteredTasks() - compareTasksByUpdate() - timestampOrder() - indexAfterCursor() - exact() - cursorTime() - next() - taskTime() - encodeCursor() - decodeCursor() - decoded() - taskView() - effectiveHistoryLength() - history() - cloneArtifact() - ownedTask() - task() - messageKey() - errorMessage() - src/communication/intake-store.ts: - i: ../core/io.js,../core/security.js,node:crypto,node:fs,node:path - e: IntakeEvent,StreamSnapshot,IntakeEventStore - IntakeEvent: - StreamSnapshot: - IntakeEventStore: read(-1),names(-1),name(-1),eventPath(-1),stat(-1),event(-1),lockPath(-1),stream(-1),existing(-1),writeRegistry(-1),projectionPath(-1),slug(-1),atomicWrite(-1),safe(-1),temp(-1),assertSafe(-1),hashEvent(-1),broken(-1),unsafe(-1) - scripts/verify-workflow-yaml.mjs: - i: node:fs,node:path - e: explicit,files,body,seen,match,key,previous,workflowFiles,directory - explicit() - files() - body() - seen() - match() - key() - previous() - workflowFiles() - directory() - scripts/research/audit-changelog-sample.mjs: - i: node:child_process,node:fs,node:path - e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,classification,labelCounts,labelRepositories,stratifiedSample,groups,values,added,record,targetClass,target,classify,text,file,exactFileUpdate,match,candidate,basename,pathOwners,file,countBy,item,readJson,parseArgs,value,index,limitIndex,limit,intentDirectoryIndex,intentDirectory - options() - entries() - root() - latest() - runDirectory() - diagnostics() - graph() - recordsById() - findings() - selected() - trackedFiles() - classification() - labelCounts() - labelRepositories() - stratifiedSample() - groups() - values() - added() - record() - targetClass() - target() - classify() - text() - file() - exactFileUpdate() - match() - candidate() - basename() - pathOwners() - file() - countBy() - item() - readJson() - parseArgs() - value() - index() - limitIndex() - limit() - intentDirectoryIndex() - intentDirectory() - sdk/php/src/Client.php: - e: Client - Client: - sdk/python/examples/basic.py: - e: main - main() - src/synthesis/code-change-plan/implementation-source-patch.ts: - i: ../../core/schema.js,../../version.js,./implementation-diagnostics.js - e: CreateCodeChangeSourcePatchOptions,SourcePatchCreationContext,SourcePatchSetBuildContext,SourcePatchEditValidationContext,SourcePatchSetValidationContext,createCodeChangeSourcePatch,context,edits,semantic,patchHash,buildSourcePatchContext,graphFingerprint,createdAt,allowedPaths,collectPlanTargetPaths,validateUnifiedDiffsBelongToPlan,normalizedPath,buildSourcePatchEdits,buildSourcePatchEdit,path,rawDiff,unifiedDiff,buildSourcePatchSemantic,createCodeChangeSourcePatchSet,context,patches,result,normalizePatchSetOptions,generatedAt,buildPatchesForSet,buildSourcePatchSet,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet,instructionFor,symbols,criteria,normalizeUnifiedDiff,normalized,normalizeUnifiedDiffText,normalized,validateUnifiedDiffBody,validateUnifiedDiffPathHeaders,extractUnifiedDiffHeaders,validateUnifiedDiffHeaderPath,normalizedPath,normalizeUnifiedDiffHeaderPath,assertUnifiedDiffHeaderPathSafety,bare,stripped,isUnifiedDiffTraversalHeader,matchesUnifiedDiffExpectedHeader,normalizedHeaderPathCandidate,stripLeadingDiffPrefix,deterministicGeneration,uniqueSorted,assertSourcePatchObject - CreateCodeChangeSourcePatchOptions: - SourcePatchCreationContext: - SourcePatchSetBuildContext: - SourcePatchEditValidationContext: - SourcePatchSetValidationContext: - createCodeChangeSourcePatch() - context() - edits() - semantic() - patchHash() - buildSourcePatchContext() - graphFingerprint() - createdAt() - allowedPaths() - collectPlanTargetPaths() - validateUnifiedDiffsBelongToPlan() - normalizedPath() - buildSourcePatchEdits() - buildSourcePatchEdit() - path() - rawDiff() - unifiedDiff() - buildSourcePatchSemantic() - createCodeChangeSourcePatchSet() - context() - patches() - result() - normalizePatchSetOptions() - generatedAt() - buildPatchesForSet() - buildSourcePatchSet() - assertCodeChangeSourcePatch() - patch() - editPaths() - assertCodeChangeSourcePatchObject() - patch() - validateSourcePatchSchema() - validateSourcePatchIdentifiers() - validateSourcePatchEdits() - collectSourcePatchEditPathActions() - paths() - editContext() - validateSourcePatchEdit() - normalizedEdit() - normalizedPath() - assertSourcePatchEditObject() - validateSourcePatchEditBody() - validateSourcePatchEditDiff() - assertUniqueSourcePatchEditPathAction() - normalizeSourcePatchEditPath() - normalizedPath() - ensureSourcePatchEditAction() - ensureSourcePatchEditInstruction() - validateSourcePatchHashAndId() - expectedHash() - validateSourcePatchGeneration() - validateSourcePatchAgainstPlan() - expectedChanges() - assertSourcePatchPlanBinding() - collectExpectedPlanChanges() - validateSourcePatchEditsAgainstPlan() - allowed() - editPath() - validateSourcePatchEvidence() - assertCodeChangeSourcePatchSet() - set() - context() - createSourcePatchSetValidationContext() - expectedPlanIds() - assertSourcePatchSetObject() - set() - validateSourcePatchSetSchema() - validateSourcePatchSetPatches() - patchIds() - validateSetPatchAndTrackDuplicates() - expectedPlan() - validateSetPatchGraphFingerprint() - assertUniqueSetPatchId() - validateSetPatchesPlanCoverage() - validateSourcePatchSetGeneration() - exactSourcePatchKeys() - actual() - assertSourcePatchIds() - assertSourcePatchStrings() - exactSourcePatchSet() - instructionFor() - symbols() - criteria() - normalizeUnifiedDiff() - normalized() - normalizeUnifiedDiffText() - normalized() - validateUnifiedDiffBody() - validateUnifiedDiffPathHeaders() - extractUnifiedDiffHeaders() - validateUnifiedDiffHeaderPath() - normalizedPath() - normalizeUnifiedDiffHeaderPath() - assertUnifiedDiffHeaderPathSafety() - bare() - stripped() - isUnifiedDiffTraversalHeader() - matchesUnifiedDiffExpectedHeader() - normalizedHeaderPathCandidate() - stripLeadingDiffPrefix() - deterministicGeneration() - uniqueSorted() - assertSourcePatchObject() + filteredTasks() + compareTasksByUpdate() + timestampOrder() + indexAfterCursor() + exact() + cursorTime() + next() + taskTime() + encodeCursor() + decodeCursor() + decoded() + taskView() + effectiveHistoryLength() + history() + cloneArtifact() + ownedTask() + task() + messageKey() + errorMessage() + src/pipeline/run-helpers.ts: + i: ../communication/llm.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../synthesis/code-change-plan.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,./run.js,node:path + e: collectCommunicationAnalysis,includeCommunication,communicationStartedAt,missingDirectory,communication,foundMissingDirectory,collectTaskSynthesis,taskSynthesisMode,taskSynthesisAudit,todoContent,createCodeChangeArtifacts,codeChangePlans,codeChangeReview,codeChangeSourcePatches,collectTargetHints,values,appendLlmNotConfigured,skippedAudit + collectCommunicationAnalysis() + includeCommunication() + communicationStartedAt() + missingDirectory() + communication() + foundMissingDirectory() + collectTaskSynthesis() + taskSynthesisMode() + taskSynthesisAudit() + todoContent() + createCodeChangeArtifacts() + codeChangePlans() + codeChangeReview() + codeChangeSourcePatches() + collectTargetHints() + values() + appendLlmNotConfigured() + skippedAudit() + src/communication/intake-store.ts: + i: ../core/io.js,../core/security.js,node:crypto,node:fs,node:path + e: IntakeEvent,StreamSnapshot,IntakeEventStore + IntakeEvent: + StreamSnapshot: + IntakeEventStore: read(-1),names(-1),name(-1),eventPath(-1),stat(-1),event(-1),lockPath(-1),stream(-1),existing(-1),writeRegistry(-1),projectionPath(-1),slug(-1),atomicWrite(-1),safe(-1),temp(-1),assertSafe(-1),hashEvent(-1),broken(-1),unsafe(-1) + scripts/verify-workflow-yaml.mjs: + i: node:fs,node:path + e: explicit,files,body,seen,match,key,previous,workflowFiles,directory + explicit() + files() + body() + seen() + match() + key() + previous() + workflowFiles() + directory() + scripts/research/audit-changelog-sample.mjs: + i: node:child_process,node:fs,node:path + e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,classification,labelCounts,labelRepositories,stratifiedSample,groups,values,added,record,targetClass,target,classify,text,file,exactFileUpdate,match,candidate,basename,pathOwners,file,countBy,item,readJson,parseArgs,value,index,limitIndex,limit,intentDirectoryIndex,intentDirectory + options() + entries() + root() + latest() + runDirectory() + diagnostics() + graph() + recordsById() + findings() + selected() + trackedFiles() + classification() + labelCounts() + labelRepositories() + stratifiedSample() + groups() + values() + added() + record() + targetClass() + target() + classify() + text() + file() + exactFileUpdate() + match() + candidate() + basename() + pathOwners() + file() + countBy() + item() + readJson() + parseArgs() + value() + index() + limitIndex() + limit() + intentDirectoryIndex() + intentDirectory() + sdk/php/src/Client.php: + e: Client + Client: + sdk/python/examples/basic.py: + e: main + main() examples/backend/src/validation.ts: e: ValidationResult,ALLOWED_ACTIONS,validateEventPayload,invalid,record,agent,action,object ValidationResult: @@ -3414,6 +3235,29 @@ D: visit_impl_item_fn() visit_expr_call() visit_expr_method_call() + examples/backend/src/request-handlers.ts: + i: ./store.js,./validation.js,node:http + e: MAX_BODY_BYTES,handleRequest,url,handleHealth,handleEventPublish,body,validation,event,handleEventList,offset,limit,parseOffset,parsed,parseLimit,parsed,readBody,size,buffer,sendJson,body + MAX_BODY_BYTES() + handleRequest() + url() + handleHealth() + handleEventPublish() + body() + validation() + event() + handleEventList() + offset() + limit() + parseOffset() + parsed() + parseLimit() + parsed() + readBody() + size() + buffer() + sendJson() + body() src/extractors/runtime-cycle.ts: i: ../config/env.js,../core/io.js,../core/record.js,node:path e: CycleContext,MAX_PER_SECTION,extractRuntimeCycleIntent,cyclePath,root,body,cycle,sourcePath,observedAt,host,results,parseCycle,cycle,sourcePathFor,relative,boundedArray,objects,label,text,tags,watched,declared,probeRecord,id,failed,error,outcome,violationRecord,probe,fact,driftRecord,probe,fact,proposalRecord,kind,probe,detail,proposalAction,factsMetadata,jsonScalar @@ -3539,6 +3383,87 @@ D: level() rollbackFor() uniqueSorted() + src/synthesis/code-change-plan/implementation-helpers-plans.ts: + i: ./implementation-targets.js,node:fs,node:path + e: ProposeCodeChangePlansOptions,ProposeCodeChangePlansResult,PlanContext,proposeCodeChangePlans,generatedAt,maxPlans,context,candidates,plans,buildPlansForCandidates,plan,buildPlanSetResult,parseIsoDateTime,generatedAt,parseMaxPlans,maxPlans,buildPlanContext,conclusions,proposals,findRelatedRecords,createPlanForDiagnostic,relatedRecords,matchingProposals,matchingConclusions,target,changes,evidence,confidence,semantic,confidenceForDiagnostic,buildPlanResult,createRepositoryPathProbe,base,absolute,buildChanges,symbols,sourceIntents,rationale,normalized,exists,confidenceFor + ProposeCodeChangePlansOptions: + ProposeCodeChangePlansResult: + PlanContext: + proposeCodeChangePlans() + generatedAt() + maxPlans() + context() + candidates() + plans() + buildPlansForCandidates() + plan() + buildPlanSetResult() + parseIsoDateTime() + generatedAt() + parseMaxPlans() + maxPlans() + buildPlanContext() + conclusions() + proposals() + findRelatedRecords() + createPlanForDiagnostic() + relatedRecords() + matchingProposals() + matchingConclusions() + target() + changes() + evidence() + confidence() + semantic() + confidenceForDiagnostic() + buildPlanResult() + createRepositoryPathProbe() + base() + absolute() + buildChanges() + symbols() + sourceIntents() + rationale() + normalized() + exists() + confidenceFor() + src/llm/openrouter-request.ts: + e: ParsedOpenRouterResponse,OpenRouterChoice,OpenRouterResponse,OpenRouterRequestContext,requestOpenRouter,controller,detachAbort,timeout,response,parsed,resolution,resolution,ensureApiKeyConfigured,connectAbortSignal,abortFromExternal,sendRequest,resolveHttpResponse,message,error,createModelErrorResponse,model,availableModels,listErrorMessage,resolveTransportError,retryDelay,buildRequestHeaders,shouldRetryWithoutJsonSchema,shouldRetryRequestWithoutSchema,isRetryableServerError,isTransientNetworkError,isInvalidModelError,parseResponse,text,removeUndefined,sleep + ParsedOpenRouterResponse: + OpenRouterChoice: + OpenRouterResponse: + OpenRouterRequestContext: + requestOpenRouter() + controller() + detachAbort() + timeout() + response() + parsed() + resolution() + resolution() + ensureApiKeyConfigured() + connectAbortSignal() + abortFromExternal() + sendRequest() + resolveHttpResponse() + message() + error() + createModelErrorResponse() + model() + availableModels() + listErrorMessage() + resolveTransportError() + retryDelay() + buildRequestHeaders() + shouldRetryWithoutJsonSchema() + shouldRetryRequestWithoutSchema() + isRetryableServerError() + isTransientNetworkError() + isInvalidModelError() + parseResponse() + text() + removeUndefined() + sleep() src/interfaces/mcp.ts: i: ../config/env.js,./mcp-errors.js,./mcp-resources.js,./mcp-tools.js,node:path,node:readline,node:url e: JsonRpcRequest,McpConnectionState,DISCOVERY_TTL_MS,LIST_TTL_MS,RESOURCE_TTL_MS,createMcpConnectionState,startMcpServer,resolvedConfig,state,input,parsed,request,result,handleMcpRequest,initializeLegacy,params,requested,protocolVersion,handleModernRequest,params,responseMeta,handleLegacyRequest,params,validateModernRequest,params,meta,validateModernMetadata,requested,capabilities,hasModernMetadata,meta,parseRequestLine,completePublic,serverInfo,serverMeta,serverInstructions,isLegacyProtocol,isJsonRpcRequest,candidate,requestId,id,rpcError,sendError,send,invokedPath @@ -3638,6 +3563,41 @@ D: handleUnexpectedError() errorMessage() invokedPath() + src/diff/text-myers.ts: + i: ./text-types.js + e: RawDiffOp,MyersState,MyersEditPoint,blockReplace,myers,state,v,startX,point,createMyersState,n,m,chooseStartX,advanceDiagonal,nextX,nextY,backtrack,x,y,v,k,previous,previousX,previousY,diag,afterEqualX,afterEqualY,choosePreviousPoint,previousK,previousX,emitEqualOps,emitEditOp + RawDiffOp: + MyersState: + MyersEditPoint: + blockReplace() + myers() + state() + v() + startX() + point() + createMyersState() + n() + m() + chooseStartX() + advanceDiagonal() + nextX() + nextY() + backtrack() + x() + y() + v() + k() + previous() + previousX() + previousY() + diag() + afterEqualX() + afterEqualY() + choosePreviousPoint() + previousK() + previousX() + emitEqualOps() + emitEditOp() scripts/research/evaluate-embedding-pairs.py: e: parse_args,main parse_args() @@ -3842,36 +3802,153 @@ D: key() exactCounts() actual() - isJsonValue() - assertGroundedGenerationMetadata() - generation() - assertGroundedLlMMode() - assertModeRequirements() - assertDeterministicGeneration() - assertDegradedRequirements() - src/semantic/reranker/candidate.ts: - i: ../../core/schema.js,../../core/types.js,./validation.js - e: CandidateValidationState,createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,state,assertCandidateSetHeader,createCandidateValidationState,addValidatedCandidate,validateCandidateId,validateCandidateRecords,declaration,module,validateCandidateRank,registerCandidate,existing,assertBoundedRanks,assertCandidateSetHash,expectedHash,comparePair - CandidateValidationState: - createSemanticCandidateSet() - grouped() - values() - assertSemanticCandidateSet() - state() - assertCandidateSetHeader() - createCandidateValidationState() - addValidatedCandidate() - validateCandidateId() - validateCandidateRecords() - declaration() - module() - validateCandidateRank() - registerCandidate() - existing() - assertBoundedRanks() - assertCandidateSetHash() - expectedHash() - comparePair() + isJsonValue() + assertGroundedGenerationMetadata() + generation() + assertGroundedLlMMode() + assertModeRequirements() + assertDeterministicGeneration() + assertDegradedRequirements() + src/semantic/reranker/candidate.ts: + i: ../../core/schema.js,../../core/types.js,./validation.js + e: CandidateValidationState,createSemanticCandidateSet,grouped,values,assertSemanticCandidateSet,state,assertCandidateSetHeader,createCandidateValidationState,addValidatedCandidate,validateCandidateId,validateCandidateRecords,declaration,module,validateCandidateRank,registerCandidate,existing,assertBoundedRanks,assertCandidateSetHash,expectedHash,comparePair + CandidateValidationState: + createSemanticCandidateSet() + grouped() + values() + assertSemanticCandidateSet() + state() + assertCandidateSetHeader() + createCandidateValidationState() + addValidatedCandidate() + validateCandidateId() + validateCandidateRecords() + declaration() + module() + validateCandidateRank() + registerCandidate() + existing() + assertBoundedRanks() + assertCandidateSetHash() + expectedHash() + comparePair() + src/interfaces/a2a-run-list-item.ts: + i: ./a2a-types.js,node:fs,node:path + e: IntentRunListItem,CommunicationRunSummary,runListItem,files,resolveRunId,resolveCreatedAt,valueString,warningCount,warnings,resolveStatus,runtimeVersion,runtime,readLlmSummary,llm,asRecord,validTimestamp,llmSummary,readCommunicationSummary,relative,filePath,stat,value,participants,issues,participantSummary,stringArray,safeManifestFiles,safePath,absolute,isWithinRoot,relative,relativeApiPath + IntentRunListItem: + CommunicationRunSummary: + runListItem() + files() + resolveRunId() + resolveCreatedAt() + valueString() + warningCount() + warnings() + resolveStatus() + runtimeVersion() + runtime() + readLlmSummary() + llm() + asRecord() + validTimestamp() + llmSummary() + readCommunicationSummary() + relative() + filePath() + stat() + value() + participants() + issues() + participantSummary() + stringArray() + safeManifestFiles() + safePath() + absolute() + isWithinRoot() + relative() + relativeApiPath() + src/evaluation/gold-cases.ts: + i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js + e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,reranker,idToLabel,declarationRecordId,graph,candidates,decisions,rerank,observed,forbiddenViolations,buildRerankerCandidates,requestedCandidates,buildRerankerDecisions,candidateByModule,moduleRecordId,candidate,buildRerankResult,buildObservedRerankRelations,augmented,countForbiddenRelations,restricted,buildRerankExpected,buildRerankSnapshot,countVerdictDecisions,resolveRerankerFixture,resolveDeclarationRecordId,declarationRecordId,resolveFixtureLabelToRecordId,recordId,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,buildFixtureRecord,resolveDefaultFixtureModality,resolveFixtureSourcePath,resolveFixtureSymbol,resolveFixtureEpistemicClass,deterministicGeneration + LinkingCaseResult: + RerankingCaseResult: + DiagnosticsCaseResult: + Dsl2TodoCaseResult: + evaluateLinkingCase() + idToLabel() + graph() + observed() + actual() + expected() + byClass() + forbidden() + forbiddenViolations() + evaluateRerankingCase() + reranker() + idToLabel() + declarationRecordId() + graph() + candidates() + decisions() + rerank() + observed() + forbiddenViolations() + buildRerankerCandidates() + requestedCandidates() + buildRerankerDecisions() + candidateByModule() + moduleRecordId() + candidate() + buildRerankResult() + buildObservedRerankRelations() + augmented() + countForbiddenRelations() + restricted() + buildRerankExpected() + buildRerankSnapshot() + countVerdictDecisions() + resolveRerankerFixture() + resolveDeclarationRecordId() + declarationRecordId() + resolveFixtureLabelToRecordId() + recordId() + classifyRelation() + exact() + evaluateDiagnosticsCase() + idToLabel() + graph() + report() + observed() + forbidden() + forbiddenViolations() + evaluateDsl2TodoCase() + graph() + diagnostics() + diagnosticIds() + conclusion() + proposals() + validation() + duplicateIds() + actual() + expected() + citations() + buildConclusion() + buildProposal() + recordIds() + id() + countCitations() + citationRequired() + citationCited() + buildFixtureRecords() + labels() + records() + record() + buildFixtureRecord() + resolveDefaultFixtureModality() + resolveFixtureSourcePath() + resolveFixtureSymbol() + resolveFixtureEpistemicClass() + deterministicGeneration() scripts/verify-structured-responses.mjs: i: node:fs,node:path e: root,sourceRoot,files,structuredCalls,source,typescriptFiles,absolute @@ -3999,7 +4076,7 @@ D: roundedConfidence() src/synthesis/code-change-plan/implementation-review.ts: i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./implementation-diagnostics.js - e: CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CodeChangeReviewContext,createCodeChangeReviewPatch,context,markdown,artifact,buildCodeChangeReviewContext,createdAt,sortCodeChangeReviewPlans,buildCodeChangeReviewMarkdown,buildCodeChangeReviewArtifact,renderCodeChangeReviewMarkdown,lines,buildCodeChangeReviewMarkdownLines,appendPriorityHeader,appendPlanDetails,appendPlanChanges,symbols,appendAfterImplementationSection,assertCodeChangeReviewPatch,artifact,validateReviewPatchKeys,assertCodeChangeReviewPatchSchema,assertReviewPatchSchemaVersion,assertReviewPatchDateFields,assertReviewPatchIds,assertCodeChangeReviewPatchPlanCollections,assertCodeChangeReviewPatchGeneration,generation,deterministicGeneration,priorityRank,inline,renderIds,assertReviewPatchObject + e: CreateCodeChangeReviewOptions,CreatedCodeChangeReview,CodeChangeReviewContext,createCodeChangeReviewPatch,context,markdown,artifact,buildCodeChangeReviewContext,createdAt,sortCodeChangeReviewPlans,buildCodeChangeReviewMarkdown,buildCodeChangeReviewArtifact,renderCodeChangeReviewMarkdown,lines,buildCodeChangeReviewMarkdownLines,appendPriorityHeader,appendPlanDetails,appendPlanChanges,symbols,appendAfterImplementationSection,assertCodeChangeReviewPatch,artifact,validateReviewPatchKeys,assertCodeChangeReviewPatchSchema,assertReviewPatchSchemaVersion,assertReviewPatchDateFields,assertReviewPatchIds,assertCodeChangeReviewPatchPlanCollections,planIds,planHashes,assertCodeChangeReviewPatchGeneration,generation,deterministicGeneration,priorityRank,inline,renderIds,assertReviewPatchObject CreateCodeChangeReviewOptions: CreatedCodeChangeReview: CodeChangeReviewContext: @@ -4028,6 +4105,8 @@ D: assertReviewPatchDateFields() assertReviewPatchIds() assertCodeChangeReviewPatchPlanCollections() + planIds() + planHashes() assertCodeChangeReviewPatchGeneration() generation() deterministicGeneration() @@ -4137,6 +4216,77 @@ Example: indexOfMaxValue() bestIndex() clampProbability() + src/core/record.ts: + i: ./id.js,./record-metadata.js,./target.js + e: BuildRecordGenerationInput,BuildRecordInput,buildRecord,rawExcerpt,seed,buildRecordSeed,buildRecordStatement,buildRecordSource,buildRecordEpistemic,withRecordGeneration,clamp,sourcePrefix + BuildRecordGenerationInput: + BuildRecordInput: + buildRecord() + rawExcerpt() + seed() + buildRecordSeed() + buildRecordStatement() + buildRecordSource() + buildRecordEpistemic() + withRecordGeneration() + clamp() + sourcePrefix() + src/synthesis/code-change-plan/implementation-source-patch-diff.ts: + e: normalizeUnifiedDiff,normalized,normalizeUnifiedDiffText,normalized,validateUnifiedDiffBody,validateUnifiedDiffPathHeaders,extractUnifiedDiffHeaders,validateUnifiedDiffHeaderPath,normalizedPath,normalizeUnifiedDiffHeaderPath,assertUnifiedDiffHeaderPathSafety,bare,stripped,isUnifiedDiffTraversalHeader,matchesUnifiedDiffExpectedHeader,normalizedHeaderPathCandidate,stripLeadingDiffPrefix + normalizeUnifiedDiff() + normalized() + normalizeUnifiedDiffText() + normalized() + validateUnifiedDiffBody() + validateUnifiedDiffPathHeaders() + extractUnifiedDiffHeaders() + validateUnifiedDiffHeaderPath() + normalizedPath() + normalizeUnifiedDiffHeaderPath() + assertUnifiedDiffHeaderPathSafety() + bare() + stripped() + isUnifiedDiffTraversalHeader() + matchesUnifiedDiffExpectedHeader() + normalizedHeaderPathCandidate() + stripLeadingDiffPrefix() + src/synthesis/code-change-plan/implementation-source-patch-create.ts: + i: ../../core/schema.js,../../version.js,./implementation-diagnostics.js,./implementation-source-patch-diff.js + e: CreateCodeChangeSourcePatchOptions,SourcePatchCreationContext,SourcePatchSetBuildContext,createCodeChangeSourcePatch,context,edits,semantic,patchHash,buildSourcePatchContext,graphFingerprint,createdAt,allowedPaths,collectPlanTargetPaths,validateUnifiedDiffsBelongToPlan,normalizedPath,buildSourcePatchEdits,buildSourcePatchEdit,path,rawDiff,unifiedDiff,buildSourcePatchSemantic,createCodeChangeSourcePatchSet,context,patches,result,normalizePatchSetOptions,generatedAt,buildPatchesForSet,buildSourcePatchSet,instructionFor,symbols,criteria,deterministicGeneration,uniqueSorted + CreateCodeChangeSourcePatchOptions: + SourcePatchCreationContext: + SourcePatchSetBuildContext: + createCodeChangeSourcePatch() + context() + edits() + semantic() + patchHash() + buildSourcePatchContext() + graphFingerprint() + createdAt() + allowedPaths() + collectPlanTargetPaths() + validateUnifiedDiffsBelongToPlan() + normalizedPath() + buildSourcePatchEdits() + buildSourcePatchEdit() + path() + rawDiff() + unifiedDiff() + buildSourcePatchSemantic() + createCodeChangeSourcePatchSet() + context() + patches() + result() + normalizePatchSetOptions() + generatedAt() + buildPatchesForSet() + buildSourcePatchSet() + instructionFor() + symbols() + criteria() + deterministicGeneration() + uniqueSorted() src/interfaces/mcp-resources.ts: i: ../config/env.js,../core/io.js,./mcp-errors.js,node:fs,node:path e: listMcpResources,readRequestedMcpResource,uri,readMcpResource,latestPath,selected,latest,filePath,latestPointer,assertInsideRoot,relative,isInvalidResourceError,resource @@ -4166,6 +4316,81 @@ Example: service() result() envelopeInput() + src/diff/text.ts: + i: ./text-myers.js,./text-types.js + e: DEFAULT_CONTEXT,DEFAULT_MAX_COMPARE_LINES,splitLines,normalized,lines,diffText,diffLineArrays,context,maxCompareLines,beforePath,afterPath,summarizeLines,computeLineDiff,prefix,suffix,lines,middleBefore,middleAfter,truncated,middleOps,sharedPrefixLength,prefix,sharedSuffixLength,suffix,prefixLines,suffixLines,beforeIndex,afterIndex,buildHunks,changeIndexes,start,end,last,hunkFromRange,slice,beforeNumbers,afterNumbers + DEFAULT_CONTEXT() + DEFAULT_MAX_COMPARE_LINES() + splitLines() + normalized() + lines() + diffText() + diffLineArrays() + context() + maxCompareLines() + beforePath() + afterPath() + summarizeLines() + computeLineDiff() + prefix() + suffix() + lines() + middleBefore() + middleAfter() + truncated() + middleOps() + sharedPrefixLength() + prefix() + sharedSuffixLength() + suffix() + prefixLines() + suffixLines() + beforeIndex() + afterIndex() + buildHunks() + changeIndexes() + start() + end() + last() + hunkFromRange() + slice() + beforeNumbers() + afterNumbers() + src/diff/git.ts: + i: ./git-binary.js,./text.js,node:child_process,node:fs,node:path,node:util + e: GitDiffOptions,GitDiffResult,ChangedEntry,ResolvedGitDiffOptions,execFileAsync,collectGitDiff,normalized,worktree,args,selected,diffs,resolveGitDiffOptions,getWorktreeStatus,buildNameStatusArgs,capEntries,collectFileDiffs,diff,buildFileDiff,beforePath,before,after,diff,loadBeforeSnapshot,loadAfterSnapshot,parseNameStatus,parts,status,readBlob,readStagedBlob,readWorkingFile,runGit,result + GitDiffOptions: + GitDiffResult: + ChangedEntry: + ResolvedGitDiffOptions: + execFileAsync() + collectGitDiff() + normalized() + worktree() + args() + selected() + diffs() + resolveGitDiffOptions() + getWorktreeStatus() + buildNameStatusArgs() + capEntries() + collectFileDiffs() + diff() + buildFileDiff() + beforePath() + before() + after() + diff() + loadBeforeSnapshot() + loadAfterSnapshot() + parseNameStatus() + parts() + status() + readBlob() + readStagedBlob() + readWorkingFile() + runGit() + result() src/operations/artifact.ts: i: ../core/id.js,./subactor.js,./types.js,node:fs,node:path e: CompileOperationPlanArtifactOptions,OperationPlanCompilationReceipt,readJson,writeExclusive,target,directory,temporary,existing,compileOperationPlanArtifact,plan,bindings,envelope @@ -4243,6 +4468,16 @@ Example: ContentCacheOptions: ContentCacheEntryOptions: ContentCache: getOrCompute(-1),assertNamespace(-1),key(-1),filePath(-1),cached(-1),value(-1),snapshot(-1),envelope(-1),write(-1),directory(-1),temporaryPath(-1),assertNamespace(-1),isNodeError(-1) + src/web/diff-ui.ts: + i: ./diff-ui-script.js + e: diffUiStyles,diffUiRunPanel,diffUiFiltersPanel,diffUiBodyMarkup,diffUiScriptMarkup,diffUiTemplate,diffUiHtml + diffUiStyles() + diffUiRunPanel() + diffUiFiltersPanel() + diffUiBodyMarkup() + diffUiScriptMarkup() + diffUiTemplate() + diffUiHtml() src/synthesis/task-synthesis-materialize.ts: i: ../core/grounding.js,../core/id.js,../core/schema.js,../core/target.js,./task-synthesis-contract.js e: materializeTaskSynthesisResponse,parsed,conclusionKeys,proposalKeys,conclusions,diagnosticIds,conclusionIdByKey,conclusionByKey,proposalDrafts,conclusionKeys,citedConclusions,conclusion,proposalIdByKey,proposals,normalizeLocalKeys,explicit,reserved,keys,hasBlankKey,key,suffix,mapKeys,keys,id,sortedUnique,normalizeStringArray,values,normalizeRawTarget,target,normalizeAcceptanceCriteria,criteria,source,assertProposalEvidenceMatchesConclusions,byId,cited,diagnostics,records @@ -4342,6 +4577,26 @@ Example: readHistory() parsed() writeJson() + src/pipeline/run-summary.ts: + i: ../config/env.js,../config/env.js,../core/types.js,../core/types.js,../llm/audit.js,../summary/summarizer.js,../version.js + e: SummaryResult,collectSummary,summaryStartedAt,includeSummaryLlm,summary + SummaryResult: + collectSummary() + summaryStartedAt() + includeSummaryLlm() + summary() + examples/backend/src/server.ts: + i: ./request-handlers.js,./store.js,node:http + e: BackendOptions,createBackend,store,server,sendJson,body,startBackend,port,host + BackendOptions: + createBackend() + store() + server() + sendJson() + body() + startBackend() + port() + host() examples/frontend/src/render.ts: i: ./api.js e: PanelRow,classifyEvent,toRows,renderTable,table,head,body,tr,cell,renderError,banner,headerRow,tr,th @@ -4378,6 +4633,26 @@ Example: pathResolver() todo() changelog() + src/synthesis/code-change-plan/implementation-helpers-acceptance.ts: + i: ../../core/schema.js,../../graph/diagnostics.js + e: EvaluateCodeChangeAcceptanceOptions,AcceptanceContext,evaluateCodeChangeAcceptance,context,reasons,accepted,acceptance,buildAcceptanceContext,evaluatedAt,afterDiagnostics,beforeDiagnosticIds,afterById,targetedDiagnosticIds,buildAcceptanceReasons,isAcceptancePassed,appendAcceptanceGateReason,buildAcceptanceResult + EvaluateCodeChangeAcceptanceOptions: + AcceptanceContext: + evaluateCodeChangeAcceptance() + context() + reasons() + accepted() + acceptance() + buildAcceptanceContext() + evaluatedAt() + afterDiagnostics() + beforeDiagnosticIds() + afterById() + targetedDiagnosticIds() + buildAcceptanceReasons() + isAcceptancePassed() + appendAcceptanceGateReason() + buildAcceptanceResult() src/synthesis/code-change-plan/implementation-indexing.ts: i: ../../core/types.js e: indexProposalsByDiagnostic,index,list,indexConclusionsByDiagnostic,index,list @@ -4387,6 +4662,21 @@ Example: indexConclusionsByDiagnostic() index() list() + src/synthesis/code-change-plan/implementation-helpers-close.ts: + i: ../../core/schema.js,../../graph/diagnostics.js,./implementation-helpers-shared.js + e: CloseCodeChangesOptions,CloseCodeChangeContext,closeCodeChanges,context,acceptances,acceptedCount,buildCloseCodeChangeContext,evaluatedAt,afterDiagnostics,ensureClosePlanIdsAreUnique,planIds,buildCloseResult + CloseCodeChangesOptions: + CloseCodeChangeContext: + closeCodeChanges() + context() + acceptances() + acceptedCount() + buildCloseCodeChangeContext() + evaluatedAt() + afterDiagnostics() + ensureClosePlanIdsAreUnique() + planIds() + buildCloseResult() src/evaluation/gold-metrics.ts: i: ../core/id.js,./gold-types.js e: Counts,emptyCounts,addCounts,compareSets,actualCounts,expectedCounts,counts,actualCount,expectedCount,frequency,counts,metric,ratio @@ -4665,10 +4955,20 @@ Graph compar... RAW_CONCLUSION_CONTRACT() RAW_PROPOSAL_CONTRACT() TASK_SYNTHESIS_RESPONSE_CONTRACT() + src/synthesis/code-change-plan/implementation-helpers-shared.ts: + i: ../../core/id.js,../../core/types.js,../../version.js,./implementation-diagnostics.js + e: uniqueSorted,deterministicGeneration + uniqueSorted() + deterministicGeneration() src/llm/audit.ts: i: ../config/env.js,../core/types.js e: openRouterAuditConfiguration openRouterAuditConfiguration() + src/diff/git-binary.ts: + i: node:path + e: BINARY_EXTENSIONS,isProbablyBinary + BINARY_EXTENSIONS() + isProbablyBinary() src/operations/contract.ts: i: ../core/id.js,./validation.js e: variableContractSemanticValue,createVariableContract,normalized,normalizedPlanDraft,operationPlanHashMaterial,createOperationPlan,normalized,planHash @@ -4813,6 +5113,9 @@ Graph compar... SemanticRerankGenerationInput: src/synthesis/code-change-plan/index.ts: src/synthesis/code-change-plan/implementation.ts: + src/synthesis/code-change-plan/implementation-helpers.ts: + src/synthesis/code-change-plan/implementation-source-patch.ts: + src/synthesis/code-change-plan/implementation-source-patch-apply.ts: src/interfaces/governed-intake.proto: src/interfaces/intake-schemas/command-v1.schema.json: src/interfaces/intake-schemas/result-v1.schema.json: diff --git a/project/mermaid.export b/project/mermaid.export index efdfbc2..c4063d4 100644 --- a/project/mermaid.export +++ b/project/mermaid.export @@ -1,6 +1,24 @@ flowchart TD %% generated in 0.02s subgraph examples__backend + examples__backend__src__request_handlers__MAX_BODY_BYTES("MAX_BODY_BYTES CC=9") + examples__backend__src__request_handlers__handleRequest("handleRequest CC=9") + examples__backend__src__request_handlers__url["url"] + examples__backend__src__request_handlers__handleHealth["handleHealth"] + examples__backend__src__request_handlers__handleEventPublish["handleEventPublish"] + examples__backend__src__request_handlers__body["body"] + examples__backend__src__request_handlers__validation["validation"] + examples__backend__src__request_handlers__event["event"] + examples__backend__src__request_handlers__handleEventList["handleEventList"] + examples__backend__src__request_handlers__offset["offset"] + examples__backend__src__request_handlers__limit["limit"] + examples__backend__src__request_handlers__parseOffset["parseOffset"] + examples__backend__src__request_handlers__parsed["parsed"] + examples__backend__src__request_handlers__parseLimit["parseLimit"] + examples__backend__src__request_handlers__readBody["readBody"] + examples__backend__src__request_handlers__size["size"] + examples__backend__src__request_handlers__buffer["buffer"] + examples__backend__src__request_handlers__sendJson["sendJson"] examples__backend__src__validation__ALLOWED_ACTIONS("ALLOWED_ACTIONS CC=10") examples__backend__src__validation__validateEventPayload("validateEventPayload CC=10") examples__backend__src__validation__invalid["invalid"] @@ -12,21 +30,11 @@ flowchart TD examples__backend__src__store__EventStore__listEvents["listEvents"] examples__backend__src__store__EventStore__start["start"] examples__backend__src__store__EventStore__size["size"] - examples__backend__src__server__MAX_BODY_BYTES["MAX_BODY_BYTES"] examples__backend__src__server__createBackend["createBackend"] examples__backend__src__server__store["store"] examples__backend__src__server__server["server"] - examples__backend__src__server__handleRequest{{handleRequest CC=16}} - examples__backend__src__server__url["url"] - examples__backend__src__server__body["body"] - examples__backend__src__server__validation["validation"] - examples__backend__src__server__event["event"] - examples__backend__src__server__offset["offset"] - examples__backend__src__server__limit["limit"] - examples__backend__src__server__readBody["readBody"] - examples__backend__src__server__size["size"] - examples__backend__src__server__buffer["buffer"] examples__backend__src__server__sendJson["sendJson"] + examples__backend__src__server__body["body"] examples__backend__src__server__startBackend["startBackend"] examples__backend__src__server__port["port"] examples__backend__src__server__host["host"] @@ -707,20 +715,26 @@ flowchart TD src__communication__intake_contract__IntakeError__payloadHash["payloadHash"] src__communication__intake_contract__IntakeError__canonicalJson["canonicalJson"] src__communication__intake_contract__IntakeError__record["record"] - src__communication__intake_contract__IntakeError__assertIntakeEnvelope{{assertIntakeEnvelope CC=18}} + src__communication__intake_contract__IntakeError__assertIntakeEnvelope["assertIntakeEnvelope"] src__communication__intake_contract__IntakeError__envelope["envelope"] + src__communication__intake_contract__IntakeError__validateIntakeEnvelopeHeader("validateIntakeEnvelopeHeader CC=14") + src__communication__intake_contract__IntakeError__validateIntakeEnvelopeTimestamp["validateIntakeEnvelopeTimestamp"] + src__communication__intake_contract__IntakeError__assertCommand["assertCommand"] + src__communication__intake_contract__IntakeError__assertQuery["assertQuery"] src__communication__intake_contract__IntakeError__invalid["invalid"] - src__communication__intake_contract__IntakeError__assertCommand("assertCommand CC=12") src__communication__intake_contract__IntakeError__base["base"] - src__communication__intake_contract__IntakeError__participantId["participantId"] - src__communication__intake_contract__IntakeError__assertQuery("assertQuery CC=8") + src__communication__intake_contract__IntakeError__validateCommandPayload["validateCommandPayload"] src__communication__intake_contract__IntakeError__assertParticipant("assertParticipant CC=9") - src__communication__intake_contract__IntakeError__entry["entry"] - src__communication__intake_contract__IntakeError__nonBlank["nonBlank"] - src__communication__intake_contract__IntakeError__capabilities["capabilities"] + src__communication__intake_contract__IntakeError__participantId["participantId"] + src__communication__intake_contract__IntakeError__assertPrincipal["assertPrincipal"] + src__communication__intake_contract__IntakeError__role["role"] src__communication__intake_contract__IntakeError__stringArray["stringArray"] + src__communication__intake_contract__IntakeError__capabilities["capabilities"] + src__communication__intake_contract__IntakeError__ticketId["ticketId"] + src__communication__intake_contract__IntakeError__validateQueryPayload["validateQueryPayload"] + src__communication__intake_contract__IntakeError__nonBlank["nonBlank"] + src__communication__intake_contract__IntakeError__entry["entry"] src__communication__intake_contract__IntakeError__principalKey["principalKey"] - src__communication__intake_contract__IntakeError__assertPrincipal["assertPrincipal"] src__communication__intake_contract__IntakeError__principal["principal"] src__communication__intake_contract__IntakeError__commandFields["commandFields"] src__communication__intake_contract__IntakeError__type["type"] @@ -729,40 +743,34 @@ flowchart TD src__communication__intake_contract__IntakeError__allowed["allowed"] src__communication__intake_contract__IntakeError__extra["extra"] src__communication__intake_contract__IntakeError__missing["missing"] - src__communication__intake_contract__IntakeError__ticketId["ticketId"] - src__communication__intake_contract__IntakeError__role["role"] src__communication__intake_contract__IntakeError__diagnostic["diagnostic"] src__communication__intake_contract__IntakeError__known["known"] src__communication__intake_protobuf__encodeIntakeEnvelope["encodeIntakeEnvelope"] src__communication__intake_protobuf__operation["operation"] - src__communication__intake_protobuf__decodeIntakeEnvelope{{decodeIntakeEnvelope CC=16}} - src__communication__intake_protobuf__values("values CC=9") - src__communication__intake_protobuf__offset["offset"] - src__communication__intake_protobuf__fieldStart("fieldStart CC=8") - src__communication__intake_protobuf__number("number CC=8") - src__communication__intake_protobuf__wire("wire CC=8") - src__communication__intake_protobuf__raw["raw"] + src__communication__intake_protobuf__decodeIntakeEnvelope["decodeIntakeEnvelope"] + src__communication__intake_protobuf__parsed("parsed CC=10") + src__communication__intake_protobuf__values("values CC=13") + src__communication__intake_protobuf__unknownFields["unknownFields"] src__communication__intake_protobuf__payload["payload"] + src__communication__intake_protobuf__envelope["envelope"] src__communication__intake_protobuf__encodeIntakeResult["encodeIntakeResult"] - src__communication__intake_protobuf__decodeIntakeResult{{decodeIntakeResult CC=18}} - src__communication__intake_protobuf__strings["strings"] - src__communication__intake_protobuf__numbers["numbers"] + src__communication__intake_protobuf__decodeIntakeResult("decodeIntakeResult CC=12") + src__communication__intake_protobuf__strings("strings CC=13") + src__communication__intake_protobuf__numbers("numbers CC=13") + src__communication__intake_protobuf__decodeDelimitedFields("decodeDelimitedFields CC=13") + src__communication__intake_protobuf__offset("offset CC=13") + src__communication__intake_protobuf__fieldStart["fieldStart"] src__communication__intake_protobuf__field["field"] + src__communication__intake_protobuf__wire["wire"] + src__communication__intake_protobuf__raw["raw"] + src__communication__intake_protobuf__value["value"] + src__communication__intake_protobuf__parsePayloadJson["parsePayloadJson"] + src__communication__intake_protobuf__parseOptionalJson["parseOptionalJson"] + src__communication__intake_protobuf__buildIntakeEnvelope["buildIntakeEnvelope"] src__communication__intake_protobuf__bytesField["bytesField"] src__communication__intake_protobuf__data["data"] src__communication__intake_protobuf__varintField["varintField"] src__communication__intake_protobuf__writeVarint["writeVarint"] - src__communication__intake_protobuf__remaining["remaining"] - src__communication__intake_protobuf__readVarint["readVarint"] - src__communication__intake_protobuf__value["value"] - src__communication__intake_protobuf__byte["byte"] - src__communication__analyzer__analyzeCommunication{{analyzeCommunication CC=48}} - src__communication__analyzer__communication("communication CC=8") - src__communication__analyzer__evidenceByRecord("evidenceByRecord CC=8") - src__communication__analyzer__participants("participants CC=8") - src__communication__analyzer__participant["participant"] - src__communication__analyzer__values["values"] - src__communication__analyzer__left["left"] end subgraph src__comparison src__comparison__workspace__execFileAsync("execFileAsync CC=12") @@ -912,6 +920,8 @@ flowchart TD src__diff__svg__svgStyles["svgStyles"] src__diff__svg__svgDocument["svgDocument"] src__diff__svg__theme["theme"] + src__diff__git_binary__BINARY_EXTENSIONS["BINARY_EXTENSIONS"] + src__diff__git_binary__isProbablyBinary["isProbablyBinary"] src__diff__text__DEFAULT_CONTEXT["DEFAULT_CONTEXT"] src__diff__text__DEFAULT_MAX_COMPARE_LINES["DEFAULT_MAX_COMPARE_LINES"] src__diff__text__splitLines["splitLines"] @@ -937,20 +947,6 @@ flowchart TD src__diff__text__suffixLines["suffixLines"] src__diff__text__beforeIndex["beforeIndex"] src__diff__text__afterIndex["afterIndex"] - src__diff__text__blockReplace["blockReplace"] - src__diff__text__myers{{myers CC=19}} - src__diff__text__n{{n CC=15}} - src__diff__text__m{{m CC=15}} - src__diff__text__max{{max CC=15}} - src__diff__text__offset{{offset CC=15}} - src__diff__text__v["v"] - src__diff__text__y{{y CC=15}} - src__diff__text__backtrack{{backtrack CC=18}} - src__diff__text__x{{x CC=15}} - src__diff__text__k["k"] - src__diff__text__previousK["previousK"] - src__diff__text__previousX["previousX"] - src__diff__text__previousY["previousY"] src__diff__text__buildHunks["buildHunks"] src__diff__text__changeIndexes["changeIndexes"] src__diff__text__start["start"] @@ -960,11 +956,23 @@ flowchart TD src__diff__text__slice["slice"] src__diff__text__beforeNumbers["beforeNumbers"] src__diff__text__afterNumbers["afterNumbers"] - src__diff__reality__buildRealityView{{buildRealityView CC=26}} - src__diff__reality__components("components CC=9") - src__diff__reality__diagnosticsByRecord("diagnosticsByRecord CC=9") + src__diff__reality__buildRealityView["buildRealityView"] + src__diff__reality__components["components"] + src__diff__reality__diagnosticsByRecord["diagnosticsByRecord"] + src__diff__reality__rows["rows"] + src__diff__reality__buildRealityRows["buildRealityRows"] + src__diff__reality__buildRealityRow("buildRealityRow CC=9") src__diff__reality__codes["codes"] src__diff__reality__status["status"] + src__diff__reality__compareRealityRows["compareRealityRows"] + src__diff__reality__bySeverity["bySeverity"] + src__diff__reality__alignment["alignment"] + src__diff__reality__bySize["bySize"] + src__diff__reality__buildRealityTotals{{buildRealityTotals CC=15}} + src__diff__reality__declaredRecords["declaredRecords"] + src__diff__reality__observedRecords["observedRecords"] + src__diff__reality__aligned["aligned"] + src__diff__reality__declaredTopics["declaredTopics"] end subgraph src__evaluation src__evaluation__gold_extraction__runExtractionCase["runExtractionCase"] @@ -988,9 +996,15 @@ flowchart TD src__evaluation__gold_types__assertUniqueCaseIds["assertUniqueCaseIds"] src__evaluation__gold_types__assertExtractionCoverage["assertExtractionCoverage"] src__evaluation__gold_types__channels["channels"] - src__evaluation__gold_types__assertLinkingCohorts{{assertLinkingCohorts CC=32}} - src__evaluation__gold_types__labels{{labels CC=18}} - src__evaluation__gold_types__modules{{modules CC=18}} + src__evaluation__gold_types__assertLinkingCohorts["assertLinkingCohorts"] + src__evaluation__gold_types__assertGoldLinkingCohort["assertGoldLinkingCohort"] + src__evaluation__gold_types__assertRerankerFixture["assertRerankerFixture"] + src__evaluation__gold_types__assertRerankerModelIdentity["assertRerankerModelIdentity"] + src__evaluation__gold_types__assertRerankerDecisions["assertRerankerDecisions"] + src__evaluation__gold_types__decisions["decisions"] + src__evaluation__gold_types__recordLabels["recordLabels"] + src__evaluation__gold_types__seenModules["seenModules"] + src__evaluation__gold_types__assertRerankerDecision{{assertRerankerDecision CC=17}} src__evaluation__gold_cases__evaluateLinkingCase("evaluateLinkingCase CC=8") src__evaluation__gold_cases__idToLabel["idToLabel"] src__evaluation__gold_cases__graph["graph"] @@ -1000,33 +1014,27 @@ flowchart TD src__evaluation__gold_cases__byClass["byClass"] src__evaluation__gold_cases__forbidden["forbidden"] src__evaluation__gold_cases__forbiddenViolations["forbiddenViolations"] - src__evaluation__gold_cases__evaluateRerankingCase{{evaluateRerankingCase CC=17}} + src__evaluation__gold_cases__evaluateRerankingCase["evaluateRerankingCase"] + src__evaluation__gold_cases__reranker["reranker"] src__evaluation__gold_cases__declarationRecordId["declarationRecordId"] src__evaluation__gold_cases__candidates["candidates"] - src__evaluation__gold_cases__moduleRecordId["moduleRecordId"] - src__evaluation__gold_cases__candidateByModule["candidateByModule"] src__evaluation__gold_cases__decisions["decisions"] - src__evaluation__gold_cases__candidate["candidate"] src__evaluation__gold_cases__rerank["rerank"] + src__evaluation__gold_cases__buildRerankerCandidates["buildRerankerCandidates"] + src__evaluation__gold_cases__requestedCandidates["requestedCandidates"] + src__evaluation__gold_cases__buildRerankerDecisions["buildRerankerDecisions"] + src__evaluation__gold_cases__candidateByModule["candidateByModule"] + src__evaluation__gold_cases__moduleRecordId["moduleRecordId"] + src__evaluation__gold_cases__candidate["candidate"] + src__evaluation__gold_cases__buildRerankResult["buildRerankResult"] + src__evaluation__gold_cases__buildObservedRerankRelations["buildObservedRerankRelations"] src__evaluation__gold_cases__augmented["augmented"] - src__evaluation__gold_cases__classifyRelation["classifyRelation"] - src__evaluation__gold_cases__exact["exact"] - src__evaluation__gold_cases__evaluateDiagnosticsCase["evaluateDiagnosticsCase"] - src__evaluation__gold_cases__report["report"] - src__evaluation__gold_cases__evaluateDsl2TodoCase["evaluateDsl2TodoCase"] - src__evaluation__gold_cases__diagnostics["diagnostics"] - src__evaluation__gold_cases__diagnosticIds["diagnosticIds"] - src__evaluation__gold_cases__conclusion["conclusion"] - src__evaluation__gold_cases__proposals["proposals"] - src__evaluation__gold_cases__validation["validation"] - src__evaluation__gold_cases__duplicateIds["duplicateIds"] - src__evaluation__gold_cases__citations["citations"] - src__evaluation__gold_cases__buildConclusion["buildConclusion"] - src__evaluation__gold_cases__buildProposal["buildProposal"] - src__evaluation__gold_cases__recordIds["recordIds"] - src__evaluation__gold_cases__id["id"] - src__evaluation__gold_cases__countCitations["countCitations"] - src__evaluation__gold_cases__citationRequired["citationRequired"] + src__evaluation__gold_cases__countForbiddenRelations["countForbiddenRelations"] + src__evaluation__gold_cases__restricted["restricted"] + src__evaluation__gold_cases__buildRerankExpected["buildRerankExpected"] + src__evaluation__gold_cases__buildRerankSnapshot["buildRerankSnapshot"] + src__evaluation__gold_cases__countVerdictDecisions["countVerdictDecisions"] + src__evaluation__gold_cases__resolveRerankerFixture["resolveRerankerFixture"] end subgraph src__extractors src__extractors__nl__assertNlExtractionOptions("assertNlExtractionOptions CC=9") @@ -1163,20 +1171,6 @@ flowchart TD src__interfaces__a2a_message__parseSendConfiguration["parseSendConfiguration"] src__interfaces__a2a_message__validateOutputModes["validateOutputModes"] src__interfaces__a2a_message__supported["supported"] - src__interfaces__a2a_message__parseCommand{{parseCommand CC=63}} - src__interfaces__a2a_message__protobuf["protobuf"] - src__interfaces__a2a_message__bytes["bytes"] - src__interfaces__a2a_message__objectData["objectData"] - src__interfaces__a2a_message__text["text"] - src__interfaces__a2a_message__first["first"] - src__interfaces__a2a_message__commandFromData["commandFromData"] - src__interfaces__a2a_message__action["action"] - src__interfaces__a2a_message__nested["nested"] - src__interfaces__a2a_message__parseKeyValues["parseKeyValues"] - src__interfaces__a2a_message__key["key"] - src__interfaces__a2a_message__raw["raw"] - src__interfaces__a2a_message__stringValue["stringValue"] - src__interfaces__a2a_message__parseScalar["parseScalar"] src__interfaces__a2a_message__parseMessage("parseMessage CC=12") src__interfaces__a2a_message__messageId["messageId"] src__interfaces__a2a_message__contextId["contextId"] @@ -1190,29 +1184,43 @@ flowchart TD src__interfaces__a2a_message__content["content"] src__interfaces__a2a_message__qualifier["qualifier"] src__interfaces__a2a_message__ensureSupportedMessageContent["ensureSupportedMessageContent"] - src__interfaces__a2a_message__normalizeAction["normalizeAction"] - src__interfaces__a2a_message__normalized["normalized"] src__interfaces__a2a_message__cloneMessage["cloneMessage"] src__interfaces__a2a_message__clonePart("clonePart CC=8") src__interfaces__a2a_message__normalizeUserMessage["normalizeUserMessage"] + src__interfaces__a2a_message_command__parseCommand["parseCommand"] + src__interfaces__a2a_message_command__protobufCommand["protobufCommand"] + src__interfaces__a2a_message_command__objectCommand["objectCommand"] + src__interfaces__a2a_message_command__parseCommandFromProtobuf["parseCommandFromProtobuf"] + src__interfaces__a2a_message_command__protobuf["protobuf"] + src__interfaces__a2a_message_command__bytes["bytes"] + src__interfaces__a2a_message_command__parseCommandFromObject["parseCommandFromObject"] + src__interfaces__a2a_message_command__objectData["objectData"] + src__interfaces__a2a_message_command__parseCommandFromText["parseCommandFromText"] + src__interfaces__a2a_message_command__text["text"] + src__interfaces__a2a_message_command__looksLikeJson{{looksLikeJson CC=20}} + src__interfaces__a2a_message_command__parseCommandFromJson["parseCommandFromJson"] + src__interfaces__a2a_message_command__parseCommandFromSentence["parseCommandFromSentence"] + src__interfaces__a2a_message_command__parseSentenceInput["parseSentenceInput"] + src__interfaces__a2a_message_command__defaultTextCommand["defaultTextCommand"] + src__interfaces__a2a_message_command__isSupportedAction["isSupportedAction"] + src__interfaces__a2a_message_command__commandInputFromSentence["commandInputFromSentence"] + src__interfaces__a2a_message_command__first["first"] + src__interfaces__a2a_message_command__parseText["parseText"] + src__interfaces__a2a_message_command__firstToken["firstToken"] + src__interfaces__a2a_message_command__commandFromData["commandFromData"] + src__interfaces__a2a_message_command__action["action"] + src__interfaces__a2a_message_command__nested["nested"] + src__interfaces__a2a_message_command__parseKeyValues["parseKeyValues"] + src__interfaces__a2a_message_command__key["key"] + src__interfaces__a2a_message_command__raw["raw"] + src__interfaces__a2a_message_command__stringValue["stringValue"] + src__interfaces__a2a_message_command__parseScalar["parseScalar"] + src__interfaces__a2a_message_command__normalizeAction["normalizeAction"] + src__interfaces__a2a_message_command__normalized["normalized"] src__interfaces__mcp_errors__McpRequestError__super["super"] src__interfaces__mcp_errors__McpRequestError__normalizeMcpError["normalizeMcpError"] - src__interfaces__mcp__DISCOVERY_TTL_MS["DISCOVERY_TTL_MS"] - src__interfaces__mcp__LIST_TTL_MS["LIST_TTL_MS"] - src__interfaces__mcp__RESOURCE_TTL_MS["RESOURCE_TTL_MS"] - src__interfaces__mcp__createMcpConnectionState["createMcpConnectionState"] - src__interfaces__mcp__startMcpServer("startMcpServer CC=8") - src__interfaces__mcp__resolvedConfig["resolvedConfig"] - src__interfaces__mcp__state["state"] - src__interfaces__mcp__input["input"] - src__interfaces__mcp__parsed["parsed"] - src__interfaces__mcp__request["request"] - src__interfaces__mcp__result["result"] - src__interfaces__mcp__handleMcpRequest["handleMcpRequest"] - src__interfaces__mcp__initializeLegacy["initializeLegacy"] - src__interfaces__mcp__params["params"] - src__interfaces__mcp__requested["requested"] - src__interfaces__mcp__protocolVersion["protocolVersion"] + src__interfaces__a2a_run_list_item__runListItem["runListItem"] + src__interfaces__a2a_run_list_item__files["files"] end subgraph src__live src__live__contract_check__LIVE_HISTORY_LIMIT["LIVE_HISTORY_LIMIT"] @@ -1280,8 +1288,8 @@ flowchart TD src__llm__openrouter__OpenRouterModelError__super["super"] src__llm__openrouter__OpenRouterClient__isConfigured["isConfigured"] src__llm__openrouter__OpenRouterClient__listAvailableModels("listAvailableModels CC=13") - src__llm__openrouter__OpenRouterClient__controller["controller"] - src__llm__openrouter__OpenRouterClient__timeout{{timeout CC=26}} + src__llm__openrouter__OpenRouterClient__controller("controller CC=13") + src__llm__openrouter__OpenRouterClient__timeout("timeout CC=13") src__llm__openrouter__OpenRouterClient__response["response"] src__llm__openrouter__OpenRouterClient__text["text"] src__llm__openrouter__OpenRouterClient__clearTimeout["clearTimeout"] @@ -1292,22 +1300,13 @@ flowchart TD src__llm__openrouter__OpenRouterClient__result["result"] src__llm__openrouter__OpenRouterClient__chatJsonWithMetadata("chatJsonWithMetadata CC=10") src__llm__openrouter__OpenRouterClient__fallback["fallback"] - src__llm__openrouter__OpenRouterClient__request{{request CC=31}} - src__llm__openrouter__OpenRouterClient__apiKey["apiKey"] - src__llm__openrouter__OpenRouterClient__externalSignal["externalSignal"] - src__llm__openrouter__OpenRouterClient__abortFromExternal["abortFromExternal"] - src__llm__openrouter__OpenRouterClient__message["message"] - src__llm__openrouter__OpenRouterClient__error["error"] - src__llm__openrouter__OpenRouterClient__model["model"] - src__llm__openrouter__OpenRouterClient__availableModels["availableModels"] - src__llm__openrouter__OpenRouterClient__formatInvalidModelError["formatInvalidModelError"] + src__llm__openrouter__OpenRouterClient__request["request"] src__llm__openrouter__OpenRouterClient__responseMetadata["responseMetadata"] src__llm__openrouter__OpenRouterClient__usage["usage"] src__llm__openrouter__OpenRouterClient__stringOrNull["stringOrNull"] src__llm__openrouter__OpenRouterClient__finiteOrNull["finiteOrNull"] - src__llm__openrouter__OpenRouterClient__shouldRetryWithoutJsonSchema["shouldRetryWithoutJsonSchema"] - src__llm__openrouter__OpenRouterClient__isInvalidModelError["isInvalidModelError"] - src__llm__openrouter__OpenRouterClient__removeUndefined["removeUndefined"] + src__llm__openrouter__OpenRouterClient__createModelError["createModelError"] + src__llm__openrouter__OpenRouterClient__formatInvalidModelError["formatInvalidModelError"] src__llm__openrouter__OpenRouterClient__extractContent["extractContent"] src__llm__openrouter__OpenRouterClient__parseJsonContent["parseJsonContent"] src__llm__openrouter__OpenRouterClient__trimmed["trimmed"] @@ -1315,28 +1314,37 @@ flowchart TD src__llm__openrouter__OpenRouterClient__end["end"] src__llm__openrouter__OpenRouterClient__parseJsonResponse["parseJsonResponse"] src__llm__openrouter__OpenRouterClient__metadata["metadata"] - src__llm__openrouter__OpenRouterClient__sleep["sleep"] + src__llm__openrouter__OpenRouterClient__message["message"] + src__llm__openrouter__OpenRouterClient__shouldRetryWithoutJsonSchema["shouldRetryWithoutJsonSchema"] src__llm__failure__classifyLlmFailure["classifyLlmFailure"] src__llm__failure__message["message"] src__llm__failure__rejectedLlmResponseMetadata["rejectedLlmResponseMetadata"] src__llm__audit__openRouterAuditConfiguration["openRouterAuditConfiguration"] - src__llm__structured_schema__StructuredResponseError__super["super"] - src__llm__structured_schema__StructuredResponseError__schema["schema"] - src__llm__structured_schema__StructuredResponseError__parse["parse"] - src__llm__structured_schema__StructuredResponseError__string("string CC=10") - src__llm__structured_schema__StructuredResponseError__pattern["pattern"] - src__llm__structured_schema__StructuredResponseError__fail["fail"] - src__llm__structured_schema__StructuredResponseError__nullableString["nullableString"] - src__llm__structured_schema__StructuredResponseError__base["base"] - src__llm__structured_schema__StructuredResponseError__number["number"] - src__llm__structured_schema__StructuredResponseError__checkNumberBounds["checkNumberBounds"] - src__llm__structured_schema__StructuredResponseError__integer["integer"] - src__llm__structured_schema__StructuredResponseError__numeric["numeric"] - src__llm__structured_schema__StructuredResponseError__parsed["parsed"] - src__llm__structured_schema__StructuredResponseError__enumValue["enumValue"] - src__llm__structured_schema__StructuredResponseError__allowed["allowed"] - src__llm__structured_schema__StructuredResponseError__array("array CC=9") - src__llm__structured_schema__StructuredResponseError__identities["identities"] + src__llm__openrouter_request__requestOpenRouter["requestOpenRouter"] + src__llm__openrouter_request__controller["controller"] + src__llm__openrouter_request__detachAbort["detachAbort"] + src__llm__openrouter_request__timeout["timeout"] + src__llm__openrouter_request__response["response"] + src__llm__openrouter_request__parsed["parsed"] + src__llm__openrouter_request__resolution["resolution"] + src__llm__openrouter_request__ensureApiKeyConfigured["ensureApiKeyConfigured"] + src__llm__openrouter_request__connectAbortSignal["connectAbortSignal"] + src__llm__openrouter_request__abortFromExternal["abortFromExternal"] + src__llm__openrouter_request__sendRequest["sendRequest"] + src__llm__openrouter_request__resolveHttpResponse("resolveHttpResponse CC=8") + src__llm__openrouter_request__message["message"] + src__llm__openrouter_request__error["error"] + src__llm__openrouter_request__createModelErrorResponse["createModelErrorResponse"] + src__llm__openrouter_request__model["model"] + src__llm__openrouter_request__availableModels["availableModels"] + src__llm__openrouter_request__listErrorMessage["listErrorMessage"] + src__llm__openrouter_request__resolveTransportError("resolveTransportError CC=9") + src__llm__openrouter_request__retryDelay["retryDelay"] + src__llm__openrouter_request__buildRequestHeaders["buildRequestHeaders"] + src__llm__openrouter_request__shouldRetryWithoutJsonSchema["shouldRetryWithoutJsonSchema"] + src__llm__openrouter_request__shouldRetryRequestWithoutSchema["shouldRetryRequestWithoutSchema"] + src__llm__openrouter_request__isRetryableServerError["isRetryableServerError"] + src__llm__openrouter_request__isTransientNetworkError["isTransientNetworkError"] end subgraph src__operations src__operations__artifact__readJson["readJson"] @@ -1371,12 +1379,20 @@ flowchart TD src__operations__validation__assertPrincipalList["assertPrincipalList"] src__operations__validation__principals["principals"] src__operations__validation__isJsonValue["isJsonValue"] - src__operations__validation__assertVariableContract{{assertVariableContract CC=20}} + src__operations__validation__assertVariableContract["assertVariableContract"] src__operations__validation__contract["contract"] src__operations__validation__source["source"] src__operations__validation__access["access"] src__operations__validation__readers["readers"] src__operations__validation__writers["writers"] + src__operations__validation__expectedId["expectedId"] + src__operations__validation__assertVariableContractShape["assertVariableContractShape"] + src__operations__validation__assertVariableContractCore("assertVariableContractCore CC=8") + src__operations__validation__assertVariableSource["assertVariableSource"] + src__operations__validation__assertVariableAccess["assertVariableAccess"] + src__operations__validation__assertVariableAuthoritativeness["assertVariableAuthoritativeness"] + src__operations__validation__assertVariableMutability["assertVariableMutability"] + src__operations__validation__buildVariableContractId["buildVariableContractId"] src__operations__validation__assertGeneration{{assertGeneration CC=16}} src__operations__validation__generation["generation"] src__operations__validation__assertAcyclic("assertAcyclic CC=8") @@ -1385,82 +1401,74 @@ flowchart TD src__operations__validation__visited["visited"] src__operations__validation__byId["byId"] src__operations__validation__visit["visit"] - src__operations__validation__assertOperationPlan{{assertOperationPlan CC=84}} + src__operations__validation__assertOperationPlan["assertOperationPlan"] src__operations__validation__plan["plan"] - src__operations__validation__evidence["evidence"] - src__operations__validation__variables{{variables CC=44}} - src__operations__validation__variableById{{variableById CC=44}} - src__operations__validation__steps{{steps CC=44}} - src__operations__validation__stepIds{{stepIds CC=44}} - src__operations__validation__founderDecisionRequired{{founderDecisionRequired CC=44}} - src__operations__validation__step["step"] - src__operations__validation__parameters["parameters"] - src__operations__validation__reference["reference"] - src__operations__validation__variable["variable"] - src__operations__validation__rollback["rollback"] - src__operations__validation__coveredSteps("coveredSteps CC=8") + src__operations__validation__variables["variables"] + src__operations__validation__variableById["variableById"] + src__operations__validation__validateOperationPlanShape["validateOperationPlanShape"] + src__operations__validation__validateOperationPlanMetadata("validateOperationPlanMetadata CC=9") end subgraph src__pipeline - src__pipeline__run__runPipeline{{runPipeline CC=56}} + src__pipeline__run_helpers__collectCommunicationAnalysis("collectCommunicationAnalysis CC=11") + src__pipeline__run_helpers__includeCommunication["includeCommunication"] + src__pipeline__run_helpers__communicationStartedAt["communicationStartedAt"] + src__pipeline__run_helpers__missingDirectory["missingDirectory"] + src__pipeline__run_helpers__communication["communication"] + src__pipeline__run_helpers__foundMissingDirectory["foundMissingDirectory"] + src__pipeline__run_helpers__collectTaskSynthesis["collectTaskSynthesis"] + src__pipeline__run_helpers__taskSynthesisMode["taskSynthesisMode"] + src__pipeline__run_helpers__taskSynthesisAudit["taskSynthesisAudit"] + src__pipeline__run_helpers__todoContent["todoContent"] + src__pipeline__run_helpers__createCodeChangeArtifacts["createCodeChangeArtifacts"] + src__pipeline__run_helpers__codeChangePlans["codeChangePlans"] + src__pipeline__run_helpers__codeChangeReview["codeChangeReview"] + src__pipeline__run_helpers__codeChangeSourcePatches["codeChangeSourcePatches"] + src__pipeline__run_helpers__collectTargetHints["collectTargetHints"] + src__pipeline__run_helpers__values["values"] + src__pipeline__run_helpers__appendLlmNotConfigured["appendLlmNotConfigured"] + src__pipeline__run_helpers__skippedAudit["skippedAudit"] + src__pipeline__run_persistence__makePipelineManifest["makePipelineManifest"] + src__pipeline__run_persistence__persistPipelineArtifacts{{persistPipelineArtifacts CC=17}} + src__pipeline__run_persistence__filePath["filePath"] + src__pipeline__run_persistence__graphPath["graphPath"] + src__pipeline__run_persistence__diagnosticsPath["diagnosticsPath"] + src__pipeline__run_persistence__summaryPath["summaryPath"] + src__pipeline__run_persistence__summaryConclusionsPath["summaryConclusionsPath"] + src__pipeline__run_persistence__taskSynthesisPath["taskSynthesisPath"] + src__pipeline__run_persistence__todoValidationPath["todoValidationPath"] + src__pipeline__run_persistence__todoPatchPath["todoPatchPath"] + src__pipeline__run_persistence__todoPatchAuditPath["todoPatchAuditPath"] + src__pipeline__run_persistence__codeChangePlansPath["codeChangePlansPath"] + src__pipeline__run_persistence__codeChangeReviewPath["codeChangeReviewPath"] + src__pipeline__run_persistence__codeChangeReviewAuditPath["codeChangeReviewAuditPath"] + src__pipeline__run_persistence__codeChangeSourcePatchesPath["codeChangeSourcePatchesPath"] + src__pipeline__run_persistence__communicationAnalysisPath["communicationAnalysisPath"] + src__pipeline__run_persistence__communicationMarkdownPath["communicationMarkdownPath"] + src__pipeline__run_persistence__persistFailedRun["persistFailedRun"] + src__pipeline__run_persistence__manifestConfiguration("manifestConfiguration CC=8") + src__pipeline__run_persistence__persistFailedRunState{{persistFailedRunState CC=19}} + src__pipeline__run_persistence__aborted["aborted"] + src__pipeline__run_persistence__message("message CC=9") + src__pipeline__run_persistence__knownAudit("knownAudit CC=9") + src__pipeline__run_persistence__failedAudit("failedAudit CC=9") + src__pipeline__run_persistence__stageValue["stageValue"] + src__pipeline__run_persistence__reason["reason"] + src__pipeline__run_persistence__skippedAudit["skippedAudit"] + src__pipeline__run_persistence__failureCode["failureCode"] + src__pipeline__run_summary__collectSummary["collectSummary"] + src__pipeline__run_summary__summaryStartedAt["summaryStartedAt"] + src__pipeline__run_summary__includeSummaryLlm["includeSummaryLlm"] + src__pipeline__run_summary__summary["summary"] + src__pipeline__run__runPipeline["runPipeline"] + src__pipeline__run__context["context"] + src__pipeline__run__execution["execution"] + src__pipeline__run__persisted["persisted"] + src__pipeline__run__manifest["manifest"] + src__pipeline__run__manifestPath["manifestPath"] + src__pipeline__run__initializePipelineContext["initializePipelineContext"] src__pipeline__run__root["root"] src__pipeline__run__runId["runId"] src__pipeline__run__baseOutput["baseOutput"] - src__pipeline__run__runDirectory["runDirectory"] - src__pipeline__run__naturalLanguageAudit["naturalLanguageAudit"] - src__pipeline__run__result["result"] - src__pipeline__run__git["git"] - src__pipeline__run__ast["ast"] - src__pipeline__run__markdown["markdown"] - src__pipeline__run__deterministicDocumentFiles["deterministicDocumentFiles"] - src__pipeline__run__documentationStartedAt["documentationStartedAt"] - src__pipeline__run__deterministicDocs["deterministicDocs"] - src__pipeline__run__docs["docs"] - src__pipeline__run__configurationExtraction["configurationExtraction"] - src__pipeline__run__runtime["runtime"] - src__pipeline__run__includeCommunication("includeCommunication CC=10") - src__pipeline__run__communicationStartedAt("communicationStartedAt CC=10") - src__pipeline__run__communicationAudit("communicationAudit CC=10") - src__pipeline__run__communicationInputPresent("communicationInputPresent CC=10") - src__pipeline__run__communication["communication"] - src__pipeline__run__missingDirectory["missingDirectory"] - src__pipeline__run__allRecords["allRecords"] - src__pipeline__run__generatedAt["generatedAt"] - src__pipeline__run__graph["graph"] - src__pipeline__run__communicationAnalysis["communicationAnalysis"] - src__pipeline__run__diagnostics["diagnostics"] - src__pipeline__run__taskSynthesisMode["taskSynthesisMode"] - src__pipeline__run__taskSynthesisAudit["taskSynthesisAudit"] - src__pipeline__run__todoContent["todoContent"] - src__pipeline__run__codeChangePlans["codeChangePlans"] - src__pipeline__run__codeChangeReview["codeChangeReview"] - src__pipeline__run__codeChangeSourcePatches["codeChangeSourcePatches"] - src__pipeline__run__summaryStartedAt["summaryStartedAt"] - src__pipeline__run__includeSummaryLlm["includeSummaryLlm"] - src__pipeline__run__summary["summary"] - src__pipeline__run__filePath["filePath"] - src__pipeline__run__graphPath["graphPath"] - src__pipeline__run__diagnosticsPath["diagnosticsPath"] - src__pipeline__run__summaryPath["summaryPath"] - src__pipeline__run__summaryConclusionsPath["summaryConclusionsPath"] - src__pipeline__run__taskSynthesisPath["taskSynthesisPath"] - src__pipeline__run__todoValidationPath["todoValidationPath"] - src__pipeline__run__todoPatchPath["todoPatchPath"] - src__pipeline__run__todoPatchAuditPath["todoPatchAuditPath"] - src__pipeline__run__codeChangePlansPath["codeChangePlansPath"] - src__pipeline__run__codeChangeReviewPath["codeChangeReviewPath"] - src__pipeline__run__codeChangeReviewAuditPath["codeChangeReviewAuditPath"] - src__pipeline__run__codeChangeSourcePatchesPath["codeChangeSourcePatchesPath"] - src__pipeline__run__communicationAnalysisPath["communicationAnalysisPath"] - src__pipeline__run__communicationMarkdownPath["communicationMarkdownPath"] - src__pipeline__run__configuration["configuration"] - src__pipeline__run__manifestConfiguration("manifestConfiguration CC=8") - src__pipeline__run__collectTargetHints["collectTargetHints"] - src__pipeline__run__values["values"] - src__pipeline__run__persistFailedRun{{persistFailedRun CC=19}} - src__pipeline__run__aborted["aborted"] - src__pipeline__run__message("message CC=9") - src__pipeline__run__knownAudit("knownAudit CC=9") - src__pipeline__run__failedAudit("failedAudit CC=9") end subgraph src__sdk src__sdk__typescript__Todo2CodeClient__a2a["a2a"] @@ -1763,46 +1771,51 @@ flowchart TD src__watch__watcher__describeDelta["describeDelta"] src__watch__watcher__shown["shown"] src__watch__watcher__rest["rest"] - src__watch__watcher__DEFAULT_MIN_INTERVAL_MS{{DEFAULT_MIN_INTERVAL_MS CC=19}} - src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS{{DEFAULT_SCAN_INTERVAL_MS CC=19}} - src__watch__watcher__watchRepository{{watchRepository CC=19}} + src__watch__watcher__DEFAULT_MIN_INTERVAL_MS["DEFAULT_MIN_INTERVAL_MS"] + src__watch__watcher__DEFAULT_SCAN_INTERVAL_MS["DEFAULT_SCAN_INTERVAL_MS"] + src__watch__watcher__watchRepository["watchRepository"] + src__watch__watcher__configuration["configuration"] + src__watch__watcher__runtime["runtime"] + src__watch__watcher__defaultSleep["defaultSleep"] + src__watch__watcher__timer["timer"] + src__watch__watcher__onAbort["onAbort"] + src__watch__watcher__finish["finish"] + src__watch__watcher__createWatchConfiguration("createWatchConfiguration CC=9") src__watch__watcher__root["root"] src__watch__watcher__minIntervalMs["minIntervalMs"] src__watch__watcher__scanIntervalMs["scanIntervalMs"] src__watch__watcher__emit["emit"] src__watch__watcher__now["now"] src__watch__watcher__sleep["sleep"] - src__watch__watcher__signal["signal"] src__watch__watcher__matcher["matcher"] src__watch__watcher__runReport["runReport"] src__watch__watcher__result["result"] - src__watch__watcher__snapshot["snapshot"] - src__watch__watcher__lastReportStartedAt["lastReportStartedAt"] - src__watch__watcher__pending["pending"] + src__watch__watcher__createWatchRuntime["createWatchRuntime"] + src__watch__watcher__initialSnapshot["initialSnapshot"] + src__watch__watcher__scanTreeCurrent["scanTreeCurrent"] + src__watch__watcher__evaluateChangeCycle["evaluateChangeCycle"] src__watch__watcher__current["current"] src__watch__watcher__delta["delta"] + src__watch__watcher__handleDelta["handleDelta"] + src__watch__watcher__maybeGenerateReport["maybeGenerateReport"] src__watch__watcher__waitMs["waitMs"] - src__watch__watcher__generate["generate"] + src__watch__watcher__generateReportForReason["generateReportForReason"] src__watch__watcher__startedAt["startedAt"] - src__watch__watcher__defaultSleep["defaultSleep"] - src__watch__watcher__timer["timer"] - src__watch__watcher__onAbort["onAbort"] - src__watch__watcher__finish["finish"] end subgraph src__web + src__web__diff_ui_script__byId["byId"] + src__web__diff_ui_script__requestHeaders["requestHeaders"] + src__web__diff_ui_script__formatBytes["formatBytes"] + src__web__diff_ui_script__selectedRun["selectedRun"] + src__web__diff_ui_script__updateMeta["updateMeta"] + src__web__diff_ui_script__fillSelect["fillSelect"] + src__web__diff_ui_script__loadRuns("loadRuns CC=12") + src__web__diff_ui_script__compareGraphs{{compareGraphs CC=15}} src__web__diff_ui__diffUiStyles["diffUiStyles"] src__web__diff_ui__diffUiRunPanel["diffUiRunPanel"] src__web__diff_ui__diffUiFiltersPanel["diffUiFiltersPanel"] src__web__diff_ui__diffUiBodyMarkup["diffUiBodyMarkup"] - src__web__diff_ui__diffUiScriptMarkup{{diffUiScriptMarkup CC=46}} - src__web__diff_ui__byId["byId"] - src__web__diff_ui__requestHeaders["requestHeaders"] - src__web__diff_ui__formatBytes["formatBytes"] - src__web__diff_ui__selectedRun["selectedRun"] - src__web__diff_ui__updateMeta["updateMeta"] - src__web__diff_ui__fillSelect["fillSelect"] - src__web__diff_ui__loadRuns("loadRuns CC=12") - src__web__diff_ui__compareGraphs{{compareGraphs CC=15}} + src__web__diff_ui__diffUiScriptMarkup["diffUiScriptMarkup"] src__web__diff_ui__diffUiTemplate["diffUiTemplate"] src__web__diff_ui__diffUiHtml["diffUiHtml"] end @@ -1833,25 +1846,32 @@ flowchart TD rust_ast__src__main__type_item --> rust_ast__src__main__qualified rust_ast__src__main__type_item --> rust_ast__src__main__add rust_ast__src__main__type_item --> rust_ast__src__main__modifiers + examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleHealth + examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventPublish + examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventList + examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleHealth + examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventPublish + examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventList + examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__size + examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__readBody + examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__validation --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__event --> examples__backend__src__request_handlers__sendJson + examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseOffset + examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseLimit + examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__sendJson examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid examples__backend__src__validation__record --> examples__backend__src__validation__invalid examples__backend__src__validation__agent --> examples__backend__src__validation__invalid examples__backend__src__validation__action --> examples__backend__src__validation__invalid examples__backend__src__validation__object --> examples__backend__src__validation__invalid - examples__backend__src__server__createBackend --> examples__backend__src__server__handleRequest examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson - examples__backend__src__server__store --> examples__backend__src__server__handleRequest examples__backend__src__server__store --> examples__backend__src__server__sendJson - examples__backend__src__server__server --> examples__backend__src__server__handleRequest examples__backend__src__server__server --> examples__backend__src__server__sendJson - examples__backend__src__server__handleRequest --> examples__backend__src__server__sendJson - examples__backend__src__server__handleRequest --> examples__backend__src__server__size - examples__backend__src__server__handleRequest --> examples__backend__src__server__readBody - examples__backend__src__server__validation --> examples__backend__src__server__sendJson - examples__backend__src__server__event --> examples__backend__src__server__sendJson - examples__backend__src__server__offset --> examples__backend__src__server__sendJson - examples__backend__src__server__limit --> examples__backend__src__server__sendJson examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow @@ -2309,16 +2329,19 @@ flowchart TD src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject - src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject - src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality + src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction + src__extractors__nl_llm_helpers__NlAttemptError__resolveModality --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText + src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings + src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync @@ -2396,18 +2419,8 @@ flowchart TD src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectAstCandidates src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__sortCandidates src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectNlResolutions - src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__uniqueSymbols - src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__buildAstCandidate - src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__isAstDeclaration - src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__uniqueSymbols - src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__buildAstCandidate - src__graph__symbol_resolution__sortCandidates --> src__graph__symbol_resolution__values - src__graph__symbol_resolution__collectNlResolutions --> src__graph__symbol_resolution__resolveSymbol - src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol - src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration classDef highCC fill:#ff6b6b,stroke:#c92a2a,color:#fff classDef medCC fill:#ffd43b,stroke:#f08c00,color:#000 - class examples__backend__src__server__handleRequest,src__core__record__generationMetadata,src__web__diff_ui__diffUiScriptMarkup,src__web__diff_ui__compareGraphs,src__llm__openrouter__OpenRouterClient__timeout,src__llm__openrouter__OpenRouterClient__request,src__interfaces__a2a_message__parseCommand,src__interfaces__a2a_history__runListItem,src__diff__text__myers,src__diff__text__n,src__diff__text__m,src__diff__text__max,src__diff__text__offset,src__diff__text__y,src__diff__text__backtrack,src__diff__text__x,src__diff__reality__buildRealityView,src__diff__reality__resolveStatus,src__diff__reality__renderRealitySvg,src__diff__git__BINARY_EXTENSIONS,src__diff__git__collectGitDiff,src__pipeline__run__runPipeline,src__pipeline__run__persistFailedRun,src__evaluation__gold_types__assertLinkingCohorts,src__evaluation__gold_types__labels,src__evaluation__gold_types__modules,src__evaluation__gold_cases__evaluateRerankingCase,src__evaluation__gold_cases__buildFixtureRecords,src__evaluation__gold_cases__labels,src__evaluation__gold_cases__records highCC - class rust_ast__src__main__collect_files,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__cli__main,src__cli__handleRenderTodo,src__cli__handleApplyTodo,src__cli__options,src__cli__formatWatchEvent,src__cli__stamp,src__cli__handleDiff,src__cli__handleReality,src__cli__handleCommunication,src__cli__handleIntake,src__cli__intakeExitCode,src__cli__parseArgs,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk,src__extractors__changelog__extractChangelog,src__extractors__changelog__changelogAction medCC + class src__core__record_metadata__generationMetadata,src__web__diff_ui_script__compareGraphs,src__interfaces__a2a_message_command__looksLikeJson,src__diff__reality__buildRealityTotals,src__pipeline__run_persistence__persistPipelineArtifacts,src__pipeline__run_persistence__persistFailedRunState,src__evaluation__gold_types__assertRerankerDecision,src__operations__validation__assertGeneration,src__operations__validation__validateOperationStep,src__communication__analyzer__collectAgentActionIssues,php__ast_extract__parseFile,scripts__verify_env_contract__makefile,scripts__verify_no_llm_imports__visited,scripts__verify_no_llm_imports__visit,scripts__research__rank_intent_graph_embeddings__main,python__ast_extract__iter_python_files,sdk__go__examples__basic__main__run,sdk__typescript__examples__basic__baseUrl,sdk__typescript__examples__basic__token,sdk__typescript__examples__basic__root,sdk__typescript__examples__basic__main,sdk__rust__examples__basic__run,sdk__rust__src__client__parse_http_response,src__pipeline__run__executePipeline highCC + class rust_ast__src__main__collect_files,examples__backend__src__request_handlers__MAX_BODY_BYTES,examples__backend__src__request_handlers__handleRequest,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__cli__main,src__cli__handleRenderTodo,src__cli__handleApplyTodo,src__cli__options,src__cli__formatWatchEvent,src__cli__stamp,src__cli__handleDiff,src__cli__handleReality,src__cli__handleCommunication,src__cli__handleIntake,src__cli__intakeExitCode,src__cli__parseArgs,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk medCC diff --git a/project/planfile-tickets.yaml b/project/planfile-tickets.yaml index bb5f2ff..99e4e15 100644 --- a/project/planfile-tickets.yaml +++ b/project/planfile-tickets.yaml @@ -1,5 +1,5 @@ source: code2llm -# generated in 0.18s +# generated in 0.13s schema: code2llm.planfile_tickets.v1 project_root: /home/tom/github/semcod/todo2code tickets: @@ -73,340 +73,10 @@ tickets: files: - sdk/go/examples/basic/main.go dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.communication.analyzer.analyzeCommunication - (CC=48)' - description: 'code2llm reports `src.communication.analyzer.analyzeCommunication` - at `src/communication/analyzer.ts:56` with cyclomatic complexity 48 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/communication/analyzer.ts - dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.analyzeCommunication -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.communication.identity.assertParticipantIdentityRegistry - (CC=30)' - description: 'code2llm reports `src.communication.identity.assertParticipantIdentityRegistry` - at `src/communication/identity.ts:97` with cyclomatic complexity 30 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/communication/identity.ts - dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.assertParticipantIdentityRegistry -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.communication.identity.external (CC=25)' - description: 'code2llm reports `src.communication.identity.external` at `src/communication/identity.ts:104` - with cyclomatic complexity 25 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/communication/identity.ts - dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.external -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.communication.identity.ids (CC=25)' - description: 'code2llm reports `src.communication.identity.ids` at `src/communication/identity.ts:103` - with cyclomatic complexity 25 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/communication/identity.ts - dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.ids -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.communication.identity.registry (CC=25)' - description: 'code2llm reports `src.communication.identity.registry` at `src/communication/identity.ts:99` - with cyclomatic complexity 25 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/communication/identity.ts - dedupe_key: code2llm:cc:src/communication/identity.ts:src.communication.identity.registry -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityView (CC=26)' - description: 'code2llm reports `src.diff.reality.buildRealityView` at `src/diff/reality.ts:153` - with cyclomatic complexity 26 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/diff/reality.ts - dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityView -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertLinkingCohorts - (CC=32)' - description: 'code2llm reports `src.evaluation.gold-types.assertLinkingCohorts` - at `src/evaluation/gold-types.ts:341` with cyclomatic complexity 32 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/evaluation/gold-types.ts - dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertLinkingCohorts -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message.parseCommand (CC=63)' - description: 'code2llm reports `src.interfaces.a2a-message.parseCommand` at `src/interfaces/a2a-message.ts:42` - with cyclomatic complexity 63 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/interfaces/a2a-message.ts - dedupe_key: code2llm:cc:src/interfaces/a2a-message.ts:src.interfaces.a2a-message.parseCommand -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.request - (CC=31)' - description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.request` at - `src/llm/openrouter.ts:171` with cyclomatic complexity 31 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/llm/openrouter.ts - dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.request -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.llm.openrouter.OpenRouterClient.timeout - (CC=26)' - description: 'code2llm reports `src.llm.openrouter.OpenRouterClient.timeout` at - `src/llm/openrouter.ts:179` with cyclomatic complexity 26 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/llm/openrouter.ts - dedupe_key: code2llm:cc:src/llm/openrouter.ts:src.llm.openrouter.OpenRouterClient.timeout -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.operations.validation.assertOperationPlan - (CC=84)' - description: 'code2llm reports `src.operations.validation.assertOperationPlan` at - `src/operations/validation.ts:153` with cyclomatic complexity 84 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/operations/validation.ts - dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertOperationPlan -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.operations.validation.founderDecisionRequired - (CC=44)' - description: 'code2llm reports `src.operations.validation.founderDecisionRequired` - at `src/operations/validation.ts:184` with cyclomatic complexity 44 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/operations/validation.ts - dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.founderDecisionRequired -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.operations.validation.stepIds (CC=44)' - description: 'code2llm reports `src.operations.validation.stepIds` at `src/operations/validation.ts:183` - with cyclomatic complexity 44 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/operations/validation.ts - dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.stepIds -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.operations.validation.steps (CC=44)' - description: 'code2llm reports `src.operations.validation.steps` at `src/operations/validation.ts:182` - with cyclomatic complexity 44 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/operations/validation.ts - dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.steps -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.operations.validation.variableById (CC=44)' - description: 'code2llm reports `src.operations.validation.variableById` at `src/operations/validation.ts:180` - with cyclomatic complexity 44 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/operations/validation.ts - dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variableById -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.operations.validation.variables (CC=44)' - description: 'code2llm reports `src.operations.validation.variables` at `src/operations/validation.ts:177` - with cyclomatic complexity 44 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/operations/validation.ts - dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.variables -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.pipeline.run.runPipeline (CC=56)' - description: 'code2llm reports `src.pipeline.run.runPipeline` at `src/pipeline/run.ts:56` - with cyclomatic complexity 56 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/pipeline/run.ts - dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.runPipeline -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.web.diff-ui.diffUiScriptMarkup (CC=46)' - description: 'code2llm reports `src.web.diff-ui.diffUiScriptMarkup` at `src/web/diff-ui.ts:127` - with cyclomatic complexity 46 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/web/diff-ui.ts - dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.diffUiScriptMarkup -- signal: code2llm_god - title: 'Split god module: src/synthesis/code-change-plan/implementation-helpers.ts' - description: 'code2llm reports `src/synthesis/code-change-plan/implementation-helpers.ts` - as a large module (1148 lines, 16 classes). - - - Split it by responsibility, keep public imports stable, and add focused tests - around the moved behavior.' - priority: high - labels: - - llm-ready - - code2llm - - god-module - - refactor - files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-helpers.ts - signal: code2llm_god - title: 'Split god module: src/synthesis/code-change-plan/implementation-source-patch.ts' - description: 'code2llm reports `src/synthesis/code-change-plan/implementation-source-patch.ts` - as a large module (694 lines, 5 classes). + title: 'Split god module: src/diff/reality.ts' + description: 'code2llm reports `src/diff/reality.ts` as a large module (690 lines, + 4 classes). Split it by responsibility, keep public imports stable, and add focused tests @@ -418,8 +88,8 @@ tickets: - god-module - refactor files: - - src/synthesis/code-change-plan/implementation-source-patch.ts - dedupe_key: code2llm:god:src/synthesis/code-change-plan/implementation-source-patch.ts + - src/diff/reality.ts + dedupe_key: code2llm:god:src/diff/reality.ts - signal: code2llm_smell_god_function title: 'Address code smell: God Function: decode_envelope' description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`. @@ -501,392 +171,24 @@ tickets: description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`. - Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting - into sub-modules. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: high - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-helpers' - description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-helpers` - in `src/synthesis/code-change-plan/implementation-helpers.ts:1`. - - - Module ''src.synthesis.code-change-plan.implementation-helpers'' is too large - (147 functions, 16 classes). Consider splitting into sub-modules. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: high - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:1:God - Module: src.synthesis.code-change-plan.implementation-helpers' -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: examples.backend.src.server.handleRequest - (CC=16)' - description: 'code2llm reports `examples.backend.src.server.handleRequest` at `examples/backend/src/server.ts:28` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - examples/backend/src/server.ts - dedupe_key: code2llm:cc:examples/backend/src/server.ts:examples.backend.src.server.handleRequest -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)' - description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - python/ast_extract.py - dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)' - description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27` - with cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - scripts/verify-no-llm-imports.mjs - dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)' - description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22` - with cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - scripts/verify-no-llm-imports.mjs - dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)' - description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27` - with cyclomatic complexity 20 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - sdk/rust/examples/basic.rs - dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)' - description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152` - with cyclomatic complexity 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - sdk/rust/src/client.rs - dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)' - description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - sdk/typescript/examples/basic.ts - dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)' - description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - sdk/typescript/examples/basic.ts - dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)' - description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - sdk/typescript/examples/basic.ts - dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)' - description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - sdk/typescript/examples/basic.ts - dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.communication.intake-contract.IntakeError.assertIntakeEnvelope - (CC=18)' - description: 'code2llm reports `src.communication.intake-contract.IntakeError.assertIntakeEnvelope` - at `src/communication/intake-contract.ts:132` with cyclomatic complexity 18 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/communication/intake-contract.ts - dedupe_key: code2llm:cc:src/communication/intake-contract.ts:src.communication.intake-contract.IntakeError.assertIntakeEnvelope -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeEnvelope - (CC=16)' - description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeEnvelope` - at `src/communication/intake-protobuf.ts:21` with cyclomatic complexity 16 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/communication/intake-protobuf.ts - dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeEnvelope -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.communication.intake-protobuf.decodeIntakeResult - (CC=18)' - description: 'code2llm reports `src.communication.intake-protobuf.decodeIntakeResult` - at `src/communication/intake-protobuf.ts:75` with cyclomatic complexity 18 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/communication/intake-protobuf.ts - dedupe_key: code2llm:cc:src/communication/intake-protobuf.ts:src.communication.intake-protobuf.decodeIntakeResult -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.core.record.generationMetadata (CC=17)' - description: 'code2llm reports `src.core.record.generationMetadata` at `src/core/record.ts:141` - with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/core/record.ts - dedupe_key: code2llm:cc:src/core/record.ts:src.core.record.generationMetadata -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.git.BINARY_EXTENSIONS (CC=22)' - description: 'code2llm reports `src.diff.git.BINARY_EXTENSIONS` at `src/diff/git.ts:41` - with cyclomatic complexity 22 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/diff/git.ts - dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.BINARY_EXTENSIONS -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.git.collectGitDiff (CC=22)' - description: 'code2llm reports `src.diff.git.collectGitDiff` at `src/diff/git.ts:46` - with cyclomatic complexity 22 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/diff/git.ts - dedupe_key: code2llm:cc:src/diff/git.ts:src.diff.git.collectGitDiff -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.reality.renderRealitySvg (CC=15)' - description: 'code2llm reports `src.diff.reality.renderRealitySvg` at `src/diff/reality.ts:503` - with cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/diff/reality.ts - dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.renderRealitySvg -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.reality.resolveStatus (CC=15)' - description: 'code2llm reports `src.diff.reality.resolveStatus` at `src/diff/reality.ts:446` - with cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/diff/reality.ts - dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.resolveStatus -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.text.backtrack (CC=18)' - description: 'code2llm reports `src.diff.text.backtrack` at `src/diff/text.ts:172` - with cyclomatic complexity 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/diff/text.ts - dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.backtrack -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.text.m (CC=15)' - description: 'code2llm reports `src.diff.text.m` at `src/diff/text.ts:142` with - cyclomatic complexity 15 (limit 15). - + Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting + into sub-modules. - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal + + Make the smallest refactor that removes the smell and run local tests.' + priority: high labels: - llm-ready - code2llm - - complexity - - refactor + - code-smell + - god-function files: - - src/diff/text.ts - dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.m + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli' - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.text.max (CC=15)' - description: 'code2llm reports `src.diff.text.max` at `src/diff/text.ts:145` with - cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)' + description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168` + with cyclomatic complexity 16 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -898,12 +200,12 @@ tickets: - complexity - refactor files: - - src/diff/text.ts - dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.max + - python/ast_extract.py + dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.text.myers (CC=19)' - description: 'code2llm reports `src.diff.text.myers` at `src/diff/text.ts:140` with - cyclomatic complexity 19 (limit 15). + title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)' + description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27` + with cyclomatic complexity 15 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -915,12 +217,12 @@ tickets: - complexity - refactor files: - - src/diff/text.ts - dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.myers + - scripts/verify-no-llm-imports.mjs + dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.text.n (CC=15)' - description: 'code2llm reports `src.diff.text.n` at `src/diff/text.ts:141` with - cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)' + description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22` + with cyclomatic complexity 15 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -932,12 +234,12 @@ tickets: - complexity - refactor files: - - src/diff/text.ts - dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.n + - scripts/verify-no-llm-imports.mjs + dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.text.offset (CC=15)' - description: 'code2llm reports `src.diff.text.offset` at `src/diff/text.ts:146` - with cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)' + description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27` + with cyclomatic complexity 20 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -949,12 +251,12 @@ tickets: - complexity - refactor files: - - src/diff/text.ts - dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.offset + - sdk/rust/examples/basic.rs + dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.text.x (CC=15)' - description: 'code2llm reports `src.diff.text.x` at `src/diff/text.ts:180` with - cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)' + description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152` + with cyclomatic complexity 18 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -966,12 +268,12 @@ tickets: - complexity - refactor files: - - src/diff/text.ts - dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.x + - sdk/rust/src/client.rs + dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.text.y (CC=15)' - description: 'code2llm reports `src.diff.text.y` at `src/diff/text.ts:181` with - cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)' + description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13` + with cyclomatic complexity 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -983,13 +285,12 @@ tickets: - complexity - refactor files: - - src/diff/text.ts - dedupe_key: code2llm:cc:src/diff/text.ts:src.diff.text.y + - sdk/typescript/examples/basic.ts + dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.buildFixtureRecords - (CC=18)' - description: 'code2llm reports `src.evaluation.gold-cases.buildFixtureRecords` at - `src/evaluation/gold-cases.ts:315` with cyclomatic complexity 18 (limit 15). + title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)' + description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17` + with cyclomatic complexity 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1001,13 +302,12 @@ tickets: - complexity - refactor files: - - src/evaluation/gold-cases.ts - dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.buildFixtureRecords + - sdk/typescript/examples/basic.ts + dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.evaluateRerankingCase - (CC=17)' - description: 'code2llm reports `src.evaluation.gold-cases.evaluateRerankingCase` - at `src/evaluation/gold-cases.ts:71` with cyclomatic complexity 17 (limit 15). + title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)' + description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15` + with cyclomatic complexity 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1019,12 +319,12 @@ tickets: - complexity - refactor files: - - src/evaluation/gold-cases.ts - dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.evaluateRerankingCase + - sdk/typescript/examples/basic.ts + dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.labels (CC=18)' - description: 'code2llm reports `src.evaluation.gold-cases.labels` at `src/evaluation/gold-cases.ts:319` - with cyclomatic complexity 18 (limit 15). + title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)' + description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14` + with cyclomatic complexity 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1036,12 +336,13 @@ tickets: - complexity - refactor files: - - src/evaluation/gold-cases.ts - dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.labels + - sdk/typescript/examples/basic.ts + dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.record (CC=17)' - description: 'code2llm reports `src.evaluation.gold-cases.record` at `src/evaluation/gold-cases.ts:321` - with cyclomatic complexity 17 (limit 15). + title: 'Reduce cyclomatic complexity: src.communication.analyzer.collectAgentActionIssues + (CC=15)' + description: 'code2llm reports `src.communication.analyzer.collectAgentActionIssues` + at `src/communication/analyzer.ts:173` with cyclomatic complexity 15 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1053,12 +354,13 @@ tickets: - complexity - refactor files: - - src/evaluation/gold-cases.ts - dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.record + - src/communication/analyzer.ts + dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.collectAgentActionIssues - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.evaluation.gold-cases.records (CC=18)' - description: 'code2llm reports `src.evaluation.gold-cases.records` at `src/evaluation/gold-cases.ts:320` - with cyclomatic complexity 18 (limit 15). + title: 'Reduce cyclomatic complexity: src.core.record-metadata.generationMetadata + (CC=17)' + description: 'code2llm reports `src.core.record-metadata.generationMetadata` at + `src/core/record-metadata.ts:4` with cyclomatic complexity 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1070,12 +372,12 @@ tickets: - complexity - refactor files: - - src/evaluation/gold-cases.ts - dedupe_key: code2llm:cc:src/evaluation/gold-cases.ts:src.evaluation.gold-cases.records + - src/core/record-metadata.ts + dedupe_key: code2llm:cc:src/core/record-metadata.ts:src.core.record-metadata.generationMetadata - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.labels (CC=18)' - description: 'code2llm reports `src.evaluation.gold-types.labels` at `src/evaluation/gold-types.ts:358` - with cyclomatic complexity 18 (limit 15). + title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityTotals (CC=15)' + description: 'code2llm reports `src.diff.reality.buildRealityTotals` at `src/diff/reality.ts:224` + with cyclomatic complexity 15 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1087,12 +389,13 @@ tickets: - complexity - refactor files: - - src/evaluation/gold-types.ts - dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.labels + - src/diff/reality.ts + dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityTotals - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.modules (CC=18)' - description: 'code2llm reports `src.evaluation.gold-types.modules` at `src/evaluation/gold-types.ts:359` - with cyclomatic complexity 18 (limit 15). + title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertRerankerDecision + (CC=17)' + description: 'code2llm reports `src.evaluation.gold-types.assertRerankerDecision` + at `src/evaluation/gold-types.ts:383` with cyclomatic complexity 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1105,11 +408,13 @@ tickets: - refactor files: - src/evaluation/gold-types.ts - dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.modules + dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertRerankerDecision - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.interfaces.a2a-history.runListItem (CC=18)' - description: 'code2llm reports `src.interfaces.a2a-history.runListItem` at `src/interfaces/a2a-history.ts:107` - with cyclomatic complexity 18 (limit 15). + title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message-command.looksLikeJson + (CC=20)' + description: 'code2llm reports `src.interfaces.a2a-message-command.looksLikeJson` + at `src/interfaces/a2a-message-command.ts:56` with cyclomatic complexity 20 (limit + 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1121,12 +426,12 @@ tickets: - complexity - refactor files: - - src/interfaces/a2a-history.ts - dedupe_key: code2llm:cc:src/interfaces/a2a-history.ts:src.interfaces.a2a-history.runListItem + - src/interfaces/a2a-message-command.ts + dedupe_key: code2llm:cc:src/interfaces/a2a-message-command.ts:src.interfaces.a2a-message-command.looksLikeJson - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration (CC=16)' - description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:110` + description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:162` with cyclomatic complexity 16 (limit 15). @@ -1142,10 +447,10 @@ tickets: - src/operations/validation.ts dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.operations.validation.assertVariableContract - (CC=20)' - description: 'code2llm reports `src.operations.validation.assertVariableContract` - at `src/operations/validation.ts:62` with cyclomatic complexity 20 (limit 15). + title: 'Reduce cyclomatic complexity: src.operations.validation.validateOperationStep + (CC=23)' + description: 'code2llm reports `src.operations.validation.validateOperationStep` + at `src/operations/validation.ts:277` with cyclomatic complexity 23 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1158,29 +463,13 @@ tickets: - refactor files: - src/operations/validation.ts - dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertVariableContract -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.pipeline.run.persistFailedRun (CC=19)' - description: 'code2llm reports `src.pipeline.run.persistFailedRun` at `src/pipeline/run.ts:512` - with cyclomatic complexity 19 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/pipeline/run.ts - dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.persistFailedRun + dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.validateOperationStep - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_MIN_INTERVAL_MS + title: 'Reduce cyclomatic complexity: src.pipeline.run-persistence.persistFailedRunState (CC=19)' - description: 'code2llm reports `src.watch.watcher.DEFAULT_MIN_INTERVAL_MS` at `src/watch/watcher.ts:144` - with cyclomatic complexity 19 (limit 15). + description: 'code2llm reports `src.pipeline.run-persistence.persistFailedRunState` + at `src/pipeline/run-persistence.ts:206` with cyclomatic complexity 19 (limit + 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1192,13 +481,13 @@ tickets: - complexity - refactor files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_MIN_INTERVAL_MS + - src/pipeline/run-persistence.ts + dedupe_key: code2llm:cc:src/pipeline/run-persistence.ts:src.pipeline.run-persistence.persistFailedRunState - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS - (CC=19)' - description: 'code2llm reports `src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS` at `src/watch/watcher.ts:145` - with cyclomatic complexity 19 (limit 15). + title: 'Reduce cyclomatic complexity: src.pipeline.run-persistence.persistPipelineArtifacts + (CC=17)' + description: 'code2llm reports `src.pipeline.run-persistence.persistPipelineArtifacts` + at `src/pipeline/run-persistence.ts:57` with cyclomatic complexity 17 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1210,12 +499,12 @@ tickets: - complexity - refactor files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.DEFAULT_SCAN_INTERVAL_MS + - src/pipeline/run-persistence.ts + dedupe_key: code2llm:cc:src/pipeline/run-persistence.ts:src.pipeline.run-persistence.persistPipelineArtifacts - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.watch.watcher.watchRepository (CC=19)' - description: 'code2llm reports `src.watch.watcher.watchRepository` at `src/watch/watcher.ts:147` - with cyclomatic complexity 19 (limit 15). + title: 'Reduce cyclomatic complexity: src.pipeline.run.executePipeline (CC=20)' + description: 'code2llm reports `src.pipeline.run.executePipeline` at `src/pipeline/run.ts:198` + with cyclomatic complexity 20 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -1227,11 +516,11 @@ tickets: - complexity - refactor files: - - src/watch/watcher.ts - dedupe_key: code2llm:cc:src/watch/watcher.ts:src.watch.watcher.watchRepository + - src/pipeline/run.ts + dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.executePipeline - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.web.diff-ui.compareGraphs (CC=15)' - description: 'code2llm reports `src.web.diff-ui.compareGraphs` at `src/web/diff-ui.ts:139` + title: 'Reduce cyclomatic complexity: src.web.diff-ui-script.compareGraphs (CC=15)' + description: 'code2llm reports `src.web.diff-ui-script.compareGraphs` at `src/web/diff-ui-script.ts:11` with cyclomatic complexity 15 (limit 15). @@ -1244,15 +533,15 @@ tickets: - complexity - refactor files: - - src/web/diff-ui.ts - dedupe_key: code2llm:cc:src/web/diff-ui.ts:src.web.diff-ui.compareGraphs + - src/web/diff-ui-script.ts + dedupe_key: code2llm:cc:src/web/diff-ui-script.ts:src.web.diff-ui-script.compareGraphs - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, self, excludes, patterns' - description: 'code2llm reports `Data Clump: root, self, excludes, patterns` in `sdk/python/todo2code/client.py:354`. + title: 'Address code smell: Data Clump: file, self, root, nl_mode' + description: 'code2llm reports `Data Clump: file, self, root, nl_mode` in `sdk/python/todo2code/client.py:307`. - Arguments (root, self, excludes, patterns) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. + Arguments (file, self, root, nl_mode) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1264,15 +553,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: - root, self, excludes, patterns' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: + file, self, root, nl_mode' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, self, excludes, patterns' - description: 'code2llm reports `Data Clump: root, self, excludes, patterns` in `sdk/python/todo2code/client.py:362`. + title: 'Address code smell: Data Clump: file, self, root, nl_mode' + description: 'code2llm reports `Data Clump: file, self, root, nl_mode` in `sdk/python/todo2code/client.py:312`. - Arguments (root, self, excludes, patterns) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. + Arguments (file, self, root, nl_mode) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1284,15 +573,16 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: - root, self, excludes, patterns' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: + file, self, root, nl_mode' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, self, file, nl_mode' - description: 'code2llm reports `Data Clump: root, self, file, nl_mode` in `sdk/python/todo2code/client.py:307`. + title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo' + description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self, + todo` in `sdk/python/todo2code/client.py:332`. - Arguments (root, self, file, nl_mode) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. + Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1304,15 +594,16 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: - root, self, file, nl_mode' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: + root, markdown_mode, changelog, self, todo' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, self, file, nl_mode' - description: 'code2llm reports `Data Clump: root, self, file, nl_mode` in `sdk/python/todo2code/client.py:312`. + title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo' + description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self, + todo` in `sdk/python/todo2code/client.py:341`. - Arguments (root, self, file, nl_mode) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. + Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1324,14 +615,14 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: - root, self, file, nl_mode' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: + root, markdown_mode, changelog, self, todo' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, action, payload' - description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:249`. + title: 'Address code smell: Data Clump: self, payload, action' + description: 'code2llm reports `Data Clump: self, payload, action` in `sdk/python/todo2code/client.py:249`. - Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + Arguments (self, payload, action) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call. @@ -1345,13 +636,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: - self, action, payload' + self, payload, action' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, action, payload' - description: 'code2llm reports `Data Clump: self, action, payload` in `sdk/python/todo2code/client.py:261`. + title: 'Address code smell: Data Clump: self, payload, action' + description: 'code2llm reports `Data Clump: self, payload, action` in `sdk/python/todo2code/client.py:261`. - Arguments (self, action, payload) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + Arguments (self, payload, action) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call. @@ -1365,15 +656,14 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: - self, action, payload' + self, payload, action' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, changelog, markdown_mode, todo' - description: 'code2llm reports `Data Clump: self, root, changelog, markdown_mode, - todo` in `sdk/python/todo2code/client.py:332`. + title: 'Address code smell: Data Clump: self, root, patterns, excludes' + description: 'code2llm reports `Data Clump: self, root, patterns, excludes` in `sdk/python/todo2code/client.py:354`. - Arguments (self, root, changelog, markdown_mode, todo) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (self, root, patterns, excludes) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1385,16 +675,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: - self, root, changelog, markdown_mode, todo' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: + self, root, patterns, excludes' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, changelog, markdown_mode, todo' - description: 'code2llm reports `Data Clump: self, root, changelog, markdown_mode, - todo` in `sdk/python/todo2code/client.py:341`. + title: 'Address code smell: Data Clump: self, root, patterns, excludes' + description: 'code2llm reports `Data Clump: self, root, patterns, excludes` in `sdk/python/todo2code/client.py:362`. - Arguments (self, root, changelog, markdown_mode, todo) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (self, root, patterns, excludes) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. Make the smallest refactor that removes the smell and run local tests.' @@ -1406,8 +695,8 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: - self, root, changelog, markdown_mode, todo' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: + self, root, patterns, excludes' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: MAX_PER_SECTION' description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`. @@ -1540,7 +829,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics' description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics` - in `src/communication/analyzer.ts:251`. + in `src/communication/analyzer.ts:305`. Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12, @@ -1556,8 +845,27 @@ tickets: - god-function files: - src/communication/analyzer.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:251:God Function: + dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:305:God Function: addCommunicationIssuesToDiagnostics' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: analyzeCommunication' + description: 'code2llm reports `God Function: analyzeCommunication` in `src/communication/analyzer.ts:56`. + + + Function ''analyzeCommunication'' is oversized: CC=5, fan-out=18, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/analyzer.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:56:God Function: + analyzeCommunication' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyAcceptedSemanticRelations' description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in @@ -1580,7 +888,7 @@ tickets: Function: applyAcceptedSemanticRelations' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyCodeChangeSourcePatch' - description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-helpers.ts:572`. + description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:59`. Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0. @@ -1594,8 +902,8 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:572:God + - src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:59:God Function: applyCodeChangeSourcePatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: applyTodoPatch' @@ -1656,25 +964,6 @@ tickets: - src/core/schema/code-change.ts dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God Function: assertCodeChangeAcceptance' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: assertCommand' - description: 'code2llm reports `God Function: assertCommand` in `src/communication/intake-contract.ts:155`. - - - Function ''assertCommand'' is oversized: CC=12, fan-out=12, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/communication/intake-contract.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:155:God - Function: assertCommand' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertConclusionValue' description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`. @@ -1717,7 +1006,7 @@ tickets: assertGroundedGenerationMetadata' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertIntentGraph' - description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:217`. + description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:220`. Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0. @@ -1732,11 +1021,11 @@ tickets: - god-function files: - src/core/schema/intent.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:217:God Function: + dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:220:God Function: assertIntentGraph' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertIntentGraphDiff' - description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:246`. + description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:249`. Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0. @@ -1751,11 +1040,30 @@ tickets: - god-function files: - src/core/schema/intent.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:246:God Function: + dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:249:God Function: assertIntentGraphDiff' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: assertOperationPlan' + description: 'code2llm reports `God Function: assertOperationPlan` in `src/operations/validation.ts:205`. + + + Function ''assertOperationPlan'' is oversized: CC=1, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/operations/validation.ts + dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:205:God Function: + assertOperationPlan' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertParticipant' - description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:187`. + description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:248`. Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0. @@ -1770,8 +1078,28 @@ tickets: - god-function files: - src/communication/intake-contract.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:187:God + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:248:God Function: assertParticipant' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: assertParticipantIdentityEntry' + description: 'code2llm reports `God Function: assertParticipantIdentityEntry` in + `src/communication/identity.ts:119`. + + + Function ''assertParticipantIdentityEntry'' is oversized: CC=5, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/identity.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/identity.ts:119:God Function: + assertParticipantIdentityEntry' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertProjectionWritable' description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`. @@ -1944,7 +1272,7 @@ tickets: body' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: buildAcceptanceContext' - description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers.ts:325`. + description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers-acceptance.ts:65`. Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0. @@ -1958,9 +1286,28 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:325:God + - src/synthesis/code-change-plan/implementation-helpers-acceptance.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers-acceptance.ts:65:God Function: buildAcceptanceContext' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: buildParticipantRows' + description: 'code2llm reports `God Function: buildParticipantRows` in `src/communication/analyzer.ts:225`. + + + Function ''buildParticipantRows'' is oversized: CC=7, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/analyzer.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:225:God Function: + buildParticipantRows' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: byKey' description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`. @@ -2075,6 +1422,25 @@ tickets: - src/extractors/communication-file-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God Function: collectCommunicationMetadata' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: collectConflictIssues' + description: 'code2llm reports `God Function: collectConflictIssues` in `src/communication/analyzer.ts:111`. + + + Function ''collectConflictIssues'' is oversized: CC=13, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/analyzer.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:111:God Function: + collectConflictIssues' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: collectRecordDiagnostics' description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`. @@ -2190,6 +1556,25 @@ tickets: - src/extractors/configuration.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God Function: configurationRecords' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: controller' + description: 'code2llm reports `God Function: controller` in `src/llm/openrouter.ts:45`. + + + Function ''controller'' is oversized: CC=13, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/llm/openrouter.ts + dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:45:God Function: + controller' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: createMarkdownPathResolver' description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`. @@ -2266,6 +1651,25 @@ tickets: - src/synthesis/todo-patch.ts dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:69:God Function: createTodoPatch' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: decodeDelimitedFields' + description: 'code2llm reports `God Function: decodeDelimitedFields` in `src/communication/intake-protobuf.ts:69`. + + + Function ''decodeDelimitedFields'' is oversized: CC=13, fan-out=7, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-protobuf.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:69:God + Function: decodeDelimitedFields' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: decode_chunked' description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:189`. @@ -2399,11 +1803,30 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God Function: enrichRecord' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: evaluateDiagnosticsCase' - description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:182`. + title: 'Address code smell: God Function: evaluateDiagnosticsCase' + description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:277`. + + + Function ''evaluateDiagnosticsCase'' is oversized: CC=6, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/evaluation/gold-cases.ts + dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:277:God Function: + evaluateDiagnosticsCase' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: evaluateDsl2TodoCase' + description: 'code2llm reports `God Function: evaluateDsl2TodoCase` in `src/evaluation/gold-cases.ts:305`. - Function ''evaluateDiagnosticsCase'' is oversized: CC=6, fan-out=13, mutations=0. + Function ''evaluateDsl2TodoCase'' is oversized: CC=5, fan-out=13, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2415,14 +1838,14 @@ tickets: - god-function files: - src/evaluation/gold-cases.ts - dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:182:God Function: - evaluateDiagnosticsCase' + dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:305:God Function: + evaluateDsl2TodoCase' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: evaluateDsl2TodoCase' - description: 'code2llm reports `God Function: evaluateDsl2TodoCase` in `src/evaluation/gold-cases.ts:210`. + title: 'Address code smell: God Function: evaluateRerankingCase' + description: 'code2llm reports `God Function: evaluateRerankingCase` in `src/evaluation/gold-cases.ts:71`. - Function ''evaluateDsl2TodoCase'' is oversized: CC=5, fan-out=13, mutations=0. + Function ''evaluateRerankingCase'' is oversized: CC=1, fan-out=15, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2434,8 +1857,8 @@ tickets: - god-function files: - src/evaluation/gold-cases.ts - dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:210:God Function: - evaluateDsl2TodoCase' + dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:71:God Function: + evaluateRerankingCase' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: exchange' description: 'code2llm reports `God Function: exchange` in `sdk/rust/src/client.rs:125`. @@ -2779,6 +2202,25 @@ tickets: - src/extractors/todo.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:19:God Function: extractTodo' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: files' + description: 'code2llm reports `God Function: files` in `src/interfaces/a2a-run-list-item.ts:43`. + + + Function ''files'' is oversized: CC=7, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/interfaces/a2a-run-list-item.ts + dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-run-list-item.ts:43:God + Function: files' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: files' description: 'code2llm reports `God Function: files` in `scripts/verify-module-boundaries.mjs:6`. @@ -2965,7 +2407,7 @@ tickets: index' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: indexModuleAnchors' - description: 'code2llm reports `God Function: indexModuleAnchors` in `src/diff/reality.ts:308`. + description: 'code2llm reports `God Function: indexModuleAnchors` in `src/diff/reality.ts:324`. Function ''indexModuleAnchors'' is oversized: CC=12, fan-out=11, mutations=0. @@ -2980,7 +2422,7 @@ tickets: - god-function files: - src/diff/reality.ts - dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:308:God Function: indexModuleAnchors' + dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:324:God Function: indexModuleAnchors' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: indexResolvableBasenames' description: 'code2llm reports `God Function: indexResolvableBasenames` in `src/graph/linker.ts:94`. @@ -3075,7 +2517,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:32:God Function: linkIntentRecords' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: listAvailableModels' - description: 'code2llm reports `God Function: listAvailableModels` in `src/llm/openrouter.ts:58`. + description: 'code2llm reports `God Function: listAvailableModels` in `src/llm/openrouter.ts:44`. Function ''listAvailableModels'' is oversized: CC=13, fan-out=16, mutations=0. @@ -3090,11 +2532,11 @@ tickets: - god-function files: - src/llm/openrouter.ts - dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:58:God Function: + dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:44:God Function: listAvailableModels' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: listIntentRuns' - description: 'code2llm reports `God Function: listIntentRuns` in `src/interfaces/a2a-history.ts:51`. + description: 'code2llm reports `God Function: listIntentRuns` in `src/interfaces/a2a-history.ts:25`. Function ''listIntentRuns'' is oversized: CC=2, fan-out=13, mutations=0. @@ -3109,7 +2551,7 @@ tickets: - god-function files: - src/interfaces/a2a-history.ts - dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:51:God Function: + dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:25:God Function: listIntentRuns' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: listTasks' @@ -3130,25 +2572,6 @@ tickets: - src/interfaces/a2a-task-store.ts dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-task-store.ts:444:God Function: listTasks' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: llm' - description: 'code2llm reports `God Function: llm` in `src/interfaces/a2a-history.ts:116`. - - - Function ''llm'' is oversized: CC=14, fan-out=8, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/interfaces/a2a-history.ts - dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:116:God Function: - llm' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: loadEnvFile' description: 'code2llm reports `God Function: loadEnvFile` in `src/config/env.ts:76`. @@ -3169,7 +2592,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/config/env.ts:76:God Function: loadEnvFile' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: loadRuns' - description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui.ts:137`. + description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui-script.ts:9`. Function ''loadRuns'' is oversized: CC=12, fan-out=14, mutations=0. @@ -3183,8 +2606,9 @@ tickets: - code-smell - god-function files: - - src/web/diff-ui.ts - dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui.ts:137:God Function: loadRuns' + - src/web/diff-ui-script.ts + dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui-script.ts:9:God Function: + loadRuns' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: local' description: 'code2llm reports `God Function: local` in `scripts/verify-env-contract.mjs:52`. @@ -3356,7 +2780,7 @@ tickets: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: matchesRunFilters' - description: 'code2llm reports `God Function: matchesRunFilters` in `src/interfaces/a2a-history.ts:192`. + description: 'code2llm reports `God Function: matchesRunFilters` in `src/interfaces/a2a-history.ts:77`. Function ''matchesRunFilters'' is oversized: CC=13, fan-out=4, mutations=0. @@ -3371,7 +2795,7 @@ tickets: - god-function files: - src/interfaces/a2a-history.ts - dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:192:God Function: + dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:77:God Function: matchesRunFilters' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: materializeSyntheses' @@ -3490,6 +2914,25 @@ tickets: - src/communication/identity.ts dedupe_key: 'code2llm:smell:god_function:src/communication/identity.ts:53:God Function: normalizeParticipantIdentityRegistry' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: numbers' + description: 'code2llm reports `God Function: numbers` in `src/communication/intake-protobuf.ts:77`. + + + Function ''numbers'' is oversized: CC=13, fan-out=7, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-protobuf.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:77:God + Function: numbers' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: object' description: 'code2llm reports `God Function: object` in `src/llm/structured-schema.ts:155`. @@ -3509,6 +2952,25 @@ tickets: - src/llm/structured-schema.ts dedupe_key: 'code2llm:smell:god_function:src/llm/structured-schema.ts:155:God Function: object' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: offset' + description: 'code2llm reports `God Function: offset` in `src/communication/intake-protobuf.ts:79`. + + + Function ''offset'' is oversized: CC=13, fan-out=7, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-protobuf.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:79:God + Function: offset' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: options' description: 'code2llm reports `God Function: options` in `src/cli.ts:781`. @@ -3661,7 +3123,7 @@ tickets: Function: participantGroups' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: primaryTargetKey' - description: 'code2llm reports `God Function: primaryTargetKey` in `src/diff/reality.ts:386`. + description: 'code2llm reports `God Function: primaryTargetKey` in `src/diff/reality.ts:402`. Function ''primaryTargetKey'' is oversized: CC=14, fan-out=9, mutations=0. @@ -3676,7 +3138,7 @@ tickets: - god-function files: - src/diff/reality.ts - dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:386:God Function: primaryTargetKey' + dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:402:God Function: primaryTargetKey' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: read' description: 'code2llm reports `God Function: read` in `src/communication/intake-store.ts:60`. @@ -3698,10 +3160,10 @@ tickets: Function: read' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: readCommunicationSummary' - description: 'code2llm reports `God Function: readCommunicationSummary` in `src/interfaces/a2a-history.ts:155`. + description: 'code2llm reports `God Function: readCommunicationSummary` in `src/interfaces/a2a-run-list-item.ts:112`. - Function ''readCommunicationSummary'' is oversized: CC=8, fan-out=12, mutations=0. + Function ''readCommunicationSummary'' is oversized: CC=8, fan-out=13, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -3712,9 +3174,9 @@ tickets: - code-smell - god-function files: - - src/interfaces/a2a-history.ts - dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:155:God Function: - readCommunicationSummary' + - src/interfaces/a2a-run-list-item.ts + dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-run-list-item.ts:112:God + Function: readCommunicationSummary' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: registerRunArtifacts' description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:792`. @@ -3809,6 +3271,24 @@ tickets: - src/live/contract-check.ts dedupe_key: 'code2llm:smell:god_function:src/live/contract-check.ts:277:God Function: renderLiveReport' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: renderRealitySvg' + description: 'code2llm reports `God Function: renderRealitySvg` in `src/diff/reality.ts:528`. + + + Function ''renderRealitySvg'' is oversized: CC=9, fan-out=16, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/diff/reality.ts + dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:528:God Function: renderRealitySvg' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: renderTextDiffSvg' description: 'code2llm reports `God Function: renderTextDiffSvg` in `src/diff/text-render.ts:70`. @@ -3866,6 +3346,25 @@ tickets: - sdk/php/src/Client.php dedupe_key: 'code2llm:smell:god_function:sdk/php/src/Client.php:331:God Function: request' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: requestOpenRouter' + description: 'code2llm reports `God Function: requestOpenRouter` in `src/llm/openrouter-request.ts:40`. + + + Function ''requestOpenRouter'' is oversized: CC=7, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/llm/openrouter-request.ts + dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter-request.ts:40:God Function: + requestOpenRouter' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: rerankSemanticCandidates' description: 'code2llm reports `God Function: rerankSemanticCandidates` in `src/semantic/reranker-llm.ts:39`. @@ -3942,11 +3441,11 @@ tickets: dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:55:God Function: rpc' - signal: code2llm_smell_god_function - title: 'Address code smell: God Function: runtime' - description: 'code2llm reports `God Function: runtime` in `src/interfaces/a2a-history.ts:117`. + title: 'Address code smell: God Function: runListItem' + description: 'code2llm reports `God Function: runListItem` in `src/interfaces/a2a-run-list-item.ts:35`. - Function ''runtime'' is oversized: CC=14, fan-out=8, mutations=0. + Function ''runListItem'' is oversized: CC=7, fan-out=13, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -3957,9 +3456,9 @@ tickets: - code-smell - god-function files: - - src/interfaces/a2a-history.ts - dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:117:God Function: - runtime' + - src/interfaces/a2a-run-list-item.ts + dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-run-list-item.ts:35:God + Function: runListItem' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: saveTaskStore' description: 'code2llm reports `God Function: saveTaskStore` in `src/interfaces/a2a-task-store.ts:257`. @@ -4109,6 +3608,25 @@ tickets: - src/interfaces/mcp.ts dedupe_key: 'code2llm:smell:god_function:src/interfaces/mcp.ts:33:God Function: startMcpServer' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: strings' + description: 'code2llm reports `God Function: strings` in `src/communication/intake-protobuf.ts:76`. + + + Function ''strings'' is oversized: CC=13, fan-out=7, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-protobuf.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:76:God + Function: strings' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: summarizeGraph' description: 'code2llm reports `God Function: summarizeGraph` in `src/summary/summarizer.ts:57`. @@ -4204,6 +3722,25 @@ tickets: - src/extractors/todo.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:48:God Function: text' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: timeout' + description: 'code2llm reports `God Function: timeout` in `src/llm/openrouter.ts:46`. + + + Function ''timeout'' is oversized: CC=13, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/llm/openrouter.ts + dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:46:God Function: + timeout' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: toDocumentIntentRecord' description: 'code2llm reports `God Function: toDocumentIntentRecord` in `src/extractors/docs-record.ts:25`. @@ -4225,10 +3762,10 @@ tickets: toDocumentIntentRecord' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: toIntentRecord' - description: 'code2llm reports `God Function: toIntentRecord` in `src/extractors/nl-llm-helpers.ts:86`. + description: 'code2llm reports `God Function: toIntentRecord` in `src/extractors/nl-llm-helpers.ts:85`. - Function ''toIntentRecord'' is oversized: CC=12, fan-out=11, mutations=0. + Function ''toIntentRecord'' is oversized: CC=11, fan-out=11, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -4240,7 +3777,7 @@ tickets: - god-function files: - src/extractors/nl-llm-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm-helpers.ts:86:God + dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm-helpers.ts:85:God Function: toIntentRecord' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: toSideBySideRows' @@ -4319,9 +3856,48 @@ tickets: - src/core/schema/code-change.ts dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:278:God Function: validateCodeChangePlanContext' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: validateIntakeEnvelopeHeader' + description: 'code2llm reports `God Function: validateIntakeEnvelopeHeader` in `src/communication/intake-contract.ts:149`. + + + Function ''validateIntakeEnvelopeHeader'' is oversized: CC=14, fan-out=6, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-contract.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:149:God + Function: validateIntakeEnvelopeHeader' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: validateOperationExpectations' + description: 'code2llm reports `God Function: validateOperationExpectations` in + `src/operations/validation.ts:371`. + + + Function ''validateOperationExpectations'' is oversized: CC=11, fan-out=13, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/operations/validation.ts + dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:371:God Function: + validateOperationExpectations' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: validatePatchTargetForEdit' - description: 'code2llm reports `God Function: validatePatchTargetForEdit` in `src/synthesis/code-change-plan/implementation-helpers.ts:729`. + description: 'code2llm reports `God Function: validatePatchTargetForEdit` in `src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:210`. Function ''validatePatchTargetForEdit'' is oversized: CC=13, fan-out=3, mutations=0. @@ -4335,8 +3911,8 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation-helpers.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers.ts:729:God + - src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:210:God Function: validatePatchTargetForEdit' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: validateProjection' @@ -4357,6 +3933,25 @@ tickets: - src/communication/intake-service.ts dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:183:God Function: validateProjection' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: values' + description: 'code2llm reports `God Function: values` in `src/communication/intake-protobuf.ts:75`. + + + Function ''values'' is oversized: CC=13, fan-out=7, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/intake-protobuf.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:75:God + Function: values' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: visit' description: 'code2llm reports `God Function: visit` in `src/watch/watcher.ts:42`. @@ -4413,25 +4008,6 @@ tickets: - rust-ast/src/main.rs dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:206:God Function: visit_item_mod' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: warnings' - description: 'code2llm reports `God Function: warnings` in `src/interfaces/a2a-history.ts:118`. - - - Function ''warnings'' is oversized: CC=14, fan-out=8, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/interfaces/a2a-history.ts - dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:118:God Function: - warnings' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: writeProjection' description: 'code2llm reports `God Function: writeProjection` in `src/communication/intake-service.ts:132`. @@ -4534,7 +4110,7 @@ tickets: description: 'code2llm reports `God Module: src.communication.analyzer` in `src/communication/analyzer.ts:1`. - Module ''src.communication.analyzer'' is too large (79 functions, 3 classes). + Module ''src.communication.analyzer'' is too large (88 functions, 3 classes). Consider splitting into sub-modules. @@ -4555,7 +4131,7 @@ tickets: `src/communication/intake-contract.ts:1`. - Module ''src.communication.intake-contract'' is too large (44 functions, 7 classes). + Module ''src.communication.intake-contract'' is too large (76 functions, 7 classes). Consider splitting into sub-modules. @@ -4636,7 +4212,7 @@ tickets: description: 'code2llm reports `God Module: src.core.schema.intent` in `src/core/schema/intent.ts:1`. - Module ''src.core.schema.intent'' is too large (43 functions, 4 classes). Consider + Module ''src.core.schema.intent'' is too large (44 functions, 4 classes). Consider splitting into sub-modules. @@ -4735,7 +4311,7 @@ tickets: description: 'code2llm reports `God Module: src.diff.reality` in `src/diff/reality.ts:1`. - Module ''src.diff.reality'' is too large (78 functions, 3 classes). Consider splitting + Module ''src.diff.reality'' is too large (97 functions, 4 classes). Consider splitting into sub-modules. @@ -4749,31 +4325,12 @@ tickets: files: - src/diff/reality.ts dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:1:God Module: src.diff.reality' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.diff.text' - description: 'code2llm reports `God Module: src.diff.text` in `src/diff/text.ts:1`. - - - Module ''src.diff.text'' is too large (53 functions, 1 classes). Consider splitting - into sub-modules. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/diff/text.ts - dedupe_key: 'code2llm:smell:god_function:src/diff/text.ts:1:God Module: src.diff.text' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.evaluation.gold-cases' description: 'code2llm reports `God Module: src.evaluation.gold-cases` in `src/evaluation/gold-cases.ts:1`. - Module ''src.evaluation.gold-cases'' is too large (57 functions, 4 classes). Consider + Module ''src.evaluation.gold-cases'' is too large (75 functions, 4 classes). Consider splitting into sub-modules. @@ -4793,7 +4350,7 @@ tickets: description: 'code2llm reports `God Module: src.evaluation.gold-types` in `src/evaluation/gold-types.ts:1`. - Module ''src.evaluation.gold-types'' is too large (11 functions, 15 classes). + Module ''src.evaluation.gold-types'' is too large (17 functions, 15 classes). Consider splitting into sub-modules. @@ -4987,31 +4544,12 @@ tickets: files: - src/interfaces/mcp.ts dedupe_key: 'code2llm:smell:god_function:src/interfaces/mcp.ts:1:God Module: src.interfaces.mcp' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.llm.openrouter' - description: 'code2llm reports `God Module: src.llm.openrouter` in `src/llm/openrouter.ts:1`. - - - Module ''src.llm.openrouter'' is too large (49 functions, 7 classes). Consider - splitting into sub-modules. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/llm/openrouter.ts - dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:1:God Module: src.llm.openrouter' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.operations.validation' description: 'code2llm reports `God Module: src.operations.validation` in `src/operations/validation.ts:1`. - Module ''src.operations.validation'' is too large (47 functions, 0 classes). Consider + Module ''src.operations.validation'' is too large (75 functions, 0 classes). Consider splitting into sub-modules. @@ -5026,25 +4564,6 @@ tickets: - src/operations/validation.ts dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:1:God Module: src.operations.validation' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.pipeline.run' - description: 'code2llm reports `God Module: src.pipeline.run` in `src/pipeline/run.ts:1`. - - - Module ''src.pipeline.run'' is too large (65 functions, 1 classes). Consider splitting - into sub-modules. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/pipeline/run.ts - dedupe_key: 'code2llm:smell:god_function:src/pipeline/run.ts:1:God Module: src.pipeline.run' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.semantic.reranker-llm' description: 'code2llm reports `God Module: src.semantic.reranker-llm` in `src/semantic/reranker-llm.ts:1`. @@ -5105,13 +4624,34 @@ tickets: - src/services/actions.ts dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:1:God Module: src.services.actions' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-source-patch' - description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-source-patch` - in `src/synthesis/code-change-plan/implementation-source-patch.ts:1`. + title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-source-patch-apply-core' + description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-source-patch-apply-core` + in `src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:1`. + + + Module ''src.synthesis.code-change-plan.implementation-source-patch-apply-core'' + is too large (54 functions, 6 classes). Consider splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:1:God + Module: src.synthesis.code-change-plan.implementation-source-patch-apply-core' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.synthesis.code-change-plan.implementation-source-patch-assert' + description: 'code2llm reports `God Module: src.synthesis.code-change-plan.implementation-source-patch-assert` + in `src/synthesis/code-change-plan/implementation-source-patch-assert.ts:1`. - Module ''src.synthesis.code-change-plan.implementation-source-patch'' is too large - (103 functions, 5 classes). Consider splitting into sub-modules. + Module ''src.synthesis.code-change-plan.implementation-source-patch-assert'' is + too large (55 functions, 2 classes). Consider splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -5122,9 +4662,9 @@ tickets: - code-smell - god-function files: - - src/synthesis/code-change-plan/implementation-source-patch.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-source-patch.ts:1:God - Module: src.synthesis.code-change-plan.implementation-source-patch' + - src/synthesis/code-change-plan/implementation-source-patch-assert.ts + dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-source-patch-assert.ts:1:God + Module: src.synthesis.code-change-plan.implementation-source-patch-assert' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.synthesis.todo-patch' description: 'code2llm reports `God Module: src.synthesis.todo-patch` in `src/synthesis/todo-patch.ts:1`. @@ -5145,5 +4685,24 @@ tickets: - src/synthesis/todo-patch.ts dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:1:God Module: src.synthesis.todo-patch' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Module: src.watch.watcher' + description: 'code2llm reports `God Module: src.watch.watcher` in `src/watch/watcher.ts:1`. + + + Module ''src.watch.watcher'' is too large (43 functions, 6 classes). Consider + splitting into sub-modules. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/watch/watcher.ts + dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:1:God Module: src.watch.watcher' applied: [] skipped: [] diff --git a/project/project.toon.yaml b/project/project.toon.yaml index f3982e0..6c3ad74 100644 --- a/project/project.toon.yaml +++ b/project/project.toon.yaml @@ -1,52 +1,52 @@ -# todo2code | 3918 func | 179f | 41965L | typescript | 2026-08-04 +# todo2code | 4129 func | 197f | 43441L | typescript | 2026-08-04 # generated in 0.00s HEALTH: - CC̄=3.3 critical=220 (limit:10) dup=28 cycles=0 + CC̄=3.1 critical=187 (limit:10) dup=29 cycles=0 ALERTS[20]: - !!! cc_exceeded assertOperationPlan = 84 (limit:15) - !!! cc_exceeded parseCommand = 63 (limit:15) - !!! cc_exceeded runPipeline = 56 (limit:15) - !!! high_fan_out runPipeline = 56 (limit:10) - !!! cc_exceeded analyzeCommunication = 48 (limit:15) - !!! cc_exceeded diffUiScriptMarkup = 46 (limit:15) - !!! cc_exceeded variables = 44 (limit:15) - !!! cc_exceeded variableById = 44 (limit:15) - !!! cc_exceeded steps = 44 (limit:15) - !!! cc_exceeded stepIds = 44 (limit:15) + !!! high_fan_out compareWorkspaceIntent = 40 (limit:10) + !!! cc_exceeded parseFile = 38 (limit:15) + !!! high_fan_out Client.parse_http_response = 37 (limit:10) + !!! high_fan_out run = 33 (limit:10) + !!! high_fan_out main = 31 (limit:10) + !!! high_fan_out executePipeline = 31 (limit:10) + !!! cc_exceeded makefile = 28 (limit:15) + !!! cc_exceeded main = 27 (limit:15) + !!! cc_exceeded run = 26 (limit:15) + !!! high_fan_out temporaryParent = 25 (limit:10) -MODULES[260] (top by size): +MODULES[281] (top by size): M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json) - M[src/synthesis/code-change-plan/implementation-helpers.ts] 1148L C:16 F:133 CC↑13 D:0 (typescript) M[src/cli.ts] 942L C:1 F:124 CC↑13 D:0 (typescript) M[src/services/actions.ts] 806L C:1 F:106 CC↑13 D:0 (typescript) M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json) - M[src/synthesis/code-change-plan/implementation-source-patch.ts] 694L C:5 F:95 CC↑11 D:0 (typescript) - M[src/diff/reality.ts] 619L C:3 F:74 CC↑26 D:0 (typescript) - M[src/pipeline/run.ts] 617L C:1 F:65 CC↑56 D:0 (typescript) + M[src/diff/reality.ts] 690L C:4 F:89 CC↑15 D:0 (typescript) + M[src/communication/analyzer.ts] 596L C:3 F:81 CC↑15 D:0 (typescript) M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json) M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript) - M[src/communication/analyzer.ts] 542L C:3 F:72 CC↑48 D:0 (typescript) M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript) M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml) + M[src/evaluation/gold-cases.ts] 489L C:4 F:62 CC↑8 D:0 (typescript) M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python) - M[src/graph/diagnostics.ts] 459L C:1 F:58 CC↑11 D:0 (typescript) - LANGS: typescript:152/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 + M[src/graph/diagnostics.ts] 459L C:1 F:59 CC↑11 D:0 (typescript) + M[src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts] 434L C:6 F:50 CC↑13 D:0 (typescript) + M[src/operations/validation.ts] 429L C:0 F:69 CC↑23 D:0 (typescript) + LANGS: typescript:173/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 HOTSPOTS[10]: - ★ runPipeline fan=56 // Orchestrates 56 calls ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls ★ Client.parse_http_response fan=37 // Orchestrates 37 calls - ★ diffUiScriptMarkup fan=36 // Orchestrates 36 calls - ★ analyzeCommunication fan=35 // Analysis pipeline, 35 stages + ★ run fan=33 // Orchestrates 33 calls + ★ main fan=31 // Orchestrates 31 calls + ★ executePipeline fan=31 // Orchestrates 31 calls REFACTOR[15]: - [1] H/L Split diffUiScriptMarkup (CC=46) - [2] H/L Split OpenRouterClient.timeout (CC=26) - [3] H/L Split OpenRouterClient.request (CC=31) - [4] H/L Split parseCommand (CC=63) - [5] H/L Split buildRealityView (CC=26) + [1] H/L Split parseFile (CC=38) + [2] H/L Split makefile (CC=28) + [3] H/L Split main (CC=27) + [4] H/L Split run (CC=26) + [5] H/H Split god module src/communication/analyzer.ts (596L, 3 classes) EVOLUTION: - 2026-08-04 CC̄=3.3 crit=220 41965L // Automated analysis + 2026-08-04 CC̄=3.1 crit=187 43441L // Automated analysis diff --git a/project/prompt.txt b/project/prompt.txt index 44da076..6bb72d0 100644 --- a/project/prompt.txt +++ b/project/prompt.txt @@ -8,11 +8,11 @@ we are in project path: todo2code Files for analysis: Note: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup) -- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [24KB] -- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [168KB] +- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [25KB] +- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [181KB] - evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB] - project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB] -- context.md (LLM narrative - architecture summary and project context) [34KB] +- context.md (LLM narrative - architecture summary and project context) [33KB] - README.md (Generated documentation - overview and usage guide) [9KB] Task: diff --git a/src/communication/analyzer.ts b/src/communication/analyzer.ts index 4e95e9c..734cd57 100644 --- a/src/communication/analyzer.ts +++ b/src/communication/analyzer.ts @@ -62,9 +62,35 @@ export function analyzeCommunication( const communication = graph.records.filter((record) => record.source.kind === 'agent_log'); validateSyntheses(syntheses, communication); const evidenceByRecord = evidenceNeighbors(graph); + const { participants, issues } = collectParticipantsAndIdentityIssues(communication); + const humanRequests = communication.filter((record) => roleOf(record) === 'human' && ['request', 'message'].includes(typeOf(record))); + const agentMessages = communication.filter((record) => roleOf(record) === 'agent'); + const allIssues = [ + ...issues, + ...collectConflictIssues(communication, participants), + ...collectRequestResponseIssues(communication, humanRequests, agentMessages), + ...collectAgentActionIssues(communication, graph, evidenceByRecord, humanRequests, agentMessages), + ]; + const uniqueIssues = deduplicateCommunicationIssues(allIssues) + .sort((a, b) => severityRank(b.severity) - severityRank(a.severity) || a.id.localeCompare(b.id)); + const participantRows = buildParticipantRows(graph, communication, participants, evidenceByRecord, uniqueIssues); + const counts: Record = { info: 0, warning: 0, review_required: 0, blocking: 0 }; + for (const item of uniqueIssues) counts[item.severity] += 1; + return { + schemaVersion: 't2c.communication-analysis/v1', + generatedAt, + graphFingerprint: graph.fingerprint, + tickets: [...new Set(communication.map(ticketOf))].sort(), + participants: participantRows, + syntheses: [...syntheses].sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)), + issues: uniqueIssues, + counts, + }; +} + +function collectParticipantsAndIdentityIssues(communication: IntentRecord[]): { participants: Map; issues: CommunicationIssue[] } { const issues: CommunicationIssue[] = []; const participants = new Map(); - for (const record of communication) { const participant = participantOf(record); const values = participants.get(participant); @@ -79,7 +105,14 @@ export function analyzeCommunication( )); } } + return { participants, issues }; +} +function collectConflictIssues( + communication: IntentRecord[], + participants: Map, +): CommunicationIssue[] { + const issues: CommunicationIssue[] = []; for (let leftIndex = 0; leftIndex < communication.length; leftIndex += 1) { for (let rightIndex = leftIndex + 1; rightIndex < communication.length; rightIndex += 1) { const left = communication[leftIndex]; @@ -91,11 +124,7 @@ export function analyzeCommunication( const rightRole = roleOf(right); if (leftRole === 'unknown' || rightRole === 'unknown') continue; const roles = [leftRole, rightRole].sort().join(':'); - const code = roles === 'human:human' - ? 'HUMAN_COMMUNICATION_CONFLICT' - : roles === 'agent:agent' - ? 'AGENT_COMMUNICATION_CONFLICT' - : 'HUMAN_AGENT_CONFLICT'; + const code = resolveConflictCode(roles); const responseRequiredRole: CommunicationRole = 'human'; const responseRequiredFrom = roles === 'human:human' ? [participantOf(left), participantOf(right)] @@ -110,9 +139,23 @@ export function analyzeCommunication( )); } } + return issues; +} - const humanRequests = communication.filter((record) => roleOf(record) === 'human' && ['request', 'message'].includes(typeOf(record))); - const agentMessages = communication.filter((record) => roleOf(record) === 'agent'); +function resolveConflictCode(roles: string): CommunicationIssue['code'] { + return roles === 'human:human' + ? 'HUMAN_COMMUNICATION_CONFLICT' + : roles === 'agent:agent' + ? 'AGENT_COMMUNICATION_CONFLICT' + : 'HUMAN_AGENT_CONFLICT'; +} + +function collectRequestResponseIssues( + communication: IntentRecord[], + humanRequests: IntentRecord[], + agentMessages: IntentRecord[], +): CommunicationIssue[] { + const issues: CommunicationIssue[] = []; for (const request of humanRequests) { const response = agentResponseCoversRequest(request, agentMessages); if (!response) { @@ -124,10 +167,21 @@ export function analyzeCommunication( )); } } + return issues; +} - for (const record of agentMessages) { +function collectAgentActionIssues( + communication: IntentRecord[], + graph: IntentGraph, + evidenceByRecord: Map, + humanRequests: IntentRecord[], + agentMessages: IntentRecord[], +): CommunicationIssue[] { + const issues: CommunicationIssue[] = []; + for (const record of communication.filter((record) => roleOf(record) === 'agent')) { const type = typeOf(record); - if (['report', 'result', 'claim'].includes(type) && isHumanDecisionClaim(record)) { + const isActionableMessage = ['report', 'result', 'claim'].includes(type); + if (isActionableMessage && isHumanDecisionClaim(record)) { issues.push(issue( 'AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED', 'review_required', ticketOf(record), [participantOf(record)], [record.id], @@ -135,7 +189,7 @@ export function analyzeCommunication( 'Właściciel zakresu powinien zapisać decyzję we własnym pliku komunikacji; agent nie może zrobić tego w jego imieniu.', 'human', participantsForRole(communication, ticketOf(record), 'human'), )); - } else if (['report', 'result', 'claim'].includes(type) && isPositiveImplementationClaim(record)) { + } else if (isActionableMessage && isPositiveImplementationClaim(record)) { const participantGit = matchedGitRecords(record, graph.records); const linked = evidenceByRecord.get(record.id) ?? []; if (participantGit.length === 0 && linked.length === 0) { @@ -161,13 +215,25 @@ export function analyzeCommunication( } } } + return issues; +} - const uniqueIssues = [...new Map(issues.map((item) => [item.id, item])).values()] - .sort((a, b) => severityRank(b.severity) - severityRank(a.severity) || a.id.localeCompare(b.id)); - const participantRows = [...participants.entries()].map(([participant, records]) => { +function deduplicateCommunicationIssues(issues: CommunicationIssue[]): CommunicationIssue[] { + return [...new Map(issues.map((item) => [item.id, item])).values()]; +} + +function buildParticipantRows( + graph: IntentGraph, + communication: IntentRecord[], + participants: Map, + evidenceByRecord: Map, + uniqueIssues: CommunicationIssue[], +): ParticipantCommunicationAnalysis[] { + return [...participants.entries()].map(([participant, records]) => { const aliases = new Set(records.flatMap(gitAliases)); aliases.add(normalizeIdentity(participant)); - const matchedGit = graph.records.filter((record) => record.source.kind === 'git' && aliases.has(normalizeIdentity(record.statement.actor ?? ''))); + const matchedGit = graph.records.filter((record) => record.source.kind === 'git' + && aliases.has(normalizeIdentity(record.statement.actor ?? ''))); const evidence = new Set(records.flatMap((record) => evidenceByRecord.get(record.id) ?? [])); return { participant, @@ -185,18 +251,6 @@ export function analyzeCommunication( issueIds: uniqueIssues.filter((item) => item.participantIds.includes(participant)).map((item) => item.id), } satisfies ParticipantCommunicationAnalysis; }).sort((a, b) => a.role.localeCompare(b.role) || a.participant.localeCompare(b.participant)); - const counts: Record = { info: 0, warning: 0, review_required: 0, blocking: 0 }; - for (const item of uniqueIssues) counts[item.severity] += 1; - return { - schemaVersion: 't2c.communication-analysis/v1', - generatedAt, - graphFingerprint: graph.fingerprint, - tickets: [...new Set(communication.map(ticketOf))].sort(), - participants: participantRows, - syntheses: [...syntheses].sort((left, right) => left.role.localeCompare(right.role) || left.participant.localeCompare(right.participant)), - issues: uniqueIssues, - counts, - }; } function validateSyntheses(syntheses: ParticipantCommunicationSynthesis[], communication: IntentRecord[]): void { diff --git a/src/communication/identity.ts b/src/communication/identity.ts index 15f36fe..3f6fcf8 100644 --- a/src/communication/identity.ts +++ b/src/communication/identity.ts @@ -97,43 +97,113 @@ function normalizeV2Entry(raw: unknown): ParticipantIdentityEntry { export function assertParticipantIdentityRegistry(value: unknown): asserts value is ParticipantIdentityRegistry { if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('Participant registry must be an object'); const registry = value as Record; - exactKeys(registry, ['schemaVersion', 'participants'], 'Participant registry'); - if (registry.schemaVersion !== 't2c.participant-registry/v1') throw new Error('Unsupported participant registry schemaVersion'); - if (!Array.isArray(registry.participants)) throw new Error('Participant registry participants must be an array'); + validateRegistryShape(registry); const ids = new Set(); const external = new Map(); - for (const raw of registry.participants) { - if (!raw || typeof raw !== 'object' || Array.isArray(raw)) throw new Error('Participant registry entry must be an object'); - const entry = raw as Record; - exactKeys(entry, ['id', 'role', 'displayName', 'gitAuthors', 'a2aAgentIds', 'humanAliases'], 'Participant registry entry'); - if (typeof entry.id !== 'string' || !/^(human|agent):[a-z0-9][a-z0-9._-]*$/.test(entry.id)) { - throw new Error('Participant registry id must be canonical human: or agent:'); - } - if (entry.role !== 'human' && entry.role !== 'agent') throw new Error(`Participant ${entry.id} role must be human or agent`); - if (!entry.id.startsWith(`${entry.role}:`)) throw new Error(`Participant ${entry.id} role does not match its stable ID prefix`); - if (typeof entry.displayName !== 'string' || !entry.displayName.trim()) throw new Error(`Participant ${entry.id} displayName must be non-blank`); - if (ids.has(entry.id)) throw new Error(`Duplicate participant registry id: ${entry.id}`); - ids.add(entry.id); - for (const field of ['gitAuthors', 'a2aAgentIds', 'humanAliases'] as const) { - const values = entry[field]; - if (!Array.isArray(values) || values.some((item) => typeof item !== 'string' || !item.trim())) { - throw new Error(`Participant ${entry.id} ${field} must contain non-blank strings`); - } - const normalized = values.map((item) => (item as string).trim().toLowerCase()); - if (new Set(normalized).size !== normalized.length) throw new Error(`Participant ${entry.id} ${field} must be unique`); - for (const identifier of normalized) { - const key = `${field}:${identifier}`; - const owner = external.get(key); - if (owner && owner !== entry.id) throw new Error(`${field} identifier ${identifier} is assigned to both ${owner} and ${entry.id}`); - external.set(key, entry.id); - } - } - if (entry.role === 'human' && (entry.a2aAgentIds as unknown[]).length) { - throw new Error(`Human participant ${entry.id} cannot declare a2aAgentIds`); - } - if (entry.role === 'agent' && (entry.humanAliases as unknown[]).length) { - throw new Error(`Agent participant ${entry.id} cannot declare humanAliases`); + const participants = registry.participants; + for (const raw of participants) { + assertParticipantIdentityEntry(raw, ids, external); + } +} + +function validateRegistryShape(registry: Record): asserts registry is { schemaVersion: string; participants: unknown[] } { + exactKeys(registry, ['schemaVersion', 'participants'], 'Participant registry'); + if (registry.schemaVersion !== 't2c.participant-registry/v1') { + throw new Error('Unsupported participant registry schemaVersion'); + } + if (!Array.isArray(registry.participants)) { + throw new Error('Participant registry participants must be an array'); + } +} + +function assertParticipantIdentityEntry( + raw: unknown, + ids: Set, + external: Map, +): void { + if (!raw || typeof raw !== 'object' || Array.isArray(raw)) throw new Error('Participant registry entry must be an object'); + const entry = raw as Record; + exactKeys(entry, ['id', 'role', 'displayName', 'gitAuthors', 'a2aAgentIds', 'humanAliases'], 'Participant registry entry'); + const participantId = assertParticipantIdentityId(entry); + const role = assertParticipantIdentityRole(entry); + assertDisplayName(participantId, entry); + assertDuplicateId(participantId, ids); + ids.add(participantId); + for (const field of ['gitAuthors', 'a2aAgentIds', 'humanAliases'] as const) { + const values = assertParticipantIdentityField(entry, participantId, field); + assertParticipantIdentityFieldUnique(participantId, field, values, external); + } + assertRoleCompatibility(participantId, role, entry); +} + +function assertParticipantIdentityId(entry: Record): string { + if (typeof entry.id !== 'string' || !/^(human|agent):[a-z0-9][a-z0-9._-]*$/.test(entry.id)) { + throw new Error('Participant registry id must be canonical human: or agent:'); + } + return entry.id; +} + +function assertParticipantIdentityRole(entry: Record): 'human' | 'agent' { + if (entry.role !== 'human' && entry.role !== 'agent') { + throw new Error(`Participant ${(entry.id as string)} role must be human or agent`); + } + if (!(typeof entry.id === 'string' && entry.id.startsWith(`${entry.role}:`))) { + throw new Error(`Participant ${(entry.id as string)} role does not match its stable ID prefix`); + } + return entry.role; +} + +function assertDisplayName(participantId: string, entry: Record): void { + if (typeof entry.displayName !== 'string' || !entry.displayName.trim()) { + throw new Error(`Participant ${participantId} displayName must be non-blank`); + } +} + +function assertDuplicateId(participantId: string, ids: Set): void { + if (ids.has(participantId)) throw new Error(`Duplicate participant registry id: ${participantId}`); +} + +function assertParticipantIdentityField( + entry: Record, + participantId: string, + field: 'gitAuthors' | 'a2aAgentIds' | 'humanAliases', +): string[] { + const values = entry[field]; + if (!Array.isArray(values) || values.some((item) => typeof item !== 'string' || !item.trim())) { + throw new Error(`Participant ${participantId} ${field} must contain non-blank strings`); + } + return values.map((item) => (item as string).trim().toLowerCase()); +} + +function assertParticipantIdentityFieldUnique( + participantId: string, + field: 'gitAuthors' | 'a2aAgentIds' | 'humanAliases', + normalized: string[], + external: Map, +): void { + if (new Set(normalized).size !== normalized.length) { + throw new Error(`Participant ${participantId} ${field} must be unique`); + } + for (const identifier of normalized) { + const key = `${field}:${identifier}`; + const owner = external.get(key); + if (owner && owner !== participantId) { + throw new Error(`${field} identifier ${identifier} is assigned to both ${owner} and ${participantId}`); } + external.set(key, participantId); + } +} + +function assertRoleCompatibility( + participantId: string, + role: 'human' | 'agent', + entry: Record, +): void { + if (role === 'human' && (entry.a2aAgentIds as unknown[]).length) { + throw new Error(`Human participant ${participantId} cannot declare a2aAgentIds`); + } + if (role === 'agent' && (entry.humanAliases as unknown[]).length) { + throw new Error(`Agent participant ${participantId} cannot declare humanAliases`); } } diff --git a/src/communication/intake-contract.ts b/src/communication/intake-contract.ts index 792fbb0..39069d1 100644 --- a/src/communication/intake-contract.ts +++ b/src/communication/intake-contract.ts @@ -134,53 +134,114 @@ export function assertIntakeEnvelope(value: unknown, operation: 'command' | 'que 'schemaVersion', 'messageId', 'correlationId', 'causationId', 'idempotencyKey', 'authenticatedPrincipal', 'expectedVersion', 'timestamp', 'payloadHash', 'payload', 'unknownFields', ], 'Envelope', ['unknownFields']); + validateIntakeEnvelopeHeader(envelope); + validateIntakeEnvelopeTimestamp(envelope.timestamp); + if (operation === 'command') { + assertCommand(envelope.payload); + } else { + assertQuery(envelope.payload); + } + if (payloadHash(envelope.payload as IntakeCommand | IntakeQuery) !== envelope.payloadHash) { + invalid('Envelope payloadHash does not match payload'); + } +} + +function validateIntakeEnvelopeHeader(envelope: Record): void { if (envelope.schemaVersion !== INTAKE_SCHEMA_VERSION) invalid('Unsupported envelope schemaVersion'); for (const key of ['messageId', 'correlationId', 'idempotencyKey', 'authenticatedPrincipal', 'payloadHash'] as const) { if (typeof envelope[key] !== 'string' || !envelope[key].trim()) invalid(`Envelope ${key} must be a non-blank string`); } if (envelope.causationId !== null && typeof envelope.causationId !== 'string') invalid('Envelope causationId must be a string or null'); - if (envelope.expectedVersion !== null && (!Number.isSafeInteger(envelope.expectedVersion) || (envelope.expectedVersion as number) < 0)) { + if (envelope.expectedVersion !== null + && (!Number.isSafeInteger(envelope.expectedVersion) || (envelope.expectedVersion as number) < 0)) { invalid('Envelope expectedVersion must be a non-negative integer or null'); } - if (typeof envelope.timestamp !== 'string' || !Number.isFinite(Date.parse(envelope.timestamp))) invalid('Envelope timestamp must be ISO 8601'); if (!/^[a-f0-9]{64}$/.test(envelope.payloadHash as string)) invalid('Envelope payloadHash must be lowercase SHA-256'); - if (envelope.unknownFields !== undefined && (!Array.isArray(envelope.unknownFields) || !envelope.unknownFields.every((item) => typeof item === 'string'))) { + if (envelope.unknownFields !== undefined + && (!Array.isArray(envelope.unknownFields) || !envelope.unknownFields.every((item) => typeof item === 'string'))) { invalid('Envelope unknownFields must contain base64 strings'); } - if (operation === 'command') assertCommand(envelope.payload); - else assertQuery(envelope.payload); - if (payloadHash(envelope.payload as IntakeCommand | IntakeQuery) !== envelope.payloadHash) invalid('Envelope payloadHash does not match payload'); +} + +function validateIntakeEnvelopeTimestamp(timestamp: unknown): void { + if (typeof timestamp !== 'string' || !Number.isFinite(Date.parse(timestamp))) { + invalid('Envelope timestamp must be ISO 8601'); + } } export function assertCommand(value: unknown): asserts value is IntakeCommand { const base = strictObject(value, ['schemaVersion', 'type', ...commandFields(value)], 'Command'); if (base.schemaVersion !== COMMAND_SCHEMA_VERSION) invalid('Unsupported command schemaVersion'); + validateCommandPayload(base as Record & { schemaVersion: string; type: string }); +} + +function validateCommandPayload( + base: Record & { schemaVersion: string; type: string }, +): void { switch (base.type) { - case 'RegisterParticipant': assertParticipant(base.participant); break; - case 'BindExternalIdentity': participantId(base.participantId); assertPrincipal(base.principal); break; + case 'RegisterParticipant': + assertParticipant(base.participant); + break; + case 'BindExternalIdentity': + participantId(base.participantId); + assertPrincipal(base.principal); + break; case 'AssignRole': - participantId(base.participantId); role(base.governanceRole); stringArray(base.ticketIds, 'ticketIds'); capabilities(base.capabilities); break; + participantId(base.participantId); + role(base.governanceRole); + stringArray(base.ticketIds, 'ticketIds'); + capabilities(base.capabilities); + break; case 'CaptureMessage': - participantId(base.participantId); role(base.governanceRole); ticketId(base.ticketId); - if (typeof base.message !== 'string' || !base.message.trim()) invalid('CaptureMessage message must be non-blank'); - if (Buffer.byteLength(base.message) > 256 * 1024) invalid('CaptureMessage message exceeds 262144 bytes'); + participantId(base.participantId); + role(base.governanceRole); + ticketId(base.ticketId); + if (typeof base.message !== 'string' || !base.message.trim()) { + invalid('CaptureMessage message must be non-blank'); + } + if (Buffer.byteLength(base.message) > 256 * 1024) { + invalid('CaptureMessage message exceeds 262144 bytes'); + } + break; + case 'RebuildProjection': + participantId(base.participantId); + ticketId(base.ticketId); + break; + case 'VerifyEventStream': break; - case 'RebuildProjection': participantId(base.participantId); ticketId(base.ticketId); break; - case 'VerifyEventStream': break; - default: invalid('Unsupported command type'); + default: + invalid('Unsupported command type'); } } export function assertQuery(value: unknown): asserts value is IntakeQuery { const base = strictObject(value, ['schemaVersion', 'type', ...queryFields(value)], 'Query'); if (base.schemaVersion !== QUERY_SCHEMA_VERSION) invalid('Unsupported query schemaVersion'); + validateQueryPayload(base as Record & { schemaVersion: string; type: string }); +} + +function validateQueryPayload( + base: Record & { schemaVersion: string; type: string }, +): void { switch (base.type) { - case 'ResolveParticipant': nonBlank(base.principal, 'principal'); break; - case 'GetRole': participantId(base.participantId); break; - case 'GetTicketConversation': ticketId(base.ticketId); break; - case 'GetCommandStatus': nonBlank(base.idempotencyKey, 'idempotencyKey'); break; - case 'ValidateProjection': participantId(base.participantId); ticketId(base.ticketId); break; - default: invalid('Unsupported query type'); + case 'ResolveParticipant': + nonBlank(base.principal, 'principal'); + break; + case 'GetRole': + participantId(base.participantId); + break; + case 'GetTicketConversation': + ticketId(base.ticketId); + break; + case 'GetCommandStatus': + nonBlank(base.idempotencyKey, 'idempotencyKey'); + break; + case 'ValidateProjection': + participantId(base.participantId); + ticketId(base.ticketId); + break; + default: + invalid('Unsupported query type'); } } diff --git a/src/communication/intake-protobuf.ts b/src/communication/intake-protobuf.ts index 8e6c238..88c084d 100644 --- a/src/communication/intake-protobuf.ts +++ b/src/communication/intake-protobuf.ts @@ -20,38 +20,14 @@ export function encodeIntakeEnvelope(envelope: IntakeEnvelope): Uint8Array { export function decodeIntakeEnvelope(bytes: Uint8Array, operation: 'command' | 'query'): IntakeEnvelope { try { - const values = new Map(); - const unknownFields: string[] = []; - let offset = 0; - while (offset < bytes.length) { - const fieldStart = offset; - const [tag, afterTag] = readVarint(bytes, offset); offset = afterTag; - const number = tag >>> 3; - const wire = tag & 7; - if (wire === 0) { - const [value, after] = readVarint(bytes, offset); offset = after; - if (number === 7) values.set(number, value); - else unknownFields.push(Buffer.from(bytes.slice(fieldStart, offset)).toString('base64')); - } else if (wire === 2) { - const [length, afterLength] = readVarint(bytes, offset); offset = afterLength; - if (offset + length > bytes.length) throw new Error('Truncated length-delimited field'); - const raw = bytes.slice(offset, offset + length); offset += length; - if (number >= 1 && number <= 10 && number !== 7) values.set(number, Buffer.from(raw).toString('utf8')); - else unknownFields.push(Buffer.from(bytes.slice(fieldStart, offset)).toString('base64')); - } else { - throw new Error(`Unsupported wire type ${wire}`); - } - } + const parsed = decodeDelimitedFields(bytes); + const values = parsed.values; + const unknownFields = parsed.unknownFields; const required = [1, 2, 3, 5, 6, 8, 9, 10]; if (required.some((field) => !values.has(field))) throw new Error('Missing required envelope field'); - const payload = JSON.parse(String(values.get(10))) as IntakeCommand | IntakeQuery; - const envelope: IntakeEnvelope = { - schemaVersion: String(values.get(1)) as IntakeEnvelope['schemaVersion'], messageId: String(values.get(2)), - correlationId: String(values.get(3)), causationId: values.has(4) ? String(values.get(4)) : null, - idempotencyKey: String(values.get(5)), authenticatedPrincipal: String(values.get(6)), - expectedVersion: values.has(7) ? Number(values.get(7)) : null, timestamp: String(values.get(8)), - payloadHash: String(values.get(9)), payload, ...(unknownFields.length ? { unknownFields } : {}), - }; + + const payload = parsePayloadJson(values.get(10)); + const envelope = buildIntakeEnvelope(values, unknownFields, payload); assertIntakeEnvelope(envelope, operation); return envelope; } catch (error) { @@ -74,32 +50,89 @@ export function encodeIntakeResult(result: IntakeResult): Uint8Array { export function decodeIntakeResult(bytes: Uint8Array): IntakeResult { try { - const strings = new Map(); - const numbers = new Map(); - let offset = 0; - while (offset < bytes.length) { - const [tag, afterTag] = readVarint(bytes, offset); offset = afterTag; - const field = tag >>> 3; const wire = tag & 7; - if (wire === 0) { const [value, after] = readVarint(bytes, offset); offset = after; numbers.set(field, value); } - else if (wire === 2) { - const [length, afterLength] = readVarint(bytes, offset); offset = afterLength; - if (offset + length > bytes.length) throw new Error('Truncated result field'); - strings.set(field, Buffer.from(bytes.slice(offset, offset + length)).toString('utf8')); offset += length; - } else throw new Error(`Unsupported result wire type ${wire}`); - } + const parsed = decodeDelimitedFields(bytes); + const strings = parsed.strings; + const numbers = parsed.numbers; return { schemaVersion: strings.get(1) as IntakeResult['schemaVersion'], accepted: numbers.get(2) === 1, messageId: strings.get(3) ?? '', correlationId: strings.get(4) ?? '', causationId: strings.get(5) ?? null, authenticatedPrincipal: strings.get(6) ?? '', aggregateId: 'intake', expectedVersion: numbers.get(8) ?? null, actualVersion: numbers.get(9) ?? 0, idempotencyKey: strings.get(10) ?? '', timestamp: strings.get(11) ?? '', - payloadHash: strings.get(12) ?? '', diagnostic: strings.has(13) ? JSON.parse(strings.get(13) as string) : null, - data: strings.has(14) ? JSON.parse(strings.get(14) as string) : null, + payloadHash: strings.get(12) ?? '', diagnostic: parseOptionalJson(strings.get(13)), + data: parseOptionalJson(strings.get(14)), }; } catch (error) { throw new IntakeError('T2C-INTAKE-INVALID-WIRE', error instanceof Error ? error.message : String(error), 'Send a valid t2c.intake-result/v1 Protobuf payload.'); } } +function decodeDelimitedFields(bytes: Uint8Array): { + values: Map; + strings: Map; + numbers: Map; + unknownFields: string[]; +} { + const values = new Map(); + const strings = new Map(); + const numbers = new Map(); + const unknownFields: string[] = []; + let offset = 0; + while (offset < bytes.length) { + const fieldStart = offset; + const [tag, afterTag] = readVarint(bytes, offset); offset = afterTag; + const field = tag >>> 3; + const wire = tag & 7; + if (wire === 0) { + const [value, after] = readVarint(bytes, offset); offset = after; + if (field === 7) values.set(field, value); + numbers.set(field, value); + if (field !== 7) unknownFields.push(Buffer.from(bytes.slice(fieldStart, offset)).toString('base64')); + continue; + } + if (wire === 2) { + const [length, afterLength] = readVarint(bytes, offset); offset = afterLength; + if (offset + length > bytes.length) throw new Error('Truncated length-delimited field'); + const raw = bytes.slice(offset, offset + length); + offset += length; + if (field === 10 || field === 13 || field === 14 || (field >= 1 && field <= 12 && field !== 7)) { + const value = Buffer.from(raw).toString('utf8'); + values.set(field, value); + strings.set(field, value); + } else { + unknownFields.push(Buffer.from(bytes.slice(fieldStart, offset)).toString('base64')); + } + continue; + } + throw new Error(`Unsupported wire type ${wire}`); + } + return { values, strings, numbers, unknownFields }; +} + +function parsePayloadJson(raw: string | number | undefined): IntakeCommand | IntakeQuery { + if (typeof raw !== 'string') throw new Error('Missing envelope payload'); + return JSON.parse(raw) as IntakeCommand | IntakeQuery; +} + +function parseOptionalJson(raw: string | undefined): unknown { + if (!raw) return null; + return JSON.parse(raw); +} + +function buildIntakeEnvelope( + values: Map, + unknownFields: string[], + payload: IntakeCommand | IntakeQuery, +): IntakeEnvelope { + return { + schemaVersion: String(values.get(1)) as IntakeEnvelope['schemaVersion'], messageId: String(values.get(2)), + correlationId: String(values.get(3)), causationId: values.has(4) ? String(values.get(4)) : null, + idempotencyKey: String(values.get(5)), authenticatedPrincipal: String(values.get(6)), + expectedVersion: values.has(7) ? Number(values.get(7)) : null, timestamp: String(values.get(8)), + payloadHash: String(values.get(9)), payload, + ...(unknownFields.length ? { unknownFields } : {}), + }; +} + function bytesField(field: number, value: string): Uint8Array { const data = Buffer.from(value, 'utf8'); return Buffer.concat([writeVarint((field << 3) | 2), writeVarint(data.length), data]); diff --git a/src/core/record-metadata.ts b/src/core/record-metadata.ts new file mode 100644 index 0000000..edf4421 --- /dev/null +++ b/src/core/record-metadata.ts @@ -0,0 +1,27 @@ +import type { BuildRecordGenerationInput, IntentGenerationMetadata } from './types.js'; +import { T2C_VERSION } from './version.js'; + +export function generationMetadata( + extractor: string, + input: BuildRecordGenerationInput | undefined, +): IntentGenerationMetadata { + return { + ...generationIdentity(extractor), + runtimeVersion: T2C_VERSION, + requested: input?.requested ?? (input?.used ?? 'deterministic'), + used: input?.used ?? 'deterministic', + degraded: input?.degraded ?? false, + fallbackReason: input?.fallbackReason ?? null, + provider: input?.provider ?? null, + model: input?.model ?? null, + responseId: input?.responseId ?? null, + }; +} + +function generationIdentity(extractor: string): { generator: string; generatorVersion: string } { + const separator = extractor.lastIndexOf('@'); + if (separator > 0 && separator < extractor.length - 1) { + return { generator: extractor.slice(0, separator), generatorVersion: extractor.slice(separator + 1) }; + } + return { generator: extractor, generatorVersion: T2C_VERSION }; +} diff --git a/src/core/record.ts b/src/core/record.ts index 0f9d6dd..e39812a 100644 --- a/src/core/record.ts +++ b/src/core/record.ts @@ -14,7 +14,7 @@ import type { SourceLineRange, } from './types.js'; import { normalizeTarget } from './target.js'; -import { T2C_VERSION } from './version.js'; +import { generationMetadata } from './record-metadata.js'; export interface BuildRecordGenerationInput { requested?: IntentGenerationMode; @@ -138,31 +138,6 @@ export function withRecordGeneration( }; } -function generationMetadata( - extractor: string, - input: BuildRecordGenerationInput | undefined, -): IntentGenerationMetadata { - return { - ...generationIdentity(extractor), - runtimeVersion: T2C_VERSION, - requested: input?.requested ?? (input?.used ?? 'deterministic'), - used: input?.used ?? 'deterministic', - degraded: input?.degraded ?? false, - fallbackReason: input?.fallbackReason ?? null, - provider: input?.provider ?? null, - model: input?.model ?? null, - responseId: input?.responseId ?? null, - }; -} - -function generationIdentity(extractor: string): { generator: string; generatorVersion: string } { - const separator = extractor.lastIndexOf('@'); - if (separator > 0 && separator < extractor.length - 1) { - return { generator: extractor.slice(0, separator), generatorVersion: extractor.slice(separator + 1) }; - } - return { generator: extractor, generatorVersion: T2C_VERSION }; -} - function clamp(value: number): number { return Math.round(Math.max(0, Math.min(1, value)) * 1000) / 1000; } diff --git a/src/diff/git-binary.ts b/src/diff/git-binary.ts new file mode 100644 index 0000000..f30ea2a --- /dev/null +++ b/src/diff/git-binary.ts @@ -0,0 +1,10 @@ +import path from 'node:path'; + +export const BINARY_EXTENSIONS = new Set([ + '.png', '.jpg', '.jpeg', '.gif', '.webp', '.ico', '.pdf', '.zip', '.gz', '.tar', + '.woff', '.woff2', '.ttf', '.eot', '.mp4', '.mp3', '.wasm', '.so', '.dylib', '.dll', +]); + +export function isProbablyBinary(filePath: string): boolean { + return BINARY_EXTENSIONS.has(path.extname(filePath).toLowerCase()); +} diff --git a/src/diff/git.ts b/src/diff/git.ts index 4c9fe44..6602acd 100644 --- a/src/diff/git.ts +++ b/src/diff/git.ts @@ -10,6 +10,7 @@ import { promises as fs } from 'node:fs'; import path from 'node:path'; import { promisify } from 'node:util'; import { diffText, type DiffTextOptions, type FileDiff } from './text.js'; +import { isProbablyBinary } from './git-binary.js'; const execFileAsync = promisify(execFile); @@ -38,74 +39,124 @@ interface ChangedEntry { previousPath: string | null; } -const BINARY_EXTENSIONS = new Set([ - '.png', '.jpg', '.jpeg', '.gif', '.webp', '.ico', '.pdf', '.zip', '.gz', '.tar', - '.woff', '.woff2', '.ttf', '.eot', '.mp4', '.mp3', '.wasm', '.so', '.dylib', '.dll', -]); +interface ResolvedGitDiffOptions { + root: string; + revision: string; + staged: boolean; + maxFiles: number; +} export async function collectGitDiff(options: GitDiffOptions): Promise { - const root = path.resolve(options.root); - const revision = options.revision?.trim() || 'HEAD'; - const staged = options.staged ?? false; - const maxFiles = Math.max(1, Math.min(500, Math.trunc(options.maxFiles ?? 50))); + const normalized = resolveGitDiffOptions(options); const warnings: string[] = []; - try { - const inside = (await runGit(root, ['rev-parse', '--is-inside-work-tree'])).trim(); - if (inside !== 'true') return { revision, staged, diffs: [], warnings: [`${root} is not a Git work tree`] }; - } catch { - return { revision, staged, diffs: [], warnings: [`Git repository not available at ${root}`] }; + const worktree = await getWorktreeStatus(normalized.root); + if (!worktree.available) { + return { ...normalized, diffs: [], warnings: [`Git repository not available at ${normalized.root}`] }; + } + if (!worktree.inside) { + return { ...normalized, diffs: [], warnings: [`${normalized.root} is not a Git work tree`] }; } - const args = ['diff', '--name-status', '-M', '--no-ext-diff']; - if (staged) args.push('--cached'); - args.push(revision); - if (options.paths?.length) args.push('--', ...options.paths); - + const args = buildNameStatusArgs(normalized, options.paths); let entries: ChangedEntry[]; try { - entries = parseNameStatus(await runGit(root, args)); + entries = parseNameStatus(await runGit(normalized.root, args)); } catch (error) { return { - revision, - staged, + ...normalized, diffs: [], warnings: [`git diff failed: ${error instanceof Error ? error.message : String(error)}`], }; } - if (entries.length > maxFiles) { - warnings.push(`Showing ${maxFiles} of ${entries.length} changed files; raise --max-files to widen the view`); - entries = entries.slice(0, maxFiles); - } + const selected = capEntries(entries, normalized.maxFiles, warnings); + const diffs = await collectFileDiffs(selected, normalized, options, warnings); + return { ...normalized, diffs, warnings }; +} + +function resolveGitDiffOptions(options: GitDiffOptions): ResolvedGitDiffOptions { + return { + root: path.resolve(options.root), + revision: options.revision?.trim() || 'HEAD', + staged: options.staged ?? false, + maxFiles: Math.max(1, Math.min(500, Math.trunc(options.maxFiles ?? 50))), + }; +} + +function getWorktreeStatus(root: string): Promise<{ available: boolean; inside: boolean }> { + return runGit(root, ['rev-parse', '--is-inside-work-tree']) + .then((inside) => ({ available: true, inside: inside.trim() === 'true' })) + .catch(() => ({ available: false, inside: false })); +} +function buildNameStatusArgs(options: ResolvedGitDiffOptions, paths?: string[]): string[] { + const args = ['diff', '--name-status', '-M', '--no-ext-diff']; + if (options.staged) args.push('--cached'); + args.push(options.revision); + if (paths?.length) args.push('--', ...paths); + return args; +} + +function capEntries(entries: ChangedEntry[], maxFiles: number, warnings: string[]): ChangedEntry[] { + if (entries.length <= maxFiles) return entries; + warnings.push(`Showing ${maxFiles} of ${entries.length} changed files; raise --max-files to widen the view`); + return entries.slice(0, maxFiles); +} + +async function collectFileDiffs( + entries: ChangedEntry[], + options: ResolvedGitDiffOptions, + requestOptions: GitDiffOptions, + warnings: string[], +): Promise { const diffs: FileDiff[] = []; for (const entry of entries) { - if (isProbablyBinary(entry.path)) { - warnings.push(`Skipped binary file ${entry.path}`); - continue; - } - const beforePath = entry.previousPath ?? entry.path; - const before = entry.status.startsWith('A') - ? '' - : await readBlob(root, revision, beforePath); - const after = entry.status.startsWith('D') - ? '' - : staged - ? await readStagedBlob(root, entry.path, warnings) - : await readWorkingFile(root, entry.path, warnings); - - const diff = diffText(before, after, { - path: entry.path, - beforePath, - afterPath: entry.path, - ...(options.context !== undefined ? { context: options.context } : {}), - ...(options.maxCompareLines !== undefined ? { maxCompareLines: options.maxCompareLines } : {}), - }); - if (diff.hunks.length > 0) diffs.push(diff); + const diff = await buildFileDiff(entry, options, requestOptions, warnings); + if (diff) diffs.push(diff); + } + return diffs; +} + +async function buildFileDiff( + entry: ChangedEntry, + options: ResolvedGitDiffOptions, + requestOptions: GitDiffOptions, + warnings: string[], +): Promise { + if (isProbablyBinary(entry.path)) { + warnings.push(`Skipped binary file ${entry.path}`); + return null; } - return { revision, staged, diffs, warnings }; + const beforePath = entry.previousPath ?? entry.path; + const before = await loadBeforeSnapshot(options.root, options.revision, entry); + const after = await loadAfterSnapshot(options.root, entry, options.staged, warnings); + + const diff = diffText(before, after, { + path: entry.path, + beforePath, + afterPath: entry.path, + ...(requestOptions.context !== undefined ? { context: requestOptions.context } : {}), + ...(requestOptions.maxCompareLines !== undefined ? { maxCompareLines: requestOptions.maxCompareLines } : {}), + }); + return diff.hunks.length > 0 ? diff : null; +} + +async function loadBeforeSnapshot(root: string, revision: string, entry: ChangedEntry): Promise { + if (entry.status.startsWith('A')) return ''; + return readBlob(root, revision, entry.previousPath ?? entry.path); +} + +async function loadAfterSnapshot( + root: string, + entry: ChangedEntry, + staged: boolean, + warnings: string[], +): Promise { + if (entry.status.startsWith('D')) return ''; + if (staged) return readStagedBlob(root, entry.path, warnings); + return readWorkingFile(root, entry.path, warnings); } function parseNameStatus(output: string): ChangedEntry[] { @@ -124,10 +175,6 @@ function parseNameStatus(output: string): ChangedEntry[] { .sort((left, right) => left.path.localeCompare(right.path)); } -function isProbablyBinary(filePath: string): boolean { - return BINARY_EXTENSIONS.has(path.extname(filePath).toLowerCase()); -} - async function readBlob(root: string, revision: string, filePath: string): Promise { try { return await runGit(root, ['show', `${revision}:${filePath}`], 16 * 1024 * 1024); diff --git a/src/diff/reality.ts b/src/diff/reality.ts index 645be3f..ef299e9 100644 --- a/src/diff/reality.ts +++ b/src/diff/reality.ts @@ -158,47 +158,70 @@ export function buildRealityView( assertIntentGraph(graph); const components = groupIntoTopics(graph); const diagnosticsByRecord = indexDiagnostics(diagnostics); + const rows = buildRealityRows(components, diagnosticsByRecord); + return { + schemaVersion: 't2c.reality/v1', + generatedAt, + graphFingerprint: graph.fingerprint, + fingerprint: sha256(stableStringify(rows.map((row) => [row.key, row.status, row.recordIds]))), + rows, + totals: buildRealityTotals(graph, rows), + }; +} - const rows: RealityRow[] = components.map(({ key, records }) => { - const lanes: Record = {}; - for (const kind of LANE_ORDER) lanes[kind] = 0; - for (const record of records) { - lanes[record.source.kind] = (lanes[record.source.kind] ?? 0) + 1; - } +function buildRealityRows( + components: Array<{ key: string; records: IntentRecord[] }>, + diagnosticsByRecord: Map, +): RealityRow[] { + const rows = components.map(({ key, records }) => buildRealityRow(key, records, diagnosticsByRecord)); + rows.sort(compareRealityRows); + return rows; +} - const codes = new Set(); - let severity: DiagnosticSeverity = 'info'; - for (const record of records) { - for (const diagnostic of diagnosticsByRecord.get(record.id) ?? []) { - codes.add(diagnostic.code); - if (SEVERITY_RANK[diagnostic.severity] > SEVERITY_RANK[severity]) severity = diagnostic.severity; - } +function buildRealityRow( + key: string, + records: IntentRecord[], + diagnosticsByRecord: Map, +): RealityRow { + const lanes: Record = {}; + for (const kind of LANE_ORDER) lanes[kind] = 0; + for (const record of records) { + lanes[record.source.kind] = (lanes[record.source.kind] ?? 0) + 1; + } + + const codes = new Set(); + let severity: DiagnosticSeverity = 'info'; + for (const record of records) { + for (const diagnostic of diagnosticsByRecord.get(record.id) ?? []) { + codes.add(diagnostic.code); + if (SEVERITY_RANK[diagnostic.severity] > SEVERITY_RANK[severity]) severity = diagnostic.severity; } + } - const status = resolveStatus(codes, lanes); - return { - key, - label: topicLabel(key, records), - lanes, - status, - severity: status === 'aligned' ? 'info' : severity, - recordIds: records.map((record) => record.id).sort(), - diagnosticCodes: [...codes].sort(), - evidence: resolveEvidence(lanes), - }; - }); + const status = resolveStatus(codes, lanes); + return { + key, + label: topicLabel(key, records), + lanes, + status, + severity: status === 'aligned' ? 'info' : severity, + recordIds: records.map((record) => record.id).sort(), + diagnosticCodes: [...codes].sort(), + evidence: resolveEvidence(lanes), + }; +} - // Most severe first, then largest topic, then stable by key. - rows.sort((left, right) => { - const bySeverity = SEVERITY_RANK[right.severity] - SEVERITY_RANK[left.severity]; - if (bySeverity !== 0) return bySeverity; - const alignment = Number(left.status === 'aligned') - Number(right.status === 'aligned'); - if (alignment !== 0) return alignment; - const bySize = right.recordIds.length - left.recordIds.length; - if (bySize !== 0) return bySize; - return left.key.localeCompare(right.key); - }); +function compareRealityRows(left: RealityRow, right: RealityRow): number { + const bySeverity = SEVERITY_RANK[right.severity] - SEVERITY_RANK[left.severity]; + if (bySeverity !== 0) return bySeverity; + const alignment = Number(left.status === 'aligned') - Number(right.status === 'aligned'); + if (alignment !== 0) return alignment; + const bySize = right.recordIds.length - left.recordIds.length; + if (bySize !== 0) return bySize; + return left.key.localeCompare(right.key); +} +function buildRealityTotals(graph: IntentGraph, rows: RealityRow[]): IntentRealityView['totals'] { const byStatus: Record = {}; for (const row of rows) byStatus[row.status] = (byStatus[row.status] ?? 0) + 1; @@ -215,31 +238,24 @@ export function buildRealityView( && OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; return { - schemaVersion: 't2c.reality/v1', - generatedAt, - graphFingerprint: graph.fingerprint, - fingerprint: sha256(stableStringify(rows.map((row) => [row.key, row.status, row.recordIds]))), - rows, - totals: { - topics: rows.length, - aligned, - gaps: rows.length - aligned, - alignedByEvidence: { - code: rows.filter((row) => row.status === 'aligned' && row.evidence === 'code').length, - configuration: rows.filter((row) => row.status === 'aligned' && row.evidence === 'configuration').length, - none: rows.filter((row) => row.status === 'aligned' && row.evidence === 'none').length, - }, - byStatus: Object.fromEntries(Object.entries(byStatus).sort(([a], [b]) => a.localeCompare(b))), - declaredRecords, - observedRecords, - declaredTopics, - observedTopics, - implementationAlignedTopics, - implementationCoverage: ratio(implementationAlignedTopics, declaredTopics), - plannedCodeCoverage: ratio(implementationAlignedTopics, observedTopics), - documentedCodeCoverage: ratio(documentedObservedTopics, observedTopics), - documentationMeasured: graph.records.some((record) => record.source.kind === 'document'), + topics: rows.length, + aligned, + gaps: rows.length - aligned, + alignedByEvidence: { + code: rows.filter((row) => row.status === 'aligned' && row.evidence === 'code').length, + configuration: rows.filter((row) => row.status === 'aligned' && row.evidence === 'configuration').length, + none: rows.filter((row) => row.status === 'aligned' && row.evidence === 'none').length, }, + byStatus: Object.fromEntries(Object.entries(byStatus).sort(([a], [b]) => a.localeCompare(b))), + declaredRecords, + observedRecords, + declaredTopics, + observedTopics, + implementationAlignedTopics, + implementationCoverage: ratio(implementationAlignedTopics, declaredTopics), + plannedCodeCoverage: ratio(implementationAlignedTopics, observedTopics), + documentedCodeCoverage: ratio(documentedObservedTopics, observedTopics), + documentationMeasured: graph.records.some((record) => record.source.kind === 'document'), }; } @@ -444,9 +460,7 @@ function resolveEvidence(lanes: Record): RealityEvidence { } function resolveStatus(codes: Set, lanes: Record): RealityStatus { - const declared = DECLARED_KINDS.reduce((total, kind) => total + (lanes[kind] ?? 0), 0); - const observed = OBSERVED_KINDS.reduce((total, kind) => total + (lanes[kind] ?? 0), 0); - const changelog = lanes.changelog ?? 0; + const { declared, observed, changelog } = summarizeLaneTotals(lanes); // A contradiction outranks every structural reading of the same topic. if (codes.has('CONFLICTING_INTENT')) return 'conflicting'; @@ -472,6 +486,17 @@ function resolveStatus(codes: Set, lanes: Record return 'aligned'; } +function summarizeLaneTotals(lanes: Record): { + declared: number; + observed: number; + changelog: number; +} { + const declared = DECLARED_KINDS.reduce((total, kind) => total + (lanes[kind] ?? 0), 0); + const observed = OBSERVED_KINDS.reduce((total, kind) => total + (lanes[kind] ?? 0), 0); + const changelog = lanes.changelog ?? 0; + return { declared, observed, changelog }; +} + /** * The topic key names the row; a declared statement is appended as context when * one exists. Labelling by an arbitrary member record would be misleading, since @@ -506,74 +531,17 @@ export function renderRealitySvg(view: IntentRealityView, options: RealitySvgOpt const title = options.title?.trim() || 'todo2code Intent vs Reality'; const rows = (options.gapsOnly ? view.rows.filter((row) => row.status !== 'aligned') : view.rows); const visible = rows.slice(0, maxRows); - - // The lane columns and the status column are sized from their own content. - // Both were hardcoded for six lanes, so adding `agent_log` made the headers - // overlap and pushed "CHANGELOG, NO CODE" past the right edge of the - // viewBox. Deriving the geometry keeps the table readable when a lane is - // added again. - const laneX = 720; - const laneStep = Math.max(62, Math.ceil(widestLabel(LANE_ORDER.map((kind) => kind.toUpperCase())) * LABEL_CHAR + 14)); - const statusX = laneX + LANE_ORDER.length * laneStep + 30; - const statusWidth = Math.ceil(widestLabel(Object.values(STATUS_LABEL).map((label) => label.toUpperCase())) * BADGE_CHAR); - const width = statusX + statusWidth + 40; - const rowHeight = 30; - const headerY = 214; - let y = headerY + 28; - - const body: string[] = []; - - // Lane column headers. - body.push(`TOPIC`); - LANE_ORDER.forEach((kind, index) => { - const isDeclared = DECLARED_KINDS.includes(kind); - body.push( - `${escapeXml(kind.toUpperCase())}`, - ); - }); - body.push(`STATUS`); - body.push(``); - - for (const row of visible) { - const color = STATUS_COLOR[row.status]; - body.push(``); - body.push(``); - body.push(`${escapeXml(truncate(row.label, 76))}`); - - LANE_ORDER.forEach((kind, index) => { - const count = row.lanes[kind] ?? 0; - const cx = laneX + index * laneStep; - if (count > 0) { - // A 16px circle fits two digits; a file with 161 AST facts overflowed - // it, so wider counts get a pill sized to their own text. - const fill = DECLARED_KINDS.includes(kind) ? theme.changed : theme.accent; - const label = String(count); - const pillWidth = Math.max(16, Math.ceil(label.length * BADGE_CHAR) + 8); - body.push( - ``, - ); - body.push(`${label}`); - } else { - body.push(``); - } - }); - - body.push( - `` - + `${escapeXml(STATUS_LABEL[row.status].toUpperCase())}`, - ); - y += rowHeight; - } - - if (rows.length > visible.length) { - body.push(`… ${rows.length - visible.length} more topics`); - y += 30; - } + const layout = buildRealityLayout(); + const header = renderRealityLaneHeaders(theme, layout); + const body = visible.map((row, index) => renderRealityRow(row, index, layout, theme)).join(''); + const overflow = rows.length > visible.length + ? renderMoreTopicsLabel(rows.length - visible.length, visible.length, layout) + : ''; + const height = Math.max(400, renderRealityHeight(visible.length, rows.length, layout)); return svgDocument({ - width, - height: Math.max(400, y + 30), + width: layout.width, + height, title, description: `Intent versus reality across ${view.totals.topics} topics: ` + `${view.totals.aligned} aligned, ${view.totals.gaps} divergent.`, @@ -587,11 +555,114 @@ export function renderRealitySvg(view: IntentRealityView, options: RealitySvgOpt ` ${metricCard(610, 92, 'Planned, no code', view.totals.byStatus.planned_not_implemented ?? 0, STATUS_COLOR.planned_not_implemented, 200)}`, ` ${metricCard(830, 92, 'Code, no plan', view.totals.byStatus.implemented_not_planned ?? 0, STATUS_COLOR.implemented_not_planned, 200)}`, ` ${metricCard(1050, 92, 'Conflicting', view.totals.byStatus.conflicting ?? 0, STATUS_COLOR.conflicting, 190)}`, - ` ${body.join('')}`, + ` ${header}${body}${overflow}`, ].join('\n'), }); } +interface RealitySvgLayout { + laneX: number; + laneStep: number; + statusX: number; + width: number; + rowHeight: number; + headerY: number; + yStart: number; +} + +function buildRealityLayout(): RealitySvgLayout { + const laneX = 720; + const laneStep = Math.max(62, Math.ceil(widestLabel(LANE_ORDER.map((kind) => kind.toUpperCase())) * LABEL_CHAR + 14)); + const statusX = laneX + LANE_ORDER.length * laneStep + 30; + const statusWidth = Math.ceil(widestLabel(Object.values(STATUS_LABEL).map((label) => label.toUpperCase())) * BADGE_CHAR); + return { + laneX, + laneStep, + statusX, + width: statusX + statusWidth + 40, + rowHeight: 30, + headerY: 214, + yStart: 242, + }; +} + +function renderRealityLaneHeaders(theme: typeof DARK_THEME, layout: RealitySvgLayout): string { + return [ + `TOPIC`, + ...LANE_ORDER.map((kind, index) => { + const isDeclared = DECLARED_KINDS.includes(kind); + return `${escapeXml(kind.toUpperCase())}`; + }), + `STATUS`, + ``, + ].join(''); +} + +function renderRealityRow( + row: RealityRow, + index: number, + layout: RealitySvgLayout, + theme: typeof DARK_THEME, +): string { + const y = layout.yStart + index * layout.rowHeight; + const color = STATUS_COLOR[row.status]; + return [ + ``, + ``, + `${escapeXml(truncate(row.label, 76))}`, + renderRealityLanes(row, y, layout, theme), + `` + + `${escapeXml(STATUS_LABEL[row.status].toUpperCase())}`, + ].join(''); +} + +function renderRealityLanes( + row: RealityRow, + y: number, + layout: RealitySvgLayout, + theme: typeof DARK_THEME, +): string { + return LANE_ORDER.map((kind, index) => { + const count = row.lanes[kind] ?? 0; + const cx = layout.laneX + index * layout.laneStep; + return renderRealityLaneCell(kind, count, cx, y, theme); + }).join(''); +} + +function renderRealityLaneCell( + kind: SourceKind, + count: number, + cx: number, + y: number, + theme: typeof DARK_THEME, +): string { + if (count > 0) { + // A 16px circle fits two digits; a file with 161 AST facts overflowed + // it, so wider counts get a pill sized to their own text. + const fill = DECLARED_KINDS.includes(kind) ? theme.changed : theme.accent; + const label = String(count); + const pillWidth = Math.max(16, Math.ceil(label.length * BADGE_CHAR) + 8); + return [ + ``, + `${label}`, + ].join(''); + } + return ``; +} + +function renderMoreTopicsLabel(remaining: number, visibleRows: number, layout: RealitySvgLayout): string { + if (remaining <= 0) return ''; + const y = layout.yStart + visibleRows * layout.rowHeight + 6; + return `… ${remaining} more topics`; +} + +function renderRealityHeight(visibleCount: number, totalCount: number, layout: RealitySvgLayout): number { + const footer = totalCount > visibleCount ? 30 : 0; + const y = layout.yStart + visibleCount * layout.rowHeight; + return y + footer + 30; +} + /** Compact Markdown rendering for pull-request comments and terminals. */ export function renderRealityMarkdown(view: IntentRealityView, maxRows = 40): string { const lines: string[] = [ diff --git a/src/diff/text-myers.ts b/src/diff/text-myers.ts new file mode 100644 index 0000000..56de5a4 --- /dev/null +++ b/src/diff/text-myers.ts @@ -0,0 +1,152 @@ +import type { DiffLine, LineChangeType } from './text-types.js'; + +export interface RawDiffOp { + type: LineChangeType; + beforeIndex: number | null; + afterIndex: number | null; + text: string; +} + +interface MyersState { + n: number; + m: number; + offset: number; +} + +interface MyersEditPoint { + x: number; + y: number; +} + +export function blockReplace(before: string[], after: string[]): RawDiffOp[] { + return [ + ...before.map((text, index) => ({ type: 'delete' as const, beforeIndex: index, afterIndex: null, text })), + ...after.map((text, index) => ({ type: 'insert' as const, beforeIndex: null, afterIndex: index, text })), + ]; +} + +/** Myers' greedy O(ND) diff with a stored trace for backtracking. */ +export function myers(before: string[], after: string[]): RawDiffOp[] { + const state = createMyersState(before, after); + if (state.n === 0 && state.m === 0) return []; + if (state.n === 0 || state.m === 0) return blockReplace(before, after); + + const trace: Int32Array[] = []; + let v = new Int32Array(2 * (state.n + state.m) + 1); + + for (let d = 0; d <= state.n + state.m; d += 1) { + trace.push(v.slice()); + for (let k = -d; k <= d; k += 2) { + const startX = chooseStartX(v, state, k, d); + const point = advanceDiagonal(before, after, startX, startX - k, state); + v[state.offset + k] = point.x; + if (point.x >= state.n && point.y >= state.m) { + return backtrack(trace, before, after, d, state.offset); + } + } + } + /* c8 ignore next -- unreachable: d === n + m always terminates above */ + return blockReplace(before, after); +} + +function createMyersState(before: string[], after: string[]): MyersState { + const n = before.length; + const m = after.length; + return { n, m, offset: n + m }; +} + +function chooseStartX(v: Int32Array, state: MyersState, k: number, d: number): number { + if (k === -d || (k !== d && (v[state.offset + k - 1] ?? 0) < (v[state.offset + k + 1] ?? 0))) { + return v[state.offset + k + 1] ?? 0; + } + return (v[state.offset + k - 1] ?? 0) + 1; +} + +function advanceDiagonal( + before: string[], + after: string[], + x: number, + y: number, + state: MyersState, +): MyersEditPoint { + let nextX = x; + let nextY = y; + while (nextX < state.n && nextY < state.m && before[nextX] === after[nextY]) { + nextX += 1; + nextY += 1; + } + return { x: nextX, y: nextY }; +} + +function backtrack( + trace: Int32Array[], + before: string[], + after: string[], + d: number, + offset: number, +): RawDiffOp[] { + const ops: RawDiffOp[] = []; + let x = before.length; + let y = after.length; + for (let step = d; step > 0; step -= 1) { + const v = trace[step]; + if (!v) break; + const k = x - y; + const previous = choosePreviousPoint(v, offset, k, step); + const previousX = previous.x; + const previousY = previous.y; + const diag = emitEqualOps(ops, before, x, y, previousX, previousY); + const afterEqualX = diag.x; + const afterEqualY = diag.y; + emitEditOp(ops, before, after, afterEqualX, afterEqualY, previousX); + x = previousX; + y = previousY; + } + while (x > 0 && y > 0) { + x -= 1; + y -= 1; + ops.push({ type: 'equal', beforeIndex: x, afterIndex: y, text: before[x] ?? '' }); + } + return ops.reverse(); +} + +function choosePreviousPoint(v: Int32Array, offset: number, k: number, step: number): MyersEditPoint { + const previousK = k === -step || (k !== step && (v[offset + k - 1] ?? 0) < (v[offset + k + 1] ?? 0)) + ? k + 1 + : k - 1; + const previousX = v[offset + previousK] ?? 0; + return { x: previousX, y: previousX - previousK }; +} + +function emitEqualOps( + ops: RawDiffOp[], + before: string[], + x: number, + y: number, + previousX: number, + previousY: number, +): MyersEditPoint { + while (x > previousX && y > previousY) { + x -= 1; + y -= 1; + ops.push({ type: 'equal', beforeIndex: x, afterIndex: y, text: before[x] ?? '' }); + } + return { x, y }; +} + +function emitEditOp( + ops: RawDiffOp[], + before: string[], + after: string[], + x: number, + y: number, + previousX: number, +): void { + if (x === previousX) { + y -= 1; + ops.push({ type: 'insert', beforeIndex: null, afterIndex: y, text: after[y] ?? '' }); + return; + } + x -= 1; + ops.push({ type: 'delete', beforeIndex: x, afterIndex: null, text: before[x] ?? '' }); +} diff --git a/src/diff/text.ts b/src/diff/text.ts index 8629e24..4b37e48 100644 --- a/src/diff/text.ts +++ b/src/diff/text.ts @@ -11,6 +11,7 @@ export type { } from './text-types.js'; import type { DiffHunk, DiffLine, DiffTextOptions, FileDiff, LineChangeType } from './text-types.js'; +import { blockReplace, myers } from './text-myers.js'; const DEFAULT_CONTEXT = 3; const DEFAULT_MAX_COMPARE_LINES = 4000; @@ -122,93 +123,6 @@ function suffixLines(before: string[], after: string[], suffix: number): DiffLin return lines; } -interface RawOp { - type: LineChangeType; - beforeIndex: number | null; - afterIndex: number | null; - text: string; -} - -function blockReplace(before: string[], after: string[]): RawOp[] { - return [ - ...before.map((text, index) => ({ type: 'delete' as const, beforeIndex: index, afterIndex: null, text })), - ...after.map((text, index) => ({ type: 'insert' as const, beforeIndex: null, afterIndex: index, text })), - ]; -} - -/** Myers' greedy O(ND) diff with a stored trace for backtracking. */ -function myers(before: string[], after: string[]): RawOp[] { - const n = before.length; - const m = after.length; - if (n === 0 && m === 0) return []; - if (n === 0 || m === 0) return blockReplace(before, after); - const max = n + m; - const offset = max; - const trace: Int32Array[] = []; - let v = new Int32Array(2 * max + 1); - - for (let d = 0; d <= max; d += 1) { - trace.push(v.slice()); - for (let k = -d; k <= d; k += 2) { - let x: number; - if (k === -d || (k !== d && (v[offset + k - 1] ?? 0) < (v[offset + k + 1] ?? 0))) { - x = v[offset + k + 1] ?? 0; - } else { - x = (v[offset + k - 1] ?? 0) + 1; - } - let y = x - k; - while (x < n && y < m && before[x] === after[y]) { - x += 1; - y += 1; - } - v[offset + k] = x; - if (x >= n && y >= m) return backtrack(trace, before, after, d, offset); - } - } - /* c8 ignore next -- unreachable: d === n + m always terminates above */ - return blockReplace(before, after); -} - -function backtrack( - trace: Int32Array[], - before: string[], - after: string[], - d: number, - offset: number, -): RawOp[] { - const ops: RawOp[] = []; - let x = before.length; - let y = after.length; - for (let step = d; step > 0; step -= 1) { - const v = trace[step]; - if (!v) break; - const k = x - y; - const previousK = k === -step || (k !== step && (v[offset + k - 1] ?? 0) < (v[offset + k + 1] ?? 0)) - ? k + 1 - : k - 1; - const previousX = v[offset + previousK] ?? 0; - const previousY = previousX - previousK; - while (x > previousX && y > previousY) { - x -= 1; - y -= 1; - ops.push({ type: 'equal', beforeIndex: x, afterIndex: y, text: before[x] ?? '' }); - } - if (x === previousX) { - y -= 1; - ops.push({ type: 'insert', beforeIndex: null, afterIndex: y, text: after[y] ?? '' }); - } else { - x -= 1; - ops.push({ type: 'delete', beforeIndex: x, afterIndex: null, text: before[x] ?? '' }); - } - } - while (x > 0 && y > 0) { - x -= 1; - y -= 1; - ops.push({ type: 'equal', beforeIndex: x, afterIndex: y, text: before[x] ?? '' }); - } - return ops.reverse(); -} - function buildHunks(lines: DiffLine[], context: number): DiffHunk[] { const changeIndexes = lines .map((line, index) => (line.type === 'equal' ? -1 : index)) diff --git a/src/evaluation/gold-cases.ts b/src/evaluation/gold-cases.ts index fd8bc84..1265214 100644 --- a/src/evaluation/gold-cases.ts +++ b/src/evaluation/gold-cases.ts @@ -69,40 +69,73 @@ export interface RerankingCaseResult { } export function evaluateRerankingCase(fixture: GoldLinkingCase): RerankingCaseResult { - if (!fixture.reranker) throw new Error(`Gold case ${fixture.id} has no reranker fixture`); + const reranker = resolveRerankerFixture(fixture); const { records, labels } = buildFixtureRecords(fixture.id, fixture.records); const idToLabel = new Map([...labels].map(([label, id]) => [id, label])); - const declarationRecordId = labels.get('declaration'); - if (!declarationRecordId) throw new Error(`Gold reranker case ${fixture.id} has no declaration label`); + const declarationRecordId = resolveDeclarationRecordId(fixture.id, labels); const graph = linkIntentRecords(records, GOLD_FIXED_TIME); - const candidates = createSemanticCandidateSet( + const candidates = buildRerankerCandidates(fixture.id, graph, labels, declarationRecordId, reranker); + const decisions = buildRerankerDecisions(fixture.id, reranker, labels, candidates, declarationRecordId); + const rerank = buildRerankResult(graph, fixture, reranker, candidates, decisions); + const observed = buildObservedRerankRelations(graph, candidates, rerank, idToLabel); + const forbiddenViolations = countForbiddenRelations(observed, fixture.forbidden); + return { + counts: compareSets(observed, buildRerankExpected(fixture.expected)), + forbiddenViolations, + accepted: countVerdictDecisions(rerank.decisions, 'accept'), + abstained: countVerdictDecisions(rerank.decisions, 'abstain'), + actual: observed, + snapshot: buildRerankSnapshot(fixture.id, candidates, rerank, observed), + }; +} + +function buildRerankerCandidates( + caseId: string, + graph: ReturnType, + labels: Map, + declarationRecordId: string, + reranker: NonNullable, +): ReturnType { + const requestedCandidates = reranker.decisions.map((decision) => ({ + declarationRecordId, + moduleRecordId: resolveFixtureLabelToRecordId(caseId, labels, decision.module), + score: decision.score, + })); + return createSemanticCandidateSet( graph, - fixture.reranker.decisions.map((decision) => { - const moduleRecordId = labels.get(decision.module); - if (!moduleRecordId) { - throw new Error(`Gold reranker case ${fixture.id} references unknown module label ${decision.module}`); - } - return { - declarationRecordId, - moduleRecordId, - score: decision.score, - }; - }), + requestedCandidates, { provider: 'captured-gold-retrieval', model: 'intfloat/multilingual-e5-base', revision: '18fcae5', metric: 'cosine', }, - Math.max(1, fixture.reranker.decisions.length), + Math.max(1, requestedCandidates.length), GOLD_FIXED_TIME, ); +} + +function buildRerankerDecisions( + caseId: string, + reranker: NonNullable, + labels: Map, + candidates: ReturnType, + declarationRecordId: string, +): Array<{ + candidateId: string; + verdict: 'accept' | 'reject' | 'abstain'; + confidence: number; + reasonCode: string; + rationale: string; + citedRecordIds: [string, string]; + evidence: Array<{ recordId: string; quote: string }>; +}> { const candidateByModule = new Map(candidates.candidates.map((candidate) => [candidate.moduleRecordId, candidate])); - const decisions = fixture.reranker.decisions.map((decision) => { - const moduleRecordId = labels.get(decision.module); - const candidate = moduleRecordId ? candidateByModule.get(moduleRecordId) : undefined; - if (!moduleRecordId || !candidate) { - throw new Error(`Gold reranker case ${fixture.id} cannot resolve candidate ${decision.module}`); + return reranker.decisions.map((decision) => { + const moduleRecordId = resolveFixtureLabelToRecordId(caseId, labels, decision.module); + const candidate = candidateByModule.get(moduleRecordId); + if (!candidate) { + throw new Error(`Gold reranker case ${caseId} cannot resolve candidate ${decision.module}`); } return { candidateId: candidate.id, @@ -117,41 +150,103 @@ export function evaluateRerankingCase(fixture: GoldLinkingCase): RerankingCaseRe ], }; }); - const rerank = createSemanticRerankResult(graph, candidates, decisions, { +} + +function buildRerankResult( + graph: ReturnType, + fixture: GoldLinkingCase, + reranker: NonNullable, + candidates: ReturnType, + decisions: ReturnType, +): ReturnType { + return createSemanticRerankResult(graph, candidates, decisions, { provider: 'captured-gold-response', - requestedModel: fixture.reranker.model, - model: fixture.reranker.model, - modelRevision: fixture.reranker.modelRevision, + requestedModel: reranker.model, + model: reranker.model, + modelRevision: reranker.modelRevision, responseId: `gold-${fixture.id}`, }, GOLD_FIXED_TIME); +} + +function buildObservedRerankRelations( + graph: ReturnType, + candidates: ReturnType, + rerank: ReturnType, + idToLabel: Map, +): Array<{ from: string; to: string; type: string }> { const augmented = applyAcceptedSemanticRelations(graph, candidates, rerank, GOLD_FIXED_TIME); - const observed = augmented.relations + return augmented.relations .filter((relation) => relation.basis.includes('cross_language_reranker')) .map((relation) => ({ from: idToLabel.get(relation.from) ?? relation.from, to: idToLabel.get(relation.to) ?? relation.to, type: relation.type, })); - const expected = fixture.expected.map(({ from, to, type }) => ({ from, to, type })); - const forbidden = fixture.forbidden ?? []; - const forbiddenViolations = forbidden.filter((pair) => observed.some((relation) => - (relation.from === pair.from && relation.to === pair.to) - || (relation.from === pair.to && relation.to === pair.from))).length; +} + +function countForbiddenRelations( + observed: T[], + forbidden?: Array<{ from: string; to: string }>, +): number { + const restricted = forbidden ?? []; + return restricted.filter((pair) => observed.some((item) => ( + (item.from === pair.from && item.to === pair.to) + || (item.from === pair.to && item.to === pair.from) + ))).length; +} + +function buildRerankExpected(expected: GoldLinkingCase['expected']): Array<{ from: string; to: string; type: string }> { + return expected.map(({ from, to, type }) => ({ from, to, type })); +} + +function buildRerankSnapshot( + caseId: string, + candidates: ReturnType, + rerank: ReturnType, + observed: ReturnType, +): { caseId: string; candidateSetHash: string; resultHash: string; actual: typeof observed } { return { - counts: compareSets(observed, expected), - forbiddenViolations, - accepted: rerank.decisions.filter((decision) => decision.verdict === 'accept').length, - abstained: rerank.decisions.filter((decision) => decision.verdict === 'abstain').length, + caseId, + candidateSetHash: candidates.candidateSetHash, + resultHash: rerank.resultHash, actual: observed, - snapshot: { - caseId: fixture.id, - candidateSetHash: candidates.candidateSetHash, - resultHash: rerank.resultHash, - actual: observed, - }, }; } +function countVerdictDecisions( + decisions: Array<{ verdict: 'accept' | 'reject' | 'abstain' }>, + verdict: 'accept' | 'abstain', +): number { + return decisions.filter((decision) => decision.verdict === verdict).length; +} + +function resolveRerankerFixture(fixture: GoldLinkingCase): NonNullable { + if (!fixture.reranker) { + throw new Error(`Gold case ${fixture.id} has no reranker fixture`); + } + return fixture.reranker; +} + +function resolveDeclarationRecordId(caseId: string, labels: Map): string { + const declarationRecordId = labels.get('declaration'); + if (!declarationRecordId) { + throw new Error(`Gold reranker case ${caseId} has no declaration label`); + } + return declarationRecordId; +} + +function resolveFixtureLabelToRecordId( + caseId: string, + labels: Map, + label: string, +): string { + const recordId = labels.get(label); + if (!recordId) { + throw new Error(`Gold reranker case ${caseId} references unknown module label ${label}`); + } + return recordId; +} + /** * Reads the justification class off a relation's `basis`. * @@ -318,36 +413,64 @@ function buildFixtureRecords( ): { records: IntentRecord[]; labels: Map } { const labels = new Map(); const records = fixtures.map((fixture, index) => { - const record = buildRecord({ - kind: fixture.statementKind ?? 'gold_fixture', - action: fixture.action, - object: fixture.text, - text: fixture.text, - ...(fixture.target ? { target: fixture.target } : {}), - polarity: fixture.polarity ?? 'positive', - modality: fixture.modality ?? (fixture.sourceKind === 'todo' ? 'required' : 'observed'), - lifecycle: fixture.lifecycle, - sourceKind: fixture.sourceKind, - sourcePath: fixture.sourceKind === 'ast' && fixture.target?.paths?.length === 1 - ? fixture.target.paths[0] as string - : `evaluation/${caseId}/${fixture.label}-${index + 1}.md`, - sourceLines: { start: 1, end: 1 }, - extractor: 't2c/gold-fixture@1', - ...(fixture.sourceKind === 'ast' && fixture.target?.symbols?.length === 1 - ? { symbol: fixture.target.symbols[0] as string } - : {}), - epistemicClass: fixture.sourceKind === 'todo' ? 'plan' : fixture.sourceKind === 'git' ? 'fact' : 'declaration', - confidence: 1, - basis: ['versioned_gold_fixture'], - ...(fixture.metadata ? { metadata: fixture.metadata as Record } : {}), - }); if (labels.has(fixture.label)) throw new Error(`Duplicate gold fixture label: ${fixture.label}`); + const record = buildFixtureRecord(caseId, fixture, index); labels.set(fixture.label, record.id); return record; }); return { records, labels }; } +function buildFixtureRecord( + caseId: string, + fixture: GoldFixtureRecord, + index: number, +): IntentRecord { + return buildRecord({ + kind: fixture.statementKind ?? 'gold_fixture', + action: fixture.action, + object: fixture.text, + text: fixture.text, + ...(fixture.target ? { target: fixture.target } : {}), + polarity: fixture.polarity ?? 'positive', + modality: fixture.modality ?? resolveDefaultFixtureModality(fixture), + lifecycle: fixture.lifecycle, + sourceKind: fixture.sourceKind, + sourcePath: resolveFixtureSourcePath(caseId, fixture, index), + sourceLines: { start: 1, end: 1 }, + extractor: 't2c/gold-fixture@1', + ...(resolveFixtureSymbol(fixture) ? { symbol: resolveFixtureSymbol(fixture) } : {}), + epistemicClass: resolveFixtureEpistemicClass(fixture), + confidence: 1, + basis: ['versioned_gold_fixture'], + ...(fixture.metadata ? { metadata: fixture.metadata as Record } : {}), + }); +} + +function resolveDefaultFixtureModality(fixture: GoldFixtureRecord): IntentRecord['modality'] { + return fixture.sourceKind === 'todo' ? 'required' : 'observed'; +} + +function resolveFixtureSourcePath( + caseId: string, + fixture: GoldFixtureRecord, + index: number, +): string { + return fixture.sourceKind === 'ast' && fixture.target?.paths?.length === 1 + ? fixture.target.paths[0] as string + : `evaluation/${caseId}/${fixture.label}-${index + 1}.md`; +} + +function resolveFixtureSymbol(fixture: GoldFixtureRecord): string | undefined { + return fixture.sourceKind === 'ast' && fixture.target?.symbols?.length === 1 + ? fixture.target.symbols[0] as string + : undefined; +} + +function resolveFixtureEpistemicClass(fixture: GoldFixtureRecord): IntentRecord['epistemicClass'] { + return fixture.sourceKind === 'todo' ? 'plan' : fixture.sourceKind === 'git' ? 'fact' : 'declaration'; +} + function deterministicGeneration(): GroundedGenerationMetadata { return { generator: 't2c/gold-evaluation', diff --git a/src/evaluation/gold-types.ts b/src/evaluation/gold-types.ts index eac6f1a..f167614 100644 --- a/src/evaluation/gold-types.ts +++ b/src/evaluation/gold-types.ts @@ -340,39 +340,66 @@ function assertExtractionCoverage(dataset: GoldDataset): void { function assertLinkingCohorts(dataset: GoldDataset): void { for (const fixture of dataset.linking) { - if (fixture.cohort !== undefined && fixture.cohort !== 'cross-language') { - throw new Error(`Unsupported gold linking cohort: ${String(fixture.cohort)}`); - } - if (dataset.schemaVersion === 't2c.gold-dataset/v2' - && fixture.cohort === 'cross-language' - && !fixture.reranker) { - throw new Error(`Cross-language gold case ${fixture.id} is missing a captured reranker fixture`); - } - if (fixture.reranker) { - if (!fixture.reranker.model.trim() || !fixture.reranker.modelRevision.trim()) { - throw new Error(`Gold reranker case ${fixture.id} has a blank model identity`); - } - if (!fixture.reranker.decisions.length || fixture.reranker.decisions.length > 10) { - throw new Error(`Gold reranker case ${fixture.id} must contain 1-10 bounded decisions`); - } - const labels = new Set(fixture.records.map((record) => record.label)); - const modules = new Set(); - for (const decision of fixture.reranker.decisions) { - if (!labels.has(decision.module) || decision.module === 'declaration') { - throw new Error(`Gold reranker case ${fixture.id} references unknown module ${decision.module}`); - } - if (modules.has(decision.module)) { - throw new Error(`Gold reranker case ${fixture.id} repeats module ${decision.module}`); - } - modules.add(decision.module); - if (!Number.isFinite(decision.score) || decision.score < -1 || decision.score > 1 - || !Number.isFinite(decision.confidence) || decision.confidence < 0 || decision.confidence > 1) { - throw new Error(`Gold reranker case ${fixture.id} has an invalid score or confidence`); - } - if (!decision.rationale.trim() || !decision.declarationQuote.trim() || !decision.moduleQuote.trim()) { - throw new Error(`Gold reranker case ${fixture.id} has blank grounded decision content`); - } - } - } + assertGoldLinkingCohort(dataset.schemaVersion, fixture); + assertRerankerFixture(fixture); + } +} + +function assertGoldLinkingCohort(schemaVersion: GoldDatasetVersion, fixture: GoldLinkingCase): void { + if (fixture.cohort !== undefined && fixture.cohort !== 'cross-language') { + throw new Error(`Unsupported gold linking cohort: ${String(fixture.cohort)}`); + } + if (schemaVersion === 't2c.gold-dataset/v2' + && fixture.cohort === 'cross-language' + && !fixture.reranker) { + throw new Error(`Cross-language gold case ${fixture.id} is missing a captured reranker fixture`); + } +} + +function assertRerankerFixture(fixture: GoldLinkingCase): void { + if (!fixture.reranker) return; + assertRerankerModelIdentity(fixture); + assertRerankerDecisions(fixture); +} + +function assertRerankerModelIdentity(fixture: GoldLinkingCase): void { + if (!fixture.reranker?.model.trim() || !fixture.reranker.modelRevision.trim()) { + throw new Error(`Gold reranker case ${fixture.id} has a blank model identity`); + } +} + +function assertRerankerDecisions(fixture: GoldLinkingCase): void { + const decisions = fixture.reranker?.decisions ?? []; + if (!decisions.length || decisions.length > 10) { + throw new Error(`Gold reranker case ${fixture.id} must contain 1-10 bounded decisions`); + } + const recordLabels = new Set(fixture.records.map((record) => record.label)); + const seenModules = new Set(); + for (const decision of decisions) { + assertRerankerDecision(fixture.id, decision, seenModules, recordLabels); + } +} + +function assertRerankerDecision( + caseId: string, + decision: GoldRerankerDecisionFixture, + seenModules: Set, + recordLabels: Set, +): void { + if (!recordLabels.has(decision.module) || decision.module === 'declaration') { + throw new Error(`Gold reranker case ${caseId} references unknown module ${decision.module}`); + } + if (seenModules.has(decision.module)) { + throw new Error(`Gold reranker case ${caseId} repeats module ${decision.module}`); + } + seenModules.add(decision.module); + if ( + !Number.isFinite(decision.score) || decision.score < -1 || decision.score > 1 + || !Number.isFinite(decision.confidence) || decision.confidence < 0 || decision.confidence > 1 + ) { + throw new Error(`Gold reranker case ${caseId} has an invalid score or confidence`); + } + if (!decision.rationale.trim() || !decision.declarationQuote.trim() || !decision.moduleQuote.trim()) { + throw new Error(`Gold reranker case ${caseId} has blank grounded decision content`); } } diff --git a/src/interfaces/a2a-history.ts b/src/interfaces/a2a-history.ts index 43e4d96..15630da 100644 --- a/src/interfaces/a2a-history.ts +++ b/src/interfaces/a2a-history.ts @@ -2,37 +2,11 @@ import { promises as fs, type Dirent } from 'node:fs'; import path from 'node:path'; import type { T2CConfig } from '../config/env.js'; import { assertPathWithinRoot } from '../core/security.js'; -import { isRecord } from './a2a-types.js'; - -interface IntentRunListItem { - runId: string; - createdAt: string; - graphFingerprint: string | null; - graphPath: string | null; - summaryPath: string | null; - warningCount: number; - status: 'succeeded' | 'degraded' | 'failed' | null; - failure: Record | null; - runtimeVersion: string | null; - stages: Record | null; - files: Record; - llm: { - naturalLanguageExtraction: boolean; - markdownExtraction: boolean; - documentationExtraction: boolean; - taskSynthesis: boolean; - summary: boolean; - } | null; - graphBytes: number; - communication: CommunicationRunSummary | null; -} - -interface CommunicationRunSummary { - tickets: string[]; - participants: Array<{ participant: string; role: string; tickets: string[]; issueIds: string[] }>; - issueSeverities: string[]; - issueCount: number; -} +import { + type CommunicationRunSummary, + type IntentRunListItem, + runListItem, +} from './a2a-run-list-item.js'; export interface RunHistoryFilters { participant: string | null; @@ -100,95 +74,6 @@ async function readRun( } } -async function safeRunPath(config: T2CConfig, directory: string, name: string): Promise { - return assertPathWithinRoot(config.root, path.join(directory, name), config.allowOutsideRoot); -} - -async function runListItem( - root: string, - fallbackRunId: string, - graphPath: string, - graphStat: import('node:fs').Stats | null, - manifestStat: import('node:fs').Stats, - manifest: Record, -): Promise { - const files = safeManifestFiles(root, isRecord(manifest.files) ? manifest.files : {}); - const llm = isRecord(manifest.llm) ? manifest.llm : null; - const runtime = isRecord(manifest.runtime) ? manifest.runtime : null; - const warnings = Array.isArray(manifest.warnings) ? manifest.warnings : []; - return { - runId: typeof manifest.runId === 'string' ? manifest.runId : fallbackRunId, - createdAt: validTimestamp(manifest.createdAt) ?? manifestStat.mtime.toISOString(), - graphFingerprint: typeof manifest.graphFingerprint === 'string' ? manifest.graphFingerprint : null, - graphPath: graphStat?.isFile() ? relativeApiPath(root, graphPath) : null, - summaryPath: typeof files.summary === 'string' ? files.summary : null, - warningCount: warnings.length, - status: validStatus(manifest.status), - failure: isRecord(manifest.failure) ? manifest.failure : null, - runtimeVersion: runtime && typeof runtime.version === 'string' ? runtime.version : null, - stages: isRecord(manifest.stages) ? manifest.stages : null, - files, - llm: llm ? llmSummary(llm) : null, - graphBytes: graphStat?.isFile() ? graphStat.size : 0, - communication: await readCommunicationSummary(root, files), - }; -} - -function validTimestamp(value: unknown): string | null { - return typeof value === 'string' && Number.isFinite(Date.parse(value)) ? value : null; -} - -function validStatus(value: unknown): IntentRunListItem['status'] { - return value === 'succeeded' || value === 'degraded' || value === 'failed' ? value : null; -} - -function llmSummary(value: Record): NonNullable { - return { - naturalLanguageExtraction: value.naturalLanguageExtraction === true, - markdownExtraction: value.markdownExtraction === true, - documentationExtraction: value.documentationExtraction === true, - taskSynthesis: value.taskSynthesis === true, - summary: value.summary === true, - }; -} - -async function readCommunicationSummary( - root: string, - files: Record, -): Promise { - const relative = files.communicationAnalysis; - if (!relative) return null; - try { - const filePath = path.resolve(root, relative); - const stat = await fs.stat(filePath); - if (!stat.isFile() || stat.size > 4 * 1024 * 1024) return null; - const value = JSON.parse(await fs.readFile(filePath, 'utf8')) as Record; - const participants = Array.isArray(value.participants) - ? value.participants.filter(isRecord).map(participantSummary).filter((item) => item.participant) - : []; - const issues = Array.isArray(value.issues) ? value.issues.filter(isRecord) : []; - return { - tickets: stringArray(value.tickets), - participants, - issueSeverities: [...new Set(issues.flatMap((item) => ( - typeof item.severity === 'string' ? [item.severity] : [] - )))].sort(), - issueCount: issues.length, - }; - } catch { - return null; - } -} - -function participantSummary(item: Record): CommunicationRunSummary['participants'][number] { - return { - participant: typeof item.participant === 'string' ? item.participant : '', - role: typeof item.role === 'string' ? item.role : 'unknown', - tickets: stringArray(item.tickets), - issueIds: stringArray(item.issueIds), - }; -} - function matchesRunFilters(summary: CommunicationRunSummary | null, filters: RunHistoryFilters): boolean { const participant = normalized(filters.participant); const role = normalized(filters.role); @@ -206,21 +91,6 @@ function normalized(value: string | null): string { return value?.trim().toLowerCase() ?? ''; } -function stringArray(value: unknown): string[] { - return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : []; -} - -function safeManifestFiles(root: string, files: Record): Record { - const output: Record = {}; - for (const [name, value] of Object.entries(files)) { - if (typeof value !== 'string') continue; - const absolute = path.resolve(root, value); - const relative = path.relative(root, absolute); - if (!relative.startsWith('..') && !path.isAbsolute(relative)) output[name] = value; - } - return output; -} - -function relativeApiPath(root: string, filePath: string): string { - return path.relative(root, filePath).replace(/\\/g, '/'); +async function safeRunPath(config: T2CConfig, directory: string, name: string): Promise { + return assertPathWithinRoot(config.root, path.join(directory, name), config.allowOutsideRoot); } diff --git a/src/interfaces/a2a-message-command.ts b/src/interfaces/a2a-message-command.ts new file mode 100644 index 0000000..2c2b41b --- /dev/null +++ b/src/interfaces/a2a-message-command.ts @@ -0,0 +1,144 @@ +import { decodeIntakeEnvelope } from '../communication/intake-protobuf.js'; +import { + A2A_ACTIONS, + A2ARequestError, + isRecord, + type A2AAction, + type A2AMessage, +} from './a2a-types.js'; + +export function parseCommand( + message: A2AMessage, + params: Record, +): { action: A2AAction; input: Record } { + const protobufCommand = parseCommandFromProtobuf(message); + if (protobufCommand) return protobufCommand; + + const objectCommand = parseCommandFromObject(message, params); + if (objectCommand) return objectCommand; + + return parseCommandFromText(message, params); +} + +function parseCommandFromProtobuf(message: A2AMessage): { action: A2AAction; input: Record } | null { + const protobuf = message.parts.find((part) => typeof part.raw === 'string' && part.mediaType === 'application/x-protobuf'); + if (protobuf?.raw) { + const bytes = Buffer.from(protobuf.raw, 'base64'); + try { + decodeIntakeEnvelope(bytes, 'command'); + return { action: 'intake_command', input: { protobuf: protobuf.raw, outputFormat: 'protobuf' } }; + } catch { + decodeIntakeEnvelope(bytes, 'query'); + return { action: 'intake_query', input: { protobuf: protobuf.raw, outputFormat: 'protobuf' } }; + } + } + return null; +} + +function parseCommandFromObject( + message: A2AMessage, + params: Record, +): { action: A2AAction; input: Record } | null { + const objectData = message.parts.find((part) => isRecord(part.data))?.data; + if (isRecord(objectData)) return commandFromData(objectData, message, params); + return null; +} + +function parseCommandFromText( + message: A2AMessage, + params: Record, +): { action: A2AAction; input: Record } { + const text = parseText(message); + if (looksLikeJson(text)) return parseCommandFromJson(text, message, params); + return parseCommandFromSentence(text); +} + +function looksLikeJson(text: string): boolean { + return text.startsWith('{'); +} + +function parseCommandFromJson( + text: string, + message: A2AMessage, + params: Record, +): { action: A2AAction; input: Record } { + return commandFromData(JSON.parse(text) as Record, message, params); +} + +function parseCommandFromSentence(text: string): { action: A2AAction; input: Record } { + return commandInputFromSentence(text); +} + +function parseSentenceInput(text: string, start: number): Record { + return parseKeyValues(text.slice(start)); +} + +function defaultTextCommand(text: string): { action: A2AAction; input: Record } { + return { action: 'extract_nl', input: { text, file: 'a2a-message.md' } }; +} + +function isSupportedAction(value: string): value is A2AAction { + return A2A_ACTIONS.includes(value as A2AAction); +} + +function commandInputFromSentence( + text: string, +): { action: A2AAction; input: Record } { + const first = firstToken(text); + if (!first || !isSupportedAction(first)) return defaultTextCommand(text); + return { + action: first, + input: parseSentenceInput(text, first.length), + }; +} + +function parseText(message: A2AMessage): string { + return message.parts.map((part) => part.text ?? '').join('\n').trim(); +} + +function firstToken(text: string): string { + return text.split(/\s+/, 1)[0]?.toLowerCase() ?? ''; +} + +function commandFromData( + data: Record, + message: A2AMessage, + params: Record, +): { action: A2AAction; input: Record } { + const action = normalizeAction(data.action ?? data.skill ?? message.metadata?.action ?? params.skillId); + const nested = isRecord(data.input) ? data.input : data; + return { action, input: { ...nested } }; +} + +function parseKeyValues(text: string): Record { + const output: Record = {}; + for (const match of text.matchAll(/([A-Za-z][\w.-]*)=("[^"]*"|'[^']*'|\S+)/g)) { + const key = match[1]; + const raw = match[2]; + if (!key || raw === undefined) continue; + const stringValue = raw.replace(/^['"]|['"]$/g, ''); + output[key] = parseScalar(stringValue); + } + return output; +} + +function parseScalar(value: string): string | boolean | number { + if (value === 'true' || value === 'false') return value === 'true'; + return /^\d+$/.test(value) ? Number(value) : value; +} + +function normalizeAction(value: unknown): A2AAction { + if (typeof value !== 'string') return 'pipeline'; + const normalized = value.toLowerCase().replace(/[- ]/g, '_'); + const aliases: Record = { + analyze_repository: 'pipeline', + extract_intent: 'extract_nl', + summarize_team_state: 'summarize', + diagnose_alignment: 'diagnose', + }; + const action = aliases[normalized] ?? normalized; + if (!A2A_ACTIONS.includes(action as A2AAction)) { + throw new A2ARequestError(-32602, `Unknown todo2code action: ${value}`); + } + return action as A2AAction; +} diff --git a/src/interfaces/a2a-message.ts b/src/interfaces/a2a-message.ts index cbe7696..6cf8a0e 100644 --- a/src/interfaces/a2a-message.ts +++ b/src/interfaces/a2a-message.ts @@ -1,6 +1,4 @@ -import { decodeIntakeEnvelope } from '../communication/intake-protobuf.js'; import { - A2A_ACTIONS, A2ARequestError, isRecord, optionalBoolean, @@ -12,8 +10,8 @@ import { type A2AMessage, type A2APart, type SendConfiguration, - type A2AAction, } from './a2a-types.js'; +export { parseCommand } from './a2a-message-command.js'; export function parseSendConfiguration(value: unknown): SendConfiguration { if (value === undefined) return { returnImmediately: false, historyLength: undefined }; @@ -39,60 +37,6 @@ function validateOutputModes(value: unknown): void { } } -export function parseCommand( - message: A2AMessage, - params: Record, -): { action: A2AAction; input: Record } { - const protobuf = message.parts.find((part) => typeof part.raw === 'string' && part.mediaType === 'application/x-protobuf'); - if (protobuf?.raw) { - const bytes = Buffer.from(protobuf.raw, 'base64'); - try { - decodeIntakeEnvelope(bytes, 'command'); - return { action: 'intake_command', input: { protobuf: protobuf.raw, outputFormat: 'protobuf' } }; - } catch { - decodeIntakeEnvelope(bytes, 'query'); - return { action: 'intake_query', input: { protobuf: protobuf.raw, outputFormat: 'protobuf' } }; - } - } - const objectData = message.parts.find((part) => isRecord(part.data))?.data; - if (isRecord(objectData)) return commandFromData(objectData, message, params); - - const text = message.parts.map((part) => part.text ?? '').join('\n').trim(); - if (text.startsWith('{')) return commandFromData(JSON.parse(text) as Record, message, params); - const first = text.split(/\s+/, 1)[0]?.toLowerCase(); - if (first && A2A_ACTIONS.includes(first as A2AAction)) { - return { action: first as A2AAction, input: parseKeyValues(text.slice(first.length)) }; - } - return { action: 'extract_nl', input: { text, file: 'a2a-message.md' } }; -} - -function commandFromData( - data: Record, - message: A2AMessage, - params: Record, -): { action: A2AAction; input: Record } { - const action = normalizeAction(data.action ?? data.skill ?? message.metadata?.action ?? params.skillId); - const nested = isRecord(data.input) ? data.input : data; - return { action, input: { ...nested } }; -} - -function parseKeyValues(text: string): Record { - const output: Record = {}; - for (const match of text.matchAll(/([A-Za-z][\w.-]*)=("[^"]*"|'[^']*'|\S+)/g)) { - const key = match[1]; - const raw = match[2]; - if (!key || raw === undefined) continue; - const stringValue = raw.replace(/^['"]|['"]$/g, ''); - output[key] = parseScalar(stringValue); - } - return output; -} - -function parseScalar(value: string): string | boolean | number { - if (value === 'true' || value === 'false') return value === 'true'; - return /^\d+$/.test(value) ? Number(value) : value; -} - export function parseMessage(value: unknown): A2AMessage { if (!isRecord(value)) throw new A2ARequestError(-32602, 'params.message is required'); const messageId = stringParam(value.messageId, 'message.messageId'); @@ -151,22 +95,6 @@ export function ensureSupportedMessageContent(message: A2AMessage): void { if (!supported) throw new A2ARequestError(-32005, 'todo2code accepts text, object-valued JSON or canonical Protobuf parts'); } -function normalizeAction(value: unknown): A2AAction { - if (typeof value !== 'string') return 'pipeline'; - const normalized = value.toLowerCase().replace(/[- ]/g, '_'); - const aliases: Record = { - analyze_repository: 'pipeline', - extract_intent: 'extract_nl', - summarize_team_state: 'summarize', - diagnose_alignment: 'diagnose', - }; - const action = aliases[normalized] ?? normalized; - if (!A2A_ACTIONS.includes(action as A2AAction)) { - throw new A2ARequestError(-32602, `Unknown todo2code action: ${value}`); - } - return action as A2AAction; -} - export function cloneMessage(message: A2AMessage): A2AMessage { return { messageId: message.messageId, diff --git a/src/interfaces/a2a-run-list-item.ts b/src/interfaces/a2a-run-list-item.ts new file mode 100644 index 0000000..84af530 --- /dev/null +++ b/src/interfaces/a2a-run-list-item.ts @@ -0,0 +1,171 @@ +import path from 'node:path'; +import { promises as fs } from 'node:fs'; +import { isRecord } from './a2a-types.js'; + +export interface IntentRunListItem { + runId: string; + createdAt: string; + graphFingerprint: string | null; + graphPath: string | null; + summaryPath: string | null; + warningCount: number; + status: 'succeeded' | 'degraded' | 'failed' | null; + failure: Record | null; + runtimeVersion: string | null; + stages: Record | null; + files: Record; + llm: { + naturalLanguageExtraction: boolean; + markdownExtraction: boolean; + documentationExtraction: boolean; + taskSynthesis: boolean; + summary: boolean; + } | null; + graphBytes: number; + communication: CommunicationRunSummary | null; +} + +export interface CommunicationRunSummary { + tickets: string[]; + participants: Array<{ participant: string; role: string; tickets: string[]; issueIds: string[] }>; + issueSeverities: string[]; + issueCount: number; +} + +export async function runListItem( + root: string, + fallbackRunId: string, + graphPath: string, + graphStat: import('node:fs').Stats | null, + manifestStat: import('node:fs').Stats, + manifest: Record, +): Promise { + const files = safeManifestFiles(root, asRecord(manifest.files)); + return { + runId: resolveRunId(manifest, fallbackRunId), + createdAt: resolveCreatedAt(manifest, manifestStat), + graphFingerprint: valueString(manifest.graphFingerprint), + graphPath: graphStat?.isFile() ? relativeApiPath(root, graphPath) : null, + summaryPath: valueString(files.summary), + warningCount: warningCount(manifest), + status: resolveStatus(manifest.status), + failure: isRecord(manifest.failure) ? manifest.failure : null, + runtimeVersion: runtimeVersion(manifest), + stages: isRecord(manifest.stages) ? manifest.stages : null, + files, + llm: readLlmSummary(manifest), + graphBytes: graphStat?.isFile() ? graphStat.size : 0, + communication: await readCommunicationSummary(root, files), + }; +} + +function resolveRunId(manifest: Record, fallbackRunId: string): string { + return typeof manifest.runId === 'string' ? manifest.runId : fallbackRunId; +} + +function resolveCreatedAt(manifest: Record, manifestStat: import('node:fs').Stats): string { + return validTimestamp(manifest.createdAt) ?? manifestStat.mtime.toISOString(); +} + +function valueString(value: unknown): string | null { + return typeof value === 'string' ? value : null; +} + +function warningCount(manifest: Record): number { + const warnings = Array.isArray(manifest.warnings) ? manifest.warnings : []; + return warnings.length; +} + +function resolveStatus(statusValue: unknown): IntentRunListItem['status'] { + return statusValue === 'succeeded' || statusValue === 'degraded' || statusValue === 'failed' ? statusValue : null; +} + +function runtimeVersion(manifest: Record): string | null { + const runtime = asRecord(manifest.runtime); + if (!runtime || typeof runtime.version !== 'string') return null; + return runtime.version; +} + +function readLlmSummary(manifest: Record): IntentRunListItem['llm'] { + const llm = asRecord(manifest.llm); + return llm ? llmSummary(llm) : null; +} + +function asRecord(value: unknown): Record | null { + return isRecord(value) ? value : null; +} + +function validTimestamp(value: unknown): string | null { + return typeof value === 'string' && Number.isFinite(Date.parse(value)) ? value : null; +} + +function llmSummary(value: Record): NonNullable { + return { + naturalLanguageExtraction: value.naturalLanguageExtraction === true, + markdownExtraction: value.markdownExtraction === true, + documentationExtraction: value.documentationExtraction === true, + taskSynthesis: value.taskSynthesis === true, + summary: value.summary === true, + }; +} + +async function readCommunicationSummary( + root: string, + files: Record, +): Promise { + const relative = files.communicationAnalysis; + if (!relative) return null; + try { + const filePath = path.resolve(root, relative.replace(/^\//, '')); + const stat = await fs.stat(filePath); + if (!stat.isFile() || stat.size > 4 * 1024 * 1024) return null; + const value = JSON.parse(await fs.readFile(filePath, 'utf8')) as Record; + const participants = Array.isArray(value.participants) + ? value.participants.filter(isRecord).map(participantSummary).filter((item) => item.participant) + : []; + const issues = Array.isArray(value.issues) ? value.issues.filter(isRecord) : []; + return { + tickets: stringArray(value.tickets), + participants, + issueSeverities: [...new Set(issues.flatMap((item) => ( + typeof item.severity === 'string' ? [item.severity] : [] + )))].sort(), + issueCount: issues.length, + }; + } catch { + return null; + } +} + +function participantSummary(item: Record): CommunicationRunSummary['participants'][number] { + return { + participant: typeof item.participant === 'string' ? item.participant : '', + role: typeof item.role === 'string' ? item.role : 'unknown', + tickets: stringArray(item.tickets), + issueIds: stringArray(item.issueIds), + }; +} + +function stringArray(value: unknown): string[] { + return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : []; +} + +function safeManifestFiles(root: string, files: Record): Record { + const output: Record = {}; + for (const [name, value] of Object.entries(files)) { + if (typeof value !== 'string') continue; + const safePath = value.replace(/^\//, ''); + const absolute = path.resolve(root, safePath); + if (isWithinRoot(root, absolute)) output[name] = value; + } + return output; +} + +function isWithinRoot(root: string, candidate: string): boolean { + const relative = path.relative(root, candidate); + return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative)); +} + +function relativeApiPath(root: string, filePath: string): string { + return path.relative(root, filePath).replace(/\\/g, '/'); +} diff --git a/src/llm/openrouter-request.ts b/src/llm/openrouter-request.ts new file mode 100644 index 0000000..1982f7f --- /dev/null +++ b/src/llm/openrouter-request.ts @@ -0,0 +1,242 @@ +interface ParsedOpenRouterResponse { + parsed: OpenRouterResponse; + text: string; +} + +interface OpenRouterChoice { + message?: { + content?: string | Array<{ type?: string; text?: string }>; + }; +} + +export interface OpenRouterResponse { + id?: string; + model?: string; + provider?: string; + usage?: { + prompt_tokens?: number; + completion_tokens?: number; + total_tokens?: number; + cost?: number; + }; + choices?: OpenRouterChoice[]; + error?: { message?: string }; +} + +export interface OpenRouterRequestContext { + apiKey: string; + baseUrl: string; + appName: string; + timeoutMs: number; + siteUrl?: string; + signal?: AbortSignal; +} + +type RequestAction = + | { action: 'success' } + | { action: 'retry'; retryAfterMs: number; error: Error } + | { action: 'fail'; error: Error }; + +export async function requestOpenRouter( + context: OpenRouterRequestContext, + body: Record, + listAvailableModels: () => Promise, + createModelError: (message: string, model: string, availableModels: string[]) => Error, +): Promise { + const { apiKey, timeoutMs } = context; + ensureApiKeyConfigured(apiKey); + + const controller = new AbortController(); + const detachAbort = connectAbortSignal(controller, context.signal); + const timeout = setTimeout(() => controller.abort(), timeoutMs); + + try { + let lastError: Error | null = null; + for (let attempt = 0; attempt < 3; attempt += 1) { + try { + const response = await sendRequest(context, body, controller); + const parsed = await parseResponse(response); + const resolution = await resolveHttpResponse( + response, + parsed, + body, + attempt, + listAvailableModels, + createModelError, + ); + if (resolution.action === 'retry') { + lastError = resolution.error; + await sleep(resolution.retryAfterMs); + continue; + } + if (resolution.action === 'fail') throw resolution.error; + return parsed; + } catch (error) { + const resolution = resolveTransportError(error, attempt, timeoutMs, context.signal); + if (resolution.action === 'retry') { + lastError = resolution.error; + await sleep(resolution.retryAfterMs); + continue; + } + lastError = resolution.error; + throw lastError; + } + } + throw lastError ?? new Error('OpenRouter request failed'); + } finally { + clearTimeout(timeout); + detachAbort(); + } +} + +function ensureApiKeyConfigured(apiKey: string): void { + if (!apiKey) throw new Error('OPENROUTER_API_KEY is required for this operation'); +} + +function connectAbortSignal(controller: AbortController, externalSignal?: AbortSignal): () => void { + const abortFromExternal = () => controller.abort(); + if (externalSignal) externalSignal.addEventListener('abort', abortFromExternal, { once: true }); + if (externalSignal?.aborted) controller.abort(); + return () => externalSignal?.removeEventListener('abort', abortFromExternal); +} + +function sendRequest( + context: OpenRouterRequestContext, + body: Record, + controller: AbortController, +): Promise { + return fetch(`${context.baseUrl}/chat/completions`, { + method: 'POST', + headers: buildRequestHeaders(context), + body: JSON.stringify(removeUndefined(body)), + signal: controller.signal, + }); +} + +async function resolveHttpResponse( + response: Response, + parsed: ParsedOpenRouterResponse, + body: Record, + attempt: number, + listAvailableModels: () => Promise, + createModelError: (message: string, model: string, availableModels: string[]) => Error, +): Promise { + if (response.ok && !parsed.error) return { action: 'success' }; + + const message = parsed.error?.message ?? parsed.text.slice(0, 500); + const error = new Error(`OpenRouter HTTP ${response.status}: ${message}`); + + if (isInvalidModelError(response.status, message)) { + return createModelErrorResponse( + error.message, + body, + listAvailableModels, + createModelError, + ); + } + + if (isRetryableServerError(response.status) && attempt < 2) { + return { action: 'retry', retryAfterMs: retryDelay(attempt), error }; + } + + return { action: 'fail', error }; +} + +async function createModelErrorResponse( + message: string, + body: Record, + listAvailableModels: () => Promise, + createModelError: (message: string, model: string, availableModels: string[]) => Error, +): Promise { + const model = typeof body.model === 'string' ? body.model : '(unknown)'; + try { + const availableModels = await listAvailableModels(); + return { action: 'fail', error: createModelError(message, model, availableModels) }; + } catch (listError) { + const listErrorMessage = listError instanceof Error ? listError.message : String(listError); + return { + action: 'fail', + error: createModelError( + `${message}\nAvailable OpenRouter models could not be fetched: ${listErrorMessage}`, + model, + [], + ), + }; + } +} + +function resolveTransportError( + error: unknown, + attempt: number, + timeoutMs: number, + externalSignal?: AbortSignal, +): RequestAction { + if (error instanceof Error && error.name === 'AbortError') { + if (externalSignal?.aborted) return { action: 'fail', error: new Error('OpenRouter request aborted by pipeline deadline') }; + return { action: 'fail', error: new Error(`OpenRouter request timed out after ${timeoutMs} ms`) }; + } + + if (error instanceof Error && isTransientNetworkError(error.message) && attempt < 2) { + return { action: 'retry', retryAfterMs: retryDelay(attempt), error }; + } + return { action: 'fail', error: error instanceof Error ? error : new Error(String(error)) }; +} + +function retryDelay(attempt: number): number { + return 300 * (2 ** attempt); +} + +function buildRequestHeaders(context: OpenRouterRequestContext): Record { + const headers: Record = { + Authorization: `Bearer ${context.apiKey}`, + 'Content-Type': 'application/json', + 'X-OpenRouter-Title': context.appName, + }; + if (context.siteUrl) headers['HTTP-Referer'] = context.siteUrl; + return headers; +} + +function shouldRetryWithoutJsonSchema(error: Error): boolean { + return /OpenRouter HTTP 4\d\d:|returned non-JSON|response does not contain choices|returned invalid JSON/i.test(error.message); +} + +export function shouldRetryRequestWithoutSchema(error: unknown): boolean { + return error instanceof Error && shouldRetryWithoutJsonSchema(error); +} + +function isRetryableServerError(status: number): boolean { + return status >= 500 || status === 429; +} + +function isTransientNetworkError(message: string): boolean { + return /fetch failed|ECONNRESET|ETIMEDOUT/i.test(message); +} + +function isInvalidModelError(status: number, message: string): boolean { + return status === 400 && /(?:not a valid model ID|invalid model(?: ID)?|model ID .*not found)/i.test(message); +} + +async function parseResponse(response: Response): Promise { + const text = await response.text(); + try { + return { parsed: JSON.parse(text) as OpenRouterResponse, text }; + } catch { + throw new Error(`OpenRouter returned non-JSON HTTP ${response.status}: ${text.slice(0, 500)}`); + } +} + +function removeUndefined(value: unknown): unknown { + if (Array.isArray(value)) return value.map(removeUndefined); + if (value !== null && typeof value === 'object') { + return Object.fromEntries( + Object.entries(value as Record) + .filter(([, item]) => item !== undefined) + .map(([key, item]) => [key, removeUndefined(item)]), + ); + } + return value; +} + +function sleep(milliseconds: number): Promise { + return new Promise((resolve) => setTimeout(resolve, milliseconds)); +} diff --git a/src/llm/openrouter.ts b/src/llm/openrouter.ts index 64c1371..f3606e9 100644 --- a/src/llm/openrouter.ts +++ b/src/llm/openrouter.ts @@ -1,32 +1,18 @@ import type { T2CConfig } from '../config/env.js'; import type { LlmResponseMetadata } from '../core/types.js'; import { StructuredResponseError, type StructuredSchema } from './structured-schema.js'; +import { + OpenRouterResponse, + OpenRouterRequestContext, + requestOpenRouter, + shouldRetryRequestWithoutSchema, +} from './openrouter-request.js'; export interface ChatMessage { role: 'system' | 'user' | 'assistant'; content: string; } -interface OpenRouterChoice { - message?: { - content?: string | Array<{ type?: string; text?: string }>; - }; -} - -interface OpenRouterResponse { - id?: string; - model?: string; - provider?: string; - usage?: { - prompt_tokens?: number; - completion_tokens?: number; - total_tokens?: number; - cost?: number; - }; - choices?: OpenRouterChoice[]; - error?: { message?: string }; -} - export interface OpenRouterResult { value: T; metadata: LlmResponseMetadata; @@ -169,84 +155,15 @@ export class OpenRouterClient { } private async request(body: Record): Promise { - const apiKey = this.config.apiKey; - if (!apiKey) throw new Error('OPENROUTER_API_KEY is required for this operation'); - const controller = new AbortController(); - const externalSignal = this.config.signal; - const abortFromExternal = () => controller.abort(); - externalSignal?.addEventListener('abort', abortFromExternal, { once: true }); - if (externalSignal?.aborted) controller.abort(); - const timeout = setTimeout(() => controller.abort(), this.config.timeoutMs); - try { - let lastError: Error | null = null; - for (let attempt = 0; attempt < 3; attempt += 1) { - try { - const headers: Record = { - Authorization: `Bearer ${apiKey}`, - 'Content-Type': 'application/json', - 'X-OpenRouter-Title': this.config.appName, - }; - if (this.config.siteUrl) headers['HTTP-Referer'] = this.config.siteUrl; - const response = await fetch(`${this.config.baseUrl}/chat/completions`, { - method: 'POST', - headers, - body: JSON.stringify(removeUndefined(body)), - signal: controller.signal, - }); - const text = await response.text(); - let parsed: OpenRouterResponse; - try { - parsed = JSON.parse(text) as OpenRouterResponse; - } catch { - throw new Error(`OpenRouter returned non-JSON HTTP ${response.status}: ${text.slice(0, 500)}`); - } - if (!response.ok || parsed.error) { - const message = parsed.error?.message ?? text.slice(0, 500); - const error = new Error(`OpenRouter HTTP ${response.status}: ${message}`); - if ((response.status === 429 || response.status >= 500) && attempt < 2) { - lastError = error; - await sleep(300 * (2 ** attempt)); - continue; - } - if (isInvalidModelError(response.status, message)) { - const model = typeof body.model === 'string' ? body.model : '(unknown)'; - try { - const availableModels = await this.listAvailableModels(); - throw new OpenRouterModelError( - formatInvalidModelError(error.message, availableModels), - model, - availableModels, - ); - } catch (listError) { - if (listError instanceof OpenRouterModelError) throw listError; - throw new OpenRouterModelError( - `${error.message}\nAvailable OpenRouter models could not be fetched: ${listError instanceof Error ? listError.message : String(listError)}`, - model, - [], - ); - } - } - throw error; - } - return parsed; - } catch (error) { - if (error instanceof Error && error.name === 'AbortError') { - if (externalSignal?.aborted) throw new Error('OpenRouter request aborted by pipeline deadline'); - throw new Error(`OpenRouter request timed out after ${this.config.timeoutMs} ms`); - } - lastError = error instanceof Error ? error : new Error(String(error)); - if (attempt < 2 && /fetch failed|ECONNRESET|ETIMEDOUT/i.test(lastError.message)) { - await sleep(300 * (2 ** attempt)); - continue; - } - throw lastError; - } - } - throw lastError ?? new Error('OpenRouter request failed'); - } finally { - clearTimeout(timeout); - externalSignal?.removeEventListener('abort', abortFromExternal); - } + const context: OpenRouterRequestContext = { + apiKey: this.config.apiKey ?? '', + baseUrl: this.config.baseUrl, + appName: this.config.appName, + timeoutMs: this.config.timeoutMs, + siteUrl: this.config.siteUrl ?? undefined, + signal: this.config.signal, + }; + return requestOpenRouter(context, body, () => this.listAvailableModels(), createModelError); } } @@ -273,13 +190,8 @@ function finiteOrNull(value: unknown): number | null { return typeof value === 'number' && Number.isFinite(value) ? value : null; } -function shouldRetryWithoutJsonSchema(error: unknown): boolean { - if (!(error instanceof Error)) return false; - return /OpenRouter HTTP 4\d\d:|returned non-JSON|response does not contain choices|returned invalid JSON/i.test(error.message); -} - -function isInvalidModelError(status: number, message: string): boolean { - return status === 400 && /(?:not a valid model ID|invalid model(?: ID)?|model ID .*not found)/i.test(message); +function createModelError(message: string, model: string, availableModels: string[]): Error { + return new OpenRouterModelError(formatInvalidModelError(message, availableModels), model, availableModels); } function formatInvalidModelError(message: string, availableModels: string[]): string { @@ -288,16 +200,6 @@ function formatInvalidModelError(message: string, availableModels: string[]): st return `${message}\n${heading}\n${availableModels.map((model) => `- ${model}`).join('\n')}`; } -function removeUndefined(value: unknown): unknown { - if (Array.isArray(value)) return value.map(removeUndefined); - if (value !== null && typeof value === 'object') { - return Object.fromEntries(Object.entries(value as Record) - .filter(([, item]) => item !== undefined) - .map(([key, item]) => [key, removeUndefined(item)])); - } - return value; -} - function extractContent(response: OpenRouterResponse): string { const content = response.choices?.[0]?.message?.content; if (typeof content === 'string') return content; @@ -333,6 +235,6 @@ function parseJsonResponse(response: OpenRouterResponse): OpenRouterResult } } -function sleep(milliseconds: number): Promise { - return new Promise((resolve) => setTimeout(resolve, milliseconds)); +function shouldRetryWithoutJsonSchema(error: unknown): boolean { + return shouldRetryRequestWithoutSchema(error); } diff --git a/src/operations/validation.ts b/src/operations/validation.ts index 2232e93..37ac155 100644 --- a/src/operations/validation.ts +++ b/src/operations/validation.ts @@ -61,14 +61,38 @@ function isJsonValue(value: unknown): value is JsonValue { export function assertVariableContract(value: unknown): asserts value is VariableContract { const contract = objectValue(value, 'Variable contract'); + assertVariableContractShape(contract); + assertVariableContractCore(contract); + const source = assertVariableSource(contract); + const access = assertVariableAccess(contract); + const readers = access.readers; + const writers = access.writers; + assertVariableAuthoritativeness(contract.id, readers, writers); + assertVariableMutability(contract.id, writers, contract.mutable, contract.freshnessSeconds); + const expectedId = buildVariableContractId(contract, readers, writers, source); + if (contract.id !== expectedId) { + throw new Error(`Variable contract id does not match semantic content: expected ${expectedId}`); + } +} + +function assertVariableContractShape(contract: Record): void { exactKeys(contract, [ 'schemaVersion', 'id', 'name', 'valueType', 'classification', 'source', 'access', 'mutable', 'freshnessSeconds', ], 'Variable contract'); +} + +function assertVariableContractCore(contract: Record): void { if (contract.schemaVersion !== 't2c.variable-contract/v1') throw new Error('Unsupported variable contract schemaVersion'); if (typeof contract.id !== 'string' || !VARIABLE_ID.test(contract.id)) throw new Error('Variable contract id is invalid'); if (typeof contract.name !== 'string' || !VARIABLE_NAME.test(contract.name)) throw new Error('Variable contract name is invalid'); if (!VALUE_TYPES.has(String(contract.valueType))) throw new Error('Variable contract valueType is invalid'); if (!CLASSIFICATIONS.has(String(contract.classification))) throw new Error('Variable contract classification is invalid'); +} + +function assertVariableSource(contract: Record): { + kind: VariableContract['source']['kind']; + ref: string; +} { const source = objectValue(contract.source, `Variable ${contract.id}: source`); exactKeys(source, ['kind', 'ref'], `Variable ${contract.id}: source`); if (!SOURCE_KINDS.has(String(source.kind))) throw new Error(`Variable ${contract.id}: source.kind is invalid`); @@ -76,35 +100,63 @@ export function assertVariableContract(value: unknown): asserts value is Variabl if (String(contract.classification) === 'secret' && source.kind !== 'vault') { throw new Error(`Variable ${contract.id}: secret variables must use a vault source`); } + return { kind: source.kind as VariableContract['source']['kind'], ref: source.ref as string }; +} + +function assertVariableAccess(contract: Record): { + readers: string[]; + writers: string[]; +} { const access = objectValue(contract.access, `Variable ${contract.id}: access`); exactKeys(access, ['readers', 'writers'], `Variable ${contract.id}: access`); - const readers = assertPrincipalList(access.readers, `Variable ${contract.id}: access.readers`); - const writers = assertPrincipalList(access.writers, `Variable ${contract.id}: access.writers`); + return { + readers: assertPrincipalList(access.readers, `Variable ${contract.id}: access.readers`), + writers: assertPrincipalList(access.writers, `Variable ${contract.id}: access.writers`), + }; +} + +function assertVariableAuthoritativeness(contractId: string, readers: string[], writers: string[]): void { if (!readers.includes('authority:founder') || !writers.includes('authority:founder')) { - throw new Error(`Variable ${contract.id}: authority:founder must be able to read and write every variable`); + throw new Error(`Variable ${contractId}: authority:founder must be able to read and write every variable`); } - if (typeof contract.mutable !== 'boolean') throw new Error(`Variable ${contract.id}: mutable must be a boolean`); - if (!contract.mutable && writers.some((item) => item !== 'authority:founder')) { - throw new Error(`Variable ${contract.id}: immutable variables may only be written by authority:founder`); +} + +function assertVariableMutability( + contractId: string, + writers: string[], + mutable: unknown, + freshnessSeconds: unknown, +): void { + if (typeof mutable !== 'boolean') throw new Error(`Variable ${contractId}: mutable must be a boolean`); + if (!mutable && writers.some((item) => item !== 'authority:founder')) { + throw new Error(`Variable ${contractId}: immutable variables may only be written by authority:founder`); } - if (contract.freshnessSeconds !== null - && (!Number.isInteger(contract.freshnessSeconds) || (contract.freshnessSeconds as number) < 1)) { - throw new Error(`Variable ${contract.id}: freshnessSeconds must be null or an integer >= 1`); + if (freshnessSeconds !== null + && (!Number.isInteger(freshnessSeconds) || (freshnessSeconds as number) < 1)) { + throw new Error(`Variable ${contractId}: freshnessSeconds must be null or an integer >= 1`); } +} + +function buildVariableContractId( + contract: Record, + readers: string[], + writers: string[], + source: { kind: VariableContract['source']['kind']; ref: string }, +): string { const semanticValue = { name: contract.name as string, valueType: contract.valueType as VariableContract['valueType'], classification: contract.classification as VariableContract['classification'], - source: contract.source as VariableContract['source'], + source, access: { - readers: [...(contract.access as VariableContract['access']).readers].sort(), - writers: [...(contract.access as VariableContract['access']).writers].sort(), + readers: [...readers].sort(), + writers: [...writers].sort(), }, - mutable: contract.mutable as boolean, - freshnessSeconds: contract.freshnessSeconds as number | null, + mutable: contract.mutable as VariableContract['mutable'], + freshnessSeconds: contract.freshnessSeconds as VariableContract['freshnessSeconds'], }; const expectedId = `VAR-${shortHash(stableStringify(semanticValue), 20)}`; - if (contract.id !== expectedId) throw new Error(`Variable contract id does not match semantic content: expected ${expectedId}`); + return expectedId; } function assertGeneration(value: unknown): void { @@ -152,10 +204,26 @@ function assertAcyclic(steps: OperationPlan['steps']): void { export function assertOperationPlan(value: unknown): asserts value is OperationPlan { const plan = objectValue(value, 'Operation plan'); + validateOperationPlanShape(plan); + validateOperationPlanMetadata(plan); + validateOperationPlanEvidence(plan.evidence); + const variables = collectOperationPlanVariables(plan.variables); + const variableById = new Map(variables.map((item) => [item.id, item])); + const { steps, stepIds, hasCommandStep, founderDecisionRequired } = validateOperationSteps(plan.steps, variableById); + validateOperationExpectations(plan.expectations, stepIds); + validateOperationDecision(plan.decision, founderDecisionRequired); + validateOperationVerification(plan.verification, hasCommandStep); + validateOperationPlanHash(plan); +} + +function validateOperationPlanShape(plan: Record): void { exactKeys(plan, [ 'schemaVersion', 'id', 'planHash', 'status', 'createdAt', 'contractVersion', 'capabilitySnapshotHash', 'requestedBy', 'reason', 'evidence', 'generation', 'variables', 'steps', 'expectations', 'decision', 'verification', ], 'Operation plan'); +} + +function validateOperationPlanMetadata(plan: Record): void { if (plan.schemaVersion !== 't2c.operation-plan/v1') throw new Error('Unsupported operation plan schemaVersion'); if (typeof plan.id !== 'string' || !PLAN_ID.test(plan.id)) throw new Error('Operation plan id is invalid'); if (typeof plan.planHash !== 'string' || !SHA256.test(plan.planHash)) throw new Error('Operation plan planHash must be SHA-256'); @@ -165,83 +233,151 @@ export function assertOperationPlan(value: unknown): asserts value is OperationP if (typeof plan.capabilitySnapshotHash !== 'string' || !SHA256.test(plan.capabilitySnapshotHash)) throw new Error('Operation plan capabilitySnapshotHash must be SHA-256'); nonBlank(plan.requestedBy, 'Operation plan requestedBy'); nonBlank(plan.reason, 'Operation plan reason'); - const evidence = objectValue(plan.evidence, 'Operation plan evidence'); + assertGeneration(plan.generation); +} + +function validateOperationPlanEvidence(value: unknown): void { + const evidence = objectValue(value, 'Operation plan evidence'); exactKeys(evidence, ['graphFingerprint', 'recordIds', 'diagnosticIds', 'conclusionIds'], 'Operation plan evidence'); if (typeof evidence.graphFingerprint !== 'string' || !SHA256.test(evidence.graphFingerprint)) throw new Error('Operation plan evidence.graphFingerprint must be SHA-256'); uniqueStrings(evidence.recordIds, 'Operation plan evidence.recordIds', { nonEmpty: true }); uniqueStrings(evidence.diagnosticIds, 'Operation plan evidence.diagnosticIds'); uniqueStrings(evidence.conclusionIds, 'Operation plan evidence.conclusionIds'); - assertGeneration(plan.generation); - if (!Array.isArray(plan.variables)) throw new Error('Operation plan variables must be an array'); - plan.variables.forEach(assertVariableContract); - const variables = plan.variables as VariableContract[]; +} + +function collectOperationPlanVariables(value: unknown): VariableContract[] { + if (!Array.isArray(value)) throw new Error('Operation plan variables must be an array'); + value.forEach(assertVariableContract); + const variables = value as VariableContract[]; if (new Set(variables.map((item) => item.id)).size !== variables.length) throw new Error('Operation plan variable IDs must be unique'); if (new Set(variables.map((item) => item.name)).size !== variables.length) throw new Error('Operation plan variable names must be unique'); - const variableById = new Map(variables.map((item) => [item.id, item])); - if (!Array.isArray(plan.steps) || plan.steps.length === 0) throw new Error('Operation plan steps must not be empty'); - const steps = plan.steps as OperationPlan['steps']; + return variables; +} + +function validateOperationSteps( + value: unknown, + variableById: Map, +): { steps: OperationPlan['steps']; stepIds: Set; hasCommandStep: boolean; founderDecisionRequired: boolean } { + if (!Array.isArray(value) || value.length === 0) throw new Error('Operation plan steps must not be empty'); const stepIds = new Set(); + const steps = value as OperationPlan['steps']; + const validatedSteps: OperationPlan['steps'] = []; + let hasCommandStep = false; let founderDecisionRequired = false; for (const rawStep of steps) { - const step = objectValue(rawStep, 'Operation step'); - exactKeys(step, ['id', 'name', 'capability', 'uriProcess', 'actor', 'effect', 'reversible', 'riskClass', 'parameters', 'dependsOn', 'humanApproval', 'rollback'], `Operation step ${String(step.id)}`); - if (typeof step.id !== 'string' || !STEP_ID.test(step.id) || stepIds.has(step.id)) throw new Error('Operation step id is invalid or duplicate'); - stepIds.add(step.id); - nonBlank(step.name, `Operation step ${step.id}: name`); - nonBlank(step.capability, `Operation step ${step.id}: capability`); - if (typeof step.uriProcess !== 'string' || !URI.test(step.uriProcess)) throw new Error(`Operation step ${step.id}: uriProcess must be concrete and contain no wildcard`); - if (typeof step.actor !== 'string' || !PRINCIPAL.test(step.actor) || step.actor.startsWith('human:')) throw new Error(`Operation step ${step.id}: actor must be a non-human registered principal`); - if (!['query', 'command'].includes(String(step.effect))) throw new Error(`Operation step ${step.id}: effect is invalid`); - if (![true, false, null].includes(step.reversible as boolean | null)) throw new Error(`Operation step ${step.id}: reversible is invalid`); - if (!RISK_CLASSES.has(String(step.riskClass))) throw new Error(`Operation step ${step.id}: riskClass is invalid`); - if (typeof step.humanApproval !== 'boolean') throw new Error(`Operation step ${step.id}: humanApproval must be a boolean`); - const parameters = objectValue(step.parameters, `Operation step ${step.id}: parameters`); - for (const [name, rawReference] of Object.entries(parameters)) { - if (!PARAMETER_NAME.test(name)) throw new Error(`Operation step ${step.id}: parameter name ${name} is invalid`); - const reference = objectValue(rawReference, `Operation step ${step.id}: parameter ${name}`); - exactKeys(reference, ['kind', 'variableId'], `Operation step ${step.id}: parameter ${name}`); - if (reference.kind !== 'variable' || typeof reference.variableId !== 'string' || !variableById.has(reference.variableId)) { - throw new Error(`Operation step ${step.id}: parameter ${name} must reference a declared variable`); - } - const variable = variableById.get(reference.variableId); - if (variable?.classification === 'secret') throw new Error(`Operation step ${step.id}: secret variable ${reference.variableId} cannot enter a process envelope payload`); - if (!variable?.access.readers.includes(step.actor as string) && step.actor !== 'authority:founder') { - throw new Error(`Operation step ${step.id}: actor cannot read variable ${reference.variableId}`); - } + const step = validateOperationStep(rawStep, variableById, stepIds); + validatedSteps.push(step); + hasCommandStep ||= step.effect === 'command'; + founderDecisionRequired ||= step.effect === 'command' && (step.reversible !== true || ['boundary', 'governance'].includes(step.riskClass)); + } + assertAcyclic(validatedSteps); + return { steps: validatedSteps, stepIds, hasCommandStep, founderDecisionRequired }; +} + +function validateOperationStep( + value: unknown, + variableById: Map, + stepIds: Set, +): OperationPlan['steps'][number] { + const step = objectValue(value, 'Operation step'); + exactKeys(step, ['id', 'name', 'capability', 'uriProcess', 'actor', 'effect', 'reversible', 'riskClass', 'parameters', 'dependsOn', 'humanApproval', 'rollback'], `Operation step ${String(step.id)}`); + if (typeof step.id !== 'string' || !STEP_ID.test(step.id) || stepIds.has(step.id)) throw new Error('Operation step id is invalid or duplicate'); + stepIds.add(step.id); + nonBlank(step.name, `Operation step ${step.id}: name`); + nonBlank(step.capability, `Operation step ${step.id}: capability`); + if (typeof step.uriProcess !== 'string' || !URI.test(step.uriProcess)) throw new Error(`Operation step ${step.id}: uriProcess must be concrete and contain no wildcard`); + if (typeof step.actor !== 'string' || !PRINCIPAL.test(step.actor) || step.actor.startsWith('human:')) throw new Error(`Operation step ${step.id}: actor must be a non-human registered principal`); + if (!['query', 'command'].includes(String(step.effect))) throw new Error(`Operation step ${step.id}: effect is invalid`); + if (![true, false, null].includes(step.reversible as boolean | null)) throw new Error(`Operation step ${step.id}: reversible is invalid`); + if (!RISK_CLASSES.has(String(step.riskClass))) throw new Error(`Operation step ${step.id}: riskClass is invalid`); + if (typeof step.humanApproval !== 'boolean') throw new Error(`Operation step ${step.id}: humanApproval must be a boolean`); + const parameters = validateOperationStepParameters(step.parameters, variableById, step.id as string, step.actor as string); + uniqueStrings(step.dependsOn, `Operation step ${step.id}: dependsOn`); + const rollback = validateOperationStepRollback(step.rollback, step.id as string); + if (step.effect === 'query') { + if (step.riskClass !== 'read_only' || step.reversible !== true || step.humanApproval || rollback !== null) { + throw new Error(`Operation step ${step.id}: queries must be read_only, reversible, autonomous and have no rollback`); + } + } else { + if (step.riskClass === 'read_only' || rollback === null) { + throw new Error(`Operation step ${step.id}: commands require a non-read-only risk and rollback declaration`); } - uniqueStrings(step.dependsOn, `Operation step ${step.id}: dependsOn`); - const rollback = step.rollback === null ? null : objectValue(step.rollback, `Operation step ${step.id}: rollback`); - if (rollback) { - exactKeys(rollback, ['kind', 'uriProcess', 'reason'], `Operation step ${step.id}: rollback`); - if (!['uri_process', 'unavailable'].includes(String(rollback.kind))) throw new Error(`Operation step ${step.id}: rollback.kind is invalid`); - if (rollback.kind === 'uri_process') { - if (typeof rollback.uriProcess !== 'string' || !URI.test(rollback.uriProcess)) throw new Error(`Operation step ${step.id}: rollback URI is invalid`); - if (rollback.reason !== null) throw new Error(`Operation step ${step.id}: URI rollback reason must be null`); - } else { - if (rollback.uriProcess !== null) throw new Error(`Operation step ${step.id}: unavailable rollback URI must be null`); - nonBlank(rollback.reason, `Operation step ${step.id}: unavailable rollback reason`); - } + if ((step.reversible !== true || ['boundary', 'governance'].includes(String(step.riskClass))) && !step.humanApproval) { + throw new Error(`Operation step ${step.id}: safety-sensitive commands require humanApproval`); } - if (step.effect === 'query') { - if (step.riskClass !== 'read_only' || step.reversible !== true || step.humanApproval || rollback !== null) { - throw new Error(`Operation step ${step.id}: queries must be read_only, reversible, autonomous and have no rollback`); - } - } else { - if (step.riskClass === 'read_only' || rollback === null) throw new Error(`Operation step ${step.id}: commands require a non-read-only risk and rollback declaration`); - if (step.reversible !== true || ['boundary', 'governance'].includes(String(step.riskClass))) founderDecisionRequired = true; - if ((step.reversible !== true || ['boundary', 'governance'].includes(String(step.riskClass))) && !step.humanApproval) { - throw new Error(`Operation step ${step.id}: safety-sensitive commands require humanApproval`); - } + } + return { + id: step.id as string, + name: step.name as string, + capability: step.capability as string, + uriProcess: step.uriProcess as string, + actor: step.actor as string, + effect: step.effect as OperationPlan['steps'][number]['effect'], + reversible: step.reversible as boolean | null, + riskClass: step.riskClass as OperationPlan['steps'][number]['riskClass'], + parameters, + dependsOn: step.dependsOn as string[], + humanApproval: step.humanApproval as boolean, + rollback, + }; +} + +function validateOperationStepParameters( + value: unknown, + variableById: Map, + stepId: string, + actor: string, +): Record { + const parameters = objectValue(value, `Operation step ${stepId}: parameters`); + const parsed: Record = {}; + for (const [name, rawReference] of Object.entries(parameters)) { + if (!PARAMETER_NAME.test(name)) throw new Error(`Operation step ${stepId}: parameter name ${name} is invalid`); + const reference = objectValue(rawReference, `Operation step ${stepId}: parameter ${name}`); + exactKeys(reference, ['kind', 'variableId'], `Operation step ${stepId}: parameter ${name}`); + if (reference.kind !== 'variable' || typeof reference.variableId !== 'string' || !variableById.has(reference.variableId)) { + throw new Error(`Operation step ${stepId}: parameter ${name} must reference a declared variable`); } + const variable = variableById.get(reference.variableId); + if (variable?.classification === 'secret') { + throw new Error(`Operation step ${stepId}: secret variable ${reference.variableId} cannot enter a process envelope payload`); + } + if (!variable?.access.readers.includes(actor) && actor !== 'authority:founder') { + throw new Error(`Operation step ${stepId}: actor cannot read variable ${reference.variableId}`); + } + parsed[name] = { kind: 'variable', variableId: reference.variableId }; } - assertAcyclic(steps); - if (!Array.isArray(plan.expectations) || plan.expectations.length === 0) throw new Error('Operation plan expectations must not be empty'); + return parsed; +} + +function validateOperationStepRollback(value: unknown, stepId: string): OperationPlan['steps'][number]['rollback'] { + if (value === null) return null; + const rollback = objectValue(value, `Operation step ${stepId}: rollback`); + exactKeys(rollback, ['kind', 'uriProcess', 'reason'], `Operation step ${stepId}: rollback`); + if (!['uri_process', 'unavailable'].includes(String(rollback.kind))) throw new Error(`Operation step ${stepId}: rollback.kind is invalid`); + if (rollback.kind === 'uri_process') { + if (typeof rollback.uriProcess !== 'string' || !URI.test(rollback.uriProcess)) throw new Error(`Operation step ${stepId}: rollback URI is invalid`); + if (rollback.reason !== null) throw new Error(`Operation step ${stepId}: URI rollback reason must be null`); + } else { + if (rollback.uriProcess !== null) throw new Error(`Operation step ${stepId}: unavailable rollback URI must be null`); + nonBlank(rollback.reason, `Operation step ${stepId}: unavailable rollback reason`); + } + return { + kind: rollback.kind as OperationPlan['steps'][number]['rollback']['kind'], + uriProcess: rollback.uriProcess as string | null, + reason: rollback.reason as string | null, + }; +} + +function validateOperationExpectations(value: unknown, stepIds: Set): void { + if (!Array.isArray(value) || value.length === 0) throw new Error('Operation plan expectations must not be empty'); const coveredSteps = new Set(); const expectationIds = new Set(); - for (const rawExpectation of plan.expectations) { + for (const rawExpectation of value) { const expectation = objectValue(rawExpectation, 'Operation expectation'); exactKeys(expectation, ['id', 'expected', 'verifier', 'verifiedBy'], `Operation expectation ${String(expectation.id)}`); - if (typeof expectation.id !== 'string' || !STEP_ID.test(expectation.id) || expectationIds.has(expectation.id)) throw new Error('Operation expectation id is invalid or duplicate'); + if (typeof expectation.id !== 'string' || !STEP_ID.test(expectation.id) || expectationIds.has(expectation.id)) { + throw new Error('Operation expectation id is invalid or duplicate'); + } expectationIds.add(expectation.id); if (!isJsonValue(expectation.expected)) throw new Error(`Operation expectation ${expectation.id}: expected must be JSON`); nonBlank(expectation.verifier, `Operation expectation ${expectation.id}: verifier`); @@ -253,7 +389,10 @@ export function assertOperationPlan(value: unknown): asserts value is OperationP } const uncovered = [...stepIds].filter((id) => !coveredSteps.has(id)); if (uncovered.length) throw new Error(`Operation plan has steps without expectations: ${uncovered.join(',')}`); - const decision = objectValue(plan.decision, 'Operation plan decision'); +} + +function validateOperationDecision(value: unknown, founderDecisionRequired: boolean): void { + const decision = objectValue(value, 'Operation plan decision'); exactKeys(decision, ['required', 'authority', 'reason'], 'Operation plan decision'); if (typeof decision.required !== 'boolean') throw new Error('Operation plan decision.required must be a boolean'); if (founderDecisionRequired && (!decision.required || decision.authority !== 'authority:founder')) { @@ -265,17 +404,26 @@ export function assertOperationPlan(value: unknown): asserts value is OperationP } else if (decision.authority !== null || decision.reason !== null) { throw new Error('Operation plan decision authority and reason must be null when no decision is required'); } - const verification = objectValue(plan.verification, 'Operation plan verification'); +} + +function validateOperationVerification(value: unknown, hasCommandStep: boolean): void { + const verification = objectValue(value, 'Operation plan verification'); exactKeys(verification, ['serviceRestartRequired', 'exerciseRequired', 'independentReadback'], 'Operation plan verification'); for (const field of ['serviceRestartRequired', 'exerciseRequired', 'independentReadback'] as const) { if (typeof verification[field] !== 'boolean') throw new Error(`Operation plan verification.${field} must be a boolean`); } - if (steps.some((step) => step.effect === 'command') && (!verification.exerciseRequired || !verification.independentReadback)) { + if (hasCommandStep && (!verification.exerciseRequired || !verification.independentReadback)) { throw new Error('Command plans require exercise and independent readback verification'); } - const base = { ...(plan as unknown as OperationPlan) }; +} + +function validateOperationPlanHash(plan: Record): void { + const castPlan = plan as unknown as OperationPlan; + const base = { ...castPlan }; const { id: _id, planHash: _planHash, ...hashValue } = base; const expectedHash = shortHash(stableStringify(hashValue), 64); - if (plan.planHash !== expectedHash) throw new Error(`Operation plan hash does not match content: expected ${expectedHash}`); - if (plan.id !== `OPLAN-${expectedHash.slice(0, 20)}`) throw new Error('Operation plan id does not match planHash'); + if (castPlan.planHash !== expectedHash) { + throw new Error(`Operation plan hash does not match content: expected ${expectedHash}`); + } + if (castPlan.id !== `OPLAN-${expectedHash.slice(0, 20)}`) throw new Error('Operation plan id does not match planHash'); } diff --git a/src/pipeline/run-documentation.ts b/src/pipeline/run-documentation.ts new file mode 100644 index 0000000..8352e5d --- /dev/null +++ b/src/pipeline/run-documentation.ts @@ -0,0 +1,80 @@ +import { hasOpenRouter } from '../config/env.js'; +import type { PipelineOptions, PipelineStageAudit } from '../core/types.js'; +import type { T2CConfig } from '../config/env.js'; +import { extractDocumentationIntent } from '../extractors/docs-llm.js'; +import { extractDocumentationBaseline } from '../extractors/docs-deterministic.js'; +import { openRouterAuditConfiguration } from '../llm/audit.js'; +import { T2C_VERSION } from '../version.js'; +import type { PipelineContext } from './run-types.js'; +import { collectTargetHints } from './run-helpers.js'; +import { skippedAudit } from './run-failed.js'; + +export async function collectDocumentationExtraction( + context: PipelineContext, + options: PipelineOptions, + config: T2CConfig, + deterministicDocumentFiles: string[], +): Promise<{ documentationAudit: PipelineStageAudit; deterministicDocsCount: number }> { + const { root, warnings, bySource } = context; + const documentationStartedAt = Date.now(); + const deterministicDocs = await extractDocumentationBaseline({ root, files: deterministicDocumentFiles }, config); + bySource.document = deterministicDocs.records; + warnings.push(...deterministicDocs.warnings); + + let documentationAudit: PipelineStageAudit = deterministicDocumentFiles.length === 0 + ? skippedAudit('deterministic', 'No documentation files matched the configured patterns') + : { + runtimeVersion: T2C_VERSION, + configuration: { generator: 't2c/markdown-documentation', generatorVersion: '2' }, + status: deterministicDocs.warnings.length ? 'partial' : 'succeeded', + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: deterministicDocs.warnings.length > 0, + recordCount: deterministicDocs.records.length, + warningCount: deterministicDocs.warnings.length, + model: null, + durationMs: Date.now() - documentationStartedAt, + reason: deterministicDocs.warnings.length + ? { code: 'DOCUMENT_EXTRACTION_PARTIAL', message: `${deterministicDocs.warnings.length} deterministic documentation warning(s)` } + : null, + responses: [], + }; + + if (options.includeDocumentationLlm) { + if (hasOpenRouter(config)) { + const docs = await extractDocumentationIntent({ + root, + patterns: options.documentPatterns, + excludes: options.documentExcludes ?? config.documentExcludes, + targetHints: collectTargetHints(Object.values(bySource).flat()), + }, config); + bySource.document.push(...docs.records); + warnings.push(...docs.warnings); + documentationAudit = { + ...docs.audit, + recordCount: bySource.document.length, + configuration: { + ...docs.audit.configuration, + deterministicGenerator: 't2c/markdown-documentation@2', + deterministicRecordCount: deterministicDocs.records.length, + }, + }; + } else { + const message = 'OPENROUTER_API_KEY is not configured; documentation -> Intent DSL was skipped'; + warnings.push(message); + documentationAudit = { + ...skippedAudit('llm', message), + configuration: openRouterAuditConfiguration(config, config.openRouter.documentModel, config.documentTimeoutMs), + status: deterministicDocs.records.length ? 'fallback' : 'failed', + effectiveMode: deterministicDocs.records.length ? 'deterministic' : 'none', + degraded: true, + recordCount: deterministicDocs.records.length, + model: config.openRouter.documentModel, + reason: { code: 'LLM_NOT_CONFIGURED', message }, + responses: [], + }; + } + } + + return { documentationAudit, deterministicDocsCount: deterministicDocs.records.length }; +} diff --git a/src/pipeline/run-execution.ts b/src/pipeline/run-execution.ts new file mode 100644 index 0000000..541e56e --- /dev/null +++ b/src/pipeline/run-execution.ts @@ -0,0 +1,189 @@ +import path from 'node:path'; + +import { hasOpenRouter } from '../config/env.js'; +import type { T2CConfig } from '../config/env.js'; +import { addCommunicationIssuesToDiagnostics, analyzeCommunication } from '../communication/analyzer.js'; +import { ensureDir, pathExists, resolveGlobs } from '../core/io.js'; +import { newRunId } from '../core/id.js'; +import type { PipelineOptions } from '../core/types.js'; +import { extractAstIntent } from '../extractors/ast.js'; +import { extractConfigurationIntent } from '../extractors/configuration.js'; +import { extractRuntimeCycleIntent } from '../extractors/runtime-cycle.js'; +import { extractGitIntent } from '../extractors/git.js'; +import { extractMarkdownIntentAudited } from '../extractors/markdown-llm.js'; +import { extractNlIntentAudited } from '../extractors/nl-llm.js'; +import { diagnoseGraph } from '../graph/diagnostics.js'; +import { linkIntentRecords } from '../graph/linker.js'; +import { + appendLlmNotConfigured, + collectCommunicationAnalysis, + collectTaskSynthesis, + createCodeChangeArtifacts, +} from './run-helpers.js'; +import { collectDocumentationExtraction } from './run-documentation.js'; +import { collectSummary } from './run-summary.js'; +import { skippedAudit } from './run-failed.js'; +import type { PipelineContext, PipelineExecutionOutput } from './run-types.js'; + +export async function initializePipelineContext(options: PipelineOptions): Promise { + const root = path.resolve(options.root); + if (!(await pathExists(root))) throw new Error(`Root does not exist: ${root}`); + const runId = newRunId(); + const baseOutput = path.resolve(root, options.outputDir); + const runDirectory = path.join(baseOutput, 'runs', runId); + await ensureDir(runDirectory); + + return { + root, + runId, + baseOutput, + runDirectory, + activeStage: 'setup', + warnings: [], + bySource: { + nl: [], + git: [], + ast: [], + todo: [], + changelog: [], + document: [], + configuration: [], + runtime: [], + communication: [], + }, + completedStages: {}, + }; +} + +export async function executePipeline(context: PipelineContext, options: PipelineOptions, config: T2CConfig): Promise { + const { root, warnings, bySource, completedStages } = context; + const deterministicDocumentFiles = await resolveGlobs( + root, + options.documentPatterns, + options.documentExcludes ?? config.documentExcludes, + ); + + let naturalLanguageAudit = skippedAudit('disabled', 'No NL task file was selected'); + if (options.taskFile) { + context.activeStage = 'naturalLanguageExtraction'; + const result = await extractNlIntentAudited( + { root, sourcePath: options.taskFile }, + config, + options.nlMode ?? config.nlMode, + ); + bySource.nl = result.records; + warnings.push(...result.warnings); + naturalLanguageAudit = result.audit; + } + completedStages.naturalLanguageExtraction = naturalLanguageAudit; + + context.activeStage = 'gitExtraction'; + const git = await extractGitIntent({ root, count: options.gitCommitCount }, config); + bySource.git = git.records; + warnings.push(...git.warnings); + + context.activeStage = 'astExtraction'; + const ast = await extractAstIntent({ root }, config); + bySource.ast = ast.records; + warnings.push(...ast.warnings); + + context.activeStage = 'markdownExtraction'; + const markdown = await extractMarkdownIntentAudited( + { root, todoPath: options.todoFile, changelogPath: options.changelogFile }, + config, + options.markdownMode ?? config.markdownMode, + ); + bySource.todo = markdown.records.filter((record) => record.source.kind === 'todo'); + bySource.changelog = markdown.records.filter((record) => record.source.kind === 'changelog'); + warnings.push(...markdown.warnings); + const markdownAudit = markdown.audit; + completedStages.markdownExtraction = markdownAudit; + + context.activeStage = 'documentationExtraction'; + const documentationResult = await collectDocumentationExtraction(context, options, config, deterministicDocumentFiles); + const documentationAudit = documentationResult.documentationAudit; + completedStages.documentationExtraction = documentationAudit; + + context.activeStage = 'configurationExtraction'; + const configurationExtraction = await extractConfigurationIntent(root, config); + bySource.configuration = configurationExtraction.records; + warnings.push(...configurationExtraction.warnings); + + context.activeStage = 'runtimeExtraction'; + if (options.cycleFile) { + try { + const runtime = await extractRuntimeCycleIntent(options.cycleFile, config, root); + bySource.runtime = runtime.records; + warnings.push(...runtime.warnings); + } catch (error) { + warnings.push(`runtime cycle ignored: ${error instanceof Error ? error.message : String(error)}`); + } + } + + const communicationInput = await collectCommunicationAnalysis(context, options, config); + const communicationAudit = communicationInput.audit; + const communicationInputPresent = !communicationInput.missingDirectory; + const communicationSyntheses = communicationInput.syntheses; + completedStages.communicationAnalysis = communicationAudit; + + context.activeStage = 'linking'; + const allRecords = Object.values(bySource).flat(); + const generatedAt = new Date().toISOString(); + const graph = linkIntentRecords(allRecords, generatedAt); + + context.activeStage = 'diagnostics'; + let diagnostics = diagnoseGraph(graph, generatedAt); + const communicationAnalysis = communicationInputPresent + ? analyzeCommunication(graph, generatedAt, communicationSyntheses) + : null; + if (communicationAnalysis) diagnostics = addCommunicationIssuesToDiagnostics(diagnostics, communicationAnalysis); + if (options.includeDocumentationLlm && !hasOpenRouter(config)) appendLlmNotConfigured(diagnostics); + + const taskSynthesis = await collectTaskSynthesis( + context, + options, + config, + root, + graph, + diagnostics, + ); + completedStages.taskSynthesis = taskSynthesis.audit; + + context.activeStage = 'codeChangePlanning'; + const { codeChangePlans, codeChangeReview, codeChangeSourcePatches, codeChangePlanningAudit } = createCodeChangeArtifacts( + graph, + diagnostics, + generatedAt, + root, + taskSynthesis.result, + config, + ); + completedStages.codeChangePlanning = codeChangePlanningAudit; + + context.activeStage = 'summary'; + const { summary, audit: summaryAudit } = await collectSummary(graph, diagnostics, config, options); + warnings.push(...summary.warnings); + completedStages.summary = summaryAudit; + + return { + generatedAt, + bySource, + graph, + diagnostics, + communicationAnalysis, + communicationSyntheses, + naturalLanguageAudit, + markdownAudit, + documentationAudit, + communicationAudit, + taskSynthesisAudit: taskSynthesis.audit, + codeChangePlanningAudit, + summary, + summaryAudit, + taskSynthesis: taskSynthesis.result, + todoPatch: taskSynthesis.patch, + codeChangePlans, + codeChangeReview, + codeChangeSourcePatches, + }; +} diff --git a/src/pipeline/run-failed.ts b/src/pipeline/run-failed.ts new file mode 100644 index 0000000..4e9d400 --- /dev/null +++ b/src/pipeline/run-failed.ts @@ -0,0 +1,167 @@ +import path from 'node:path'; + +import { DocumentationLlmRequiredError, MarkdownLlmRequiredError } from '../extractors/docs-llm.js'; +import { NlLlmRequiredError } from '../extractors/nl-llm.js'; +import { CommunicationLlmRequiredError } from '../communication/llm.js'; +import { TaskSynthesisRequiredError } from '../synthesis/tasks-llm.js'; +import { T2C_VERSION } from '../version.js'; +import { openRouterAuditConfiguration } from '../llm/audit.js'; +import { writeJson } from '../core/io.js'; +import type { PipelineManifest, PipelineFailureStage, PipelineOptions, PipelineStageAudit } from '../core/types.js'; +import type { T2CConfig } from '../config/env.js'; +import type { PipelineContext } from './run-types.js'; +import { manifestConfiguration } from './run-persistence.js'; + +type PipelineManifestStage = keyof PipelineManifest['stages']; + +const abortStageLabels: Record = { + naturalLanguageExtraction: 'natural-language extraction', + markdownExtraction: 'Markdown extraction', + documentationExtraction: 'documentation extraction', + communicationAnalysis: 'communication analysis', + taskSynthesis: 'task synthesis', + codeChangePlanning: 'code-change planning', + summary: 'summary generation', +}; + +function isLlMFailureStage(stage: PipelineManifestStage): boolean { + return stage === 'summary' || stage === 'taskSynthesis'; +} + +function failureModelForStage(config: T2CConfig, stage: PipelineManifestStage): string | null { + if (stage === 'summary') return config.openRouter.summaryModel; + if (stage === 'taskSynthesis') return config.openRouter.taskModel; + return null; +} + +export async function persistFailedRun( + context: PipelineContext, + error: unknown, + options: PipelineOptions, + config: T2CConfig, +): Promise { + await persistFailedRunState( + context.runId, + context.root, + context.runDirectory, + options, + config, + error, + context.activeStage, + context.completedStages, + ); +} + +export function persistFailedRunState( + runId: string, + root: string, + runDirectory: string, + options: PipelineOptions, + config: T2CConfig, + error: unknown, + failedStage: PipelineFailureStage, + completedStages: Partial, +): Promise { + const message = error instanceof Error ? error.message : String(error); + const knownAudit = error instanceof NlLlmRequiredError + || error instanceof MarkdownLlmRequiredError + || error instanceof DocumentationLlmRequiredError + || error instanceof CommunicationLlmRequiredError + || error instanceof TaskSynthesisRequiredError + ? error.audit + : null; + const stageFailureCode = failureCode(failedStage); + const manifestFailureReason = knownAudit?.reason ?? { code: stageFailureCode, message }; + const failureStatus = failureAuditForStage.bind(null, message, knownAudit, stageFailureCode, config); + const stageValue = makeStageValue.bind(null, failureStatus, completedStages, failedStage); + const stages: PipelineManifest['stages'] = { + naturalLanguageExtraction: stageValue('naturalLanguageExtraction'), + markdownExtraction: stageValue('markdownExtraction'), + documentationExtraction: stageValue('documentationExtraction'), + communicationAnalysis: stageValue('communicationAnalysis'), + taskSynthesis: stageValue('taskSynthesis'), + codeChangePlanning: stageValue('codeChangePlanning'), + summary: stageValue('summary'), + }; + const reason = manifestFailureReason; + const manifest: PipelineManifest = { + schemaVersion: 't2c.run/v1', + runId, + root, + createdAt: new Date().toISOString(), + graphFingerprint: null, + files: {}, + warnings: [message], + status: 'failed', + failure: { stage: failedStage, code: reason.code, message: reason.message }, + runtime: { name: 'todo2code', version: T2C_VERSION }, + configuration: manifestConfiguration(options, config), + stages, + llm: { + naturalLanguageExtraction: stages.naturalLanguageExtraction.effectiveMode === 'llm', + markdownExtraction: stages.markdownExtraction.effectiveMode === 'llm', + communicationEnrichment: stages.communicationAnalysis.effectiveMode === 'llm', + documentationExtraction: false, + taskSynthesis: false, + summary: false, + }, + }; + return writeJson(path.join(runDirectory, 'manifest.json'), manifest); +} + +function failureCode(stage: PipelineFailureStage): string { + return `PIPELINE_${stage.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase()}_FAILED`; +} + +function failureAuditForStage( + message: string, + knownAudit: PipelineStageAudit | null, + stageFailureCode: string, + config: T2CConfig, + stage: PipelineManifestStage, + failedStage: PipelineFailureStage, +): PipelineStageAudit { + if (knownAudit && stage === failedStage) return knownAudit; + return { + runtimeVersion: T2C_VERSION, + configuration: openRouterAuditConfiguration(config, isLlMFailureStage(stage) ? failureModelForStage(config, stage) : null), + status: 'failed', + requestedMode: isLlMFailureStage(stage) ? 'llm' : 'disabled', + effectiveMode: 'none', + degraded: true, + recordCount: 0, + warningCount: 1, + model: failureModelForStage(config, stage), + durationMs: 0, + reason: { code: stageFailureCode, message }, + responses: [], + }; +} + +function makeStageValue( + failureStatus: ( + stage: PipelineManifestStage, + failedStage: PipelineFailureStage, + ) => PipelineStageAudit, + completedStages: Partial, + failedStage: PipelineFailureStage, + stage: PipelineManifestStage, +): PipelineStageAudit { + if (completedStages[stage]) return completedStages[stage]!; + if (stage === failedStage) return failureStatus(stage, failedStage); + return { + ...skippedAudit('disabled', `Pipeline aborted before ${abortStageLabels[stage]}`), + reason: { code: 'PIPELINE_ABORTED', message: `Pipeline aborted before ${abortStageLabels[stage]}` }, + }; +} + +export function skippedAudit(requestedMode: PipelineStageAudit['requestedMode'], message: string): PipelineStageAudit { + return { + runtimeVersion: T2C_VERSION, + configuration: {}, + status: 'skipped', requestedMode, effectiveMode: 'none', degraded: false, + recordCount: 0, warningCount: 0, model: null, durationMs: 0, + reason: { code: 'STAGE_SKIPPED', message }, + responses: [], + }; +} diff --git a/src/pipeline/run-helpers.ts b/src/pipeline/run-helpers.ts new file mode 100644 index 0000000..e5adadb --- /dev/null +++ b/src/pipeline/run-helpers.ts @@ -0,0 +1,177 @@ +import path from 'node:path'; + +import { createCodeChangeReviewPatch, createCodeChangeSourcePatchSet, createRepositoryPathProbe, proposeCodeChangePlans } from '../synthesis/code-change-plan.js'; +import { extractCommunicationIntentAudited, type ParticipantCommunicationSynthesis } from '../communication/llm.js'; +import { type AuditedTaskSynthesisResult, synthesizeTodoProposals } from '../synthesis/tasks-llm.js'; +import { createTodoPatch, type CreatedTodoPatch } from '../synthesis/todo-patch.js'; +import { createIntentId } from '../core/id.js'; +import type { Diagnostic, DiagnosticReport, IntentRecord, PipelineOptions, PipelineStageAudit } from '../core/types.js'; +import { readText } from '../core/io.js'; +import { T2C_VERSION } from '../version.js'; +import { openRouterAuditConfiguration } from '../llm/audit.js'; +import type { T2CConfig } from '../config/env.js'; +import type { PipelineContext } from './run-types.js'; +import { skippedAudit } from './run-failed.js'; + +export async function collectCommunicationAnalysis( + context: PipelineContext, + options: Pick, + config: T2CConfig, +): Promise<{ + audit: PipelineStageAudit; + syntheses: ParticipantCommunicationSynthesis[]; + missingDirectory: boolean; +}> { + const { root, warnings, bySource } = context; + const includeCommunication = options.includeCommunication !== false; + const communicationStartedAt = Date.now(); + let communicationAudit: PipelineStageAudit = skippedAudit('disabled', 'Communication analysis was disabled'); + let missingDirectory = false; + let communicationSyntheses: ParticipantCommunicationSynthesis[] = []; + + if (!includeCommunication) { + return { audit: communicationAudit, syntheses: communicationSyntheses, missingDirectory: true }; + } + + context.activeStage = 'communicationAnalysis'; + const communication = await extractCommunicationIntentAudited({ + root, + projectDir: options.projectDirectory ?? 'project', + ticket: options.communicationTicket ?? null, + }, config, options.communicationMode ?? config.communicationMode); + const foundMissingDirectory = communication.records.length === 0 + && communication.warnings.length === 1 + && communication.warnings[0]?.startsWith('Communication directory not found:'); + if (!foundMissingDirectory) warnings.push(...communication.warnings); + bySource.communication = communication.records; + communicationSyntheses = communication.participants; + missingDirectory = foundMissingDirectory; + if (!foundMissingDirectory) { + communicationAudit = { + ...communication.audit, + durationMs: Date.now() - communicationStartedAt, + effectiveMode: communication.audit.effectiveMode, + }; + } else { + communicationAudit = skippedAudit('deterministic', communication.warnings[0] ?? 'Communication directory not found'); + } + + return { + audit: communicationAudit, + syntheses: communicationSyntheses, + missingDirectory, + }; +} + +export async function collectTaskSynthesis( + context: PipelineContext, + options: Pick, + config: T2CConfig, + root: string, + graph: Parameters[0], + diagnostics: DiagnosticReport, +): Promise<{ result: AuditedTaskSynthesisResult | null; patch: CreatedTodoPatch | null; audit: PipelineStageAudit }> { + const { warnings } = context; + const taskSynthesisMode = options.taskSynthesisMode ?? 'disabled'; + let taskSynthesis: AuditedTaskSynthesisResult | null = null; + let todoPatch: CreatedTodoPatch | null = null; + let taskSynthesisAudit = skippedAudit('disabled', 'Task synthesis was disabled'); + + if (taskSynthesisMode === 'disabled') { + return { result: taskSynthesis, patch: todoPatch, audit: taskSynthesisAudit }; + } + + context.activeStage = 'taskSynthesis'; + taskSynthesis = await synthesizeTodoProposals(graph, diagnostics, config, taskSynthesisMode); + warnings.push(...taskSynthesis.warnings); + taskSynthesisAudit = taskSynthesis.audit; + + if (!options.todoFile) throw new Error('Task synthesis rendering requires a TODO source file'); + context.activeStage = 'todoRendering'; + const todoContent = await readText(path.resolve(root, options.todoFile), config.maxFileBytes); + todoPatch = createTodoPatch({ + todoPath: path.relative(root, path.resolve(root, options.todoFile)).replace(/\\/g, '/'), + todoContent, + graph, + diagnostics, + conclusions: taskSynthesis.conclusions, + proposals: taskSynthesis.proposals, + validation: taskSynthesis.validation, + synthesisAudit: taskSynthesis.audit, + }); + return { result: taskSynthesis, patch: todoPatch, audit: taskSynthesisAudit }; +} + +export function createCodeChangeArtifacts( + graph: Parameters[0]['graph'], + diagnostics: DiagnosticReport, + generatedAt: string, + root: string, + taskSynthesis: AuditedTaskSynthesisResult | null, + config: T2CConfig, +) { + const codeChangePlans = proposeCodeChangePlans({ + graph, + diagnostics, + ...(taskSynthesis + ? { conclusions: taskSynthesis.conclusions, proposals: taskSynthesis.proposals } + : {}), + generatedAt, + pathExists: createRepositoryPathProbe(root), + }); + const codeChangeReview = createCodeChangeReviewPatch({ + plans: codeChangePlans.plans, + graphFingerprint: graph.fingerprint, + createdAt: generatedAt, + }); + const codeChangeSourcePatches = createCodeChangeSourcePatchSet({ + plans: codeChangePlans.plans, + graphFingerprint: graph.fingerprint, + generatedAt, + }); + const codeChangePlanningAudit: PipelineStageAudit = { + runtimeVersion: T2C_VERSION, + configuration: openRouterAuditConfiguration(config, null), + status: 'succeeded', + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + recordCount: codeChangePlans.plans.length, + warningCount: 0, + model: null, + durationMs: 0, + reason: null, + responses: [], + }; + return { + codeChangePlans, + codeChangeReview, + codeChangeSourcePatches, + codeChangePlanningAudit, + }; +} + +export function collectTargetHints(records: IntentRecord[]): { paths: string[]; symbols: string[]; tickets: string[]; versions: string[] } { + const values = (key: K): string[] => [ + ...new Set(records.flatMap((record) => record.statement.target[key])), + ].slice(0, 200); + return { + paths: values('paths'), + symbols: values('symbols'), + tickets: values('tickets'), + versions: values('versions'), + }; +} + +export function appendLlmNotConfigured(report: DiagnosticReport): void { + const diagnostic: Diagnostic = { + id: createIntentId({ code: 'LLM_NOT_CONFIGURED', graph: report.graphFingerprint }, 'DIAG'), + code: 'LLM_NOT_CONFIGURED', + severity: 'warning', + title: 'OpenRouter nie jest skonfigurowany', + detail: 'Etap dokumentacja -> Intent DSL został pominięty, ponieważ brakuje OPENROUTER_API_KEY.', + recordIds: [], + suggestedAction: 'Ustawić OPENROUTER_API_KEY w .env i ponownie uruchomić pipeline.', + }; + report.diagnostics.unshift(diagnostic); + report.counts.warning += 1; diff --git a/src/pipeline/run-persistence.ts b/src/pipeline/run-persistence.ts new file mode 100644 index 0000000..668b958 --- /dev/null +++ b/src/pipeline/run-persistence.ts @@ -0,0 +1,292 @@ +import path from 'node:path'; + +import { sha256, stableStringify } from '../core/id.js'; +import { writeJson, writeJsonl, writeText } from '../core/io.js'; +import { T2C_VERSION } from '../version.js'; +import { renderCommunicationMarkdown } from '../communication/analyzer.js'; +import { hasOpenRouter } from '../config/env.js'; +import type { PipelineManifest, PipelineOptions, PipelineStageAudit } from '../core/types.js'; +import type { T2CConfig } from '../config/env.js'; +import type { PipelineContext, PipelineExecutionOutput, PipelinePersistedPaths } from './run-types.js'; + +export function makePipelineManifest( + context: PipelineContext, + options: PipelineOptions, + config: T2CConfig, + execution: PipelineExecutionOutput, + files: Record, + stageAudits: { + naturalLanguageExtraction: PipelineStageAudit; + markdownExtraction: PipelineStageAudit; + documentationExtraction: PipelineStageAudit; + communicationAnalysis: PipelineStageAudit; + taskSynthesis: PipelineStageAudit; + codeChangePlanning: PipelineStageAudit; + summary: PipelineStageAudit; + }, +): PipelineManifest { + return { + schemaVersion: 't2c.run/v1', + runId: context.runId, + root: context.root, + createdAt: execution.generatedAt, + graphFingerprint: execution.graph.fingerprint, + files, + warnings: [...new Set(context.warnings)].sort(), + status: Object.values(stageAudits).some((stage) => stage.degraded) ? 'degraded' : 'succeeded', + failure: null, + runtime: { name: 'todo2code', version: T2C_VERSION }, + configuration: manifestConfiguration(options, config), + stages: stageAudits, + llm: { + naturalLanguageExtraction: stageAudits.naturalLanguageExtraction.effectiveMode === 'llm', + markdownExtraction: stageAudits.markdownExtraction.effectiveMode === 'llm', + documentationExtraction: stageAudits.documentationExtraction.effectiveMode === 'llm', + communicationEnrichment: stageAudits.communicationAnalysis.effectiveMode === 'llm', + taskSynthesis: stageAudits.taskSynthesis.effectiveMode === 'llm', + summary: execution.summary.llmUsed, + }, + }; +} + +export async function persistPipelineArtifacts(context: PipelineContext, execution: PipelineExecutionOutput): Promise { + const { root, runDirectory, bySource } = context; + const { + graph, + diagnostics, + summary, + taskSynthesis, + todoPatch, + codeChangePlans, + codeChangeReview, + codeChangeSourcePatches, + communicationAnalysis, + } = execution; + + const files: Record = {}; + + Object.assign(files, await persistIntentArtifacts(runDirectory, root, bySource)); + + const coreArtifacts = await persistCoreArtifacts( + runDirectory, + root, + graph, + diagnostics, + summary, + codeChangePlans, + codeChangeReview, + codeChangeSourcePatches, + ); + Object.assign(files, coreArtifacts.files); + + const optionalArtifacts = await persistOptionalArtifacts( + runDirectory, + root, + taskSynthesis, + todoPatch, + communicationAnalysis, + ); + Object.assign(files, optionalArtifacts.files); + + return { + files, + graphPath: coreArtifacts.graphPath, + diagnosticsPath: coreArtifacts.diagnosticsPath, + summaryPath: coreArtifacts.summaryPath, + summaryConclusionsPath: coreArtifacts.summaryConclusionsPath, + taskSynthesisPath: optionalArtifacts.taskSynthesisPath, + todoPatchPath: optionalArtifacts.todoPatchPath, + todoPatchAuditPath: optionalArtifacts.todoPatchAuditPath, + codeChangePlansPath: coreArtifacts.codeChangePlansPath, + codeChangeReviewPath: coreArtifacts.codeChangeReviewPath, + codeChangeReviewAuditPath: coreArtifacts.codeChangeReviewAuditPath, + codeChangeSourcePatchesPath: coreArtifacts.codeChangeSourcePatchesPath, + communicationAnalysisPath: optionalArtifacts.communicationAnalysisPath, + }; +} + +async function persistIntentArtifacts( + runDirectory: string, + root: string, + bySource: PipelineContext['bySource'], +): Promise> { + const files: Record = {}; + for (const [source, records] of Object.entries(bySource)) { + const filePath = path.join(runDirectory, `${source}.intent.jsonl`); + await writeJsonl(filePath, records); + files[`${source}Intent`] = path.relative(root, filePath).replace(/\\/g, '/'); + } + return files; +} + +type PersistCoreArtifactsResult = { + files: Record; + graphPath: string; + diagnosticsPath: string; + summaryPath: string; + summaryConclusionsPath: string; + codeChangePlansPath: string; + codeChangeReviewPath: string; + codeChangeReviewAuditPath: string; + codeChangeSourcePatchesPath: string; +}; + +async function persistCoreArtifacts( + runDirectory: string, + root: string, + graph: PipelineExecutionOutput['graph'], + diagnostics: PipelineExecutionOutput['diagnostics'], + summary: PipelineExecutionOutput['summary'], + codeChangePlans: PipelineExecutionOutput['codeChangePlans'], + codeChangeReview: PipelineExecutionOutput['codeChangeReview'], + codeChangeSourcePatches: PipelineExecutionOutput['codeChangeSourcePatches'], +): Promise { + const files: Record = {}; + + const graphPath = path.join(runDirectory, 'intent.graph.json'); + const diagnosticsPath = path.join(runDirectory, 'diagnostics.json'); + const summaryPath = path.join(runDirectory, 'team-summary.md'); + const summaryConclusionsPath = path.join(runDirectory, 'summary-conclusions.json'); + const codeChangePlansPath = path.join(runDirectory, 'code-change-plans.json'); + const codeChangeReviewPath = path.join(runDirectory, 'CODE_CHANGE.review.md'); + const codeChangeReviewAuditPath = path.join(runDirectory, 'CODE_CHANGE.review.json'); + const codeChangeSourcePatchesPath = path.join(runDirectory, 'code-change-source-patches.json'); + + await writeJson(graphPath, graph); + await writeJson(diagnosticsPath, diagnostics); + await writeText(summaryPath, summary.markdown); + await writeJson(summaryConclusionsPath, summary.conclusions); + await writeJson(codeChangePlansPath, codeChangePlans); + await writeText(codeChangeReviewPath, codeChangeReview.markdown); + await writeJson(codeChangeReviewAuditPath, codeChangeReview.artifact); + await writeJson(codeChangeSourcePatchesPath, codeChangeSourcePatches); + + files.graph = path.relative(root, graphPath).replace(/\\/g, '/'); + files.diagnostics = path.relative(root, diagnosticsPath).replace(/\\/g, '/'); + files.summary = path.relative(root, summaryPath).replace(/\\/g, '/'); + files.summaryConclusions = path.relative(root, summaryConclusionsPath).replace(/\\/g, '/'); + files.codeChangePlans = path.relative(root, codeChangePlansPath).replace(/\\/g, '/'); + files.codeChangeReview = path.relative(root, codeChangeReviewPath).replace(/\\/g, '/'); + files.codeChangeReviewAudit = path.relative(root, codeChangeReviewAuditPath).replace(/\\/g, '/'); + files.codeChangeSourcePatches = path.relative(root, codeChangeSourcePatchesPath).replace(/\\/g, '/'); + + return { + files, + graphPath, + diagnosticsPath, + summaryPath, + summaryConclusionsPath, + codeChangePlansPath, + codeChangeReviewPath, + codeChangeReviewAuditPath, + codeChangeSourcePatchesPath, + }; +} + +type PersistOptionalArtifactsResult = { + files: Record; + taskSynthesisPath: string | null; + todoPatchPath: string | null; + todoPatchAuditPath: string | null; + communicationAnalysisPath: string | null; +}; + +async function persistOptionalArtifacts( + runDirectory: string, + root: string, + taskSynthesis: PipelineExecutionOutput['taskSynthesis'], + todoPatch: PipelineExecutionOutput['todoPatch'], + communicationAnalysis: PipelineExecutionOutput['communicationAnalysis'], +): Promise { + const files: Record = {}; + + const taskSynthesisPath = taskSynthesis ? path.join(runDirectory, 'task-synthesis.json') : null; + const todoValidationPath = taskSynthesis ? path.join(runDirectory, 'todo-validation.json') : null; + const todoPatchPath = todoPatch ? path.join(runDirectory, 'TODO.patch') : null; + const todoPatchAuditPath = todoPatch ? path.join(runDirectory, 'TODO.patch.json') : null; + + const communicationAnalysisPath = communicationAnalysis ? path.join(runDirectory, 'communication-analysis.json') : null; + const communicationMarkdownPath = communicationAnalysis ? path.join(runDirectory, 'communication-analysis.md') : null; + + if (communicationAnalysisPath && communicationMarkdownPath && communicationAnalysis) { + await Promise.all([ + writeJson(communicationAnalysisPath, communicationAnalysis), + writeText(communicationMarkdownPath, renderCommunicationMarkdown(communicationAnalysis)), + ]); + files.communicationAnalysis = path.relative(root, communicationAnalysisPath).replace(/\\/g, '/'); + files.communicationAnalysisMarkdown = path.relative(root, communicationMarkdownPath).replace(/\\/g, '/'); + } + + if (taskSynthesisPath && todoValidationPath && todoPatchPath && todoPatchAuditPath && taskSynthesis && todoPatch) { + await Promise.all([ + writeJson(taskSynthesisPath, taskSynthesis), + writeJson(todoValidationPath, taskSynthesis.validation), + writeText(todoPatchPath, todoPatch.markdown), + writeJson(todoPatchAuditPath, todoPatch.artifact), + ]); + files.taskSynthesis = path.relative(root, taskSynthesisPath).replace(/\\/g, '/'); + files.todoValidation = path.relative(root, todoValidationPath).replace(/\\/g, '/'); + files.todoPatch = path.relative(root, todoPatchPath).replace(/\\/g, '/'); + files.todoPatchAudit = path.relative(root, todoPatchAuditPath).replace(/\\/g, '/'); + } + + return { + files, + taskSynthesisPath, + todoPatchPath, + todoPatchAuditPath, + communicationAnalysisPath, + }; +} + +export function manifestConfiguration(options: PipelineOptions, config: T2CConfig): PipelineManifest['configuration'] { + const configuration = { + nlMode: options.nlMode ?? config.nlMode, + markdownMode: options.markdownMode ?? config.markdownMode, + communicationMode: options.communicationMode ?? config.communicationMode, + gitCommitCount: options.gitCommitCount, + maxFileBytes: config.maxFileBytes, + markdownConcurrency: config.markdownConcurrency, + documentConcurrency: config.documentConcurrency, + documentChunkChars: config.documentChunkChars, + documentMaxChunks: config.documentMaxChunks, + documentRecordsPerChunk: config.documentRecordsPerChunk, + documentTimeoutMs: config.documentTimeoutMs, + summaryLlm: options.includeSummaryLlm !== false, + taskSynthesisMode: options.taskSynthesisMode ?? 'disabled', + includeCommunication: options.includeCommunication !== false, + projectDirectory: options.projectDirectory ?? 'project', + communicationTicket: options.communicationTicket ?? null, + documentPatterns: [...options.documentPatterns], + documentExcludes: [...(options.documentExcludes ?? config.documentExcludes)], + adapters: { + python: { enabled: config.enablePythonAst, executable: config.pythonExecutable }, + go: { enabled: config.enableGoAst, executable: config.goExecutable }, + java: { enabled: config.enableJavaAst, executable: config.javaExecutable }, + rust: { enabled: config.enableRustAst, executable: config.cargoExecutable }, + php: { enabled: config.enablePhpAst, executable: config.phpExecutable }, + tensorflow: { + enabled: config.enableTensorFlow, + modelPath: config.tensorflowModelPath, + modulePath: config.tensorflowModulePath, + labels: [...config.tensorflowLabels], + }, + }, + llm: { + configured: hasOpenRouter(config), + baseUrl: config.openRouter.baseUrl, + nlModel: config.openRouter.nlModel, + markdownModel: config.openRouter.markdownModel, + communicationModel: config.openRouter.communicationModel, + documentModel: config.openRouter.documentModel, + summaryModel: config.openRouter.summaryModel, + taskModel: config.openRouter.taskModel, + timeoutMs: config.openRouter.timeoutMs, + maxTokens: config.openRouter.maxTokens, + temperature: config.openRouter.temperature, + requireStructuredOutput: config.openRouter.requireStructuredOutput, + responseHealing: config.openRouter.responseHealing, + }, + }; + return { fingerprint: sha256(stableStringify(configuration)), ...configuration }; +} diff --git a/src/pipeline/run-summary.ts b/src/pipeline/run-summary.ts new file mode 100644 index 0000000..8d55632 --- /dev/null +++ b/src/pipeline/run-summary.ts @@ -0,0 +1,58 @@ +import { summarizeGraph } from '../summary/summarizer.js'; +import { openRouterAuditConfiguration } from '../llm/audit.js'; +import { T2C_VERSION } from '../version.js'; +import type { PipelineOptions, PipelineStageAudit } from '../core/types.js'; +import type { DiagnosticReport } from '../core/types.js'; +import type { T2CConfig } from '../config/env.js'; +import { hasOpenRouter } from '../config/env.js'; + +export interface SummaryResult { + summary: Awaited>; + audit: PipelineStageAudit; +} + +export async function collectSummary( + graph: Parameters[0], + diagnostics: DiagnosticReport, + config: T2CConfig, + options: PipelineOptions, +): Promise { + const summaryStartedAt = Date.now(); + const includeSummaryLlm = options.includeSummaryLlm !== false; + const summary = await summarizeGraph(graph, diagnostics, config, { + allowDeterministicFallback: options.allowSummaryFallback, + preferLlm: includeSummaryLlm, + }); + const summaryAudit: PipelineStageAudit = !includeSummaryLlm + ? { + runtimeVersion: T2C_VERSION, + configuration: openRouterAuditConfiguration(config, null), + status: 'skipped', requestedMode: 'deterministic', effectiveMode: 'deterministic', degraded: false, + recordCount: summary.conclusions.length, warningCount: 0, model: null, + durationMs: Date.now() - summaryStartedAt, + reason: { code: 'LLM_DISABLED', message: 'LLM summary was disabled; generated the deterministic report' }, + responses: [], + } + : summary.llmUsed + ? { + runtimeVersion: T2C_VERSION, + configuration: openRouterAuditConfiguration(config, config.openRouter.summaryModel), + status: 'succeeded', requestedMode: 'llm', effectiveMode: 'llm', degraded: false, + recordCount: summary.conclusions.length, warningCount: summary.warnings.length, model: config.openRouter.summaryModel, + durationMs: Date.now() - summaryStartedAt, reason: null, responses: summary.responses, + } + : { + runtimeVersion: T2C_VERSION, + configuration: openRouterAuditConfiguration(config, config.openRouter.summaryModel), + status: 'fallback', requestedMode: 'llm', effectiveMode: 'deterministic', degraded: true, + recordCount: summary.conclusions.length, warningCount: summary.warnings.length, model: config.openRouter.summaryModel, + durationMs: Date.now() - summaryStartedAt, + reason: { + code: hasOpenRouter(config) ? 'LLM_UNAVAILABLE' : 'LLM_NOT_CONFIGURED', + message: summary.warnings[0] ?? 'Deterministic summary fallback was used', + }, + responses: [], + }; + + return { summary, audit: summaryAudit }; +} diff --git a/src/pipeline/run-types.ts b/src/pipeline/run-types.ts new file mode 100644 index 0000000..50505b4 --- /dev/null +++ b/src/pipeline/run-types.ts @@ -0,0 +1,89 @@ +import type { + DiagnosticReport, + IntentRecord, + PipelineFailureStage, + PipelineManifest, + PipelineStageAudit, +} from '../core/types.js'; +import type { analyzeCommunication } from '../communication/analyzer.js'; +import type { summarizeGraph } from '../summary/summarizer.js'; +import type { collectCommunicationAnalysis, collectTaskSynthesis, createCodeChangeArtifacts } from './run-helpers.js'; +import type { linkIntentRecords } from '../graph/linker.js'; + +export type PipelineBySource = { + nl: IntentRecord[]; + git: IntentRecord[]; + ast: IntentRecord[]; + todo: IntentRecord[]; + changelog: IntentRecord[]; + document: IntentRecord[]; + configuration: IntentRecord[]; + runtime: IntentRecord[]; + communication: IntentRecord[]; +}; + +export interface PipelineContext { + root: string; + baseOutput: string; + runDirectory: string; + runId: string; + activeStage: PipelineFailureStage; + warnings: string[]; + bySource: PipelineBySource; + completedStages: Partial; +} + +export interface PipelineExecutionOutput { + generatedAt: string; + bySource: PipelineBySource; + graph: ReturnType; + diagnostics: DiagnosticReport; + communicationAnalysis: ReturnType | null; + communicationSyntheses: ReturnType['syntheses']; + naturalLanguageAudit: PipelineStageAudit; + markdownAudit: PipelineStageAudit; + documentationAudit: PipelineStageAudit; + communicationAudit: PipelineStageAudit; + taskSynthesisAudit: PipelineStageAudit; + codeChangePlanningAudit: PipelineStageAudit; + summary: Awaited>; + summaryAudit: PipelineStageAudit; + taskSynthesis: ReturnType['result']; + todoPatch: ReturnType['patch']; + codeChangePlans: ReturnType['codeChangePlans']; + codeChangeReview: ReturnType['codeChangeReview']; + codeChangeSourcePatches: ReturnType['codeChangeSourcePatches']; +} + +export interface PipelinePersistedPaths { + files: Record; + graphPath: string; + diagnosticsPath: string; + summaryPath: string; + summaryConclusionsPath: string; + taskSynthesisPath: string | null; + todoPatchPath: string | null; + todoPatchAuditPath: string | null; + codeChangePlansPath: string; + codeChangeReviewPath: string; + codeChangeReviewAuditPath: string; + codeChangeSourcePatchesPath: string; + communicationAnalysisPath: string | null; +} + +export interface PipelineResult { + runDirectory: string; + manifest: PipelineManifest; + graphPath: string; + diagnosticsPath: string; + summaryPath: string; + summaryConclusionsPath: string; + taskSynthesisPath: string | null; + todoPatchPath: string | null; + todoPatchAuditPath: string | null; + codeChangePlansPath: string | null; + codeChangeReviewPath: string | null; + codeChangeReviewAuditPath: string | null; + codeChangeSourcePatchesPath: string | null; + communicationAnalysisPath: string | null; +} diff --git a/src/pipeline/run.ts b/src/pipeline/run.ts index 77687dc..156f680 100644 --- a/src/pipeline/run.ts +++ b/src/pipeline/run.ts @@ -1,617 +1,66 @@ import path from 'node:path'; +import { writeJson } from '../core/io.js'; import type { T2CConfig } from '../config/env.js'; -import { hasOpenRouter } from '../config/env.js'; -import { addCommunicationIssuesToDiagnostics, analyzeCommunication, renderCommunicationMarkdown } from '../communication/analyzer.js'; -import { CommunicationLlmRequiredError, extractCommunicationIntentAudited, type ParticipantCommunicationSynthesis } from '../communication/llm.js'; -import { createIntentId, newRunId, sha256, stableStringify } from '../core/id.js'; -import { ensureDir, pathExists, readText, resolveGlobs, writeJson, writeJsonl, writeText } from '../core/io.js'; -import type { - Diagnostic, - DiagnosticReport, - IntentRecord, - PipelineManifest, - PipelineFailureStage, - PipelineOptions, - PipelineStageAudit, -} from '../core/types.js'; -import { extractAstIntent } from '../extractors/ast.js'; -import { extractConfigurationIntent } from '../extractors/configuration.js'; -import { extractRuntimeCycleIntent } from '../extractors/runtime-cycle.js'; -import { DocumentationLlmRequiredError, extractDocumentationIntent } from '../extractors/docs-llm.js'; -import { extractDocumentationBaseline } from '../extractors/docs-deterministic.js'; -import { extractGitIntent } from '../extractors/git.js'; -import { extractMarkdownIntentAudited, MarkdownLlmRequiredError } from '../extractors/markdown-llm.js'; -import { extractNlIntentAudited, NlLlmRequiredError } from '../extractors/nl-llm.js'; -import { openRouterAuditConfiguration } from '../llm/audit.js'; -import { diagnoseGraph } from '../graph/diagnostics.js'; -import { linkIntentRecords } from '../graph/linker.js'; -import { summarizeGraph } from '../summary/summarizer.js'; +import type { PipelineOptions } from '../core/types.js'; +import { type PipelineResult } from './run-types.js'; import { - createCodeChangeReviewPatch, - createCodeChangeSourcePatchSet, - createRepositoryPathProbe, - proposeCodeChangePlans, -} from '../synthesis/code-change-plan.js'; -import { synthesizeTodoProposals, TaskSynthesisRequiredError, type AuditedTaskSynthesisResult } from '../synthesis/tasks-llm.js'; -import { createTodoPatch, type CreatedTodoPatch } from '../synthesis/todo-patch.js'; -import { T2C_VERSION } from '../version.js'; - -export interface PipelineResult { - runDirectory: string; - manifest: PipelineManifest; - graphPath: string; - diagnosticsPath: string; - summaryPath: string; - summaryConclusionsPath: string; - taskSynthesisPath: string | null; - todoPatchPath: string | null; - todoPatchAuditPath: string | null; - codeChangePlansPath: string | null; - codeChangeReviewPath: string | null; - codeChangeReviewAuditPath: string | null; - codeChangeSourcePatchesPath: string | null; - communicationAnalysisPath: string | null; -} + makePipelineManifest, + persistPipelineArtifacts, +} from './run-persistence.js'; +import { persistFailedRun } from './run-failed.js'; +import { executePipeline, initializePipelineContext } from './run-execution.js'; + +export type { + PipelineBySource, + PipelineContext, + PipelineExecutionOutput, + PipelinePersistedPaths, + PipelineResult, +} from './run-types.js'; export async function runPipeline(options: PipelineOptions, config: T2CConfig): Promise { - const root = path.resolve(options.root); - if (!(await pathExists(root))) throw new Error(`Root does not exist: ${root}`); - const runId = newRunId(); - const baseOutput = path.resolve(root, options.outputDir); - const runDirectory = path.join(baseOutput, 'runs', runId); - await ensureDir(runDirectory); - let activeStage: PipelineFailureStage = 'setup'; - const completedStages: Partial = {}; - + const context = await initializePipelineContext(options); try { - - const warnings: string[] = []; - const bySource: Record = { - nl: [], - git: [], - ast: [], - todo: [], - changelog: [], - document: [], - configuration: [], - runtime: [], - communication: [], - }; - - let naturalLanguageAudit = skippedAudit('disabled', 'No NL task file was selected'); - - if (options.taskFile) { - activeStage = 'naturalLanguageExtraction'; - const result = await extractNlIntentAudited( - { root, sourcePath: options.taskFile }, - config, - options.nlMode ?? config.nlMode, - ); - bySource.nl = result.records; - warnings.push(...result.warnings); - naturalLanguageAudit = result.audit; - } - completedStages.naturalLanguageExtraction = naturalLanguageAudit; - - activeStage = 'gitExtraction'; - const git = await extractGitIntent({ root, count: options.gitCommitCount }, config); - bySource.git = git.records; - warnings.push(...git.warnings); - - activeStage = 'astExtraction'; - const ast = await extractAstIntent({ root }, config); - bySource.ast = ast.records; - warnings.push(...ast.warnings); - - activeStage = 'markdownExtraction'; - const markdown = await extractMarkdownIntentAudited( - { root, todoPath: options.todoFile, changelogPath: options.changelogFile }, - config, - options.markdownMode ?? config.markdownMode, - ); - bySource.todo = markdown.records.filter((record) => record.source.kind === 'todo'); - bySource.changelog = markdown.records.filter((record) => record.source.kind === 'changelog'); - warnings.push(...markdown.warnings); - completedStages.markdownExtraction = markdown.audit; - - activeStage = 'documentationExtraction'; - const deterministicDocumentFiles = await resolveGlobs( - root, - options.documentPatterns, - options.documentExcludes ?? config.documentExcludes, - ); - const documentationStartedAt = Date.now(); - const deterministicDocs = await extractDocumentationBaseline({ root, files: deterministicDocumentFiles }, config); - bySource.document = deterministicDocs.records; - warnings.push(...deterministicDocs.warnings); - let documentationAudit: PipelineStageAudit = deterministicDocumentFiles.length === 0 - ? skippedAudit('deterministic', 'No documentation files matched the configured patterns') - : { - runtimeVersion: T2C_VERSION, - configuration: { generator: 't2c/markdown-documentation', generatorVersion: '2' }, - status: deterministicDocs.warnings.length ? 'partial' : 'succeeded', - requestedMode: 'deterministic', - effectiveMode: 'deterministic', - degraded: deterministicDocs.warnings.length > 0, - recordCount: deterministicDocs.records.length, - warningCount: deterministicDocs.warnings.length, - model: null, - durationMs: Date.now() - documentationStartedAt, - reason: deterministicDocs.warnings.length - ? { code: 'DOCUMENT_EXTRACTION_PARTIAL', message: `${deterministicDocs.warnings.length} deterministic documentation warning(s)` } - : null, - responses: [], - }; - if (options.includeDocumentationLlm) { - if (hasOpenRouter(config)) { - activeStage = 'documentationExtraction'; - const docs = await extractDocumentationIntent({ - root, - patterns: options.documentPatterns, - excludes: options.documentExcludes ?? config.documentExcludes, - targetHints: collectTargetHints(Object.values(bySource).flat()), - }, config); - bySource.document.push(...docs.records); - warnings.push(...docs.warnings); - documentationAudit = { - ...docs.audit, - recordCount: bySource.document.length, - configuration: { - ...docs.audit.configuration, - deterministicGenerator: 't2c/markdown-documentation@2', - deterministicRecordCount: deterministicDocs.records.length, - }, - }; - } else { - const message = 'OPENROUTER_API_KEY is not configured; documentation -> Intent DSL was skipped'; - warnings.push(message); - documentationAudit = { - ...skippedAudit('llm', message), - configuration: openRouterAuditConfiguration(config, config.openRouter.documentModel, config.documentTimeoutMs), - status: deterministicDocs.records.length ? 'fallback' : 'failed', - effectiveMode: deterministicDocs.records.length ? 'deterministic' : 'none', - degraded: true, - recordCount: deterministicDocs.records.length, - model: config.openRouter.documentModel, - reason: { code: 'LLM_NOT_CONFIGURED', message }, - responses: [], - }; - } - } - completedStages.documentationExtraction = documentationAudit; - - activeStage = 'configurationExtraction'; - const configurationExtraction = await extractConfigurationIntent(root, config); - bySource.configuration = configurationExtraction.records; - warnings.push(...configurationExtraction.warnings); - - // Runtime evidence is optional: most repositories have no observer running, - // and a missing cycle must degrade the run rather than fail it. - activeStage = 'runtimeExtraction'; - if (options.cycleFile) { - try { - const runtime = await extractRuntimeCycleIntent(options.cycleFile, config, root); - bySource.runtime = runtime.records; - warnings.push(...runtime.warnings); - } catch (error) { - warnings.push(`runtime cycle ignored: ${error instanceof Error ? error.message : String(error)}`); - } - } - - const includeCommunication = options.includeCommunication !== false; - const communicationStartedAt = Date.now(); - let communicationAudit = skippedAudit('disabled', 'Communication analysis was disabled'); - let communicationInputPresent = false; - let communicationSyntheses: ParticipantCommunicationSynthesis[] = []; - if (includeCommunication) { - activeStage = 'communicationAnalysis'; - const communication = await extractCommunicationIntentAudited({ - root, - projectDir: options.projectDirectory ?? 'project', - ticket: options.communicationTicket ?? null, - }, config, options.communicationMode ?? config.communicationMode); - const missingDirectory = communication.records.length === 0 - && communication.warnings.length === 1 - && communication.warnings[0]?.startsWith('Communication directory not found:'); - communicationInputPresent = !missingDirectory; - bySource.communication = communication.records; - communicationSyntheses = communication.participants; - if (!missingDirectory) warnings.push(...communication.warnings); - communicationAudit = missingDirectory - ? skippedAudit('deterministic', communication.warnings[0] ?? 'Communication directory not found') - : { ...communication.audit, durationMs: Date.now() - communicationStartedAt }; - } - completedStages.communicationAnalysis = communicationAudit; - - activeStage = 'linking'; - const allRecords = Object.values(bySource).flat(); - const generatedAt = new Date().toISOString(); - const graph = linkIntentRecords(allRecords, generatedAt); - activeStage = 'diagnostics'; - const communicationAnalysis = communicationInputPresent - ? analyzeCommunication(graph, generatedAt, communicationSyntheses) - : null; - let diagnostics = diagnoseGraph(graph, generatedAt); - if (communicationAnalysis) diagnostics = addCommunicationIssuesToDiagnostics(diagnostics, communicationAnalysis); - if (options.includeDocumentationLlm && !hasOpenRouter(config)) appendLlmNotConfigured(diagnostics); - const taskSynthesisMode = options.taskSynthesisMode ?? 'disabled'; - let taskSynthesis: AuditedTaskSynthesisResult | null = null; - let todoPatch: CreatedTodoPatch | null = null; - let taskSynthesisAudit = skippedAudit('disabled', 'Task synthesis was disabled'); - if (taskSynthesisMode !== 'disabled') { - activeStage = 'taskSynthesis'; - taskSynthesis = await synthesizeTodoProposals(graph, diagnostics, config, taskSynthesisMode); - warnings.push(...taskSynthesis.warnings); - taskSynthesisAudit = taskSynthesis.audit; - completedStages.taskSynthesis = taskSynthesisAudit; - if (!options.todoFile) throw new Error('Task synthesis rendering requires a TODO source file'); - activeStage = 'todoRendering'; - const todoContent = await readText(path.resolve(root, options.todoFile), config.maxFileBytes); - todoPatch = createTodoPatch({ - todoPath: path.relative(root, path.resolve(root, options.todoFile)).replace(/\\/g, '/'), - todoContent, - graph, - diagnostics, - conclusions: taskSynthesis.conclusions, - proposals: taskSynthesis.proposals, - validation: taskSynthesis.validation, - synthesisAudit: taskSynthesis.audit, + const execution = await executePipeline(context, options, config); + context.activeStage = 'persistence'; + const persisted = await persistPipelineArtifacts(context, execution); + const stageAudits = { + naturalLanguageExtraction: execution.naturalLanguageAudit, + markdownExtraction: execution.markdownAudit, + documentationExtraction: execution.documentationAudit, + communicationAnalysis: execution.communicationAudit, + taskSynthesis: execution.taskSynthesisAudit, + codeChangePlanning: execution.codeChangePlanningAudit, + summary: execution.summaryAudit, + }; + const manifest = makePipelineManifest(context, options, config, execution, persisted.files, stageAudits); + const manifestPath = path.join(context.runDirectory, 'manifest.json'); + await writeJson(manifestPath, manifest); + await writeJson(path.join(context.baseOutput, 'latest.json'), { + runId: context.runId, + runDirectory: path.relative(context.root, context.runDirectory).replace(/\\/g, '/'), + graphFingerprint: execution.graph.fingerprint, + summary: persisted.files.summary, + summaryConclusions: persisted.files.summaryConclusions, }); - } - completedStages.taskSynthesis = taskSynthesisAudit; - - // Deterministic code-change plans from open implementation diagnostics. - // Never applies source edits; only materialises grounded review proposals. - activeStage = 'codeChangePlanning'; - const codeChangePlans = proposeCodeChangePlans({ - graph, - diagnostics, - ...(taskSynthesis - ? { conclusions: taskSynthesis.conclusions, proposals: taskSynthesis.proposals } - : {}), - generatedAt, - pathExists: createRepositoryPathProbe(root), - }); - const codeChangeReview = createCodeChangeReviewPatch({ - plans: codeChangePlans.plans, - graphFingerprint: graph.fingerprint, - createdAt: generatedAt, - }); - const codeChangeSourcePatches = createCodeChangeSourcePatchSet({ - plans: codeChangePlans.plans, - graphFingerprint: graph.fingerprint, - generatedAt, - }); - const codeChangePlanningAudit: PipelineStageAudit = { - runtimeVersion: T2C_VERSION, - configuration: openRouterAuditConfiguration(config, null), - status: 'succeeded', - requestedMode: 'deterministic', - effectiveMode: 'deterministic', - degraded: false, - recordCount: codeChangePlans.plans.length, - warningCount: 0, - model: null, - durationMs: 0, - reason: null, - responses: [], - }; - completedStages.codeChangePlanning = codeChangePlanningAudit; - - activeStage = 'summary'; - const summaryStartedAt = Date.now(); - const includeSummaryLlm = options.includeSummaryLlm !== false; - const summary = await summarizeGraph(graph, diagnostics, config, { - allowDeterministicFallback: options.allowSummaryFallback, - preferLlm: includeSummaryLlm, - }); - warnings.push(...summary.warnings); - const summaryAudit: PipelineStageAudit = !includeSummaryLlm - ? { - runtimeVersion: T2C_VERSION, - configuration: openRouterAuditConfiguration(config, null), - status: 'skipped', requestedMode: 'deterministic', effectiveMode: 'deterministic', degraded: false, - recordCount: summary.conclusions.length, warningCount: 0, model: null, - durationMs: Date.now() - summaryStartedAt, - reason: { code: 'LLM_DISABLED', message: 'LLM summary was disabled; generated the deterministic report' }, - responses: [], - } - : summary.llmUsed - ? { - runtimeVersion: T2C_VERSION, - configuration: openRouterAuditConfiguration(config, config.openRouter.summaryModel), - status: 'succeeded', requestedMode: 'llm', effectiveMode: 'llm', degraded: false, - recordCount: summary.conclusions.length, warningCount: summary.warnings.length, model: config.openRouter.summaryModel, - durationMs: Date.now() - summaryStartedAt, reason: null, responses: summary.responses, - } - : { - runtimeVersion: T2C_VERSION, - configuration: openRouterAuditConfiguration(config, config.openRouter.summaryModel), - status: 'fallback', requestedMode: 'llm', effectiveMode: 'deterministic', degraded: true, - recordCount: summary.conclusions.length, warningCount: summary.warnings.length, model: config.openRouter.summaryModel, - durationMs: Date.now() - summaryStartedAt, - reason: { code: hasOpenRouter(config) ? 'LLM_UNAVAILABLE' : 'LLM_NOT_CONFIGURED', message: summary.warnings[0] ?? 'Deterministic summary fallback was used' }, - responses: [], - }; - completedStages.summary = summaryAudit; - - activeStage = 'persistence'; - const files: Record = {}; - for (const [source, records] of Object.entries(bySource)) { - const filePath = path.join(runDirectory, `${source}.intent.jsonl`); - await writeJsonl(filePath, records); - files[`${source}Intent`] = path.relative(root, filePath).replace(/\\/g, '/'); - } - const graphPath = path.join(runDirectory, 'intent.graph.json'); - const diagnosticsPath = path.join(runDirectory, 'diagnostics.json'); - const summaryPath = path.join(runDirectory, 'team-summary.md'); - const summaryConclusionsPath = path.join(runDirectory, 'summary-conclusions.json'); - const taskSynthesisPath = taskSynthesis ? path.join(runDirectory, 'task-synthesis.json') : null; - const todoValidationPath = taskSynthesis ? path.join(runDirectory, 'todo-validation.json') : null; - const todoPatchPath = todoPatch ? path.join(runDirectory, 'TODO.patch') : null; - const todoPatchAuditPath = todoPatch ? path.join(runDirectory, 'TODO.patch.json') : null; - const codeChangePlansPath = path.join(runDirectory, 'code-change-plans.json'); - const codeChangeReviewPath = path.join(runDirectory, 'CODE_CHANGE.review.md'); - const codeChangeReviewAuditPath = path.join(runDirectory, 'CODE_CHANGE.review.json'); - const codeChangeSourcePatchesPath = path.join(runDirectory, 'code-change-source-patches.json'); - const communicationAnalysisPath = communicationAnalysis ? path.join(runDirectory, 'communication-analysis.json') : null; - const communicationMarkdownPath = communicationAnalysis ? path.join(runDirectory, 'communication-analysis.md') : null; - await writeJson(graphPath, graph); - await writeJson(diagnosticsPath, diagnostics); - await writeText(summaryPath, summary.markdown); - await writeJson(summaryConclusionsPath, summary.conclusions); - await writeJson(codeChangePlansPath, codeChangePlans); - await writeText(codeChangeReviewPath, codeChangeReview.markdown); - await writeJson(codeChangeReviewAuditPath, codeChangeReview.artifact); - await writeJson(codeChangeSourcePatchesPath, codeChangeSourcePatches); - files.codeChangePlans = path.relative(root, codeChangePlansPath).replace(/\\/g, '/'); - files.codeChangeReview = path.relative(root, codeChangeReviewPath).replace(/\\/g, '/'); - files.codeChangeReviewAudit = path.relative(root, codeChangeReviewAuditPath).replace(/\\/g, '/'); - files.codeChangeSourcePatches = path.relative(root, codeChangeSourcePatchesPath).replace(/\\/g, '/'); - if (communicationAnalysisPath && communicationMarkdownPath && communicationAnalysis) { - await Promise.all([ - writeJson(communicationAnalysisPath, communicationAnalysis), - writeText(communicationMarkdownPath, renderCommunicationMarkdown(communicationAnalysis)), - ]); - files.communicationAnalysis = path.relative(root, communicationAnalysisPath).replace(/\\/g, '/'); - files.communicationAnalysisMarkdown = path.relative(root, communicationMarkdownPath).replace(/\\/g, '/'); - } - if (taskSynthesisPath && todoValidationPath && todoPatchPath && todoPatchAuditPath && taskSynthesis && todoPatch) { - await Promise.all([ - writeJson(taskSynthesisPath, taskSynthesis), - writeJson(todoValidationPath, taskSynthesis.validation), - writeText(todoPatchPath, todoPatch.markdown), - writeJson(todoPatchAuditPath, todoPatch.artifact), - ]); - files.taskSynthesis = path.relative(root, taskSynthesisPath).replace(/\\/g, '/'); - files.todoValidation = path.relative(root, todoValidationPath).replace(/\\/g, '/'); - files.todoPatch = path.relative(root, todoPatchPath).replace(/\\/g, '/'); - files.todoPatchAudit = path.relative(root, todoPatchAuditPath).replace(/\\/g, '/'); - } - files.graph = path.relative(root, graphPath).replace(/\\/g, '/'); - files.diagnostics = path.relative(root, diagnosticsPath).replace(/\\/g, '/'); - files.summary = path.relative(root, summaryPath).replace(/\\/g, '/'); - files.summaryConclusions = path.relative(root, summaryConclusionsPath).replace(/\\/g, '/'); - - const configuration = manifestConfiguration(options, config); - const stageAudits = { - naturalLanguageExtraction: naturalLanguageAudit, - markdownExtraction: markdown.audit, - documentationExtraction: documentationAudit, - communicationAnalysis: communicationAudit, - taskSynthesis: taskSynthesisAudit, - codeChangePlanning: codeChangePlanningAudit, - summary: summaryAudit, - }; - const manifest: PipelineManifest = { - schemaVersion: 't2c.run/v1', - runId, - root, - createdAt: generatedAt, - graphFingerprint: graph.fingerprint, - files, - warnings: [...new Set(warnings)].sort(), - status: Object.values(stageAudits).some((stage) => stage.degraded) ? 'degraded' : 'succeeded', - failure: null, - runtime: { name: 'todo2code', version: T2C_VERSION }, - configuration, - stages: stageAudits, - llm: { - naturalLanguageExtraction: naturalLanguageAudit.effectiveMode === 'llm', - markdownExtraction: markdown.audit.effectiveMode === 'llm', - documentationExtraction: documentationAudit.effectiveMode === 'llm', - communicationEnrichment: communicationAudit.effectiveMode === 'llm', - taskSynthesis: taskSynthesisAudit.effectiveMode === 'llm', - summary: summary.llmUsed, - }, - }; - await writeJson(path.join(runDirectory, 'manifest.json'), manifest); - await writeJson(path.join(baseOutput, 'latest.json'), { - runId, - runDirectory: path.relative(root, runDirectory).replace(/\\/g, '/'), - graphFingerprint: graph.fingerprint, - summary: files.summary, - summaryConclusions: files.summaryConclusions, - }); - return { - runDirectory, manifest, graphPath, diagnosticsPath, summaryPath, summaryConclusionsPath, - taskSynthesisPath, todoPatchPath, todoPatchAuditPath, codeChangePlansPath, - codeChangeReviewPath, codeChangeReviewAuditPath, codeChangeSourcePatchesPath, - communicationAnalysisPath, - }; + return { + runDirectory: context.runDirectory, + manifest, + graphPath: persisted.graphPath, + diagnosticsPath: persisted.diagnosticsPath, + summaryPath: persisted.summaryPath, + summaryConclusionsPath: persisted.summaryConclusionsPath, + taskSynthesisPath: persisted.taskSynthesisPath, + todoPatchPath: persisted.todoPatchPath, + todoPatchAuditPath: persisted.todoPatchAuditPath, + codeChangePlansPath: persisted.codeChangePlansPath, + codeChangeReviewPath: persisted.codeChangeReviewPath, + codeChangeReviewAuditPath: persisted.codeChangeReviewAuditPath, + codeChangeSourcePatchesPath: persisted.codeChangeSourcePatchesPath, + communicationAnalysisPath: persisted.communicationAnalysisPath, + }; } catch (error) { - await persistFailedRun(runId, root, runDirectory, options, config, error, activeStage, completedStages); + await persistFailedRun(context, error, options, config); throw error; } } - -function manifestConfiguration(options: PipelineOptions, config: T2CConfig): PipelineManifest['configuration'] { - const configuration = { - nlMode: options.nlMode ?? config.nlMode, - markdownMode: options.markdownMode ?? config.markdownMode, - communicationMode: options.communicationMode ?? config.communicationMode, - gitCommitCount: options.gitCommitCount, - maxFileBytes: config.maxFileBytes, - markdownConcurrency: config.markdownConcurrency, - documentConcurrency: config.documentConcurrency, - documentChunkChars: config.documentChunkChars, - documentMaxChunks: config.documentMaxChunks, - documentRecordsPerChunk: config.documentRecordsPerChunk, - documentTimeoutMs: config.documentTimeoutMs, - summaryLlm: options.includeSummaryLlm !== false, - taskSynthesisMode: options.taskSynthesisMode ?? 'disabled', - includeCommunication: options.includeCommunication !== false, - projectDirectory: options.projectDirectory ?? 'project', - communicationTicket: options.communicationTicket ?? null, - documentPatterns: [...options.documentPatterns], - documentExcludes: [...(options.documentExcludes ?? config.documentExcludes)], - adapters: { - python: { enabled: config.enablePythonAst, executable: config.pythonExecutable }, - go: { enabled: config.enableGoAst, executable: config.goExecutable }, - java: { enabled: config.enableJavaAst, executable: config.javaExecutable }, - rust: { enabled: config.enableRustAst, executable: config.cargoExecutable }, - php: { enabled: config.enablePhpAst, executable: config.phpExecutable }, - tensorflow: { - enabled: config.enableTensorFlow, - modelPath: config.tensorflowModelPath, - modulePath: config.tensorflowModulePath, - labels: [...config.tensorflowLabels], - }, - }, - llm: { - configured: hasOpenRouter(config), - baseUrl: config.openRouter.baseUrl, - nlModel: config.openRouter.nlModel, - markdownModel: config.openRouter.markdownModel, - communicationModel: config.openRouter.communicationModel, - documentModel: config.openRouter.documentModel, - summaryModel: config.openRouter.summaryModel, - taskModel: config.openRouter.taskModel, - timeoutMs: config.openRouter.timeoutMs, - maxTokens: config.openRouter.maxTokens, - temperature: config.openRouter.temperature, - requireStructuredOutput: config.openRouter.requireStructuredOutput, - responseHealing: config.openRouter.responseHealing, - }, - }; - return { fingerprint: sha256(stableStringify(configuration)), ...configuration }; -} - -function collectTargetHints(records: IntentRecord[]): { paths: string[]; symbols: string[]; tickets: string[]; versions: string[] } { - const values = (key: K): string[] => [ - ...new Set(records.flatMap((record) => record.statement.target[key])), - ].slice(0, 200); - return { - paths: values('paths'), - symbols: values('symbols'), - tickets: values('tickets'), - versions: values('versions'), - }; -} - -async function persistFailedRun( - runId: string, - root: string, - runDirectory: string, - options: PipelineOptions, - config: T2CConfig, - error: unknown, - failedStage: PipelineFailureStage, - completedStages: Partial, -): Promise { - const aborted = (stage: string): PipelineStageAudit => ({ - ...skippedAudit('disabled', `Pipeline aborted before ${stage}`), - reason: { code: 'PIPELINE_ABORTED', message: `Pipeline aborted before ${stage}` }, - }); - const message = error instanceof Error ? error.message : String(error); - const knownAudit = error instanceof NlLlmRequiredError - || error instanceof MarkdownLlmRequiredError - || error instanceof DocumentationLlmRequiredError - || error instanceof CommunicationLlmRequiredError - || error instanceof TaskSynthesisRequiredError - ? error.audit - : null; - const failedAudit = (stage: keyof PipelineManifest['stages']): PipelineStageAudit => { - if (knownAudit && stage === failedStage) return knownAudit; - return { - runtimeVersion: T2C_VERSION, - configuration: openRouterAuditConfiguration( - config, - stage === 'summary' ? config.openRouter.summaryModel : stage === 'taskSynthesis' ? config.openRouter.taskModel : null, - ), - status: 'failed', requestedMode: stage === 'summary' || stage === 'taskSynthesis' ? 'llm' : 'disabled', effectiveMode: 'none', degraded: true, - recordCount: 0, warningCount: 1, - model: stage === 'summary' ? config.openRouter.summaryModel : stage === 'taskSynthesis' ? config.openRouter.taskModel : null, - durationMs: 0, - reason: { code: failureCode(failedStage), message }, - responses: [], - }; - }; - const stageValue = (stage: keyof PipelineManifest['stages'], label: string): PipelineStageAudit => { - if (completedStages[stage]) return completedStages[stage]; - if (stage === failedStage) return failedAudit(stage); - return aborted(label); - }; - const stages: PipelineManifest['stages'] = { - naturalLanguageExtraction: stageValue('naturalLanguageExtraction', 'natural-language extraction'), - markdownExtraction: stageValue('markdownExtraction', 'Markdown extraction'), - documentationExtraction: stageValue('documentationExtraction', 'documentation extraction'), - communicationAnalysis: stageValue('communicationAnalysis', 'communication analysis'), - taskSynthesis: stageValue('taskSynthesis', 'task synthesis'), - codeChangePlanning: stageValue('codeChangePlanning', 'code-change planning'), - summary: stageValue('summary', 'summary generation'), - }; - const reason = knownAudit?.reason ?? { code: failureCode(failedStage), message }; - const manifest: PipelineManifest = { - schemaVersion: 't2c.run/v1', - runId, - root, - createdAt: new Date().toISOString(), - graphFingerprint: null, - files: {}, - warnings: [message], - status: 'failed', - failure: { stage: failedStage, code: reason.code, message: reason.message }, - runtime: { name: 'todo2code', version: T2C_VERSION }, - configuration: manifestConfiguration(options, config), - stages, - llm: { - naturalLanguageExtraction: stages.naturalLanguageExtraction.effectiveMode === 'llm', - markdownExtraction: stages.markdownExtraction.effectiveMode === 'llm', - communicationEnrichment: stages.communicationAnalysis.effectiveMode === 'llm', - documentationExtraction: false, - taskSynthesis: false, - summary: false, - }, - }; - await writeJson(path.join(runDirectory, 'manifest.json'), manifest); -} - -function failureCode(stage: PipelineFailureStage): string { - return `PIPELINE_${stage.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase()}_FAILED`; -} - -function skippedAudit(requestedMode: PipelineStageAudit['requestedMode'], message: string): PipelineStageAudit { - return { - runtimeVersion: T2C_VERSION, - configuration: {}, - status: 'skipped', requestedMode, effectiveMode: 'none', degraded: false, - recordCount: 0, warningCount: 0, model: null, durationMs: 0, - reason: { code: 'STAGE_SKIPPED', message }, - responses: [], - }; -} - -function appendLlmNotConfigured(report: DiagnosticReport): void { - const diagnostic: Diagnostic = { - id: createIntentId({ code: 'LLM_NOT_CONFIGURED', graph: report.graphFingerprint }, 'DIAG'), - code: 'LLM_NOT_CONFIGURED', - severity: 'warning', - title: 'OpenRouter nie jest skonfigurowany', - detail: 'Etap dokumentacja -> Intent DSL został pominięty, ponieważ brakuje OPENROUTER_API_KEY.', - recordIds: [], - suggestedAction: 'Ustawić OPENROUTER_API_KEY w .env i ponownie uruchomić pipeline.', - }; - report.diagnostics.unshift(diagnostic); - report.counts.warning += 1; -} diff --git a/src/synthesis/code-change-plan/implementation-helpers-acceptance.ts b/src/synthesis/code-change-plan/implementation-helpers-acceptance.ts new file mode 100644 index 0000000..8e2c11e --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-helpers-acceptance.ts @@ -0,0 +1,141 @@ +import { assertCodeChangeAcceptance, assertConclusions, assertCodeChangePlanForAcceptance, assertIntentGraph } from '../../core/schema.js'; +import type { + CodeChangeAcceptance, + CodeChangePlan, + Diagnostic, + DiagnosticReport, + IntentGraph, +} from '../../core/types.js'; +import { diagnoseGraph } from '../../graph/diagnostics.js'; +import { + deterministicGeneration, + uniqueSorted, +} from './implementation-helpers-shared.js'; + +export interface EvaluateCodeChangeAcceptanceOptions { + plan: CodeChangePlan; + /** Graph and diagnostics that the plan was grounded on. */ + before: { graph: IntentGraph; diagnostics: DiagnosticReport }; + /** Graph after an attempted implementation (re-extracted and re-linked). */ + afterGraph: IntentGraph; + /** Optional precomputed after diagnostics; derived when omitted. */ + afterDiagnostics?: DiagnosticReport; + evaluatedAt?: string; +} + +/** + * Re-diagnose an after graph and decide whether the plan's targeted + * diagnostics cleared without introducing new blocking findings. + * + * Diagnostic IDs are content-bound, so a still-open finding on the same + * records keeps the same ID. Cleared findings simply disappear. + */ +export function evaluateCodeChangeAcceptance( + options: EvaluateCodeChangeAcceptanceOptions, +): CodeChangeAcceptance { + assertIntentGraph(options.before.graph); + assertIntentGraph(options.afterGraph); + assertConclusions([], options.before); + assertCodeChangePlanForAcceptance(options.plan, options.before); + + const context = buildAcceptanceContext(options); + const reasons = buildAcceptanceReasons(context.remainingDiagnosticIds, context.newBlockingDiagnosticIds); + const accepted = isAcceptancePassed(context); + appendAcceptanceGateReason(reasons, accepted); + + const acceptance = buildAcceptanceResult(options, context, reasons, accepted); + assertCodeChangeAcceptance(acceptance, { + plan: options.plan, + before: options.before, + after: { graph: options.afterGraph, diagnostics: context.afterDiagnostics }, + }); + return acceptance; +} + +interface AcceptanceContext { + afterDiagnostics: DiagnosticReport; + beforeDiagnosticIds: Set; + afterDiagnosticIds: string[]; + clearedDiagnosticIds: string[]; + remainingDiagnosticIds: string[]; + newBlockingDiagnosticIds: string[]; + evaluatedAt: string; +} + +function buildAcceptanceContext(options: EvaluateCodeChangeAcceptanceOptions): AcceptanceContext { + const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); + const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); + assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); + + const beforeDiagnosticIds = new Set(options.before.diagnostics.diagnostics.map((item) => item.id)); + const afterById = new Map(afterDiagnostics.diagnostics.map((item) => [item.id, item])); + const afterDiagnosticIds = [...afterById.keys()].sort(); + const targetedDiagnosticIds = options.plan.evidence.diagnosticIds; + + return { + afterDiagnostics, + beforeDiagnosticIds, + afterDiagnosticIds, + clearedDiagnosticIds: targetedDiagnosticIds.filter((id) => !afterById.has(id)).sort(), + remainingDiagnosticIds: targetedDiagnosticIds.filter((id) => afterById.has(id)).sort(), + newBlockingDiagnosticIds: afterDiagnostics.diagnostics + .filter((item) => item.severity === 'blocking' && !beforeDiagnosticIds.has(item.id)) + .map((item) => item.id) + .sort(), + evaluatedAt, + }; +} + +function buildAcceptanceReasons( + remainingDiagnosticIds: string[], + newBlockingDiagnosticIds: string[], +): string[] { + const reasons: string[] = []; + if (remainingDiagnosticIds.length) { + reasons.push(`Targeted diagnostics still open: ${remainingDiagnosticIds.join(', ')}.`); + } else { + reasons.push('All targeted diagnostics cleared after re-analysis.'); + } + if (newBlockingDiagnosticIds.length) { + reasons.push(`New blocking diagnostics appeared: ${newBlockingDiagnosticIds.join(', ')}.`); + } else { + reasons.push('No new blocking diagnostics appeared.'); + } + return reasons; +} + +function isAcceptancePassed(context: AcceptanceContext): boolean { + return context.remainingDiagnosticIds.length === 0 && context.newBlockingDiagnosticIds.length === 0; +} + +function appendAcceptanceGateReason(reasons: string[], accepted: boolean): void { + if (accepted) { + reasons.push('Acceptance gate passed; human approval is still required before DONE.'); + } else { + reasons.push('Acceptance gate failed.'); + } +} + +function buildAcceptanceResult( + options: EvaluateCodeChangeAcceptanceOptions, + context: AcceptanceContext, + reasons: string[], + accepted: boolean, +): CodeChangeAcceptance { + return { + schemaVersion: 't2c.code-change-acceptance/v1', + planId: options.plan.id, + planHash: options.plan.planHash, + beforeGraphFingerprint: options.before.graph.fingerprint, + afterGraphFingerprint: options.afterGraph.fingerprint, + beforeDiagnosticIds: [...context.beforeDiagnosticIds].sort(), + afterDiagnosticIds: context.afterDiagnosticIds, + clearedDiagnosticIds: context.clearedDiagnosticIds, + remainingDiagnosticIds: context.remainingDiagnosticIds, + newBlockingDiagnosticIds: context.newBlockingDiagnosticIds, + accepted, + reasons: uniqueSorted(reasons), + evaluatedAt: context.evaluatedAt, + generation: deterministicGeneration(context.evaluatedAt, 't2c/code-change-acceptance'), + }; +} diff --git a/src/synthesis/code-change-plan/implementation-helpers-close.ts b/src/synthesis/code-change-plan/implementation-helpers-close.ts new file mode 100644 index 0000000..3833f51 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-helpers-close.ts @@ -0,0 +1,75 @@ +import { assertCodeChangePlansForReview } from '../../core/schema.js'; +import { diagnoseGraph } from '../../graph/diagnostics.js'; +import type { + CodeChangeCloseResult, + CodeChangePlan, + DiagnosticReport, + IntentGraph, +} from '../../core/types.js'; +import { + evaluateCodeChangeAcceptance, +} from './implementation-helpers-acceptance.js'; +import { deterministicGeneration } from './implementation-helpers-shared.js'; + +export interface CloseCodeChangesOptions { + plans: CodeChangePlan[]; + before: { graph: IntentGraph; diagnostics: DiagnosticReport }; + afterGraph: IntentGraph; + afterDiagnostics?: DiagnosticReport; + evaluatedAt?: string; +} + +/** Evaluate a plan set under one timestamp without applying changes or marking DONE. */ +export function closeCodeChanges(options: CloseCodeChangesOptions): CodeChangeCloseResult { + const context = buildCloseCodeChangeContext(options); + const acceptances = options.plans.map((plan) => evaluateCodeChangeAcceptance({ + plan, + before: options.before, + afterGraph: options.afterGraph, + afterDiagnostics: context.afterDiagnostics, + evaluatedAt: context.evaluatedAt, + })); + const acceptedCount = acceptances.filter((item) => item.accepted).length; + return buildCloseResult(options, context.evaluatedAt, acceptances, acceptedCount); +} + +interface CloseCodeChangeContext { + evaluatedAt: string; + afterDiagnostics: DiagnosticReport; +} + +function buildCloseCodeChangeContext(options: CloseCodeChangesOptions): CloseCodeChangeContext { + const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(evaluatedAt))) throw new Error('evaluatedAt must be an ISO date-time'); + assertCodeChangePlansForReview(options.plans, options.afterGraph.fingerprint); + const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); + ensureClosePlanIdsAreUnique(options.plans); + return { evaluatedAt, afterDiagnostics }; +} + +function ensureClosePlanIdsAreUnique(plans: CodeChangePlan[]): void { + const planIds = plans.map((plan) => plan.id); + if (new Set(planIds).size !== planIds.length) { + throw new Error('Code change close plans must have unique ids'); + } +} + +function buildCloseResult( + options: CloseCodeChangesOptions, + evaluatedAt: string, + acceptances: ReturnType[], + acceptedCount: number, +): CodeChangeCloseResult { + return { + schemaVersion: 't2c.code-change-close-result/v1', + evaluatedAt, + graphFingerprintBefore: options.before.graph.fingerprint, + graphFingerprintAfter: options.afterGraph.fingerprint, + planCount: options.plans.length, + acceptedCount, + rejectedCount: options.plans.length - acceptedCount, + allAccepted: options.plans.length > 0 && acceptedCount === options.plans.length, + acceptances, + generation: deterministicGeneration(evaluatedAt, 't2c/code-change-close-result'), + }; +} diff --git a/src/synthesis/code-change-plan/implementation-helpers-plans.ts b/src/synthesis/code-change-plan/implementation-helpers-plans.ts new file mode 100644 index 0000000..113a9ca --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-helpers-plans.ts @@ -0,0 +1,269 @@ +import { existsSync } from 'node:fs'; +import path from 'node:path'; + +import { + createCodeChangePlanHash, + createCodeChangePlanId, +} from '../../core/id.js'; +import { + assertCodeChangePlans, + assertConclusions, + assertIntentGraph, +} from '../../core/schema.js'; +import type { + CodeChangePlan, + Diagnostic, + DiagnosticReport, + IntentGraph, + IntentRecord, + IntentTarget, + Conclusion, + TodoProposal, +} from '../../core/types.js'; +import { + collectImplementationDiagnostics, +} from './implementation-diagnostics.js'; +import { + indexConclusionsByDiagnostic, + indexProposalsByDiagnostic, +} from './implementation-indexing.js'; +import { collectTarget } from './implementation-targets.js'; +import { + buildPlanEvidence, + buildPlanSemantic, + type CodeChangePlanSemanticDraft, +} from './implementation-semantic.js'; +import { + deterministicGeneration, + uniqueSorted, +} from './implementation-helpers-shared.js'; + +export interface ProposeCodeChangePlansOptions { + graph: IntentGraph; + diagnostics: DiagnosticReport; + conclusions?: Conclusion[]; + proposals?: TodoProposal[]; + generatedAt?: string; + /** Limit how many plans are materialised from open diagnostics. Default 50. */ + maxPlans?: number; + /** + * Repository probe used to tell `create` from `modify`. Injected rather than + * read here so plan synthesis stays pure and deterministic; when omitted the + * plan cannot know and keeps the conservative `modify`. + * See {@link createRepositoryPathProbe}. + */ + pathExists?: (relativePath: string) => boolean; +} + +export interface ProposeCodeChangePlansResult { + schemaVersion: 't2c.code-change-plan-set/v1'; + plans: CodeChangePlan[]; + generatedAt: string; + graphFingerprint: string; + sourceDiagnosticCount: number; + generation: ReturnType; +} + +/** + * Build grounded code-change plans from open implementation diagnostics. + * + * One plan is produced per diagnostic that can name at least one target path + * (from the diagnostic's records or a matching TODO proposal). The runtime + * never invents file paths and never marks work complete. + */ +export function proposeCodeChangePlans(options: ProposeCodeChangePlansOptions): ProposeCodeChangePlansResult { + assertIntentGraph(options.graph); + assertConclusions([], { graph: options.graph, diagnostics: options.diagnostics }); + const generatedAt = parseIsoDateTime(options.generatedAt); + const maxPlans = parseMaxPlans(options.maxPlans); + const context = buildPlanContext(options); + const candidates = collectImplementationDiagnostics(options.diagnostics); + + const plans = buildPlansForCandidates(candidates, context, generatedAt, maxPlans); + assertCodeChangePlans(plans, { + graph: options.graph, + diagnostics: options.diagnostics, + conclusions: context.conclusions, + proposals: context.proposals, + }); + return buildPlanSetResult(options.graph.fingerprint, generatedAt, candidates.length, plans); +} + +function buildPlansForCandidates( + candidates: Diagnostic[], + context: PlanContext, + generatedAt: string, + maxPlans: number, +): CodeChangePlan[] { + const plans: CodeChangePlan[] = []; + for (const diagnostic of candidates) { + if (plans.length >= maxPlans) break; + const plan = createPlanForDiagnostic(diagnostic, context, generatedAt); + if (plan) plans.push(plan); + } + return plans; +} + +function buildPlanSetResult( + graphFingerprint: string, + generatedAt: string, + sourceDiagnosticCount: number, + plans: CodeChangePlan[], +): ProposeCodeChangePlansResult { + return { + schemaVersion: 't2c.code-change-plan-set/v1', + plans, + generatedAt, + graphFingerprint, + sourceDiagnosticCount, + generation: deterministicGeneration(generatedAt, 't2c/code-change-plan-set'), + }; +} + +function parseIsoDateTime(value?: string): string { + const generatedAt = value ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(generatedAt))) { + throw new Error('generatedAt must be an ISO date-time'); + } + return generatedAt; +} + +function parseMaxPlans(value: number | undefined): number { + const maxPlans = value ?? 50; + if (!Number.isInteger(maxPlans) || maxPlans < 1 || maxPlans > 500) { + throw new Error('maxPlans must be an integer between 1 and 500'); + } + return maxPlans; +} + +interface PlanContext { + graph: IntentGraph; + recordsById: Map; + proposalsByDiagnostic: Map; + conclusionsByDiagnostic: Map; + conclusions: Conclusion[]; + proposals: TodoProposal[]; + pathExists?: (relativePath: string) => boolean; +} + +function buildPlanContext(options: ProposeCodeChangePlansOptions): PlanContext { + const conclusions = options.conclusions ?? []; + const proposals = options.proposals ?? []; + const context: PlanContext = { + graph: options.graph, + recordsById: new Map(options.graph.records.map((record) => [record.id, record])), + proposalsByDiagnostic: indexProposalsByDiagnostic(proposals), + conclusionsByDiagnostic: indexConclusionsByDiagnostic(conclusions), + conclusions, + proposals, + }; + if (options.pathExists) { + context.pathExists = options.pathExists; + } + return context; +} + +function findRelatedRecords( + diagnostic: Diagnostic, + recordsById: Map, +): IntentRecord[] { + return diagnostic.recordIds + .map((id) => recordsById.get(id)) + .filter((record): record is IntentRecord => Boolean(record)); +} + +function createPlanForDiagnostic( + diagnostic: Diagnostic, + context: PlanContext, + generatedAt: string, +): CodeChangePlan | null { + const relatedRecords = findRelatedRecords(diagnostic, context.recordsById); + if (!relatedRecords.length) return null; + + const matchingProposals = context.proposalsByDiagnostic.get(diagnostic.id) ?? []; + const matchingConclusions = context.conclusionsByDiagnostic.get(diagnostic.id) ?? []; + const target = collectTarget(relatedRecords, matchingProposals); + const changes = buildChanges(target, relatedRecords, diagnostic, context.pathExists); + if (!changes.length) return null; + + const evidence = buildPlanEvidence(context.graph.fingerprint, diagnostic.id, relatedRecords, matchingConclusions, matchingProposals); + const confidence = confidenceForDiagnostic(diagnostic, matchingProposals); + const semantic = buildPlanSemantic(diagnostic, relatedRecords, target, changes, evidence); + return buildPlanResult(generatedAt, confidence, semantic); +} + +function confidenceForDiagnostic( + diagnostic: Diagnostic, + matchingProposals: TodoProposal[], +): number { + return confidenceFor(diagnostic, matchingProposals); +} + +function buildPlanResult( + generatedAt: string, + confidence: number, + semantic: CodeChangePlanSemanticDraft, +): CodeChangePlan { + return { + schemaVersion: 't2c.code-change-plan/v1', + id: createCodeChangePlanId(semantic), + planHash: createCodeChangePlanHash(semantic), + status: 'proposed', + createdAt: generatedAt, + confidence, + generation: deterministicGeneration(generatedAt, 't2c/code-change-plan'), + ...semantic, + }; +} + +/** + * Build the repository probe for {@link ProposeCodeChangePlansOptions.pathExists}. + * + * A path that escapes the analysed root is reported as existing, so an unusual + * value degrades to today's conservative `modify` instead of instructing an + * executor to create a file outside the repository. + */ +export function createRepositoryPathProbe(root: string): (relativePath: string) => boolean { + const base = path.resolve(root); + return (relativePath: string): boolean => { + const absolute = path.resolve(base, relativePath); + if (absolute !== base && !absolute.startsWith(base + path.sep)) return true; + return existsSync(absolute); + }; +} + +function buildChanges( + target: IntentTarget, + records: IntentRecord[], + diagnostic: Diagnostic, + pathExistsInRepository?: (relativePath: string) => boolean, +): ReturnType['changes'] { + const symbols = uniqueSorted(target.symbols); + const sourceIntents = uniqueSorted(records.map((record) => record.statement.text)); + const rationale = sourceIntents.length + ? `Implement the source intent: ${sourceIntents.join(' | ')}` + : diagnostic.detail || `Address ${diagnostic.code}.`; + + if (target.paths.length) { + const changes: ReturnType['changes'] = []; + for (const declared of uniqueSorted(target.paths)) { + const normalized = declared.replace(/\\/g, '/'); + const exists = pathExistsInRepository?.(normalized); + if (exists === false && !normalized.includes('/')) continue; + const action: 'create' | 'modify' | 'delete' = exists === false ? 'create' : 'modify'; + changes.push({ path: normalized, action, symbols, rationale }); + } + return changes; + } + + return []; +} + +function confidenceFor(diagnostic: Diagnostic, proposals: TodoProposal[]): number { + if (proposals.length) { + return Math.min(0.92, Math.max(...proposals.map((item) => item.confidence))); + } + if (diagnostic.severity === 'blocking') return 0.88; + if (diagnostic.severity === 'review_required') return 0.8; + return 0.72; +} diff --git a/src/synthesis/code-change-plan/implementation-helpers-shared.ts b/src/synthesis/code-change-plan/implementation-helpers-shared.ts new file mode 100644 index 0000000..dccaf83 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-helpers-shared.ts @@ -0,0 +1,29 @@ +import { sha256, stableStringify } from '../../core/id.js'; +import { T2C_VERSION } from '../../version.js'; +import { IMPLEMENTATION_DIAGNOSTIC_CODES } from './implementation-diagnostics.js'; +import type { GroundedGenerationMetadata } from '../../core/types.js'; + +export function uniqueSorted(values: string[]): string[] { + return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); +} + +export function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { + return { + generator, + generatorVersion: '1', + runtimeVersion: T2C_VERSION, + generatedAt, + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + model: null, + provider: null, + responseId: null, + configurationFingerprint: sha256(stableStringify({ + generator, + generatorVersion: '1', + codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), + })), + reason: null, + }; +} diff --git a/src/synthesis/code-change-plan/implementation-helpers.ts b/src/synthesis/code-change-plan/implementation-helpers.ts index af74fe5..4a58668 100644 --- a/src/synthesis/code-change-plan/implementation-helpers.ts +++ b/src/synthesis/code-change-plan/implementation-helpers.ts @@ -1,51 +1,19 @@ -import { existsSync } from 'node:fs'; -import path from 'node:path'; -import { - createCodeChangePlanHash, - createCodeChangePlanId, - sha256, - stableStringify, -} from '../../core/id.js'; -import { - assertCodeChangeAcceptance, - assertCodeChangePlanForAcceptance, - assertCodeChangePlans, - assertConclusions, - assertIntentGraph, -} from '../../core/schema.js'; -import type { - CodeChangeAcceptance, - CodeChangeCloseResult, - CodeChangeFile, - CodeChangeFileAction, - CodeChangePlan, - CodeChangeSourcePatch, - CodeChangeSourcePatchSet, - Conclusion, - Diagnostic, - DiagnosticReport, - GroundedGenerationMetadata, - IntentGraph, - IntentRecord, - IntentTarget, - TodoProposal, -} from '../../core/types.js'; -import { diagnoseGraph } from '../../graph/diagnostics.js'; -import { T2C_VERSION } from '../../version.js'; -import { - collectImplementationDiagnostics, - IMPLEMENTATION_DIAGNOSTIC_CODES, -} from './implementation-diagnostics.js'; -import { - indexConclusionsByDiagnostic, - indexProposalsByDiagnostic, -} from './implementation-indexing.js'; -import { collectTarget } from './implementation-targets.js'; -import { - buildPlanEvidence, - buildPlanSemantic, - type CodeChangePlanSemanticDraft, -} from './implementation-semantic.js'; +export { + proposeCodeChangePlans, + createRepositoryPathProbe, + type ProposeCodeChangePlansOptions, + type ProposeCodeChangePlansResult, +} from './implementation-helpers-plans.js'; + +export { + evaluateCodeChangeAcceptance, + type EvaluateCodeChangeAcceptanceOptions, +} from './implementation-helpers-acceptance.js'; + +export { + closeCodeChanges, + type CloseCodeChangesOptions, +} from './implementation-helpers-close.js'; export { createCodeChangeSourcePatch, @@ -69,470 +37,3 @@ export { } from './implementation-source-patch-apply.js'; export { isUsefulCodeChangePath } from '../code-change-path.js'; - -export interface ProposeCodeChangePlansOptions { - graph: IntentGraph; - diagnostics: DiagnosticReport; - conclusions?: Conclusion[]; - proposals?: TodoProposal[]; - generatedAt?: string; - /** Limit how many plans are materialised from open diagnostics. Default 50. */ - maxPlans?: number; - /** - * Repository probe used to tell `create` from `modify`. Injected rather than - * read here so plan synthesis stays pure and deterministic; when omitted the - * plan cannot know and keeps the conservative `modify`. - * See {@link createRepositoryPathProbe}. - */ - pathExists?: (relativePath: string) => boolean; -} - -export interface ProposeCodeChangePlansResult { - schemaVersion: 't2c.code-change-plan-set/v1'; - plans: CodeChangePlan[]; - generatedAt: string; - graphFingerprint: string; - sourceDiagnosticCount: number; - generation: GroundedGenerationMetadata; -} - -export interface EvaluateCodeChangeAcceptanceOptions { - plan: CodeChangePlan; - /** Graph and diagnostics that the plan was grounded on. */ - before: { graph: IntentGraph; diagnostics: DiagnosticReport }; - /** Graph after an attempted implementation (re-extracted and re-linked). */ - afterGraph: IntentGraph; - /** Optional precomputed after diagnostics; derived when omitted. */ - afterDiagnostics?: DiagnosticReport; - evaluatedAt?: string; -} - -export interface CloseCodeChangesOptions { - plans: CodeChangePlan[]; - before: { graph: IntentGraph; diagnostics: DiagnosticReport }; - afterGraph: IntentGraph; - afterDiagnostics?: DiagnosticReport; - evaluatedAt?: string; -} - -/** - * Build grounded code-change plans from open implementation diagnostics. - * - * One plan is produced per diagnostic that can name at least one target path - * (from the diagnostic's records or a matching TODO proposal). The runtime - * never invents file paths and never marks work complete. - */ -export function proposeCodeChangePlans(options: ProposeCodeChangePlansOptions): ProposeCodeChangePlansResult { - assertIntentGraph(options.graph); - assertConclusions([], { graph: options.graph, diagnostics: options.diagnostics }); - const generatedAt = parseIsoDateTime(options.generatedAt); - const maxPlans = parseMaxPlans(options.maxPlans); - const context = buildPlanContext(options); - const candidates = collectImplementationDiagnostics(options.diagnostics); - - const plans = buildPlansForCandidates(candidates, context, generatedAt, maxPlans); - assertCodeChangePlans(plans, { - graph: options.graph, - diagnostics: options.diagnostics, - conclusions: context.conclusions, - proposals: context.proposals, - }); - return buildPlanSetResult(options.graph.fingerprint, generatedAt, candidates.length, plans); -} - -function buildPlansForCandidates( - candidates: Diagnostic[], - context: PlanContext, - generatedAt: string, - maxPlans: number, -): CodeChangePlan[] { - const plans: CodeChangePlan[] = []; - for (const diagnostic of candidates) { - if (plans.length >= maxPlans) break; - const plan = createPlanForDiagnostic(diagnostic, context, generatedAt); - if (plan) plans.push(plan); - } - return plans; -} - -function buildPlanSetResult( - graphFingerprint: string, - generatedAt: string, - sourceDiagnosticCount: number, - plans: CodeChangePlan[], -): ProposeCodeChangePlansResult { - return { - schemaVersion: 't2c.code-change-plan-set/v1', - plans, - generatedAt, - graphFingerprint, - sourceDiagnosticCount, - generation: deterministicGeneration(generatedAt, 't2c/code-change-plan-set'), - }; -} - -function parseIsoDateTime(value?: string): string { - const generatedAt = value ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(generatedAt))) { - throw new Error('generatedAt must be an ISO date-time'); - } - return generatedAt; -} - -function parseMaxPlans(value: number | undefined): number { - const maxPlans = value ?? 50; - if (!Number.isInteger(maxPlans) || maxPlans < 1 || maxPlans > 500) { - throw new Error('maxPlans must be an integer between 1 and 500'); - } - return maxPlans; -} - -interface PlanContext { - graph: IntentGraph; - recordsById: Map; - proposalsByDiagnostic: Map; - conclusionsByDiagnostic: Map; - conclusions: Conclusion[]; - proposals: TodoProposal[]; - pathExists?: (relativePath: string) => boolean; -} - -function buildPlanContext(options: ProposeCodeChangePlansOptions): PlanContext { - const conclusions = options.conclusions ?? []; - const proposals = options.proposals ?? []; - const context: PlanContext = { - graph: options.graph, - recordsById: new Map(options.graph.records.map((record) => [record.id, record])), - proposalsByDiagnostic: indexProposalsByDiagnostic(proposals), - conclusionsByDiagnostic: indexConclusionsByDiagnostic(conclusions), - conclusions, - proposals, - }; - if (options.pathExists) { - context.pathExists = options.pathExists; - } - return context; -} - -function findRelatedRecords( - diagnostic: Diagnostic, - recordsById: Map, -): IntentRecord[] { - return diagnostic.recordIds - .map((id) => recordsById.get(id)) - .filter((record): record is IntentRecord => Boolean(record)); -} - -function createPlanForDiagnostic( - diagnostic: Diagnostic, - context: PlanContext, - generatedAt: string, -): CodeChangePlan | null { - const relatedRecords = findRelatedRecords(diagnostic, context.recordsById); - if (!relatedRecords.length) return null; - - const matchingProposals = context.proposalsByDiagnostic.get(diagnostic.id) ?? []; - const matchingConclusions = context.conclusionsByDiagnostic.get(diagnostic.id) ?? []; - const target = collectTarget(relatedRecords, matchingProposals); - const changes = buildChanges(target, relatedRecords, diagnostic, context.pathExists); - if (!changes.length) return null; - - const evidence = buildPlanEvidence(context.graph.fingerprint, diagnostic.id, relatedRecords, matchingConclusions, matchingProposals); - const confidence = confidenceForDiagnostic(diagnostic, matchingProposals); - const semantic = buildPlanSemantic(diagnostic, relatedRecords, target, changes, evidence); - return buildPlanResult(generatedAt, confidence, semantic); -} - -function confidenceForDiagnostic( - diagnostic: Diagnostic, - matchingProposals: TodoProposal[], -): number { - return confidenceFor(diagnostic, matchingProposals); -} - -function buildPlanResult( - generatedAt: string, - confidence: number, - semantic: CodeChangePlanSemanticDraft, -): CodeChangePlan { - return { - schemaVersion: 't2c.code-change-plan/v1', - id: createCodeChangePlanId(semantic), - planHash: createCodeChangePlanHash(semantic), - status: 'proposed', - createdAt: generatedAt, - confidence, - generation: deterministicGeneration(generatedAt, 't2c/code-change-plan'), - ...semantic, - }; -} - -/** - * Build the repository probe for {@link ProposeCodeChangePlansOptions.pathExists}. - * - * A path that escapes the analysed root is reported as existing, so an unusual - * value degrades to today's conservative `modify` instead of instructing an - * executor to create a file outside the repository. - */ -export function createRepositoryPathProbe(root: string): (relativePath: string) => boolean { - const base = path.resolve(root); - return (relativePath: string): boolean => { - const absolute = path.resolve(base, relativePath); - if (absolute !== base && !absolute.startsWith(base + path.sep)) return true; - return existsSync(absolute); - }; -} - -/** - * Re-diagnose an after graph and decide whether the plan's targeted - * diagnostics cleared without introducing new blocking findings. - * - * Diagnostic IDs are content-bound, so a still-open finding on the same - * records keeps the same ID. Cleared findings simply disappear. - */ - -export function evaluateCodeChangeAcceptance( - options: EvaluateCodeChangeAcceptanceOptions, -): CodeChangeAcceptance { - assertIntentGraph(options.before.graph); - assertIntentGraph(options.afterGraph); - assertConclusions([], options.before); - assertCodeChangePlanForAcceptance(options.plan, options.before); - - const context = buildAcceptanceContext(options); - const reasons = buildAcceptanceReasons(context.remainingDiagnosticIds, context.newBlockingDiagnosticIds); - const accepted = isAcceptancePassed(context); - appendAcceptanceGateReason(reasons, accepted); - - const acceptance = buildAcceptanceResult(options, context, reasons, accepted); - assertCodeChangeAcceptance(acceptance, { - plan: options.plan, - before: options.before, - after: { graph: options.afterGraph, diagnostics: context.afterDiagnostics }, - }); - return acceptance; -} - -interface AcceptanceContext { - afterDiagnostics: DiagnosticReport; - beforeDiagnosticIds: Set; - afterDiagnosticIds: string[]; - clearedDiagnosticIds: string[]; - remainingDiagnosticIds: string[]; - newBlockingDiagnosticIds: string[]; - evaluatedAt: string; -} - -function buildAcceptanceContext(options: EvaluateCodeChangeAcceptanceOptions): AcceptanceContext { - const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); - const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); - assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); - - const beforeDiagnosticIds = new Set(options.before.diagnostics.diagnostics.map((item) => item.id)); - const afterById = new Map(afterDiagnostics.diagnostics.map((item) => [item.id, item])); - const afterDiagnosticIds = [...afterById.keys()].sort(); - const targetedDiagnosticIds = options.plan.evidence.diagnosticIds; - - return { - afterDiagnostics, - beforeDiagnosticIds, - afterDiagnosticIds, - clearedDiagnosticIds: targetedDiagnosticIds.filter((id) => !afterById.has(id)).sort(), - remainingDiagnosticIds: targetedDiagnosticIds.filter((id) => afterById.has(id)).sort(), - newBlockingDiagnosticIds: afterDiagnostics.diagnostics - .filter((item) => item.severity === 'blocking' && !beforeDiagnosticIds.has(item.id)) - .map((item) => item.id) - .sort(), - evaluatedAt, - }; -} - -function buildAcceptanceReasons( - remainingDiagnosticIds: string[], - newBlockingDiagnosticIds: string[], -): string[] { - const reasons: string[] = []; - if (remainingDiagnosticIds.length) { - reasons.push(`Targeted diagnostics still open: ${remainingDiagnosticIds.join(', ')}.`); - } else { - reasons.push('All targeted diagnostics cleared after re-analysis.'); - } - if (newBlockingDiagnosticIds.length) { - reasons.push(`New blocking diagnostics appeared: ${newBlockingDiagnosticIds.join(', ')}.`); - } else { - reasons.push('No new blocking diagnostics appeared.'); - } - return reasons; -} - -function isAcceptancePassed(context: AcceptanceContext): boolean { - return context.remainingDiagnosticIds.length === 0 && context.newBlockingDiagnosticIds.length === 0; -} - -function appendAcceptanceGateReason(reasons: string[], accepted: boolean): void { - if (accepted) { - reasons.push('Acceptance gate passed; human approval is still required before DONE.'); - } else { - reasons.push('Acceptance gate failed.'); - } -} - -function buildAcceptanceResult( - options: EvaluateCodeChangeAcceptanceOptions, - context: AcceptanceContext, - reasons: string[], - accepted: boolean, -): CodeChangeAcceptance { - return { - schemaVersion: 't2c.code-change-acceptance/v1', - planId: options.plan.id, - planHash: options.plan.planHash, - beforeGraphFingerprint: options.before.graph.fingerprint, - afterGraphFingerprint: options.afterGraph.fingerprint, - beforeDiagnosticIds: [...context.beforeDiagnosticIds].sort(), - afterDiagnosticIds: context.afterDiagnosticIds, - clearedDiagnosticIds: context.clearedDiagnosticIds, - remainingDiagnosticIds: context.remainingDiagnosticIds, - newBlockingDiagnosticIds: context.newBlockingDiagnosticIds, - accepted, - reasons: uniqueSorted(reasons), - evaluatedAt: context.evaluatedAt, - generation: deterministicGeneration(context.evaluatedAt, 't2c/code-change-acceptance'), - }; -} - -/** Evaluate a plan set under one timestamp without applying changes or marking DONE. */ -export function closeCodeChanges(options: CloseCodeChangesOptions): CodeChangeCloseResult { - const context = buildCloseCodeChangeContext(options); - const acceptances = options.plans.map((plan) => evaluateCodeChangeAcceptance({ - plan, - before: options.before, - afterGraph: options.afterGraph, - afterDiagnostics: context.afterDiagnostics, - evaluatedAt: context.evaluatedAt, - })); - const acceptedCount = acceptances.filter((item) => item.accepted).length; - return buildCloseResult(options, context.evaluatedAt, acceptances, acceptedCount); -} - -interface CloseCodeChangeContext { - evaluatedAt: string; - afterDiagnostics: DiagnosticReport; -} - -function buildCloseCodeChangeContext(options: CloseCodeChangesOptions): CloseCodeChangeContext { - const evaluatedAt = options.evaluatedAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(evaluatedAt))) throw new Error('evaluatedAt must be an ISO date-time'); - assertIntentGraph(options.before.graph); - assertIntentGraph(options.afterGraph); - assertConclusions([], options.before); - const afterDiagnostics = options.afterDiagnostics ?? diagnoseGraph(options.afterGraph, evaluatedAt); - assertConclusions([], { graph: options.afterGraph, diagnostics: afterDiagnostics }); - ensureClosePlanIdsAreUnique(options.plans); - return { evaluatedAt, afterDiagnostics }; -} - -function ensureClosePlanIdsAreUnique(plans: CodeChangePlan[]): void { - const planIds = plans.map((plan) => plan.id); - if (new Set(planIds).size !== planIds.length) { - throw new Error('Code change close plans must have unique ids'); - } -} - -function buildCloseResult( - options: CloseCodeChangesOptions, - evaluatedAt: string, - acceptances: CodeChangeAcceptance[], - acceptedCount: number, -): CodeChangeCloseResult { - return { - schemaVersion: 't2c.code-change-close-result/v1', - evaluatedAt, - graphFingerprintBefore: options.before.graph.fingerprint, - graphFingerprintAfter: options.afterGraph.fingerprint, - planCount: options.plans.length, - acceptedCount, - rejectedCount: options.plans.length - acceptedCount, - allAccepted: options.plans.length > 0 && acceptedCount === options.plans.length, - acceptances, - generation: deterministicGeneration(evaluatedAt, 't2c/code-change-close-result'), - }; -} -function buildChanges( - target: IntentTarget, - records: IntentRecord[], - diagnostic: Diagnostic, - pathExistsInRepository?: (relativePath: string) => boolean, -): CodeChangeFile[] { - const symbols = uniqueSorted(target.symbols); - // The diagnostic explains why evidence is missing; it is not necessarily an - // implementation instruction. Reusing its generic remediation here produced - // contradictory tickets such as “replace magic number 50” followed by - // “provide a missing function”. The lossless source declaration is the work - // to perform, while the diagnostic remains available in the plan evidence. - const sourceIntents = uniqueSorted(records.map((record) => record.statement.text)); - const rationale = sourceIntents.length - ? `Implement the source intent: ${sourceIntents.join(' | ')}` - : diagnostic.detail || `Address ${diagnostic.code}.`; - - if (target.paths.length) { - const changes: CodeChangeFile[] = []; - for (const declared of uniqueSorted(target.paths)) { - const normalized = declared.replace(/\\/g, '/'); - const exists = pathExistsInRepository?.(normalized); - // A path without a directory is shorthand that never said *where* the - // file belongs. Creating one at the repository root invents a location: - // measured across seven foreign repositories this proposed `__init__.py` - // beside 22 real ones, `pyproject.toml` beside 32, and files named after - // prose fragments such as `it.md`. The diagnostic still reports the gap; - // only the invented instruction is withheld. - if (exists === false && !normalized.includes('/')) continue; - // Documentation routinely plans files that do not exist yet (a target - // repository's `docs/ARCHITECTURE.md`). Telling an executor to modify - // them is an instruction it cannot follow, and `apply-source-patch` - // rejects a create edit whose target already exists, so the two actions - // must not be guessed. - const action: CodeChangeFileAction = exists === false ? 'create' : 'modify'; - changes.push({ path: normalized, action, symbols, rationale }); - } - return changes; - } - - // Without a path the plan cannot safely name a source file. Skip rather than invent. - return []; -} - -function confidenceFor(diagnostic: Diagnostic, proposals: TodoProposal[]): number { - if (proposals.length) { - return Math.min(0.92, Math.max(...proposals.map((item) => item.confidence))); - } - if (diagnostic.severity === 'blocking') return 0.88; - if (diagnostic.severity === 'review_required') return 0.8; - return 0.72; -} - -function uniqueSorted(values: string[]): string[] { - return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); -} - -function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { - return { - generator, - generatorVersion: '1', - runtimeVersion: T2C_VERSION, - generatedAt, - requestedMode: 'deterministic', - effectiveMode: 'deterministic', - degraded: false, - model: null, - provider: null, - responseId: null, - configurationFingerprint: sha256(stableStringify({ - generator, - generatorVersion: '1', - codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), - })), - reason: null, - }; -} - diff --git a/src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts b/src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts new file mode 100644 index 0000000..88a3b1d --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts @@ -0,0 +1,434 @@ +import { randomUUID } from 'node:crypto'; +import { promises as fs } from 'node:fs'; +import path from 'node:path'; + +import { assertPathWithinRoot } from '../../core/security.js'; +import { assertGroundedGenerationMetadata } from '../../core/schema.js'; +import { + sha256, + stableStringify, +} from '../../core/id.js'; +import { ensureDir, pathExists, readJson, readText } from '../../core/io.js'; +import { IMPLEMENTATION_DIAGNOSTIC_CODES } from './implementation-diagnostics.js'; +import { T2C_VERSION } from '../../version.js'; +import { assertCodeChangeSourcePatch } from './implementation-source-patch-assert.js'; +import { applyUnifiedDiffToText } from './implementation-source-patch-apply-diff.js'; +import { + CodeChangeFileAction, + CodeChangeSourceApplyReceipt, + CodeChangeSourceEdit, + CodeChangeSourcePatch, + CodeChangeSourcePatchApproval, + GroundedGenerationMetadata, +} from '../../core/types.js'; + +export interface ApplyCodeChangeSourcePatchOptions { + root: string; + patch: CodeChangeSourcePatch; + approval: CodeChangeSourcePatchApproval; + receiptPath: string; + now?: Date; +} + +export interface ApplyCodeChangeSourcePatchResult { + applied: boolean; + idempotent: boolean; + receipt: CodeChangeSourceApplyReceipt; +} + +interface NormalizedApplyCodeChangeSourcePatchRequest { + root: string; + patch: CodeChangeSourcePatch; + approval: CodeChangeSourcePatchApproval; + receiptPath: string; + now?: Date; +} + +interface SourcePatchApplyLock { + path: string; + lock: Awaited>; +} + +/** + * Apply a fully-diffed source patch after explicit hash approval. + * + * Instruction-only edits (null unifiedDiff) are rejected. Paths must stay + * relative and inside `root`. Re-applying with an existing matching receipt is + * idempotent. + */ +export async function applyCodeChangeSourcePatch( + options: ApplyCodeChangeSourcePatchOptions, +): Promise { + const request = assertPatchApplicationRequest(options); + const root = path.resolve(request.root); + const receiptPath = await assertPathWithinRoot(root, path.resolve(request.receiptPath)); + await ensureDir(path.dirname(receiptPath)); + const lock = await acquireApplyLock(receiptPath); + try { + const idempotentResult = await readExistingReceipt(receiptPath, request.patch, root); + if (idempotentResult) return idempotentResult; + + const prepared = await prepareSourceEdits(request.patch, root, receiptPath); + const now = (request.now ?? new Date()).toISOString(); + const receipt = await applyPreparedEdits(prepared, request.patch, request.approval.actor.trim(), now, receiptPath); + return { applied: true, idempotent: false, receipt }; + } finally { + await lock.lock.close(); + await fs.unlink(lock.path).catch(() => undefined); + } +} + +async function readExistingReceipt( + receiptPath: string, + patch: CodeChangeSourcePatch, + root: string, +): Promise { + if (!(await pathExists(receiptPath))) return null; + const existing = await readJson(receiptPath, 1024 * 1024); + await assertExistingSourceReceipt(existing, patch, root); + return { applied: false, idempotent: true, receipt: existing }; +} + +function assertPatchApplicationRequest( + options: ApplyCodeChangeSourcePatchOptions, +): NormalizedApplyCodeChangeSourcePatchRequest { + const patch = options.patch; + assertCodeChangeSourcePatch(patch); + assertPatchApprovalActor(options.approval); + assertPatchApprovalHash(patch, options.approval); + assertPatchEditsContainDiffs(patch); + const request: NormalizedApplyCodeChangeSourcePatchRequest = { + root: options.root, + patch: options.patch, + approval: options.approval, + receiptPath: options.receiptPath, + }; + if (options.now !== undefined) request.now = options.now; + return request; +} + +function assertPatchApprovalActor(approval: CodeChangeSourcePatchApproval): string { + if (!approval) { + throw new Error('Source patch approval object is required'); + } + if (!approval.actor?.trim()) { + throw new Error('Explicit source patch approval actor is required'); + } + return approval.actor.trim(); +} + +function assertPatchApprovalHash( + patch: CodeChangeSourcePatch, + approval: CodeChangeSourcePatchApproval, +): void { + if (approval.patchHash !== patch.patchHash) { + throw new Error('Source patch approval hash does not match the patch'); + } +} + +function assertPatchEditsContainDiffs(patch: CodeChangeSourcePatch): void { + for (const edit of patch.edits) { + if (edit.unifiedDiff === null) { + throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); + } + } +} + +async function acquireApplyLock(receiptPath: string): Promise { + const lockPath = `${receiptPath}.t2c-apply.lock`; + try { + const lock = await fs.open(lockPath, 'wx'); + return { path: lockPath, lock }; + } catch (error) { + if ((error as NodeJS.ErrnoException).code === 'EEXIST') { + throw new Error('Another source patch apply operation is in progress'); + } + throw error; + } +} + +async function prepareSourceEdits( + patch: CodeChangeSourcePatch, + root: string, + receiptPath: string, +): Promise { + const prepared: PreparedSourceEdit[] = []; + for (const edit of patch.edits) { + const target = await prepareSourceEditTarget(edit, root, receiptPath); + const before = target.existed ? await readText(target.absolute, 16 * 1024 * 1024) : ''; + const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, target.relative); + assertDeleteEditClearsAll(target.relative, edit.action, after); + prepared.push({ + ...target, + action: edit.action, + before, + after, + }); + } + return prepared; +} + +interface SourcePatchEditTarget { + relative: string; + absolute: string; + existed: boolean; +} + +async function prepareSourceEditTarget( + edit: CodeChangeSourceEdit, + root: string, + receiptPath: string, +): Promise { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + if (absolute === receiptPath) { + throw new Error(`Source patch target collides with its receipt path: ${relative}`); + } + const existed = await pathExists(absolute); + await assertSourcePatchTargetNotSymlink(absolute, existed, relative); + validatePatchTargetForEdit(edit.action, relative, existed, edit.unifiedDiff!); + return { relative, absolute, existed }; +} + +async function assertSourcePatchTargetNotSymlink( + absolute: string, + existed: boolean, + relative: string, +): Promise { + if (!existed) return; + if ((await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Refusing to apply through a symlink: ${relative}`); + } +} + +function assertDeleteEditClearsAll(relative: string, action: CodeChangeFileAction, after: string): void { + if (action === 'delete' && after !== '') { + throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); + } +} + +function validatePatchTargetForEdit( + action: CodeChangeFileAction, + relative: string, + exists: boolean, + unifiedDiff: string, +): void { + if (action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); + if (action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); + if (action === 'modify' && !exists) { + const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(unifiedDiff) + || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(unifiedDiff); + if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); + } +} + +async function applyPreparedEdits( + prepared: PreparedSourceEdit[], + patch: CodeChangeSourcePatch, + approvedBy: string, + now: string, + receiptPath: string, +): Promise { + const changed: PreparedSourceEdit[] = []; + try { + await writePreparedEdits(prepared, changed); + const receipt = buildPatchApplyReceipt(prepared, patch, approvedBy, now); + assertSourceApplyReceipt(receipt, patch); + // The receipt is part of the transaction: without it a retry could apply + // the same approved patch again. Roll files back if persisting it fails. + await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); + return receipt; + } catch (error) { + const rollbackErrors = await rollbackPreparedEdits(changed); + if (rollbackErrors.length) { + throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); + } + throw error; + } +} + +async function writePreparedEdits(prepared: PreparedSourceEdit[], changed: PreparedSourceEdit[]): Promise { + for (const edit of prepared) { + if (edit.action === 'delete') await fs.unlink(edit.absolute); + else await atomicWriteRaw(edit.absolute, edit.after); + changed.push(edit); + } +} + +function buildPatchApplyReceipt( + prepared: PreparedSourceEdit[], + patch: CodeChangeSourcePatch, + approvedBy: string, + now: string, +): CodeChangeSourceApplyReceipt { + const fileHashesAfter = Object.fromEntries(prepared + .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) + .sort(([left], [right]) => left.localeCompare(right))); + return { + schemaVersion: 't2c.code-change-source-apply-receipt/v1', + patchId: patch.id, + patchHash: patch.patchHash, + planId: patch.planId, + approvedBy, + approvedAt: now, + appliedAt: now, + appliedPaths: prepared.map((edit) => edit.relative).sort(), + fileHashesAfter, + generation: deterministicGeneration(now, 't2c/code-change-source-apply'), + }; +} + +async function rollbackPreparedEdits(changes: PreparedSourceEdit[]): Promise { + const rollbackErrors: string[] = []; + for (const edit of [...changes].reverse()) { + try { + if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); + else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { + if (failure.code !== 'ENOENT') throw failure; + }); + } catch (rollbackError) { + rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); + } + } + return rollbackErrors; +} + +interface PreparedSourceEdit { + relative: string; + absolute: string; + action: CodeChangeFileAction; + before: string; + after: string; + existed: boolean; +} + +async function assertExistingSourceReceipt( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, + root: string, +): Promise { + try { + assertSourceApplyReceipt(receipt, patch); + } catch { + throw new Error('A different or invalid source patch receipt already exists at the receipt path'); + } + for (const edit of patch.edits) { + const relative = edit.path.replace(/\\/g, '/'); + const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); + const exists = await pathExists(absolute); + if (edit.action === 'delete') { + if (exists) throw new Error(`Applied source patch state changed after receipt: ${relative}`); + continue; + } + if (!exists || (await fs.lstat(absolute)).isSymbolicLink()) { + throw new Error(`Applied source patch state changed after receipt: ${relative}`); + } + const current = await readText(absolute, 16 * 1024 * 1024); + if (receipt.fileHashesAfter[relative] !== sha256(current)) { + throw new Error(`Applied source patch state changed after receipt: ${relative}`); + } + } +} + +function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: CodeChangeSourcePatch): void { + validateSourceApplyReceiptShape(receipt); + validateSourceApplyReceiptIdentity(receipt, patch); + validateSourceApplyReceiptTimestamps(receipt); + validateSourceApplyReceiptPathHashes(receipt, patch); + validateSourceApplyReceiptGeneration(receipt); +} + +function validateSourceApplyReceiptShape(receipt: CodeChangeSourceApplyReceipt): void { + exactSourcePatchKeys(receipt as unknown as Record, [ + 'schemaVersion', 'patchId', 'patchHash', 'planId', 'approvedBy', 'approvedAt', + 'appliedAt', 'appliedPaths', 'fileHashesAfter', 'generation', + ], 'Code change source apply receipt'); +} + +function validateSourceApplyReceiptIdentity( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, +): void { + if (receipt.schemaVersion !== 't2c.code-change-source-apply-receipt/v1' + || receipt.patchId !== patch.id + || receipt.patchHash !== patch.patchHash + || receipt.planId !== patch.planId) { + throw new Error('Code change source apply receipt does not match its patch'); + } +} + +function validateSourceApplyReceiptTimestamps(receipt: CodeChangeSourceApplyReceipt): void { + if (!receipt.approvedBy.trim()) throw new Error('Code change source apply receipt approvedBy is required'); + if (!Number.isFinite(Date.parse(receipt.approvedAt)) || !Number.isFinite(Date.parse(receipt.appliedAt))) { + throw new Error('Code change source apply receipt timestamps must be ISO date-times'); + } +} + +function validateSourceApplyReceiptPathHashes( + receipt: CodeChangeSourceApplyReceipt, + patch: CodeChangeSourcePatch, +): void { + const expectedPaths = patch.edits.map((edit) => edit.path).sort(); + exactSourcePatchSet(receipt.appliedPaths, expectedPaths, 'receipt appliedPaths'); + const hashPaths = Object.keys(receipt.fileHashesAfter).sort(); + exactSourcePatchSet(hashPaths, expectedPaths, 'receipt fileHashesAfter paths'); + if (Object.values(receipt.fileHashesAfter).some((value) => !/^[a-f0-9]{64}$/.test(value))) { + throw new Error('Code change source apply receipt file hashes must be SHA-256'); + } +} + +function validateSourceApplyReceiptGeneration(receipt: CodeChangeSourceApplyReceipt): void { + assertGroundedGenerationMetadata(receipt.generation, 'Code change source apply receipt generation'); + if (receipt.generation.generatedAt !== receipt.appliedAt + || receipt.generation.generator !== 't2c/code-change-source-apply') { + throw new Error('Code change source apply receipt generation does not match the apply operation'); + } +} + +async function atomicWriteRaw(target: string, content: string): Promise { + await ensureDir(path.dirname(target)); + const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`; + try { + await fs.writeFile(temporary, content, 'utf8'); + await fs.rename(temporary, target); + } finally { + await fs.unlink(temporary).catch(() => undefined); + } +} + +function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { + const actual = Object.keys(value).sort(); + const wanted = [...expected].sort(); + if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { + throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); + } +} + +function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { + const left = [...new Set(actual)].sort(); + const right = [...new Set(expected)].sort(); + if (left.length !== right.length || left.some((item, index) => item !== right[index])) { + throw new Error(`Source patch ${name} do not match the plan`); + } +} + +function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { + return { + generator, + generatorVersion: '1', + runtimeVersion: T2C_VERSION, + generatedAt, + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + model: null, + provider: null, + responseId: null, + configurationFingerprint: sha256(stableStringify({ + generator, + generatorVersion: '1', + codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), + })), + reason: null, + }; +} diff --git a/src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts b/src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts new file mode 100644 index 0000000..af776b3 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts @@ -0,0 +1,233 @@ +import { normalizeUnifiedDiff } from './implementation-source-patch-diff.js'; + +/** + * Apply a single-file unified diff to a text buffer. + * Supports standard hunks with space/+/− prefixes. Throws on context mismatch. + */ +export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: string): string { + const baseLines = splitKeep(base); + const hunks = parseUnifiedDiffIntoHunks(diff, expectedPath); + const output = applyUnifiedDiffHunks(baseLines, expectedPath, hunks); + // Reconstruct text. Files without a trailing newline end without an empty last segment. + return joinAppliedText(base.endsWith('\n'), output); +} + +function joinAppliedText(baseEndsWithNewline: boolean, lines: string[]): string { + if (baseEndsWithNewline || lines.length === 0) return `${lines.join('\n')}${lines.length ? '\n' : ''}`; + return lines.join('\n'); +} + +interface ParsedUnifiedDiffHunk { + oldStart: number; + oldCount: number; + newCount: number; + lines: string[]; +} + +function parseUnifiedDiffIntoHunks(diff: string, expectedPath: string): ParsedUnifiedDiffHunk[] { + const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); + const context = createEmptyUnifiedDiffContext(); + for (const line of parseUnifiedDiffLines(normalizedDiff)) { + applyUnifiedDiffLineToContext(context, line, expectedPath); + } + return finalizeUnifiedDiffContext(context, expectedPath); +} + +interface UnifiedDiffParsingContext { + current: ParsedUnifiedDiffHunk | null; + hunks: ParsedUnifiedDiffHunk[]; +} + +function createEmptyUnifiedDiffContext(): UnifiedDiffParsingContext { + return { current: null, hunks: [] }; +} + +function parseUnifiedDiffLines(diff: string): string[] { + return diff.split('\n'); +} + +function finalizeUnifiedDiffContext( + context: UnifiedDiffParsingContext, + expectedPath: string, +): ParsedUnifiedDiffHunk[] { + if (context.current) { + context.hunks.push(context.current); + context.current = null; + } + if (!context.hunks.length) { + throw new Error(`Unified diff for ${expectedPath} contains no hunks`); + } + return context.hunks; +} + +function applyUnifiedDiffLineToContext( + context: UnifiedDiffParsingContext, + line: string, + expectedPath: string, +): void { + const header = parseUnifiedDiffHeader(line); + if (header) { + if (context.current) { + context.hunks.push(context.current); + } + context.current = header; + return; + } + if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { + return; + } + if (!context.current) { + if (line === '') return; + throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); + } + // Blank lines without a unified-diff prefix separate hunks in some emitters. + if (line === '') return; + context.current.lines.push(line); +} + +function parseUnifiedDiffHeader(line: string): ParsedUnifiedDiffHunk | null { + const match = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); + if (!match) return null; + return buildParsedUnifiedDiffHunk(match); +} + +function buildParsedUnifiedDiffHunk(match: RegExpMatchArray): ParsedUnifiedDiffHunk { + return { + oldStart: Number(match[1]), + oldCount: match[2] === undefined ? 1 : Number(match[2]), + newCount: match[4] === undefined ? 1 : Number(match[4]), + lines: [], + }; +} + +interface UnifiedDiffCursor { + position: number; +} + +function applyUnifiedDiffHunks( + baseLines: string[], + expectedPath: string, + hunks: ParsedUnifiedDiffHunk[], +): string[] { + const cursor: UnifiedDiffCursor = { position: 0 }; + const output: string[] = []; + for (const hunk of hunks) { + applyUnifiedDiffHunk(baseLines, expectedPath, cursor, output, hunk); + } + appendRemainingBaseLines(baseLines, cursor, output); + return output; +} + +function applyUnifiedDiffHunk( + baseLines: string[], + expectedPath: string, + cursor: UnifiedDiffCursor, + output: string[], + hunk: ParsedUnifiedDiffHunk, +): void { + const oldIndex = Math.max(0, hunk.oldStart - 1); + if (oldIndex < cursor.position) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); + validateHunkCounts(expectedPath, hunk); + copyBaseLinesToCursor(baseLines, expectedPath, cursor, output, oldIndex); + for (const line of hunk.lines) { + if (line.startsWith('\\')) continue; // "\\ No newline at end of file" + applyUnifiedDiffLine(expectedPath, line, cursor, baseLines, output); + } +} + +function copyBaseLinesToCursor( + baseLines: string[], + expectedPath: string, + cursor: UnifiedDiffCursor, + output: string[], + targetIndex: number, +): void { + while (cursor.position < targetIndex) { + if (cursor.position >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); + output.push(baseLines[cursor.position]!); + cursor.position += 1; + } +} + +function appendRemainingBaseLines( + baseLines: string[], + cursor: UnifiedDiffCursor, + output: string[], +): void { + while (cursor.position < baseLines.length) { + output.push(baseLines[cursor.position]!); + cursor.position += 1; + } +} + +function validateHunkCounts(expectedPath: string, hunk: ParsedUnifiedDiffHunk): void { + const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; + const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; + if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { + throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); + } +} + +function applyUnifiedDiffLine( + expectedPath: string, + line: string, + cursor: UnifiedDiffCursor, + baseLines: string[], + output: string[], +): void { + const mark = line[0]; + const body = line.slice(1); + if (line === '') { + throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); + } + if (mark === ' ') { + applyUnifiedDiffContextLine(expectedPath, body, cursor, baseLines, output); + return; + } + if (mark === '-') { + applyUnifiedDiffDeletionLine(expectedPath, body, cursor, baseLines); + return; + } + if (mark === '+') { + applyUnifiedDiffAdditionLine(body, output); + return; + } + throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); +} + +function applyUnifiedDiffContextLine( + expectedPath: string, + body: string, + cursor: UnifiedDiffCursor, + baseLines: string[], + output: string[], +): void { + if (baseLines[cursor.position] !== body) { + throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor.position + 1}`); + } + output.push(baseLines[cursor.position]!); + cursor.position += 1; +} + +function applyUnifiedDiffDeletionLine( + expectedPath: string, + body: string, + cursor: UnifiedDiffCursor, + baseLines: string[], +): void { + if (baseLines[cursor.position] !== body) { + throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor.position + 1}`); + } + cursor.position += 1; +} + +function applyUnifiedDiffAdditionLine(body: string, output: string[]): void { + output.push(body); +} + +function splitKeep(text: string): string[] { + if (text === '') return []; + const lines = text.split('\n'); + if (text.endsWith('\n')) lines.pop(); + return lines; +} diff --git a/src/synthesis/code-change-plan/implementation-source-patch-apply.ts b/src/synthesis/code-change-plan/implementation-source-patch-apply.ts index 6c76a75..b18a11a 100644 --- a/src/synthesis/code-change-plan/implementation-source-patch-apply.ts +++ b/src/synthesis/code-change-plan/implementation-source-patch-apply.ts @@ -1,666 +1,8 @@ -import { randomUUID } from 'node:crypto'; -import { promises as fs } from 'node:fs'; -import path from 'node:path'; - -import { assertPathWithinRoot } from '../../core/security.js'; -import { assertGroundedGenerationMetadata } from '../../core/schema.js'; -import { - sha256, - stableStringify, -} from '../../core/id.js'; -import { ensureDir, pathExists, readJson, readText } from '../../core/io.js'; -import { T2C_VERSION } from '../../version.js'; -import { assertCodeChangeSourcePatch } from './implementation-source-patch.js'; -import { normalizeUnifiedDiff } from './implementation-source-patch-diff.js'; -import { IMPLEMENTATION_DIAGNOSTIC_CODES } from './implementation-diagnostics.js'; -import type { - CodeChangeFileAction, - CodeChangeSourceApplyReceipt, - CodeChangeSourceEdit, - CodeChangeSourcePatch, - CodeChangeSourcePatchApproval, - GroundedGenerationMetadata, -} from '../../core/types.js'; - -export interface ApplyCodeChangeSourcePatchOptions { - root: string; - patch: CodeChangeSourcePatch; - approval: CodeChangeSourcePatchApproval; - receiptPath: string; - now?: Date; -} - -export interface ApplyCodeChangeSourcePatchResult { - applied: boolean; - idempotent: boolean; - receipt: CodeChangeSourceApplyReceipt; -} - -interface NormalizedApplyCodeChangeSourcePatchRequest { - root: string; - patch: CodeChangeSourcePatch; - approval: CodeChangeSourcePatchApproval; - receiptPath: string; - now?: Date; -} - -interface SourcePatchApplyLock { - path: string; - lock: Awaited>; -} - -/** - * Apply a fully-diffed source patch after explicit hash approval. - * - * Instruction-only edits (null unifiedDiff) are rejected. Paths must stay - * relative and inside `root`. Re-applying with an existing matching receipt is - * idempotent. - */ -export async function applyCodeChangeSourcePatch( - options: ApplyCodeChangeSourcePatchOptions, -): Promise { - const request = assertPatchApplicationRequest(options); - const root = path.resolve(request.root); - const receiptPath = await assertPathWithinRoot(root, path.resolve(request.receiptPath)); - await ensureDir(path.dirname(receiptPath)); - const lock = await acquireApplyLock(receiptPath); - try { - const idempotentResult = await readExistingReceipt(receiptPath, request.patch, root); - if (idempotentResult) return idempotentResult; - - const prepared = await prepareSourceEdits(request.patch, root, receiptPath); - const now = (request.now ?? new Date()).toISOString(); - const receipt = await applyPreparedEdits(prepared, request.patch, request.approval.actor.trim(), now, receiptPath); - return { applied: true, idempotent: false, receipt }; - } finally { - await lock.lock.close(); - await fs.unlink(lock.path).catch(() => undefined); - } -} - -async function readExistingReceipt( - receiptPath: string, - patch: CodeChangeSourcePatch, - root: string, -): Promise { - if (!(await pathExists(receiptPath))) return null; - const existing = await readJson(receiptPath, 1024 * 1024); - await assertExistingSourceReceipt(existing, patch, root); - return { applied: false, idempotent: true, receipt: existing }; -} - -function assertPatchApplicationRequest( - options: ApplyCodeChangeSourcePatchOptions, -): NormalizedApplyCodeChangeSourcePatchRequest { - const patch = options.patch; - assertCodeChangeSourcePatch(patch); - assertPatchApprovalActor(options.approval); - assertPatchApprovalHash(patch, options.approval); - assertPatchEditsContainDiffs(patch); - const request: NormalizedApplyCodeChangeSourcePatchRequest = { - root: options.root, - patch: options.patch, - approval: options.approval, - receiptPath: options.receiptPath, - }; - if (options.now !== undefined) request.now = options.now; - return request; -} - -function assertPatchApprovalActor(approval: CodeChangeSourcePatchApproval): string { - if (!approval) { - throw new Error('Source patch approval object is required'); - } - if (!approval.actor?.trim()) { - throw new Error('Explicit source patch approval actor is required'); - } - return approval.actor.trim(); -} - -function assertPatchApprovalHash( - patch: CodeChangeSourcePatch, - approval: CodeChangeSourcePatchApproval, -): void { - if (approval.patchHash !== patch.patchHash) { - throw new Error('Source patch approval hash does not match the patch'); - } -} - -function assertPatchEditsContainDiffs(patch: CodeChangeSourcePatch): void { - for (const edit of patch.edits) { - if (edit.unifiedDiff === null) { - throw new Error(`Source patch edit ${edit.path} has no unifiedDiff and cannot be applied`); - } - } -} - -async function acquireApplyLock(receiptPath: string): Promise { - const lockPath = `${receiptPath}.t2c-apply.lock`; - try { - const lock = await fs.open(lockPath, 'wx'); - return { path: lockPath, lock }; - } catch (error) { - if ((error as NodeJS.ErrnoException).code === 'EEXIST') { - throw new Error('Another source patch apply operation is in progress'); - } - throw error; - } -} - -async function prepareSourceEdits( - patch: CodeChangeSourcePatch, - root: string, - receiptPath: string, -): Promise { - const prepared: PreparedSourceEdit[] = []; - for (const edit of patch.edits) { - const target = await prepareSourceEditTarget(edit, root, receiptPath); - const before = target.existed ? await readText(target.absolute, 16 * 1024 * 1024) : ''; - const after = applyUnifiedDiffToText(before, edit.unifiedDiff!, target.relative); - assertDeleteEditClearsAll(target.relative, edit.action, after); - prepared.push({ - ...target, - action: edit.action, - before, - after, - }); - } - return prepared; -} - -interface SourcePatchEditTarget { - relative: string; - absolute: string; - existed: boolean; -} - -async function prepareSourceEditTarget( - edit: CodeChangeSourceEdit, - root: string, - receiptPath: string, -): Promise { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - if (absolute === receiptPath) { - throw new Error(`Source patch target collides with its receipt path: ${relative}`); - } - const existed = await pathExists(absolute); - await assertSourcePatchTargetNotSymlink(absolute, existed, relative); - validatePatchTargetForEdit(edit.action, relative, existed, edit.unifiedDiff!); - return { relative, absolute, existed }; -} - -async function assertSourcePatchTargetNotSymlink( - absolute: string, - existed: boolean, - relative: string, -): Promise { - if (!existed) return; - if ((await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Refusing to apply through a symlink: ${relative}`); - } -} - -function assertDeleteEditClearsAll(relative: string, action: CodeChangeFileAction, after: string): void { - if (action === 'delete' && after !== '') { - throw new Error(`Source patch delete diff must remove the complete file: ${relative}`); - } -} - -function validatePatchTargetForEdit( - action: CodeChangeFileAction, - relative: string, - exists: boolean, - unifiedDiff: string, -): void { - if (action === 'create' && exists) throw new Error(`Source patch create target already exists: ${relative}`); - if (action === 'delete' && !exists) throw new Error(`Source patch delete target does not exist: ${relative}`); - if (action === 'modify' && !exists) { - const fromEmpty = /(?:^|\n)---\s+\/dev\/null(?:\n|$)/.test(unifiedDiff) - || /(?:^|\n)@@\s+-0(?:,0)?\s+\+/.test(unifiedDiff); - if (!fromEmpty) throw new Error(`Source patch modify target does not exist: ${relative}`); - } -} - -async function applyPreparedEdits( - prepared: PreparedSourceEdit[], - patch: CodeChangeSourcePatch, - approvedBy: string, - now: string, - receiptPath: string, -): Promise { - const changed: PreparedSourceEdit[] = []; - try { - await writePreparedEdits(prepared, changed); - const receipt = buildPatchApplyReceipt(prepared, patch, approvedBy, now); - assertSourceApplyReceipt(receipt, patch); - // The receipt is part of the transaction: without it a retry could apply - // the same approved patch again. Roll files back if persisting it fails. - await atomicWriteRaw(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`); - return receipt; - } catch (error) { - const rollbackErrors = await rollbackPreparedEdits(changed); - if (rollbackErrors.length) { - throw new Error(`Source patch apply failed (${String(error)}); rollback also failed: ${rollbackErrors.join('; ')}`); - } - throw error; - } -} - -async function writePreparedEdits(prepared: PreparedSourceEdit[], changed: PreparedSourceEdit[]): Promise { - for (const edit of prepared) { - if (edit.action === 'delete') await fs.unlink(edit.absolute); - else await atomicWriteRaw(edit.absolute, edit.after); - changed.push(edit); - } -} - -function buildPatchApplyReceipt( - prepared: PreparedSourceEdit[], - patch: CodeChangeSourcePatch, - approvedBy: string, - now: string, -): CodeChangeSourceApplyReceipt { - const fileHashesAfter = Object.fromEntries(prepared - .map((edit): [string, string] => [edit.relative, sha256(edit.after)]) - .sort(([left], [right]) => left.localeCompare(right))); - return { - schemaVersion: 't2c.code-change-source-apply-receipt/v1', - patchId: patch.id, - patchHash: patch.patchHash, - planId: patch.planId, - approvedBy, - approvedAt: now, - appliedAt: now, - appliedPaths: prepared.map((edit) => edit.relative).sort(), - fileHashesAfter, - generation: deterministicGeneration(now, 't2c/code-change-source-apply'), - }; -} - -async function rollbackPreparedEdits(changes: PreparedSourceEdit[]): Promise { - const rollbackErrors: string[] = []; - for (const edit of [...changes].reverse()) { - try { - if (edit.existed) await atomicWriteRaw(edit.absolute, edit.before); - else await fs.unlink(edit.absolute).catch((failure: NodeJS.ErrnoException) => { - if (failure.code !== 'ENOENT') throw failure; - }); - } catch (rollbackError) { - rollbackErrors.push(`${edit.relative}: ${String(rollbackError)}`); - } - } - return rollbackErrors; -} - -interface PreparedSourceEdit { - relative: string; - absolute: string; - action: CodeChangeFileAction; - before: string; - after: string; - existed: boolean; -} - -async function assertExistingSourceReceipt( - receipt: CodeChangeSourceApplyReceipt, - patch: CodeChangeSourcePatch, - root: string, -): Promise { - try { - assertSourceApplyReceipt(receipt, patch); - } catch { - throw new Error('A different or invalid source patch receipt already exists at the receipt path'); - } - for (const edit of patch.edits) { - const relative = edit.path.replace(/\\/g, '/'); - const absolute = await assertPathWithinRoot(root, path.resolve(root, relative)); - const exists = await pathExists(absolute); - if (edit.action === 'delete') { - if (exists) throw new Error(`Applied source patch state changed after receipt: ${relative}`); - continue; - } - if (!exists || (await fs.lstat(absolute)).isSymbolicLink()) { - throw new Error(`Applied source patch state changed after receipt: ${relative}`); - } - const current = await readText(absolute, 16 * 1024 * 1024); - if (receipt.fileHashesAfter[relative] !== sha256(current)) { - throw new Error(`Applied source patch state changed after receipt: ${relative}`); - } - } -} - -function assertSourceApplyReceipt(receipt: CodeChangeSourceApplyReceipt, patch: CodeChangeSourcePatch): void { - validateSourceApplyReceiptShape(receipt); - validateSourceApplyReceiptIdentity(receipt, patch); - validateSourceApplyReceiptTimestamps(receipt); - validateSourceApplyReceiptPathHashes(receipt, patch); - validateSourceApplyReceiptGeneration(receipt); -} - -function validateSourceApplyReceiptShape(receipt: CodeChangeSourceApplyReceipt): void { - exactSourcePatchKeys(receipt as unknown as Record, [ - 'schemaVersion', 'patchId', 'patchHash', 'planId', 'approvedBy', 'approvedAt', - 'appliedAt', 'appliedPaths', 'fileHashesAfter', 'generation', - ], 'Code change source apply receipt'); -} - -function validateSourceApplyReceiptIdentity( - receipt: CodeChangeSourceApplyReceipt, - patch: CodeChangeSourcePatch, -): void { - if (receipt.schemaVersion !== 't2c.code-change-source-apply-receipt/v1' - || receipt.patchId !== patch.id - || receipt.patchHash !== patch.patchHash - || receipt.planId !== patch.planId) { - throw new Error('Code change source apply receipt does not match its patch'); - } -} - -function validateSourceApplyReceiptTimestamps(receipt: CodeChangeSourceApplyReceipt): void { - if (!receipt.approvedBy.trim()) throw new Error('Code change source apply receipt approvedBy is required'); - if (!Number.isFinite(Date.parse(receipt.approvedAt)) || !Number.isFinite(Date.parse(receipt.appliedAt))) { - throw new Error('Code change source apply receipt timestamps must be ISO date-times'); - } -} - -function validateSourceApplyReceiptPathHashes( - receipt: CodeChangeSourceApplyReceipt, - patch: CodeChangeSourcePatch, -): void { - const expectedPaths = patch.edits.map((edit) => edit.path).sort(); - exactSourcePatchSet(receipt.appliedPaths, expectedPaths, 'receipt appliedPaths'); - const hashPaths = Object.keys(receipt.fileHashesAfter).sort(); - exactSourcePatchSet(hashPaths, expectedPaths, 'receipt fileHashesAfter paths'); - if (Object.values(receipt.fileHashesAfter).some((value) => !/^[a-f0-9]{64}$/.test(value))) { - throw new Error('Code change source apply receipt file hashes must be SHA-256'); - } -} - -function validateSourceApplyReceiptGeneration(receipt: CodeChangeSourceApplyReceipt): void { - assertGroundedGenerationMetadata(receipt.generation, 'Code change source apply receipt generation'); - if (receipt.generation.generatedAt !== receipt.appliedAt - || receipt.generation.generator !== 't2c/code-change-source-apply') { - throw new Error('Code change source apply receipt generation does not match the apply operation'); - } -} - -async function atomicWriteRaw(target: string, content: string): Promise { - await ensureDir(path.dirname(target)); - const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`; - try { - await fs.writeFile(temporary, content, 'utf8'); - await fs.rename(temporary, target); - } finally { - await fs.unlink(temporary).catch(() => undefined); - } -} - -/** - * Apply a single-file unified diff to a text buffer. - * Supports standard hunks with space/+/− prefixes. Throws on context mismatch. - */ -export function applyUnifiedDiffToText(base: string, diff: string, expectedPath: string): string { - const baseLines = splitKeep(base); - const hunks = parseUnifiedDiffIntoHunks(diff, expectedPath); - const output = applyUnifiedDiffHunks(baseLines, expectedPath, hunks); - // Reconstruct text. Files without a trailing newline end without an empty last segment. - return joinAppliedText(base.endsWith('\n'), output); -} - -function joinAppliedText(baseEndsWithNewline: boolean, lines: string[]): string { - if (baseEndsWithNewline || lines.length === 0) return `${lines.join('\n')}${lines.length ? '\n' : ''}`; - return lines.join('\n'); -} - -interface ParsedUnifiedDiffHunk { - oldStart: number; - oldCount: number; - newCount: number; - lines: string[]; -} - -function parseUnifiedDiffIntoHunks(diff: string, expectedPath: string): ParsedUnifiedDiffHunk[] { - const normalizedDiff = normalizeUnifiedDiff(diff, expectedPath); - const context = createEmptyUnifiedDiffContext(); - for (const line of parseUnifiedDiffLines(normalizedDiff)) { - applyUnifiedDiffLineToContext(context, line, expectedPath); - } - return finalizeUnifiedDiffContext(context, expectedPath); -} - -interface UnifiedDiffParsingContext { - current: ParsedUnifiedDiffHunk | null; - hunks: ParsedUnifiedDiffHunk[]; -} - -function createEmptyUnifiedDiffContext(): UnifiedDiffParsingContext { - return { current: null, hunks: [] }; -} - -function parseUnifiedDiffLines(diff: string): string[] { - return diff.split('\n'); -} - -function finalizeUnifiedDiffContext( - context: UnifiedDiffParsingContext, - expectedPath: string, -): ParsedUnifiedDiffHunk[] { - if (context.current) { - context.hunks.push(context.current); - context.current = null; - } - if (!context.hunks.length) { - throw new Error(`Unified diff for ${expectedPath} contains no hunks`); - } - return context.hunks; -} - -function applyUnifiedDiffLineToContext( - context: UnifiedDiffParsingContext, - line: string, - expectedPath: string, -): void { - const header = parseUnifiedDiffHeader(line); - if (header) { - if (context.current) { - context.hunks.push(context.current); - } - context.current = header; - return; - } - if (line.startsWith('---') || line.startsWith('+++') || line.startsWith('diff ') || line.startsWith('index ')) { - return; - } - if (!context.current) { - if (line === '') return; - throw new Error(`Unified diff for ${expectedPath} has content outside hunks`); - } - // Blank lines without a unified-diff prefix separate hunks in some emitters. - if (line === '') return; - context.current.lines.push(line); -} - -function parseUnifiedDiffHeader(line: string): ParsedUnifiedDiffHunk | null { - const match = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(line); - if (!match) return null; - return buildParsedUnifiedDiffHunk(match); -} - -function buildParsedUnifiedDiffHunk(match: RegExpMatchArray): ParsedUnifiedDiffHunk { - return { - oldStart: Number(match[1]), - oldCount: match[2] === undefined ? 1 : Number(match[2]), - newCount: match[4] === undefined ? 1 : Number(match[4]), - lines: [], - }; -} - -interface UnifiedDiffCursor { - position: number; -} - -function applyUnifiedDiffHunks( - baseLines: string[], - expectedPath: string, - hunks: ParsedUnifiedDiffHunk[], -): string[] { - const cursor: UnifiedDiffCursor = { position: 0 }; - const output: string[] = []; - for (const hunk of hunks) { - applyUnifiedDiffHunk(baseLines, expectedPath, cursor, output, hunk); - } - appendRemainingBaseLines(baseLines, cursor, output); - return output; -} - -function applyUnifiedDiffHunk( - baseLines: string[], - expectedPath: string, - cursor: UnifiedDiffCursor, - output: string[], - hunk: ParsedUnifiedDiffHunk, -): void { - const oldIndex = Math.max(0, hunk.oldStart - 1); - if (oldIndex < cursor.position) throw new Error(`Unified diff for ${expectedPath} has overlapping or unordered hunks`); - validateHunkCounts(expectedPath, hunk); - copyBaseLinesToCursor(baseLines, expectedPath, cursor, output, oldIndex); - for (const line of hunk.lines) { - if (line.startsWith('\\')) continue; // "\ No newline at end of file" - applyUnifiedDiffLine(expectedPath, line, cursor, baseLines, output); - } -} - -function copyBaseLinesToCursor( - baseLines: string[], - expectedPath: string, - cursor: UnifiedDiffCursor, - output: string[], - targetIndex: number, -): void { - while (cursor.position < targetIndex) { - if (cursor.position >= baseLines.length) throw new Error(`Unified diff for ${expectedPath} ran past end of file`); - output.push(baseLines[cursor.position]!); - cursor.position += 1; - } -} - -function appendRemainingBaseLines( - baseLines: string[], - cursor: UnifiedDiffCursor, - output: string[], -): void { - while (cursor.position < baseLines.length) { - output.push(baseLines[cursor.position]!); - cursor.position += 1; - } -} - -function validateHunkCounts(expectedPath: string, hunk: ParsedUnifiedDiffHunk): void { - const oldCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('-')).length; - const newCount = hunk.lines.filter((line) => line.startsWith(' ') || line.startsWith('+')).length; - if (oldCount !== hunk.oldCount || newCount !== hunk.newCount) { - throw new Error(`Unified diff hunk counts do not match its header for ${expectedPath}`); - } -} - -function applyUnifiedDiffLine( - expectedPath: string, - line: string, - cursor: UnifiedDiffCursor, - baseLines: string[], - output: string[], -): void { - const mark = line[0]; - const body = line.slice(1); - if (line === '') { - throw new Error(`Unified diff for ${expectedPath} has an unprefixed hunk line`); - } - if (mark === ' ') { - applyUnifiedDiffContextLine(expectedPath, body, cursor, baseLines, output); - return; - } - if (mark === '-') { - applyUnifiedDiffDeletionLine(expectedPath, body, cursor, baseLines); - return; - } - if (mark === '+') { - applyUnifiedDiffAdditionLine(body, output); - return; - } - throw new Error(`Unified diff for ${expectedPath} has unsupported hunk line`); -} - -function applyUnifiedDiffContextLine( - expectedPath: string, - body: string, - cursor: UnifiedDiffCursor, - baseLines: string[], - output: string[], -): void { - if (baseLines[cursor.position] !== body) { - throw new Error(`Unified diff context mismatch for ${expectedPath} at line ${cursor.position + 1}`); - } - output.push(baseLines[cursor.position]!); - cursor.position += 1; -} - -function applyUnifiedDiffDeletionLine( - expectedPath: string, - body: string, - cursor: UnifiedDiffCursor, - baseLines: string[], -): void { - if (baseLines[cursor.position] !== body) { - throw new Error(`Unified diff deletion mismatch for ${expectedPath} at line ${cursor.position + 1}`); - } - cursor.position += 1; -} - -function applyUnifiedDiffAdditionLine(body: string, output: string[]): void { - output.push(body); -} - -function splitKeep(text: string): string[] { - if (text === '') return []; - const lines = text.split('\n'); - if (text.endsWith('\n')) lines.pop(); - return lines; -} - -function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { - const actual = Object.keys(value).sort(); - const wanted = [...expected].sort(); - if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { - throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); - } -} - -function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { - const left = [...new Set(actual)].sort(); - const right = [...new Set(expected)].sort(); - if (left.length !== right.length || left.some((item, index) => item !== right[index])) { - throw new Error(`Source patch ${name} do not match the plan`); - } -} - -function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { - return { - generator, - generatorVersion: '1', - runtimeVersion: T2C_VERSION, - generatedAt, - requestedMode: 'deterministic', - effectiveMode: 'deterministic', - degraded: false, - model: null, - provider: null, - responseId: null, - configurationFingerprint: sha256(stableStringify({ - generator, - generatorVersion: '1', - codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), - })), - reason: null, - }; -} +export { + applyCodeChangeSourcePatch, + type ApplyCodeChangeSourcePatchOptions, + type ApplyCodeChangeSourcePatchResult, +} from './implementation-source-patch-apply-core.js'; +export { + applyUnifiedDiffToText, +} from './implementation-source-patch-apply-diff.js'; diff --git a/src/synthesis/code-change-plan/implementation-source-patch-assert.ts b/src/synthesis/code-change-plan/implementation-source-patch-assert.ts new file mode 100644 index 0000000..9186578 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-source-patch-assert.ts @@ -0,0 +1,397 @@ +import { assertCodeChangePlansForReview, assertGroundedGenerationMetadata } from '../../core/schema.js'; +import { + createCodeChangeSourcePatchHash, + createCodeChangeSourcePatchId, +} from '../../core/id.js'; +import type { + CodeChangeFileAction, + CodeChangePlan, + CodeChangeSourceEdit, + CodeChangeSourcePatch, + CodeChangeSourcePatchSet, +} from '../../core/types.js'; +import { normalizeUnifiedDiff } from './implementation-source-patch-diff.js'; + +export function assertCodeChangeSourcePatch( + value: unknown, + plan?: CodeChangePlan, +): asserts value is CodeChangeSourcePatch { + const patch = assertCodeChangeSourcePatchObject(value, plan); + validateSourcePatchSchema(patch); + validateSourcePatchIdentifiers(patch); + const editPaths = validateSourcePatchEdits(patch); + validateSourcePatchHashAndId(patch); + validateSourcePatchGeneration(patch); + if (plan) { + validateSourcePatchAgainstPlan(patch, plan, editPaths); + } +} + +function assertCodeChangeSourcePatchObject(value: unknown, plan?: CodeChangePlan): CodeChangeSourcePatch { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change source patch must be an object'); + } + const patch = value as CodeChangeSourcePatch; + exactSourcePatchKeys(patch as unknown as Record, [ + 'schemaVersion', 'id', 'patchHash', 'status', 'createdAt', 'planId', 'planHash', + 'graphFingerprint', 'diagnosticIds', 'recordIds', 'edits', 'acceptanceCriteria', 'generation', + ], 'Source patch'); + if (plan !== undefined && typeof patch.planId === 'string' && patch.id) { + if (patch.planId !== plan.id) { + throw new Error('Source patch is not bound to the supplied plan'); + } + } + return patch; +} + +function validateSourcePatchSchema(patch: CodeChangeSourcePatch): void { + if (patch.schemaVersion !== 't2c.code-change-source-patch/v1') { + throw new Error('Unsupported code change source patch schemaVersion'); + } + if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { + throw new Error('Source patch createdAt must be an ISO date-time'); + } + if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); + if (!Array.isArray(patch.edits) || patch.edits.length === 0) { + throw new Error('Source patch edits must be a non-empty array'); + } +} + +function validateSourcePatchIdentifiers(patch: CodeChangeSourcePatch): void { + if (typeof patch.id !== 'string' || !/^SPATCH-[a-f0-9]{20}$/.test(patch.id)) { + throw new Error('Source patch id must match SPATCH-<20 hex>'); + } + if (typeof patch.patchHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.patchHash)) { + throw new Error('Source patch patchHash must be SHA-256'); + } + if (typeof patch.planId !== 'string' || !/^CPLAN-[a-f0-9]{20}$/.test(patch.planId)) { + throw new Error('Source patch planId must match CPLAN-<20 hex>'); + } + if (typeof patch.planHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.planHash)) { + throw new Error('Source patch planHash must be SHA-256'); + } + if (typeof patch.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(patch.graphFingerprint)) { + throw new Error('Source patch graphFingerprint must be SHA-256'); + } + assertSourcePatchIds(patch.diagnosticIds, /^DIAG-[a-f0-9]{20}$/, 'diagnosticIds'); + assertSourcePatchIds(patch.recordIds, /^INT-[A-Z]+-[a-f0-9]{20}$/, 'recordIds'); + assertSourcePatchStrings(patch.acceptanceCriteria, 'acceptanceCriteria', false); +} + +function validateSourcePatchEdits(patch: CodeChangeSourcePatch): Set { + return collectSourcePatchEditPathActions(patch.edits); +} + +function collectSourcePatchEditPathActions(edits: CodeChangeSourceEdit[]): Set { + const paths = new Set(); + for (const edit of edits) { + const editContext = validateSourcePatchEdit(edit, paths); + paths.add(editContext.pathActionKey); + } + return paths; +} + +interface SourcePatchEditValidationContext { + pathActionKey: string; +} + +function validateSourcePatchEdit( + edit: CodeChangeSourceEdit, + seen: Set, +): SourcePatchEditValidationContext { + const normalizedEdit = assertSourcePatchEditObject(edit); + const normalizedPath = normalizeSourcePatchEditPath(normalizedEdit.path); + validateSourcePatchEditBody(normalizedEdit, normalizedPath); + validateSourcePatchEditDiff(normalizedEdit.unifiedDiff, normalizedPath); + assertUniqueSourcePatchEditPathAction(seen, normalizedPath, normalizedEdit.action); + const pathActionKey = `${normalizedPath}::${normalizedEdit.action}`; + return { pathActionKey }; +} + +function assertSourcePatchEditObject(edit: CodeChangeSourceEdit | unknown): { + path: unknown; + action: unknown; + symbols: unknown; + instruction: unknown; + unifiedDiff: string | null; +} { + if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); + exactSourcePatchKeys(edit as unknown as Record, [ + 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', + ], 'Source patch edit'); + return edit as { + path: unknown; + action: unknown; + symbols: unknown; + instruction: unknown; + unifiedDiff: string | null; + }; +} + +function validateSourcePatchEditBody( + edit: { + path: unknown; + action: unknown; + symbols: unknown; + instruction: unknown; + unifiedDiff: string | null; + }, + normalizedPath: string, +): void { + ensureSourcePatchEditAction(edit.action); + ensureSourcePatchEditInstruction(edit.instruction); + assertSourcePatchStrings(edit.symbols, `edits[${normalizedPath}].symbols`, true); +} + +function validateSourcePatchEditDiff(unifiedDiff: string | null, normalizedPath: string): void { + if (unifiedDiff === null) return; + if (typeof unifiedDiff !== 'string') { + throw new Error(`Source patch unifiedDiff for ${normalizedPath} must be string or null`); + } + normalizeUnifiedDiff(unifiedDiff, normalizedPath); +} + +function assertUniqueSourcePatchEditPathAction( + seen: Set, + normalizedPath: string, + action: unknown, +): void { + const pathActionKey = `${normalizedPath}::${action}`; + if (seen.has(pathActionKey)) throw new Error(`Duplicate source patch edit for ${normalizedPath}`); +} + +function normalizeSourcePatchEditPath(pathValue: unknown): string { + const normalizedPath = (typeof pathValue === 'string' ? pathValue.trim() : '').replace(/\\/g, '/'); + if (!normalizedPath || normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..')) { + throw new Error(`Source patch edit path is not a relative repository path: ${normalizedPath}`); + } + return normalizedPath; +} + +function ensureSourcePatchEditAction(action: unknown): void { + if (!['create', 'modify', 'delete'].includes(action as string) || typeof action !== 'string') { + throw new Error(`Source patch edit action is unsupported: ${String(action)}`); + } +} + +function ensureSourcePatchEditInstruction(instruction: unknown): void { + if (typeof instruction !== 'string' || !instruction.trim()) { + throw new Error('Source patch edit instruction must be non-blank'); + } +} + +function validateSourcePatchHashAndId(patch: CodeChangeSourcePatch): void { + const expectedHash = createCodeChangeSourcePatchHash(patch); + if (patch.patchHash !== expectedHash) { + throw new Error(`Source patch patchHash does not match semantic content: expected ${expectedHash}`); + } + if (patch.id !== createCodeChangeSourcePatchId(patch)) { + throw new Error('Source patch id does not match semantic content'); + } +} + +function validateSourcePatchGeneration(patch: CodeChangeSourcePatch): void { + assertGroundedGenerationMetadata(patch.generation, 'Source patch generation'); + if (patch.generation.generatedAt !== patch.createdAt) { + throw new Error('Source patch generation.generatedAt must match createdAt'); + } + if (patch.generation.generator !== 't2c/code-change-source-patch') { + throw new Error('Source patch generation.generator must be t2c/code-change-source-patch'); + } +} + +function validateSourcePatchAgainstPlan( + patch: CodeChangeSourcePatch, + plan: CodeChangePlan, + editPaths: Set, +): void { + assertSourcePatchPlanBinding(patch, plan); + const expectedChanges = collectExpectedPlanChanges(plan); + validateSourcePatchEditsAgainstPlan(patch, plan, expectedChanges); + validateSourcePatchEvidence(patch, plan, expectedChanges, editPaths); +} + +function assertSourcePatchPlanBinding(patch: CodeChangeSourcePatch, plan: CodeChangePlan): void { + if (patch.planHash !== plan.planHash) throw new Error('Source patch is not bound to the supplied plan'); + if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { + throw new Error('Source patch graphFingerprint does not match the plan'); + } +} + +function collectExpectedPlanChanges(plan: CodeChangePlan): Map { + return new Map(plan.changes.map((item) => [ + item.path.replace(/\\/g, '/'), item.action, + ])); +} + +function validateSourcePatchEditsAgainstPlan( + patch: CodeChangeSourcePatch, + plan: CodeChangePlan, + expectedChanges: Map, +): void { + const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); + for (const edit of patch.edits) { + const editPath = edit.path.replace(/\\/g, '/'); + if (!allowed.has(editPath)) { + throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); + } + if (expectedChanges.get(editPath) !== edit.action) { + throw new Error(`Source patch action for ${edit.path} does not match the plan`); + } + } +} + +function validateSourcePatchEvidence( + patch: CodeChangeSourcePatch, + plan: CodeChangePlan, + expectedChangePaths: Map, + editPaths: Set, +): void { + const actualEditPaths = [...editPaths].map((item) => { + const marker = item.indexOf('::'); + return marker === -1 ? item : item.slice(0, marker); + }); + const expectedPaths = [...expectedChangePaths.keys()]; + exactSourcePatchSet(actualEditPaths, expectedPaths, 'edit paths'); + exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); + exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); + exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); +} + +export function assertCodeChangeSourcePatchSet( + value: unknown, + plans?: CodeChangePlan[], +): asserts value is CodeChangeSourcePatchSet { + const set = assertSourcePatchSetObject(value); + const context = createSourcePatchSetValidationContext(plans); + validateSourcePatchSetSchema(set); + validateSourcePatchSetPatches(set, context); + validateSourcePatchSetGeneration(set); +} + +interface SourcePatchSetValidationContext { + plansById: Map; + expectedPlanIds: string[] | null; +} + +function createSourcePatchSetValidationContext(plans?: CodeChangePlan[]): SourcePatchSetValidationContext { + const expectedPlanIds = plans?.map((plan) => plan.id) ?? null; + return { + plansById: new Map((plans ?? []).map((plan) => [plan.id, plan])), + expectedPlanIds, + }; +} + +function assertSourcePatchSetObject(value: unknown): CodeChangeSourcePatchSet { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error('Code change source patch set must be an object'); + } + const set = value as CodeChangeSourcePatchSet; + exactSourcePatchKeys(set as unknown as Record, [ + 'schemaVersion', 'generatedAt', 'graphFingerprint', 'patches', 'generation', + ], 'Source patch set'); + return set; +} + +function validateSourcePatchSetSchema(set: CodeChangeSourcePatchSet): void { + if (set.schemaVersion !== 't2c.code-change-source-patch-set/v1') { + throw new Error('Unsupported code change source patch set schemaVersion'); + } + if (typeof set.generatedAt !== 'string' || Number.isNaN(Date.parse(set.generatedAt))) { + throw new Error('Source patch set generatedAt must be an ISO date-time'); + } + if (typeof set.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(set.graphFingerprint)) { + throw new Error('Source patch set graphFingerprint must be SHA-256'); + } + if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); +} + +function validateSourcePatchSetPatches( + set: CodeChangeSourcePatchSet, + context: SourcePatchSetValidationContext, +): void { + const patchIds = new Set(); + for (const patch of set.patches) { + validateSetPatchAndTrackDuplicates(set, patch, context, patchIds); + } + validateSetPatchesPlanCoverage(set, context.expectedPlanIds); +} + +function validateSetPatchAndTrackDuplicates( + set: CodeChangeSourcePatchSet, + patch: CodeChangeSourcePatch, + context: SourcePatchSetValidationContext, + patchIds: Set, +): void { + const expectedPlan = context.plansById.get(patch.planId); + assertCodeChangeSourcePatch(patch, expectedPlan); + validateSetPatchGraphFingerprint(set, patch); + assertUniqueSetPatchId(patchIds, patch.id); + patchIds.add(patch.id); +} + +function validateSetPatchGraphFingerprint( + set: CodeChangeSourcePatchSet, + patch: CodeChangeSourcePatch, +): void { + if (patch.graphFingerprint !== set.graphFingerprint) { + throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); + } +} + +function assertUniqueSetPatchId( + patchIds: Set, + patchId: string, +): void { + if (patchIds.has(patchId)) throw new Error(`Duplicate source patch id: ${patchId}`); +} + +function validateSetPatchesPlanCoverage( + set: CodeChangeSourcePatchSet, + expectedPlanIds: string[] | null, +): void { + if (!expectedPlanIds) return; + exactSourcePatchSet(set.patches.map((patch) => patch.planId), expectedPlanIds, 'planIds'); +} + +function validateSourcePatchSetGeneration(set: CodeChangeSourcePatchSet): void { + assertGroundedGenerationMetadata(set.generation, 'Source patch set generation'); + if (set.generation.generatedAt !== set.generatedAt) { + throw new Error('Source patch set generation.generatedAt must match generatedAt'); + } + if (set.generation.generator !== 't2c/code-change-source-patch-set') { + throw new Error('Source patch set generation.generator must be t2c/code-change-source-patch-set'); + } +} + +function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { + const actual = Object.keys(value).sort(); + const wanted = [...expected].sort(); + if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { + throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); + } +} + +function assertSourcePatchIds(value: unknown, pattern: RegExp, name: string): asserts value is string[] { + if (!Array.isArray(value) || value.length === 0 + || value.some((item) => typeof item !== 'string' || !pattern.test(item))) { + throw new Error(`Source patch ${name} must be a non-empty array of valid IDs`); + } + if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); +} + +function assertSourcePatchStrings(value: unknown, name: string, emptyAllowed: boolean): asserts value is string[] { + if (!Array.isArray(value) || (!emptyAllowed && value.length === 0) + || value.some((item) => typeof item !== 'string' || !item.trim())) { + throw new Error(`Source patch ${name} must contain ${emptyAllowed ? 'only ' : ''}non-blank strings`); + } + if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); +} + +function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { + const left = [...new Set(actual)].sort(); + const right = [...new Set(expected)].sort(); + if (left.length !== right.length || left.some((item, index) => item !== right[index])) { + throw new Error(`Source patch ${name} do not match the plan`); + } +} diff --git a/src/synthesis/code-change-plan/implementation-source-patch-create.ts b/src/synthesis/code-change-plan/implementation-source-patch-create.ts new file mode 100644 index 0000000..98d7ce4 --- /dev/null +++ b/src/synthesis/code-change-plan/implementation-source-patch-create.ts @@ -0,0 +1,235 @@ +import { + createCodeChangeSourcePatchHash, + createCodeChangeSourcePatchId, + sha256, + stableStringify, +} from '../../core/id.js'; +import { assertCodeChangePlansForReview } from '../../core/schema.js'; +import { T2C_VERSION } from '../../version.js'; +import { IMPLEMENTATION_DIAGNOSTIC_CODES } from './implementation-diagnostics.js'; +import { normalizeUnifiedDiff } from './implementation-source-patch-diff.js'; +import type { + CodeChangeFile, + CodeChangePlan, + CodeChangeSourceEdit, + CodeChangeSourcePatch, + CodeChangeSourcePatchSet, + GroundedGenerationMetadata, +} from '../../core/types.js'; +import { + assertCodeChangeSourcePatch, + assertCodeChangeSourcePatchSet, +} from './implementation-source-patch-assert.js'; + +export interface CreateCodeChangeSourcePatchOptions { + plan: CodeChangePlan; + /** Optional per-path unified diffs keyed by relative repository path. */ + unifiedDiffs?: Record; + createdAt?: string; +} + +/** + * Build a structured source-edit proposal from one grounded code-change plan. + * + * Deterministic by default: each planned file gets an imperative instruction. + * Callers may attach a unified diff per path; the runtime validates path headers + * and rejects traversal / host paths. Nothing is written to the working tree. + */ +export function createCodeChangeSourcePatch( + options: CreateCodeChangeSourcePatchOptions, +): CodeChangeSourcePatch { + const context = buildSourcePatchContext(options); + const edits = buildSourcePatchEdits(context); + const semantic = buildSourcePatchSemantic(context, edits); + const patchHash = createCodeChangeSourcePatchHash(semantic); + const patch: CodeChangeSourcePatch = { + schemaVersion: 't2c.code-change-source-patch/v1', + id: createCodeChangeSourcePatchId(semantic), + patchHash, + status: 'proposed', + createdAt: context.createdAt, + ...semantic, + generation: deterministicGeneration(context.createdAt, 't2c/code-change-source-patch'), + }; + assertCodeChangeSourcePatch(patch, context.plan); + return patch; +} + +interface SourcePatchCreationContext { + plan: CodeChangePlan; + createdAt: string; + allowedPaths: Set; + diffs: Record; +} + +function buildSourcePatchContext(options: CreateCodeChangeSourcePatchOptions): SourcePatchCreationContext { + const { plan, unifiedDiffs = {} } = options; + const graphFingerprint = plan?.evidence?.graphFingerprint; + assertCodeChangePlansForReview( + [plan], + typeof graphFingerprint === 'string' ? graphFingerprint : '', + ); + const createdAt = options.createdAt ?? new Date().toISOString(); + if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); + const allowedPaths = collectPlanTargetPaths(plan.target.paths); + validateUnifiedDiffsBelongToPlan(plan.id, unifiedDiffs, allowedPaths); + return { plan, createdAt, allowedPaths, diffs: unifiedDiffs }; +} + +function collectPlanTargetPaths(paths: string[]): Set { + return new Set(paths.map((item) => item.replace(/\\/g, '/'))); +} + +function validateUnifiedDiffsBelongToPlan( + planId: string, + diffs: Record, + allowedPaths: Set, +): void { + for (const diffPath of Object.keys(diffs)) { + const normalizedPath = diffPath.replace(/\\/g, '/'); + if (!allowedPaths.has(normalizedPath)) { + throw new Error(`Unified diff path ${normalizedPath} is not declared by plan ${planId}`); + } + } +} + +function buildSourcePatchEdits(context: SourcePatchCreationContext): CodeChangeSourceEdit[] { + const edits: CodeChangeSourceEdit[] = context.plan.changes + .map((change) => buildSourcePatchEdit(context, change)) + .sort((left, right) => left.path.localeCompare(right.path) || left.action.localeCompare(right.action)); + if (!edits.length) throw new Error(`Plan ${context.plan.id} has no editable paths`); + return edits; +} + +function buildSourcePatchEdit( + context: SourcePatchCreationContext, + change: CodeChangeFile, +): CodeChangeSourceEdit { + const path = change.path.replace(/\\/g, '/'); + if (!context.allowedPaths.has(path)) { + throw new Error(`Edit path ${path} is not present in plan target.paths`); + } + const rawDiff = context.diffs[path]; + const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); + return { + path, + action: change.action, + symbols: uniqueSorted(change.symbols), + instruction: instructionFor(change, context.plan), + unifiedDiff, + }; +} + +function buildSourcePatchSemantic( + context: SourcePatchCreationContext, + edits: CodeChangeSourceEdit[], +): Omit { + return { + planId: context.plan.id, + planHash: context.plan.planHash, + graphFingerprint: context.plan.evidence.graphFingerprint, + diagnosticIds: uniqueSorted(context.plan.evidence.diagnosticIds), + recordIds: uniqueSorted(context.plan.evidence.recordIds), + edits, + acceptanceCriteria: uniqueSorted(context.plan.acceptanceCriteria), + }; +} + +export function createCodeChangeSourcePatchSet(options: { + plans: CodeChangePlan[]; + graphFingerprint: string; + unifiedDiffsByPlanId?: Record>; + generatedAt?: string; +}): CodeChangeSourcePatchSet { + const context = normalizePatchSetOptions(options); + const patches = buildPatchesForSet(context); + const result = buildSourcePatchSet(context, patches); + assertCodeChangeSourcePatchSet(result, options.plans); + return result; +} + +interface SourcePatchSetBuildContext { + plans: CodeChangePlan[]; + graphFingerprint: string; + generatedAt: string; + unifiedDiffsByPlanId: Record>; +} + +function normalizePatchSetOptions( + options: { + plans: CodeChangePlan[]; + graphFingerprint: string; + unifiedDiffsByPlanId?: Record>; + generatedAt?: string; + }, +): SourcePatchSetBuildContext { + if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { + throw new Error('graphFingerprint must be a SHA-256 hex digest'); + } + assertCodeChangePlansForReview(options.plans, options.graphFingerprint); + const generatedAt = options.generatedAt ?? new Date().toISOString(); + return { + plans: options.plans, + graphFingerprint: options.graphFingerprint, + generatedAt, + unifiedDiffsByPlanId: options.unifiedDiffsByPlanId ?? {}, + }; +} + +function buildPatchesForSet(context: SourcePatchSetBuildContext): CodeChangeSourcePatch[] { + return [...context.plans] + .sort((left, right) => left.id.localeCompare(right.id)) + .map((plan) => createCodeChangeSourcePatch({ + plan, + createdAt: context.generatedAt, + ...(context.unifiedDiffsByPlanId[plan.id] ? { unifiedDiffs: context.unifiedDiffsByPlanId[plan.id] } : {}), + })); +} + +function buildSourcePatchSet( + context: SourcePatchSetBuildContext, + patches: CodeChangeSourcePatch[], +): CodeChangeSourcePatchSet { + return { + schemaVersion: 't2c.code-change-source-patch-set/v1', + generatedAt: context.generatedAt, + graphFingerprint: context.graphFingerprint, + patches, + generation: deterministicGeneration(context.generatedAt, 't2c/code-change-source-patch-set'), + }; +} + +function instructionFor(change: CodeChangeFile, plan: CodeChangePlan): string { + const symbols = change.symbols.length + ? ` Focus on symbols: ${change.symbols.join(', ')}.` + : ''; + const criteria = plan.acceptanceCriteria.length + ? ` Acceptance: ${plan.acceptanceCriteria.join(' ')}` + : ''; + return `${change.action} \`${change.path}\`. ${change.rationale.trim()}.${symbols}${criteria}`.replace(/\s+/g, ' ').trim(); +} + +function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { + return { + generator, + generatorVersion: '1', + runtimeVersion: T2C_VERSION, + generatedAt, + requestedMode: 'deterministic', + effectiveMode: 'deterministic', + degraded: false, + model: null, + provider: null, + responseId: null, + configurationFingerprint: sha256(stableStringify({ + generator, + generatorVersion: '1', + codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), + })), + reason: null, + }; +} + +function uniqueSorted(values: string[]): string[] { + return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); +} diff --git a/src/synthesis/code-change-plan/implementation-source-patch.ts b/src/synthesis/code-change-plan/implementation-source-patch.ts index 26d5ea9..5df7078 100644 --- a/src/synthesis/code-change-plan/implementation-source-patch.ts +++ b/src/synthesis/code-change-plan/implementation-source-patch.ts @@ -1,616 +1,9 @@ -import { - createCodeChangeSourcePatchHash, - createCodeChangeSourcePatchId, - sha256, - stableStringify, -} from '../../core/id.js'; -import { assertCodeChangePlansForReview, assertGroundedGenerationMetadata } from '../../core/schema.js'; -import { T2C_VERSION } from '../../version.js'; -import { IMPLEMENTATION_DIAGNOSTIC_CODES } from './implementation-diagnostics.js'; -import { normalizeUnifiedDiff } from './implementation-source-patch-diff.js'; -import type { - CodeChangeFile, - CodeChangeFileAction, - CodeChangePlan, - CodeChangeSourceEdit, - CodeChangeSourcePatch, - CodeChangeSourcePatchSet, - GroundedGenerationMetadata, -} from '../../core/types.js'; - -export interface CreateCodeChangeSourcePatchOptions { - plan: CodeChangePlan; - /** Optional per-path unified diffs keyed by relative repository path. */ - unifiedDiffs?: Record; - createdAt?: string; -} - -/** - * Build a structured source-edit proposal from one grounded code-change plan. - * - * Deterministic by default: each planned file gets an imperative instruction. - * Callers may attach a unified diff per path; the runtime validates path headers - * and rejects traversal / host paths. Nothing is written to the working tree. - */ -export function createCodeChangeSourcePatch( - options: CreateCodeChangeSourcePatchOptions, -): CodeChangeSourcePatch { - const context = buildSourcePatchContext(options); - const edits = buildSourcePatchEdits(context); - const semantic = buildSourcePatchSemantic(context, edits); - const patchHash = createCodeChangeSourcePatchHash(semantic); - const patch: CodeChangeSourcePatch = { - schemaVersion: 't2c.code-change-source-patch/v1', - id: createCodeChangeSourcePatchId(semantic), - patchHash, - status: 'proposed', - createdAt: context.createdAt, - ...semantic, - generation: deterministicGeneration(context.createdAt, 't2c/code-change-source-patch'), - }; - assertCodeChangeSourcePatch(patch, context.plan); - return patch; -} - -interface SourcePatchCreationContext { - plan: CodeChangePlan; - createdAt: string; - allowedPaths: Set; - diffs: Record; -} - -function buildSourcePatchContext(options: CreateCodeChangeSourcePatchOptions): SourcePatchCreationContext { - const { plan, unifiedDiffs = {} } = options; - const graphFingerprint = plan?.evidence?.graphFingerprint; - assertCodeChangePlansForReview( - [plan], - typeof graphFingerprint === 'string' ? graphFingerprint : '', - ); - const createdAt = options.createdAt ?? new Date().toISOString(); - if (Number.isNaN(Date.parse(createdAt))) throw new Error('createdAt must be an ISO date-time'); - const allowedPaths = collectPlanTargetPaths(plan.target.paths); - validateUnifiedDiffsBelongToPlan(plan.id, unifiedDiffs, allowedPaths); - return { plan, createdAt, allowedPaths, diffs: unifiedDiffs }; -} - -function collectPlanTargetPaths(paths: string[]): Set { - return new Set(paths.map((item) => item.replace(/\\/g, '/'))); -} - -function validateUnifiedDiffsBelongToPlan( - planId: string, - diffs: Record, - allowedPaths: Set, -): void { - for (const diffPath of Object.keys(diffs)) { - const normalizedPath = diffPath.replace(/\\/g, '/'); - if (!allowedPaths.has(normalizedPath)) { - throw new Error(`Unified diff path ${normalizedPath} is not declared by plan ${planId}`); - } - } -} - -function buildSourcePatchEdits(context: SourcePatchCreationContext): CodeChangeSourceEdit[] { - const edits: CodeChangeSourceEdit[] = context.plan.changes - .map((change) => buildSourcePatchEdit(context, change)) - .sort((left, right) => left.path.localeCompare(right.path) || left.action.localeCompare(right.action)); - if (!edits.length) throw new Error(`Plan ${context.plan.id} has no editable paths`); - return edits; -} - -function buildSourcePatchEdit( - context: SourcePatchCreationContext, - change: CodeChangeFile, -): CodeChangeSourceEdit { - const path = change.path.replace(/\\/g, '/'); - if (!context.allowedPaths.has(path)) { - throw new Error(`Edit path ${path} is not present in plan target.paths`); - } - const rawDiff = context.diffs[path]; - const unifiedDiff = rawDiff === undefined ? null : normalizeUnifiedDiff(rawDiff, path); - return { - path, - action: change.action, - symbols: uniqueSorted(change.symbols), - instruction: instructionFor(change, context.plan), - unifiedDiff, - }; -} - -function buildSourcePatchSemantic( - context: SourcePatchCreationContext, - edits: CodeChangeSourceEdit[], -): Omit { - return { - planId: context.plan.id, - planHash: context.plan.planHash, - graphFingerprint: context.plan.evidence.graphFingerprint, - diagnosticIds: uniqueSorted(context.plan.evidence.diagnosticIds), - recordIds: uniqueSorted(context.plan.evidence.recordIds), - edits, - acceptanceCriteria: uniqueSorted(context.plan.acceptanceCriteria), - }; -} - -export function createCodeChangeSourcePatchSet(options: { - plans: CodeChangePlan[]; - graphFingerprint: string; - unifiedDiffsByPlanId?: Record>; - generatedAt?: string; -}): CodeChangeSourcePatchSet { - const context = normalizePatchSetOptions(options); - const patches = buildPatchesForSet(context); - const result = buildSourcePatchSet(context, patches); - assertCodeChangeSourcePatchSet(result, options.plans); - return result; -} - -interface SourcePatchSetBuildContext { - plans: CodeChangePlan[]; - graphFingerprint: string; - generatedAt: string; - unifiedDiffsByPlanId: Record>; -} - -function normalizePatchSetOptions( - options: { - plans: CodeChangePlan[]; - graphFingerprint: string; - unifiedDiffsByPlanId?: Record>; - generatedAt?: string; - }, -): SourcePatchSetBuildContext { - if (typeof options.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(options.graphFingerprint)) { - throw new Error('graphFingerprint must be a SHA-256 hex digest'); - } - assertCodeChangePlansForReview(options.plans, options.graphFingerprint); - const generatedAt = options.generatedAt ?? new Date().toISOString(); - return { - plans: options.plans, - graphFingerprint: options.graphFingerprint, - generatedAt, - unifiedDiffsByPlanId: options.unifiedDiffsByPlanId ?? {}, - }; -} - -function buildPatchesForSet(context: SourcePatchSetBuildContext): CodeChangeSourcePatch[] { - return [...context.plans] - .sort((left, right) => left.id.localeCompare(right.id)) - .map((plan) => createCodeChangeSourcePatch({ - plan, - createdAt: context.generatedAt, - ...(context.unifiedDiffsByPlanId[plan.id] ? { unifiedDiffs: context.unifiedDiffsByPlanId[plan.id] } : {}), - })); -} - -function buildSourcePatchSet( - context: SourcePatchSetBuildContext, - patches: CodeChangeSourcePatch[], -): CodeChangeSourcePatchSet { - return { - schemaVersion: 't2c.code-change-source-patch-set/v1', - generatedAt: context.generatedAt, - graphFingerprint: context.graphFingerprint, - patches, - generation: deterministicGeneration(context.generatedAt, 't2c/code-change-source-patch-set'), - }; -} - -export function assertCodeChangeSourcePatch( - value: unknown, - plan?: CodeChangePlan, -): asserts value is CodeChangeSourcePatch { - const patch = assertCodeChangeSourcePatchObject(value, plan); - validateSourcePatchSchema(patch); - validateSourcePatchIdentifiers(patch); - const editPaths = validateSourcePatchEdits(patch); - validateSourcePatchHashAndId(patch); - validateSourcePatchGeneration(patch); - if (plan) { - validateSourcePatchAgainstPlan(patch, plan, editPaths); - } -} - -function assertCodeChangeSourcePatchObject(value: unknown, plan?: CodeChangePlan): CodeChangeSourcePatch { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change source patch must be an object'); - } - const patch = value as CodeChangeSourcePatch; - exactSourcePatchKeys(patch as unknown as Record, [ - 'schemaVersion', 'id', 'patchHash', 'status', 'createdAt', 'planId', 'planHash', - 'graphFingerprint', 'diagnosticIds', 'recordIds', 'edits', 'acceptanceCriteria', 'generation', - ], 'Source patch'); - if (plan !== undefined && typeof patch.planId === 'string' && patch.id) { - if (patch.planId !== plan.id) { - throw new Error('Source patch is not bound to the supplied plan'); - } - } - return patch; -} - -function validateSourcePatchSchema(patch: CodeChangeSourcePatch): void { - if (patch.schemaVersion !== 't2c.code-change-source-patch/v1') { - throw new Error('Unsupported code change source patch schemaVersion'); - } - if (typeof patch.createdAt !== 'string' || Number.isNaN(Date.parse(patch.createdAt))) { - throw new Error('Source patch createdAt must be an ISO date-time'); - } - if (patch.status !== 'proposed') throw new Error('Source patch status must be proposed'); - if (!Array.isArray(patch.edits) || patch.edits.length === 0) { - throw new Error('Source patch edits must be a non-empty array'); - } -} - -function validateSourcePatchIdentifiers(patch: CodeChangeSourcePatch): void { - if (typeof patch.id !== 'string' || !/^SPATCH-[a-f0-9]{20}$/.test(patch.id)) { - throw new Error('Source patch id must match SPATCH-<20 hex>'); - } - if (typeof patch.patchHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.patchHash)) { - throw new Error('Source patch patchHash must be SHA-256'); - } - if (typeof patch.planId !== 'string' || !/^CPLAN-[a-f0-9]{20}$/.test(patch.planId)) { - throw new Error('Source patch planId must match CPLAN-<20 hex>'); - } - if (typeof patch.planHash !== 'string' || !/^[a-f0-9]{64}$/.test(patch.planHash)) { - throw new Error('Source patch planHash must be SHA-256'); - } - if (typeof patch.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(patch.graphFingerprint)) { - throw new Error('Source patch graphFingerprint must be SHA-256'); - } - assertSourcePatchIds(patch.diagnosticIds, /^DIAG-[a-f0-9]{20}$/, 'diagnosticIds'); - assertSourcePatchIds(patch.recordIds, /^INT-[A-Z]+-[a-f0-9]{20}$/, 'recordIds'); - assertSourcePatchStrings(patch.acceptanceCriteria, 'acceptanceCriteria', false); -} - -function validateSourcePatchEdits(patch: CodeChangeSourcePatch): Set { - return collectSourcePatchEditPathActions(patch.edits); -} - -function collectSourcePatchEditPathActions(edits: CodeChangeSourceEdit[]): Set { - const paths = new Set(); - for (const edit of edits) { - const editContext = validateSourcePatchEdit(edit, paths); - paths.add(editContext.pathActionKey); - } - return paths; -} - -interface SourcePatchEditValidationContext { - pathActionKey: string; -} - -function validateSourcePatchEdit( - edit: CodeChangeSourceEdit, - seen: Set, -): SourcePatchEditValidationContext { - const normalizedEdit = assertSourcePatchEditObject(edit); - const normalizedPath = normalizeSourcePatchEditPath(normalizedEdit.path); - validateSourcePatchEditBody(normalizedEdit, normalizedPath); - validateSourcePatchEditDiff(normalizedEdit.unifiedDiff, normalizedPath); - assertUniqueSourcePatchEditPathAction(seen, normalizedPath, normalizedEdit.action); - const pathActionKey = `${normalizedPath}::${normalizedEdit.action}`; - return { pathActionKey }; -} - -function assertSourcePatchEditObject(edit: CodeChangeSourceEdit | unknown): { - path: unknown; - action: unknown; - symbols: unknown; - instruction: unknown; - unifiedDiff: string | null; -} { - if (!edit || typeof edit !== 'object') throw new Error('Source patch edit must be an object'); - exactSourcePatchKeys(edit as unknown as Record, [ - 'path', 'action', 'symbols', 'instruction', 'unifiedDiff', - ], 'Source patch edit'); - return edit as { - path: unknown; - action: unknown; - symbols: unknown; - instruction: unknown; - unifiedDiff: string | null; - }; -} - -function validateSourcePatchEditBody( - edit: { - path: unknown; - action: unknown; - symbols: unknown; - instruction: unknown; - unifiedDiff: string | null; - }, - normalizedPath: string, -): void { - ensureSourcePatchEditAction(edit.action); - ensureSourcePatchEditInstruction(edit.instruction); - assertSourcePatchStrings(edit.symbols, `edits[${normalizedPath}].symbols`, true); -} - -function validateSourcePatchEditDiff(unifiedDiff: string | null, normalizedPath: string): void { - if (unifiedDiff === null) return; - if (typeof unifiedDiff !== 'string') { - throw new Error(`Source patch unifiedDiff for ${normalizedPath} must be string or null`); - } - normalizeUnifiedDiff(unifiedDiff, normalizedPath); -} - -function assertUniqueSourcePatchEditPathAction( - seen: Set, - normalizedPath: string, - action: unknown, -): void { - const pathActionKey = `${normalizedPath}::${action}`; - if (seen.has(pathActionKey)) throw new Error(`Duplicate source patch edit for ${normalizedPath}`); -} - -function normalizeSourcePatchEditPath(pathValue: unknown): string { - const normalizedPath = (typeof pathValue === 'string' ? pathValue.trim() : '').replace(/\\/g, '/'); - if (!normalizedPath || normalizedPath.startsWith('/') || normalizedPath.split('/').includes('..')) { - throw new Error(`Source patch edit path is not a relative repository path: ${normalizedPath}`); - } - return normalizedPath; -} - -function ensureSourcePatchEditAction(action: unknown): void { - if (!['create', 'modify', 'delete'].includes(action as string) || typeof action !== 'string') { - throw new Error(`Source patch edit action is unsupported: ${String(action)}`); - } -} - -function ensureSourcePatchEditInstruction(instruction: unknown): void { - if (typeof instruction !== 'string' || !instruction.trim()) { - throw new Error('Source patch edit instruction must be non-blank'); - } -} - -function validateSourcePatchHashAndId(patch: CodeChangeSourcePatch): void { - const expectedHash = createCodeChangeSourcePatchHash(patch); - if (patch.patchHash !== expectedHash) { - throw new Error(`Source patch patchHash does not match semantic content: expected ${expectedHash}`); - } - if (patch.id !== createCodeChangeSourcePatchId(patch)) { - throw new Error('Source patch id does not match semantic content'); - } -} - -function validateSourcePatchGeneration(patch: CodeChangeSourcePatch): void { - assertGroundedGenerationMetadata(patch.generation, 'Source patch generation'); - if (patch.generation.generatedAt !== patch.createdAt) { - throw new Error('Source patch generation.generatedAt must match createdAt'); - } - if (patch.generation.generator !== 't2c/code-change-source-patch') { - throw new Error('Source patch generation.generator must be t2c/code-change-source-patch'); - } -} - -function validateSourcePatchAgainstPlan( - patch: CodeChangeSourcePatch, - plan: CodeChangePlan, - editPaths: Set, -): void { - assertSourcePatchPlanBinding(patch, plan); - const expectedChanges = collectExpectedPlanChanges(plan); - validateSourcePatchEditsAgainstPlan(patch, plan, expectedChanges); - validateSourcePatchEvidence(patch, plan, expectedChanges, editPaths); -} - -function assertSourcePatchPlanBinding(patch: CodeChangeSourcePatch, plan: CodeChangePlan): void { - if (patch.planHash !== plan.planHash) throw new Error('Source patch is not bound to the supplied plan'); - if (patch.graphFingerprint !== plan.evidence.graphFingerprint) { - throw new Error('Source patch graphFingerprint does not match the plan'); - } -} - -function collectExpectedPlanChanges(plan: CodeChangePlan): Map { - return new Map(plan.changes.map((item) => [ - item.path.replace(/\\/g, '/'), item.action, - ])); -} - -function validateSourcePatchEditsAgainstPlan( - patch: CodeChangeSourcePatch, - plan: CodeChangePlan, - expectedChanges: Map, -): void { - const allowed = new Set(plan.target.paths.map((item) => item.replace(/\\/g, '/'))); - for (const edit of patch.edits) { - const editPath = edit.path.replace(/\\/g, '/'); - if (!allowed.has(editPath)) { - throw new Error(`Source patch path ${edit.path} is outside plan target.paths`); - } - if (expectedChanges.get(editPath) !== edit.action) { - throw new Error(`Source patch action for ${edit.path} does not match the plan`); - } - } -} - -function validateSourcePatchEvidence( - patch: CodeChangeSourcePatch, - plan: CodeChangePlan, - expectedChangePaths: Map, - editPaths: Set, -): void { - const actualEditPaths = [...editPaths].map((item) => { - const marker = item.indexOf('::'); - return marker === -1 ? item : item.slice(0, marker); - }); - const expectedPaths = [...expectedChangePaths.keys()]; - exactSourcePatchSet(actualEditPaths, expectedPaths, 'edit paths'); - exactSourcePatchSet(patch.diagnosticIds, plan.evidence.diagnosticIds, 'diagnosticIds'); - exactSourcePatchSet(patch.recordIds, plan.evidence.recordIds, 'recordIds'); - exactSourcePatchSet(patch.acceptanceCriteria, plan.acceptanceCriteria, 'acceptanceCriteria'); -} - -export function assertCodeChangeSourcePatchSet( - value: unknown, - plans?: CodeChangePlan[], -): asserts value is CodeChangeSourcePatchSet { - const set = assertSourcePatchSetObject(value); - const context = createSourcePatchSetValidationContext(plans); - validateSourcePatchSetSchema(set); - validateSourcePatchSetPatches(set, context); - validateSourcePatchSetGeneration(set); -} - -interface SourcePatchSetValidationContext { - plansById: Map; - expectedPlanIds: string[] | null; -} - -function createSourcePatchSetValidationContext(plans?: CodeChangePlan[]): SourcePatchSetValidationContext { - const expectedPlanIds = plans?.map((plan) => plan.id) ?? null; - return { - plansById: new Map((plans ?? []).map((plan) => [plan.id, plan])), - expectedPlanIds, - }; -} - -function assertSourcePatchSetObject(value: unknown): CodeChangeSourcePatchSet { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - throw new Error('Code change source patch set must be an object'); - } - const set = value as CodeChangeSourcePatchSet; - exactSourcePatchKeys(set as unknown as Record, [ - 'schemaVersion', 'generatedAt', 'graphFingerprint', 'patches', 'generation', - ], 'Source patch set'); - return set; -} - -function validateSourcePatchSetSchema(set: CodeChangeSourcePatchSet): void { - if (set.schemaVersion !== 't2c.code-change-source-patch-set/v1') { - throw new Error('Unsupported code change source patch set schemaVersion'); - } - if (typeof set.generatedAt !== 'string' || Number.isNaN(Date.parse(set.generatedAt))) { - throw new Error('Source patch set generatedAt must be an ISO date-time'); - } - if (typeof set.graphFingerprint !== 'string' || !/^[a-f0-9]{64}$/.test(set.graphFingerprint)) { - throw new Error('Source patch set graphFingerprint must be SHA-256'); - } - if (!Array.isArray(set.patches)) throw new Error('Source patch set patches must be an array'); -} - -function validateSourcePatchSetPatches( - set: CodeChangeSourcePatchSet, - context: SourcePatchSetValidationContext, -): void { - const patchIds = new Set(); - for (const patch of set.patches) { - validateSetPatchAndTrackDuplicates(set, patch, context, patchIds); - } - validateSetPatchesPlanCoverage(set, context.expectedPlanIds); -} - -function validateSetPatchAndTrackDuplicates( - set: CodeChangeSourcePatchSet, - patch: CodeChangeSourcePatch, - context: SourcePatchSetValidationContext, - patchIds: Set, -): void { - const expectedPlan = context.plansById.get(patch.planId); - assertCodeChangeSourcePatch(patch, expectedPlan); - validateSetPatchGraphFingerprint(set, patch); - assertUniqueSetPatchId(patchIds, patch.id); - patchIds.add(patch.id); -} - -function validateSetPatchGraphFingerprint( - set: CodeChangeSourcePatchSet, - patch: CodeChangeSourcePatch, -): void { - if (patch.graphFingerprint !== set.graphFingerprint) { - throw new Error(`Source patch ${patch.id} graphFingerprint does not match its set`); - } -} - -function assertUniqueSetPatchId( - patchIds: Set, - patchId: string, -): void { - if (patchIds.has(patchId)) throw new Error(`Duplicate source patch id: ${patchId}`); -} - -function validateSetPatchesPlanCoverage( - set: CodeChangeSourcePatchSet, - expectedPlanIds: string[] | null, -): void { - if (!expectedPlanIds) return; - exactSourcePatchSet(set.patches.map((patch) => patch.planId), expectedPlanIds, 'planIds'); -} - -function validateSourcePatchSetGeneration(set: CodeChangeSourcePatchSet): void { - assertGroundedGenerationMetadata(set.generation, 'Source patch set generation'); - if (set.generation.generatedAt !== set.generatedAt) { - throw new Error('Source patch set generation.generatedAt must match generatedAt'); - } - if (set.generation.generator !== 't2c/code-change-source-patch-set') { - throw new Error('Source patch set generation.generator must be t2c/code-change-source-patch-set'); - } -} - -function exactSourcePatchKeys(value: Record, expected: string[], name: string): void { - const actual = Object.keys(value).sort(); - const wanted = [...expected].sort(); - if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) { - throw new Error(`${name} keys must be exactly: ${wanted.join(', ')}`); - } -} - -function assertSourcePatchIds(value: unknown, pattern: RegExp, name: string): asserts value is string[] { - if (!Array.isArray(value) || value.length === 0 - || value.some((item) => typeof item !== 'string' || !pattern.test(item))) { - throw new Error(`Source patch ${name} must be a non-empty array of valid IDs`); - } - if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); -} - -function assertSourcePatchStrings(value: unknown, name: string, emptyAllowed: boolean): asserts value is string[] { - if (!Array.isArray(value) || (!emptyAllowed && value.length === 0) - || value.some((item) => typeof item !== 'string' || !item.trim())) { - throw new Error(`Source patch ${name} must contain ${emptyAllowed ? 'only ' : ''}non-blank strings`); - } - if (new Set(value).size !== value.length) throw new Error(`Source patch ${name} must be unique`); -} - -function exactSourcePatchSet(actual: string[], expected: string[], name: string): void { - const left = [...new Set(actual)].sort(); - const right = [...new Set(expected)].sort(); - if (left.length !== right.length || left.some((item, index) => item !== right[index])) { - throw new Error(`Source patch ${name} do not match the plan`); - } -} - -function instructionFor(change: CodeChangeFile, plan: CodeChangePlan): string { - const symbols = change.symbols.length - ? ` Focus on symbols: ${change.symbols.join(', ')}.` - : ''; - const criteria = plan.acceptanceCriteria.length - ? ` Acceptance: ${plan.acceptanceCriteria.join(' ')}` - : ''; - return `${change.action} \`${change.path}\`. ${change.rationale.trim()}.${symbols}${criteria}`.replace(/\s+/g, ' ').trim(); -} - -function deterministicGeneration(generatedAt: string, generator: string): GroundedGenerationMetadata { - return { - generator, - generatorVersion: '1', - runtimeVersion: T2C_VERSION, - generatedAt, - requestedMode: 'deterministic', - effectiveMode: 'deterministic', - degraded: false, - model: null, - provider: null, - responseId: null, - configurationFingerprint: sha256(stableStringify({ - generator, - generatorVersion: '1', - codes: [...IMPLEMENTATION_DIAGNOSTIC_CODES].sort(), - })), - reason: null, - }; -} - -function uniqueSorted(values: string[]): string[] { - return [...new Set(values.map((item) => item.trim()).filter(Boolean))].sort(); -} +export { + createCodeChangeSourcePatch, + type CreateCodeChangeSourcePatchOptions, + createCodeChangeSourcePatchSet, +} from './implementation-source-patch-create.js'; +export { + assertCodeChangeSourcePatch, + assertCodeChangeSourcePatchSet, +} from './implementation-source-patch-assert.js'; diff --git a/src/watch/watcher.ts b/src/watch/watcher.ts index d4fb493..83a4c96 100644 --- a/src/watch/watcher.ts +++ b/src/watch/watcher.ts @@ -145,82 +145,20 @@ const DEFAULT_MIN_INTERVAL_MS = 60_000; const DEFAULT_SCAN_INTERVAL_MS = 2_000; export async function watchRepository(options: WatchOptions, config: T2CConfig): Promise { - const root = path.resolve(options.root); - const minIntervalMs = Math.max(0, options.minIntervalMs ?? DEFAULT_MIN_INTERVAL_MS); - const scanIntervalMs = Math.max(50, options.scanIntervalMs ?? DEFAULT_SCAN_INTERVAL_MS); - const emit = options.onEvent ?? ((): void => {}); - const now = options.now ?? ((): number => Date.now()); - const sleep = options.sleep ?? defaultSleep; - const signal = options.signal; - - const matcher = await loadIgnoreMatcher(root); - const runReport = options.runReport ?? (async (): Promise => { - const result = await runPipeline(options.pipeline, config); - return { runId: result.manifest.runId, summaryPath: result.summaryPath }; - }); + const configuration = await createWatchConfiguration(options, config); + const runtime = await createWatchRuntime(configuration); - const scanOptions: ScanOptions = { matcher, ...(options.maxFiles === undefined ? {} : { maxFiles: options.maxFiles }) }; - let snapshot = await scanTree(root, scanOptions); - emit({ type: 'ready', root, files: snapshot.size, sources: matcher.sources }); - - // `lastReportStartedAt` anchors the floor to the start of a report, so a slow - // pipeline does not add its own duration to the wait before the next one. - let lastReportStartedAt = Number.NEGATIVE_INFINITY; - let pending = 0; - let pendingReason = ''; - - if (options.runOnStart ?? true) { - lastReportStartedAt = now(); - await generate('initial scan'); + if (configuration.runOnStart) { + await generateReportForReason('initial scan', runtime); } - while (!signal?.aborted) { - await sleep(scanIntervalMs, signal); - if (signal?.aborted) break; - - const current = await scanTree(root, scanOptions); - const delta = diffSnapshots(snapshot, current); - snapshot = current; - - if (delta.total > 0) { - pending += delta.total; - pendingReason = describeDelta(delta); - emit({ type: 'change', delta, description: pendingReason }); - } - if (pending === 0) continue; - - const waitMs = lastReportStartedAt + minIntervalMs - now(); - if (waitMs > 0) { - emit({ type: 'throttled', waitMs, pending }); - continue; - } - - const reason = `${pending} change(s): ${pendingReason}`; - pending = 0; - pendingReason = ''; - lastReportStartedAt = now(); - await generate(reason); + while (!runtime.signal?.aborted) { + await runtime.sleep(runtime.scanIntervalMs, runtime.signal); + if (runtime.signal?.aborted) break; + await evaluateChangeCycle(runtime); } - emit({ type: 'stopped' }); - - async function generate(reason: string): Promise { - emit({ type: 'report:start', reason }); - const startedAt = now(); - try { - const result = await runReport(reason); - emit({ - type: 'report:done', - runId: result.runId, - summaryPath: result.summaryPath, - durationMs: now() - startedAt, - }); - } catch (error) { - emit({ type: 'report:error', message: error instanceof Error ? error.message : String(error) }); - } - // Changes written by the report itself must not trigger the next one. - snapshot = await scanTree(root, scanOptions); - } + runtime.emit({ type: 'stopped' }); } function defaultSleep(ms: number, signal?: AbortSignal): Promise { @@ -241,3 +179,114 @@ function defaultSleep(ms: number, signal?: AbortSignal): Promise { } }); } + +interface WatchConfiguration { + root: string; + minIntervalMs: number; + scanIntervalMs: number; + matcher: IgnoreMatcher; + runReport: (reason: string) => Promise; + emit: (event: WatchEvent) => void; + now: () => number; + sleep: (ms: number, signal?: AbortSignal) => Promise; + signal: AbortSignal | undefined; + runOnStart: boolean; + scanOptions: ScanOptions; +} + +interface WatchRuntime { + configuration: WatchConfiguration; + snapshot: TreeSnapshot; + pending: number; + pendingReason: string; + lastReportStartedAt: number; +} + +async function createWatchConfiguration(options: WatchOptions, config: T2CConfig): Promise { + const root = path.resolve(options.root); + const minIntervalMs = Math.max(0, options.minIntervalMs ?? DEFAULT_MIN_INTERVAL_MS); + const scanIntervalMs = Math.max(50, options.scanIntervalMs ?? DEFAULT_SCAN_INTERVAL_MS); + const emit = options.onEvent ?? ((): void => {}); + const now = options.now ?? ((): number => Date.now()); + const sleep = options.sleep ?? defaultSleep; + const matcher = await loadIgnoreMatcher(root); + const runReport = options.runReport ?? (async (_reason: string): Promise => { + const result = await runPipeline(options.pipeline, config); + return { runId: result.manifest.runId, summaryPath: result.summaryPath }; + }); + return { + root, + minIntervalMs, + scanIntervalMs, + matcher, + emit, + now, + sleep, + signal: options.signal, + runOnStart: options.runOnStart ?? true, + runReport, + scanOptions: { matcher, ...(options.maxFiles === undefined ? {} : { maxFiles: options.maxFiles }) }, + }; +} + +async function createWatchRuntime(configuration: WatchConfiguration): Promise { + const initialSnapshot = await scanTreeCurrent(configuration); + configuration.emit({ type: 'ready', root: configuration.root, files: initialSnapshot.size, sources: configuration.matcher.sources }); + return { + configuration, + snapshot: initialSnapshot, + pending: 0, + pendingReason: '', + lastReportStartedAt: Number.NEGATIVE_INFINITY, + }; +} + +async function scanTreeCurrent(configuration: WatchConfiguration): Promise { + return scanTree(configuration.root, configuration.scanOptions); +} + +async function evaluateChangeCycle(runtime: WatchRuntime): Promise { + const current = await scanTree(runtime.configuration.root, runtime.configuration.scanOptions); + const delta = diffSnapshots(runtime.snapshot, current); + runtime.snapshot = current; + handleDelta(runtime, delta); + await maybeGenerateReport(runtime); +} + +function handleDelta(runtime: WatchRuntime, delta: SnapshotDelta): void { + if (delta.total === 0) return; + runtime.pending += delta.total; + runtime.pendingReason = describeDelta(delta); + runtime.configuration.emit({ type: 'change', delta, description: runtime.pendingReason }); +} + +async function maybeGenerateReport(runtime: WatchRuntime): Promise { + if (runtime.pending === 0) return; + const waitMs = runtime.lastReportStartedAt + runtime.configuration.minIntervalMs - runtime.configuration.now(); + if (waitMs > 0) { + runtime.configuration.emit({ type: 'throttled', waitMs, pending: runtime.pending }); + return; + } + const reason = `${runtime.pending} change(s): ${runtime.pendingReason}`; + runtime.pending = 0; + runtime.pendingReason = ''; + runtime.lastReportStartedAt = runtime.configuration.now(); + await generateReportForReason(reason, runtime); +} + +async function generateReportForReason(reason: string, runtime: WatchRuntime): Promise { + const startedAt = runtime.configuration.now(); + runtime.configuration.emit({ type: 'report:start', reason }); + try { + const result = await runtime.configuration.runReport(reason); + runtime.configuration.emit({ + type: 'report:done', + runId: result.runId, + summaryPath: result.summaryPath, + durationMs: runtime.configuration.now() - startedAt, + }); + } catch (error) { + runtime.configuration.emit({ type: 'report:error', message: error instanceof Error ? error.message : String(error) }); + } + runtime.snapshot = await scanTree(runtime.configuration.root, runtime.configuration.scanOptions); +} diff --git a/src/web/diff-ui-script.ts b/src/web/diff-ui-script.ts new file mode 100644 index 0000000..0ceec46 --- /dev/null +++ b/src/web/diff-ui-script.ts @@ -0,0 +1,17 @@ +export const DIFF_UI_SCRIPT = ``; diff --git a/src/web/diff-ui.ts b/src/web/diff-ui.ts index 2fab6f7..af33382 100644 --- a/src/web/diff-ui.ts +++ b/src/web/diff-ui.ts @@ -1,3 +1,5 @@ +import { DIFF_UI_SCRIPT } from './diff-ui-script.js'; + function diffUiStyles(): string { return ':root{color-scheme:dark;font-family:Inter,ui-sans-serif,system-ui,sans-serif;background:#020617;color:#e2e8f0}' + '*{box-sizing:border-box}' @@ -125,24 +127,7 @@ function diffUiBodyMarkup(): string { } function diffUiScriptMarkup(): string { - return ` -`; + return DIFF_UI_SCRIPT; } function diffUiTemplate(): string { From 35ec373550da5d3e75beaf06f0e32d51c105c358 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 16:02:30 +0200 Subject: [PATCH 26/43] refactor: split reality view builder into separate module --- src/diff/reality-build.ts | 387 ++++++++++++++++++++++++++++ src/diff/reality.ts | 525 +++----------------------------------- 2 files changed, 416 insertions(+), 496 deletions(-) create mode 100644 src/diff/reality-build.ts diff --git a/src/diff/reality-build.ts b/src/diff/reality-build.ts new file mode 100644 index 0000000..47733cc --- /dev/null +++ b/src/diff/reality-build.ts @@ -0,0 +1,387 @@ +import { sha256, stableStringify } from '../core/id.js'; +import { assertIntentGraph } from '../core/schema.js'; +import { symbolAliases } from '../core/target.js'; +import type { + DiagnosticCode, + DiagnosticReport, + DiagnosticSeverity, + IntentGraph, + IntentRecord, + SourceKind, +} from '../core/types.js'; + +/** Source kinds that state what *should* exist. */ +export const DECLARED_KINDS: SourceKind[] = ['nl', 'todo', 'document', 'agent_log']; +/** + * Source kinds that evidence what *does* exist. + * + * Configuration counts: a `system` record is an observed fact with lifecycle + * `implemented`, and for infrastructure repositories the implementation largely + * *is* the configuration. Leaving it out made Intent-vs-Reality structurally + * blind there — a platform repository with 1 263 configuration records reported + * 2.4% implementation coverage while documenting exactly what those files do. + */ +export const OBSERVED_KINDS: SourceKind[] = ['git', 'ast', 'system']; + +export const LANE_ORDER: SourceKind[] = ['nl', 'todo', 'document', 'agent_log', 'git', 'ast', 'system', 'changelog']; + +export type RealityStatus = + | 'aligned' + | 'planned_not_implemented' + | 'implemented_not_planned' + | 'implemented_not_documented' + | 'changelog_without_implementation' + | 'conflicting' + | 'unlinked'; + +/** + * What kind of observed record proves a topic. + */ +export type RealityEvidence = 'code' | 'configuration' | 'none'; + +export interface RealityRow { + key: string; + label: string; + lanes: Record; + status: RealityStatus; + severity: DiagnosticSeverity; + recordIds: string[]; + diagnosticCodes: DiagnosticCode[]; + /** Evidence grade for a topic that survived semantic implementation gating. */ + evidence: RealityEvidence; +} + +export interface IntentRealityView { + schemaVersion: 't2c.reality/v1'; + generatedAt: string; + graphFingerprint: string; + fingerprint: string; + rows: RealityRow[]; + totals: { + topics: number; + aligned: number; + gaps: number; + byStatus: Record; + declaredRecords: number; + observedRecords: number; + declaredTopics: number; + observedTopics: number; + implementationAlignedTopics: number; + implementationCoverage: number; + plannedCodeCoverage: number; + documentedCodeCoverage: number; + /** + * False when the graph holds no `document` record at all, which makes + * `documentedCodeCoverage` structurally 0 rather than measured. Reporting + * a bare 0.0% in that case reads as "nothing is documented" when the truth + * is "documentation extraction did not run". + */ + documentationMeasured: boolean; + /** + * Aligned topics split by how strong their evidence is. + */ + alignedByEvidence: Record; + }; +} + +export const STATUS_LABEL: Record = { + aligned: 'aligned', + planned_not_implemented: 'planned, no code', + implemented_not_planned: 'code, no plan', + implemented_not_documented: 'code, no docs', + changelog_without_implementation: 'changelog, no code', + conflicting: 'conflicting', + unlinked: 'unlinked', +}; + +const SEVERITY_RANK: Record = { + info: 0, + warning: 1, + review_required: 2, + blocking: 3, +}; + +export function buildRealityView( + graph: IntentGraph, + diagnostics: DiagnosticReport, + generatedAt = new Date().toISOString(), +): IntentRealityView { + assertIntentGraph(graph); + const components = groupIntoTopics(graph); + const diagnosticsByRecord = indexDiagnostics(diagnostics); + const rows = buildRealityRows(components, diagnosticsByRecord); + return { + schemaVersion: 't2c.reality/v1', + generatedAt, + graphFingerprint: graph.fingerprint, + fingerprint: sha256(stableStringify(rows.map((row) => [row.key, row.status, row.recordIds]))), + rows, + totals: buildRealityTotals(graph, rows), + }; +} + +function buildRealityRows( + components: Array<{ key: string; records: IntentRecord[] }>, + diagnosticsByRecord: Map, +): RealityRow[] { + const rows = components.map(({ key, records }) => buildRealityRow(key, records, diagnosticsByRecord)); + rows.sort(compareRealityRows); + return rows; +} + +function buildRealityRow( + key: string, + records: IntentRecord[], + diagnosticsByRecord: Map, +): RealityRow { + const lanes: Record = {}; + for (const kind of LANE_ORDER) lanes[kind] = 0; + for (const record of records) { + lanes[record.source.kind] = (lanes[record.source.kind] ?? 0) + 1; + } + + const codes = new Set(); + let severity: DiagnosticSeverity = 'info'; + for (const record of records) { + for (const diagnostic of diagnosticsByRecord.get(record.id) ?? []) { + codes.add(diagnostic.code); + if (SEVERITY_RANK[diagnostic.severity] > SEVERITY_RANK[severity]) severity = diagnostic.severity; + } + } + + const status = resolveStatus(codes, lanes); + return { + key, + label: topicLabel(key, records), + lanes, + status, + severity: status === 'aligned' ? 'info' : severity, + recordIds: records.map((record) => record.id).sort(), + diagnosticCodes: [...codes].sort(), + evidence: resolveEvidence(lanes), + }; +} + +function compareRealityRows(left: RealityRow, right: RealityRow): number { + const bySeverity = SEVERITY_RANK[right.severity] - SEVERITY_RANK[left.severity]; + if (bySeverity !== 0) return bySeverity; + const alignment = Number(left.status === 'aligned') - Number(right.status === 'aligned'); + if (alignment !== 0) return alignment; + const bySize = right.recordIds.length - left.recordIds.length; + if (bySize !== 0) return bySize; + return left.key.localeCompare(right.key); +} + +function buildRealityTotals(graph: IntentGraph, rows: RealityRow[]): IntentRealityView['totals'] { + const byStatus: Record = {}; + for (const row of rows) byStatus[row.status] = (byStatus[row.status] ?? 0) + 1; + + const declaredRecords = graph.records.filter((record) => DECLARED_KINDS.includes(record.source.kind)).length; + const observedRecords = graph.records.filter((record) => OBSERVED_KINDS.includes(record.source.kind)).length; + const aligned = rows.filter((row) => row.status === 'aligned').length; + const declaredTopics = rows.filter((row) => DECLARED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; + const observedTopics = rows.filter((row) => OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; + const implementationAlignedTopics = rows.filter((row) => row.status === 'aligned' + && DECLARED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0) + && OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; + const documentedObservedTopics = rows.filter((row) => + (row.lanes.document ?? 0) > 0 + && OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; + + return { + topics: rows.length, + aligned, + gaps: rows.length - aligned, + alignedByEvidence: { + code: rows.filter((row) => row.status === 'aligned' && row.evidence === 'code').length, + configuration: rows.filter((row) => row.status === 'aligned' && row.evidence === 'configuration').length, + none: rows.filter((row) => row.status === 'aligned' && row.evidence === 'none').length, + }, + byStatus: Object.fromEntries(Object.entries(byStatus).sort(([a], [b]) => a.localeCompare(b))), + declaredRecords, + observedRecords, + declaredTopics, + observedTopics, + implementationAlignedTopics, + implementationCoverage: ratio(implementationAlignedTopics, declaredTopics), + plannedCodeCoverage: ratio(implementationAlignedTopics, observedTopics), + documentedCodeCoverage: ratio(documentedObservedTopics, observedTopics), + documentationMeasured: graph.records.some((record) => record.source.kind === 'document'), + }; +} + +function ratio(numerator: number, denominator: number): number { + return denominator === 0 ? 1 : Math.round((numerator / denominator) * 10_000) / 10_000; +} + +/** Renders documentation coverage, or says it was not measured at all. */ +export function documentedCoverageLabel(totals: IntentRealityView['totals']): string { + if (!totals.documentationMeasured) return 'not measured (no documentation records in this run)'; + return `${(totals.documentedCodeCoverage * 100).toFixed(1)}%`; +} + +/** + * Groups records by their primary target. + * + * Connected components of the relation graph are deliberately *not* used here. + */ +function groupIntoTopics(graph: IntentGraph): Array<{ key: string; records: IntentRecord[] }> { + const symbolPaths = indexUnambiguousSymbolPaths(graph.records); + const anchors = indexModuleAnchors(graph, symbolPaths); + const groups = new Map(); + for (const record of graph.records) { + const key = primaryTargetKey(record, symbolPaths, anchors); + const bucket = groups.get(key) ?? []; + bucket.push(record); + groups.set(key, bucket); + } + return [...groups.entries()] + .map(([key, records]) => ({ key, records: records.sort((a, b) => a.id.localeCompare(b.id)) })) + .sort((left, right) => left.key.localeCompare(right.key)); +} + +function indexModuleAnchors(graph: IntentGraph, symbolPaths: Map): Map { + const modulePaths = new Map(); + for (const record of graph.records) { + if (record.statement.kind !== 'module_fact' && record.statement.kind !== 'configuration_file_fact') continue; + const paths = [...new Set(record.statement.target.paths)]; + if (paths.length === 1 && paths[0]) modulePaths.set(record.id, paths[0]); + } + + const targetless = new Set(graph.records + .filter((record) => DECLARED_KINDS.includes(record.source.kind) && !resolvesToFile(record, symbolPaths)) + .map((record) => record.id)); + const candidates = new Map>(); + for (const relation of graph.relations) { + for (const [left, right] of [[relation.from, relation.to], [relation.to, relation.from]] as const) { + const path = modulePaths.get(right); + if (!path || !targetless.has(left)) continue; + const values = candidates.get(left) ?? new Set(); + values.add(path); + candidates.set(left, values); + } + } + return new Map([...candidates.entries()] + .filter(([, paths]) => paths.size === 1) + .map(([recordId, paths]) => [recordId, [...paths][0] as string])); +} + +/** + * True when the record already names something a reader can open. + */ +function resolvesToFile(record: IntentRecord, symbolPaths: Map): boolean { + const { tickets, paths, symbols } = record.statement.target; + if (tickets.length > 0 || paths.length > 0) return true; + const resolved = new Set(symbols + .flatMap(symbolAliases) + .map((symbol) => symbolPaths.get(symbol)) + .filter((value): value is string => Boolean(value))); + return resolved.size === 1; +} + +function indexUnambiguousSymbolPaths(records: IntentRecord[]): Map { + const candidates = new Map>(); + for (const record of records) { + const paths = record.statement.target.paths; + if (paths.length !== 1 || !paths[0]) continue; + for (const alias of record.statement.target.symbols.flatMap(symbolAliases)) { + const values = candidates.get(alias) ?? new Set(); + values.add(paths[0]); + candidates.set(alias, values); + } + } + return new Map([...candidates.entries()] + .filter(([, paths]) => paths.size === 1) + .map(([alias, paths]) => [alias, [...paths][0] as string])); +} + +function primaryTargetKey( + record: IntentRecord, + symbolPaths: Map, + anchors: Map = new Map(), +): string { + const tickets = [...record.statement.target.tickets].sort(); + if (tickets.length === 1 && tickets[0]) return `ticket:${tickets[0]}`; + + if (tickets.length > 1 && tickets[0]) return `ticket:${tickets[0]}`; + + const targetPaths = [...new Set(record.statement.target.paths)].sort(); + if (targetPaths.length && targetPaths[0]) return `path:${targetPaths[0]}`; + + const symbols = [...new Set(record.statement.target.symbols.flatMap(symbolAliases))] + .sort((left, right) => left.split('.').length - right.split('.').length || left.localeCompare(right)); + const resolvedPaths = [...new Set(symbols.map((symbol) => symbolPaths.get(symbol)).filter((value): value is string => Boolean(value)))]; + if (resolvedPaths.length === 1 && resolvedPaths[0]) return `path:${resolvedPaths[0]}`; + + const anchor = anchors.get(record.id); + if (anchor) return `path:${anchor}`; + + if (symbols.length && symbols[0]) return `symbol:${symbols[0]}`; + + if (record.source.path) return `source:${record.source.path}`; + + return `record:${record.id}`; +} + +function indexDiagnostics(report: DiagnosticReport): Map { + const index = new Map(); + for (const diagnostic of report.diagnostics) { + for (const recordId of diagnostic.recordIds) { + const bucket = index.get(recordId) ?? []; + bucket.push(diagnostic); + index.set(recordId, bucket); + } + } + return index; +} + +function resolveEvidence(lanes: Record): RealityEvidence { + if ((lanes.ast ?? 0) > 0 || (lanes.git ?? 0) > 0) return 'code'; + if ((lanes.system ?? 0) > 0) return 'configuration'; + return 'none'; +} + +function resolveStatus(codes: Set, lanes: Record): RealityStatus { + const { declared, observed, changelog } = summarizeLaneTotals(lanes); + + if (codes.has('CONFLICTING_INTENT')) return 'conflicting'; + + if (codes.has('PLANNED_NOT_IMPLEMENTED')) return 'planned_not_implemented'; + + if (declared === 0 && observed === 0) { + return changelog > 0 ? 'changelog_without_implementation' : 'unlinked'; + } + if (declared > 0 && observed === 0) { + return changelog > 0 && codes.has('CHANGELOG_WITHOUT_IMPLEMENTATION') + ? 'changelog_without_implementation' + : 'planned_not_implemented'; + } + if (observed > 0 && declared === 0) return 'implemented_not_planned'; + + return 'aligned'; +} + +function summarizeLaneTotals(lanes: Record): { + declared: number; + observed: number; + changelog: number; +} { + const declared = DECLARED_KINDS.reduce((total, kind) => total + (lanes[kind] ?? 0), 0); + const observed = OBSERVED_KINDS.reduce((total, kind) => total + (lanes[kind] ?? 0), 0); + const changelog = lanes.changelog ?? 0; + return { declared, observed, changelog }; +} + +function topicLabel(key: string, records: IntentRecord[]): string { + const separator = key.indexOf(':'); + const raw = separator >= 0 ? key.slice(separator + 1) : key; + const value = key.startsWith('source:') ? `${raw} (unattributed)` : raw; + + const declared = records + .filter((record) => DECLARED_KINDS.includes(record.source.kind)) + .sort((left, right) => right.epistemic.confidence - left.epistemic.confidence)[0]; + if (!declared) return value; + + const object = declared.statement.object.trim() || declared.statement.text.trim(); + return object ? `${value} — ${object}` : value; +} diff --git a/src/diff/reality.ts b/src/diff/reality.ts index ef299e9..c1c7947 100644 --- a/src/diff/reality.ts +++ b/src/diff/reality.ts @@ -1,133 +1,35 @@ -// Intent-vs-reality view: the "plan ↔ code" diff. +// Intent-vs-reality renderers. // -// Where `graph/diff.ts` compares two runs over time, this module compares the -// declared side of a single run (NL task, TODO, documentation, changelog) -// against the observed side (Git claims, AST facts). Records are grouped into -// topics using the connected components of the existing relation graph, so the -// view reuses the linker's evidence instead of inventing a second heuristic. +// This module delegates model construction to `reality-build.ts` and focuses +// exclusively on rendering (`renderRealitySvg` / `renderRealityMarkdown`). -import { sha256, stableStringify } from '../core/id.js'; -import { assertIntentGraph } from '../core/schema.js'; -import { symbolAliases } from '../core/target.js'; -import type { - DiagnosticCode, - DiagnosticReport, - DiagnosticSeverity, - IntentGraph, - IntentRecord, - SourceKind, -} from '../core/types.js'; -import { - DARK_THEME, - escapeXml, - metricCard, - svgDocument, - truncate, -} from './svg.js'; - -/** Source kinds that state what *should* exist. */ -export const DECLARED_KINDS: SourceKind[] = ['nl', 'todo', 'document', 'agent_log']; -/** - * Source kinds that evidence what *does* exist. - * - * Configuration counts: a `system` record is an observed fact with lifecycle - * `implemented`, and for infrastructure repositories the implementation largely - * *is* the configuration. Leaving it out made Intent-vs-Reality structurally - * blind there — a platform repository with 1 263 configuration records reported - * 2.4% implementation coverage while documenting exactly what those files do. - */ -export const OBSERVED_KINDS: SourceKind[] = ['git', 'ast', 'system']; - -export const LANE_ORDER: SourceKind[] = ['nl', 'todo', 'document', 'agent_log', 'git', 'ast', 'system', 'changelog']; +import { DARK_THEME, escapeXml, metricCard, svgDocument, truncate } from './svg.js'; +import type { SourceKind } from '../core/types.js'; -export type RealityStatus = - | 'aligned' - | 'planned_not_implemented' - | 'implemented_not_planned' - | 'implemented_not_documented' - | 'changelog_without_implementation' - | 'conflicting' - | 'unlinked'; - -/** - * What kind of observed record proves a topic. - * - * `configuration` means the only evidence is a declared key in a committed - * file. That is real — a behaviour whose implementation *is* configuration is - * implemented — but it is weaker than a function the parser found, and until - * now both produced an identical `aligned` with nothing to tell them apart. - * Measured: 16 of 46 aligned topics on `subactor/platform` rest on - * configuration alone, against 4 of 89 here. - */ -export type RealityEvidence = 'code' | 'configuration' | 'none'; - -export interface RealityRow { - key: string; - label: string; - lanes: Record; - status: RealityStatus; - severity: DiagnosticSeverity; - recordIds: string[]; - diagnosticCodes: DiagnosticCode[]; - /** Evidence grade for a topic that survived semantic implementation gating. */ - evidence: RealityEvidence; -} - -export interface IntentRealityView { - schemaVersion: 't2c.reality/v1'; - generatedAt: string; - graphFingerprint: string; - fingerprint: string; - rows: RealityRow[]; - totals: { - topics: number; - aligned: number; - gaps: number; - byStatus: Record; - declaredRecords: number; - observedRecords: number; - declaredTopics: number; - observedTopics: number; - implementationAlignedTopics: number; - implementationCoverage: number; - plannedCodeCoverage: number; - documentedCodeCoverage: number; - /** - * False when the graph holds no `document` record at all, which makes - * `documentedCodeCoverage` structurally 0 rather than measured. Reporting - * a bare 0.0% in that case reads as "nothing is documented" when the truth - * is "documentation extraction did not run" — it is LLM-only, so every - * offline run produced that number. - */ - documentationMeasured: boolean; - /** - * Aligned topics split by how strong their evidence is. Reported so a - * headline that rests mostly on configuration cannot read the same as one - * backed by parsed code; neither number changes what counts as aligned. - */ - alignedByEvidence: Record; - }; -} - -/** - * Diagnostic codes that mark a topic as divergent, mapped to the row status - * they imply. Codes absent from this table (LOW_CONFIDENCE, ALIGNED, …) do not - * by themselves make a topic a gap. - */ -const DIVERGENCE_STATUS: Partial> = { - PLANNED_NOT_IMPLEMENTED: 'planned_not_implemented', - IMPLEMENTED_NOT_PLANNED: 'implemented_not_planned', - IMPLEMENTED_NOT_DOCUMENTED: 'implemented_not_documented', - CHANGELOG_WITHOUT_IMPLEMENTATION: 'changelog_without_implementation', - CONFLICTING_INTENT: 'conflicting', - UNLINKED_RECORD: 'unlinked', -}; - -const SEVERITY_RANK: Record = { - info: 0, - warning: 1, - review_required: 2, - blocking: 3, +import { + DECLARED_KINDS, + OBSERVED_KINDS, + LANE_ORDER, + STATUS_LABEL, + buildRealityView, + documentedCoverageLabel, + type IntentRealityView, + type RealityEvidence, + type RealityRow, + type RealityStatus, +} from './reality-build.js'; + +export { + buildRealityView, + documentedCoverageLabel, + DECLARED_KINDS, + OBSERVED_KINDS, + LANE_ORDER, + STATUS_LABEL, + type IntentRealityView, + type RealityEvidence, + type RealityRow, + type RealityStatus, }; const STATUS_COLOR: Record = { @@ -140,135 +42,6 @@ const STATUS_COLOR: Record = { unlinked: '#64748b', }; -const STATUS_LABEL: Record = { - aligned: 'aligned', - planned_not_implemented: 'planned, no code', - implemented_not_planned: 'code, no plan', - implemented_not_documented: 'code, no docs', - changelog_without_implementation: 'changelog, no code', - conflicting: 'conflicting', - unlinked: 'unlinked', -}; - -export function buildRealityView( - graph: IntentGraph, - diagnostics: DiagnosticReport, - generatedAt = new Date().toISOString(), -): IntentRealityView { - assertIntentGraph(graph); - const components = groupIntoTopics(graph); - const diagnosticsByRecord = indexDiagnostics(diagnostics); - const rows = buildRealityRows(components, diagnosticsByRecord); - return { - schemaVersion: 't2c.reality/v1', - generatedAt, - graphFingerprint: graph.fingerprint, - fingerprint: sha256(stableStringify(rows.map((row) => [row.key, row.status, row.recordIds]))), - rows, - totals: buildRealityTotals(graph, rows), - }; -} - -function buildRealityRows( - components: Array<{ key: string; records: IntentRecord[] }>, - diagnosticsByRecord: Map, -): RealityRow[] { - const rows = components.map(({ key, records }) => buildRealityRow(key, records, diagnosticsByRecord)); - rows.sort(compareRealityRows); - return rows; -} - -function buildRealityRow( - key: string, - records: IntentRecord[], - diagnosticsByRecord: Map, -): RealityRow { - const lanes: Record = {}; - for (const kind of LANE_ORDER) lanes[kind] = 0; - for (const record of records) { - lanes[record.source.kind] = (lanes[record.source.kind] ?? 0) + 1; - } - - const codes = new Set(); - let severity: DiagnosticSeverity = 'info'; - for (const record of records) { - for (const diagnostic of diagnosticsByRecord.get(record.id) ?? []) { - codes.add(diagnostic.code); - if (SEVERITY_RANK[diagnostic.severity] > SEVERITY_RANK[severity]) severity = diagnostic.severity; - } - } - - const status = resolveStatus(codes, lanes); - return { - key, - label: topicLabel(key, records), - lanes, - status, - severity: status === 'aligned' ? 'info' : severity, - recordIds: records.map((record) => record.id).sort(), - diagnosticCodes: [...codes].sort(), - evidence: resolveEvidence(lanes), - }; -} - -function compareRealityRows(left: RealityRow, right: RealityRow): number { - const bySeverity = SEVERITY_RANK[right.severity] - SEVERITY_RANK[left.severity]; - if (bySeverity !== 0) return bySeverity; - const alignment = Number(left.status === 'aligned') - Number(right.status === 'aligned'); - if (alignment !== 0) return alignment; - const bySize = right.recordIds.length - left.recordIds.length; - if (bySize !== 0) return bySize; - return left.key.localeCompare(right.key); -} - -function buildRealityTotals(graph: IntentGraph, rows: RealityRow[]): IntentRealityView['totals'] { - const byStatus: Record = {}; - for (const row of rows) byStatus[row.status] = (byStatus[row.status] ?? 0) + 1; - - const declaredRecords = graph.records.filter((record) => DECLARED_KINDS.includes(record.source.kind)).length; - const observedRecords = graph.records.filter((record) => OBSERVED_KINDS.includes(record.source.kind)).length; - const aligned = rows.filter((row) => row.status === 'aligned').length; - const declaredTopics = rows.filter((row) => DECLARED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; - const observedTopics = rows.filter((row) => OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; - const implementationAlignedTopics = rows.filter((row) => row.status === 'aligned' - && DECLARED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0) - && OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; - const documentedObservedTopics = rows.filter((row) => - (row.lanes.document ?? 0) > 0 - && OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; - - return { - topics: rows.length, - aligned, - gaps: rows.length - aligned, - alignedByEvidence: { - code: rows.filter((row) => row.status === 'aligned' && row.evidence === 'code').length, - configuration: rows.filter((row) => row.status === 'aligned' && row.evidence === 'configuration').length, - none: rows.filter((row) => row.status === 'aligned' && row.evidence === 'none').length, - }, - byStatus: Object.fromEntries(Object.entries(byStatus).sort(([a], [b]) => a.localeCompare(b))), - declaredRecords, - observedRecords, - declaredTopics, - observedTopics, - implementationAlignedTopics, - implementationCoverage: ratio(implementationAlignedTopics, declaredTopics), - plannedCodeCoverage: ratio(implementationAlignedTopics, observedTopics), - documentedCodeCoverage: ratio(documentedObservedTopics, observedTopics), - documentationMeasured: graph.records.some((record) => record.source.kind === 'document'), - }; -} - -function ratio(numerator: number, denominator: number): number { - return denominator === 0 ? 1 : Math.round((numerator / denominator) * 10_000) / 10_000; -} - -/** Renders documentation coverage, or says it was not measured at all. */ -function documentedCoverageLabel(totals: IntentRealityView['totals']): string { - if (!totals.documentationMeasured) return 'not measured (no documentation records in this run)'; - return `${(totals.documentedCodeCoverage * 100).toFixed(1)}%`; -} - /** Approximate advance width per character for the `.label` and `.badge` styles. */ const LABEL_CHAR = 7.2; const BADGE_CHAR = 7.4; @@ -278,246 +51,6 @@ function widestLabel(labels: string[]): number { return labels.reduce((widest, label) => Math.max(widest, label.length), 0); } -/** - * Groups records by their primary target. - * - * Connected components of the relation graph are deliberately *not* used here. - * The linker emits `shared_path` relations, which tie together every AST symbol - * declared in the same file; transitively that collapses a real repository into - * one giant component (measured: 2561 records and 95 549 relations produced a - * single topic holding 2507 AST facts). Keying on the record's own primary - * target keeps topics at file/ticket granularity and makes membership - * explainable without walking the graph. - */ -function groupIntoTopics(graph: IntentGraph): Array<{ key: string; records: IntentRecord[] }> { - const symbolPaths = indexUnambiguousSymbolPaths(graph.records); - const anchors = indexModuleAnchors(graph, symbolPaths); - const groups = new Map(); - for (const record of graph.records) { - const key = primaryTargetKey(record, symbolPaths, anchors); - const bucket = groups.get(key) ?? []; - bucket.push(record); - groups.set(key, bucket); - } - return [...groups.entries()] - .map(([key, records]) => ({ key, records: records.sort((a, b) => a.id.localeCompare(b.id)) })) - .sort((left, right) => left.key.localeCompare(right.key)); -} - -/** - * The one module a targetless declaration is directly linked to. - * - * Without this, a sentence the linker *did* connect to code still counted as - * "planned, no code": topics are keyed by each record's own ticket, path or - * symbol, so prose that names none of them was filed under the documentation - * file it was written in, never under the module it describes. On - * `subactor/platform`, where documentation is Polish prose and identifiers are - * English, that is most of the corpus. - * - * The narrowness is the point, and it is why connected components are still - * refused above: one hop, only from a declaration whose own target resolves to - * no file, and only when every module aggregate it touches names the same one. - * An ambiguous declaration keeps its old key rather than picking a winner — - * measured on `subactor/platform`, 69 declarations touch several modules and - * are deliberately left alone. - */ -function indexModuleAnchors(graph: IntentGraph, symbolPaths: Map): Map { - const modulePaths = new Map(); - for (const record of graph.records) { - if (record.statement.kind !== 'module_fact' && record.statement.kind !== 'configuration_file_fact') continue; - const paths = [...new Set(record.statement.target.paths)]; - if (paths.length === 1 && paths[0]) modulePaths.set(record.id, paths[0]); - } - - const targetless = new Set(graph.records - .filter((record) => DECLARED_KINDS.includes(record.source.kind) && !resolvesToFile(record, symbolPaths)) - .map((record) => record.id)); - const candidates = new Map>(); - for (const relation of graph.relations) { - for (const [left, right] of [[relation.from, relation.to], [relation.to, relation.from]] as const) { - const path = modulePaths.get(right); - if (!path || !targetless.has(left)) continue; - const values = candidates.get(left) ?? new Set(); - values.add(path); - candidates.set(left, values); - } - } - return new Map([...candidates.entries()] - .filter(([, paths]) => paths.size === 1) - .map(([recordId, paths]) => [recordId, [...paths][0] as string])); -} - -/** - * True when the record already names something a reader can open. - * - * A bare prose symbol does not count. `extractSymbols` returns acronyms such as - * `API` or `DSL`, and a topic keyed `symbol:api` groups sentences that share - * nothing but a word — a worse anchor than the module the linker proved. - */ -function resolvesToFile(record: IntentRecord, symbolPaths: Map): boolean { - const { tickets, paths, symbols } = record.statement.target; - if (tickets.length > 0 || paths.length > 0) return true; - const resolved = new Set(symbols - .flatMap(symbolAliases) - .map((symbol) => symbolPaths.get(symbol)) - .filter((value): value is string => Boolean(value))); - return resolved.size === 1; -} - -function indexUnambiguousSymbolPaths(records: IntentRecord[]): Map { - const candidates = new Map>(); - for (const record of records) { - const paths = record.statement.target.paths; - if (paths.length !== 1 || !paths[0]) continue; - for (const alias of record.statement.target.symbols.flatMap(symbolAliases)) { - const values = candidates.get(alias) ?? new Set(); - values.add(paths[0]); - candidates.set(alias, values); - } - } - return new Map([...candidates.entries()] - .filter(([, paths]) => paths.size === 1) - .map(([alias, paths]) => [alias, [...paths][0] as string])); -} - -/** - * Deterministic topic key. A ticket is the strongest cross-source identifier, - * then the file the record is about, then its normalized symbol. - * - * `statement.target.paths` outranks symbols and `source.path`: a TODO item is - * written in TODO.md but targets `src/…`, and keying it by its source file - * would file every task under TODO.md instead of the code it concerns. When a - * record has no target path, normalized symbol aliases still align - * `validateContract`, `Runtime.validateContract` and Rust `::` notation. - * A declaration with no target of its own falls back to the single module it - * is linked to, and only then to its own document under a separate `source:` - * namespace. "Written in X" is not "about X": sharing the `path:` namespace - * merged every unattributable release note into the topic for the changelog - * file itself — 283 of them beside the 20 that name it on `if-uri/urirun`, - * and 447 beside 40 on `semcod/goal` — so a document appeared to be a heavily - * declared topic with no implementation. Observed evidence is unaffected: AST, - * Git and configuration records always carry a target of their own and never - * reach this fallback. - */ -function primaryTargetKey( - record: IntentRecord, - symbolPaths: Map, - anchors: Map = new Map(), -): string { - const tickets = [...record.statement.target.tickets].sort(); - if (tickets.length === 1 && tickets[0]) return `ticket:${tickets[0]}`; - - if (tickets.length > 1 && tickets[0]) return `ticket:${tickets[0]}`; - - const targetPaths = [...new Set(record.statement.target.paths)].sort(); - if (targetPaths.length && targetPaths[0]) return `path:${targetPaths[0]}`; - - const symbols = [...new Set(record.statement.target.symbols.flatMap(symbolAliases))] - .sort((left, right) => left.split('.').length - right.split('.').length || left.localeCompare(right)); - const resolvedPaths = [...new Set(symbols.map((symbol) => symbolPaths.get(symbol)).filter((value): value is string => Boolean(value)))]; - if (resolvedPaths.length === 1 && resolvedPaths[0]) return `path:${resolvedPaths[0]}`; - - const anchor = anchors.get(record.id); - if (anchor) return `path:${anchor}`; - - if (symbols.length && symbols[0]) return `symbol:${symbols[0]}`; - - if (record.source.path) return `source:${record.source.path}`; - - return `record:${record.id}`; -} - -function indexDiagnostics(report: DiagnosticReport): Map { - const index = new Map(); - for (const diagnostic of report.diagnostics) { - for (const recordId of diagnostic.recordIds) { - const bucket = index.get(recordId) ?? []; - bucket.push(diagnostic); - index.set(recordId, bucket); - } - } - return index; -} - -/** - * Status is derived from lane presence first, because that is a structural fact - * about the topic. Diagnostics only refine the result: a topic that demonstrably - * holds both declared and observed records is never reported as "planned, no - * code" just because one of its members carries that diagnostic. - */ -/** - * Grades observed evidence without regrading the topic. - * - * AST or Git evidence outranks configuration: a parser found the symbol, or a - * commit touched the file. Configuration alone still proves the behaviour - * exists, so it stays `aligned` — the caller decides what to do with a - * headline where most of the alignment is configuration. - */ -function resolveEvidence(lanes: Record): RealityEvidence { - if ((lanes.ast ?? 0) > 0 || (lanes.git ?? 0) > 0) return 'code'; - if ((lanes.system ?? 0) > 0) return 'configuration'; - return 'none'; -} - -function resolveStatus(codes: Set, lanes: Record): RealityStatus { - const { declared, observed, changelog } = summarizeLaneTotals(lanes); - - // A contradiction outranks every structural reading of the same topic. - if (codes.has('CONFLICTING_INTENT')) return 'conflicting'; - - // Co-location is not semantic implementation. Diagnostics has inspected the - // relation basis and keeps this gap open when both lanes share only a path. - if (codes.has('PLANNED_NOT_IMPLEMENTED')) return 'planned_not_implemented'; - - if (declared === 0 && observed === 0) { - return changelog > 0 ? 'changelog_without_implementation' : 'unlinked'; - } - if (declared > 0 && observed === 0) { - return changelog > 0 && codes.has('CHANGELOG_WITHOUT_IMPLEMENTATION') - ? 'changelog_without_implementation' - : 'planned_not_implemented'; - } - if (observed > 0 && declared === 0) return 'implemented_not_planned'; - - // Both sides are present, so plan-to-code alignment is proven. Documentation - // coverage is an independent metric and its diagnostic remains attached to - // the row; requiring a document lane here made `aligned` impossible in a - // fully offline run because semantic document records are LLM-only. - return 'aligned'; -} - -function summarizeLaneTotals(lanes: Record): { - declared: number; - observed: number; - changelog: number; -} { - const declared = DECLARED_KINDS.reduce((total, kind) => total + (lanes[kind] ?? 0), 0); - const observed = OBSERVED_KINDS.reduce((total, kind) => total + (lanes[kind] ?? 0), 0); - const changelog = lanes.changelog ?? 0; - return { declared, observed, changelog }; -} - -/** - * The topic key names the row; a declared statement is appended as context when - * one exists. Labelling by an arbitrary member record would be misleading, since - * a file-keyed topic can hold hundreds of unrelated AST facts. - */ -function topicLabel(key: string, records: IntentRecord[]): string { - const separator = key.indexOf(':'); - const raw = separator >= 0 ? key.slice(separator + 1) : key; - // The reader must be able to tell a topic about a file from the bucket of - // statements that merely live in it and name nothing. - const value = key.startsWith('source:') ? `${raw} (unattributed)` : raw; - - const declared = records - .filter((record) => DECLARED_KINDS.includes(record.source.kind)) - .sort((left, right) => right.epistemic.confidence - left.epistemic.confidence)[0]; - if (!declared) return value; - - const object = declared.statement.object.trim() || declared.statement.text.trim(); - return object ? `${value} — ${object}` : value; -} - export interface RealitySvgOptions { title?: string; maxRows?: number; From cf84fc0cfcb5b1b79c4311c17ecc09c098395e72 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 16:08:33 +0200 Subject: [PATCH 27/43] refactor: move summary generation metadata builder to module --- src/summary/generation-metadata.ts | 36 ++++++++++++++++++++++++++++++ src/summary/summarizer.ts | 33 ++------------------------- 2 files changed, 38 insertions(+), 31 deletions(-) create mode 100644 src/summary/generation-metadata.ts diff --git a/src/summary/generation-metadata.ts b/src/summary/generation-metadata.ts new file mode 100644 index 0000000..6433cba --- /dev/null +++ b/src/summary/generation-metadata.ts @@ -0,0 +1,36 @@ +import { sha256, stableStringify } from '../core/id.js'; +import type { T2CConfig } from '../config/env.js'; +import { openRouterAuditConfiguration } from '../llm/audit.js'; +import { T2C_VERSION } from '../version.js'; +import type { + GroundedGenerationMetadata, + LlmResponseMetadata, +} from '../core/types.js'; + +export function generationMetadata( + config: T2CConfig, + mode: GroundedGenerationMetadata['requestedMode'], + response?: LlmResponseMetadata, + reason?: string, +): GroundedGenerationMetadata { + const effectiveMode = response ? 'llm' : 'deterministic'; + const degraded = mode === 'prefer-llm' && effectiveMode === 'deterministic'; + const configuration = openRouterAuditConfiguration( + config, + mode === 'deterministic' ? null : config.openRouter.summaryModel, + ); + return { + generator: 't2c/grounded-summary', + generatorVersion: '2', + runtimeVersion: T2C_VERSION, + generatedAt: new Date().toISOString(), + requestedMode: mode, + effectiveMode, + degraded, + model: response ? response.model ?? config.openRouter.summaryModel : null, + provider: response ? response.provider ?? 'openrouter' : null, + responseId: response?.responseId ?? null, + configurationFingerprint: sha256(stableStringify(configuration)), + reason: degraded ? reason ?? 'LLM_UNAVAILABLE' : null, + }; +} diff --git a/src/summary/summarizer.ts b/src/summary/summarizer.ts index 0d7ee24..30259d3 100644 --- a/src/summary/summarizer.ts +++ b/src/summary/summarizer.ts @@ -2,7 +2,7 @@ import { promises as fs } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import type { T2CConfig } from '../config/env.js'; -import { createConclusionId, sha256, stableStringify } from '../core/id.js'; +import { createConclusionId } from '../core/id.js'; import { groundRecordIdsByDiagnostics } from '../core/grounding.js'; import { pathExists } from '../core/io.js'; import { assertConclusions } from '../core/schema.js'; @@ -16,12 +16,11 @@ import type { LlmResponseMetadata, LlmExtractionMode, } from '../core/types.js'; -import { openRouterAuditConfiguration } from '../llm/audit.js'; import { OpenRouterClient } from '../llm/openrouter.js'; import { StructuredResponseError, structuredSchema as s, type StructuredSchema } from '../llm/structured-schema.js'; -import { T2C_VERSION } from '../version.js'; import { compactSummaryPayload } from './payload.js'; import { compareConclusions, renderSummaryMarkdown } from './render.js'; +import { generationMetadata } from './generation-metadata.js'; export interface SummaryResult { conclusions: Conclusion[]; @@ -282,34 +281,6 @@ function deterministicConclusions( return conclusions.sort(compareConclusions); } -function generationMetadata( - config: T2CConfig, - mode: GroundedGenerationMetadata['requestedMode'], - response?: LlmResponseMetadata, - reason?: string, -): GroundedGenerationMetadata { - const effectiveMode = response ? 'llm' : 'deterministic'; - const degraded = mode === 'prefer-llm' && effectiveMode === 'deterministic'; - const configuration = openRouterAuditConfiguration( - config, - mode === 'deterministic' ? null : config.openRouter.summaryModel, - ); - return { - generator: 't2c/grounded-summary', - generatorVersion: '2', - runtimeVersion: T2C_VERSION, - generatedAt: new Date().toISOString(), - requestedMode: mode, - effectiveMode, - degraded, - model: response ? response.model ?? config.openRouter.summaryModel : null, - provider: response ? response.provider ?? 'openrouter' : null, - responseId: response?.responseId ?? null, - configurationFingerprint: sha256(stableStringify(configuration)), - reason: degraded ? reason ?? 'LLM_UNAVAILABLE' : null, - }; -} - function summaryMode(options: SummaryOptions): GroundedGenerationMetadata['requestedMode'] { if (options.mode !== undefined) { if (options.mode === 'deterministic' || options.mode === 'prefer-llm' || options.mode === 'require-llm') { From 8b202735a4487604dc7780b7c6ce098da539bc84 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 16:15:37 +0200 Subject: [PATCH 28/43] refactor: move operation plan generation assertion to own module --- src/operations/generation-validation.ts | 69 +++++++++++++++++++++++++ src/operations/validation.ts | 26 +--------- 2 files changed, 70 insertions(+), 25 deletions(-) create mode 100644 src/operations/generation-validation.ts diff --git a/src/operations/generation-validation.ts b/src/operations/generation-validation.ts new file mode 100644 index 0000000..a8a9a2a --- /dev/null +++ b/src/operations/generation-validation.ts @@ -0,0 +1,69 @@ +import type { GroundedGenerationMetadata } from '../core/types.js'; + +const SHA256 = /^[a-f0-9]{64}$/; + +function asObject(value: unknown, name: string): Record { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw new Error(`${name} must be an object`); + } + return value as Record; +} + +function assertExactKeys(value: Record, expected: string[], name: string): void { + const actual = Object.keys(value).sort(); + const wanted = [...expected].sort(); + if (JSON.stringify(actual) !== JSON.stringify(wanted)) { + throw new Error(`${name} keys must be exactly: ${expected.join(', ')}`); + } +} + +function assertNonBlank(value: unknown, name: string): asserts value is string { + if (typeof value !== 'string' || !value.trim()) throw new Error(`${name} must be a non-blank string`); +} + +function assertDateString(value: unknown, name: string): void { + assertNonBlank(value, name); + if (!Number.isFinite(Date.parse(value))) throw new Error(`${name} must be an ISO date-time`); +} + +export function assertGeneration(value: unknown): asserts value is GroundedGenerationMetadata { + const generation = asObject(value, 'Operation plan generation'); + assertExactKeys( + generation, + [ + 'generator', + 'generatorVersion', + 'runtimeVersion', + 'generatedAt', + 'requestedMode', + 'effectiveMode', + 'degraded', + 'model', + 'provider', + 'responseId', + 'configurationFingerprint', + 'reason', + ], + 'Operation plan generation', + ); + for (const field of ['generator', 'generatorVersion', 'runtimeVersion'] as const) assertNonBlank(generation[field], `generation.${field}`); + assertDateString(generation.generatedAt, 'generation.generatedAt'); + if (!['deterministic', 'prefer-llm', 'require-llm'].includes(String(generation.requestedMode))) throw new Error('generation.requestedMode is invalid'); + if (!['deterministic', 'llm'].includes(String(generation.effectiveMode))) throw new Error('generation.effectiveMode is invalid'); + if (typeof generation.degraded !== 'boolean') throw new Error('generation.degraded must be a boolean'); + if (typeof generation.configurationFingerprint !== 'string' || !SHA256.test(generation.configurationFingerprint)) { + throw new Error('generation.configurationFingerprint must be SHA-256'); + } + for (const field of ['model', 'provider', 'responseId', 'reason'] as const) { + if (generation[field] !== null) assertNonBlank(generation[field], `generation.${field}`); + } + if (generation.effectiveMode === 'llm' && (generation.model === null || generation.provider === null)) { + throw new Error('LLM operation plans require model and provider provenance'); + } + if ( + generation.effectiveMode === 'deterministic' + && (generation.model !== null || generation.provider !== null || generation.responseId !== null) + ) { + throw new Error('Deterministic operation plans cannot claim LLM provenance'); + } +} diff --git a/src/operations/validation.ts b/src/operations/validation.ts index 37ac155..182f1ba 100644 --- a/src/operations/validation.ts +++ b/src/operations/validation.ts @@ -1,8 +1,8 @@ import { shortHash, stableStringify } from '../core/id.js'; import type { JsonValue } from '../core/types.js'; import type { OperationPlan, VariableContract } from './types.js'; +import { assertGeneration } from './generation-validation.js'; -const SHA256 = /^[a-f0-9]{64}$/; const VARIABLE_ID = /^VAR-[a-f0-9]{20}$/; const PLAN_ID = /^OPLAN-[a-f0-9]{20}$/; const STEP_ID = /^[a-z][a-z0-9-]{1,79}$/; @@ -159,30 +159,6 @@ function buildVariableContractId( return expectedId; } -function assertGeneration(value: unknown): void { - const generation = objectValue(value, 'Operation plan generation'); - exactKeys(generation, [ - 'generator', 'generatorVersion', 'runtimeVersion', 'generatedAt', 'requestedMode', 'effectiveMode', 'degraded', - 'model', 'provider', 'responseId', 'configurationFingerprint', 'reason', - ], 'Operation plan generation'); - for (const field of ['generator', 'generatorVersion', 'runtimeVersion'] as const) nonBlank(generation[field], `generation.${field}`); - dateString(generation.generatedAt, 'generation.generatedAt'); - if (!['deterministic', 'prefer-llm', 'require-llm'].includes(String(generation.requestedMode))) throw new Error('generation.requestedMode is invalid'); - if (!['deterministic', 'llm'].includes(String(generation.effectiveMode))) throw new Error('generation.effectiveMode is invalid'); - if (typeof generation.degraded !== 'boolean') throw new Error('generation.degraded must be a boolean'); - if (typeof generation.configurationFingerprint !== 'string' || !SHA256.test(generation.configurationFingerprint)) throw new Error('generation.configurationFingerprint must be SHA-256'); - for (const field of ['model', 'provider', 'responseId', 'reason'] as const) { - if (generation[field] !== null) nonBlank(generation[field], `generation.${field}`); - } - if (generation.effectiveMode === 'llm' && (generation.model === null || generation.provider === null)) { - throw new Error('LLM operation plans require model and provider provenance'); - } - if (generation.effectiveMode === 'deterministic' - && (generation.model !== null || generation.provider !== null || generation.responseId !== null)) { - throw new Error('Deterministic operation plans cannot claim LLM provenance'); - } -} - function assertAcyclic(steps: OperationPlan['steps']): void { const ids = new Set(steps.map((step) => step.id)); const visiting = new Set(); From 2d2704b9c1f56034c8697722222ea9f968d43942 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Tue, 4 Aug 2026 17:48:35 +0200 Subject: [PATCH 29/43] refactor(toon): continue cli and live benchmark decomposition Split remaining high-complexity paths in CLI/integration scripts into explicit helpers. --- golang/ast_extract.go | 12 +- java/JavaAstExtract.java | 47 +- project/README.md | 6 +- project/analysis.toon.yaml | 125 +- project/calls.mmd | 1019 +-- project/calls.png | Bin 100231 -> 83125 bytes project/calls.toon.yaml | 122 +- project/calls.yaml | 6230 +++++++++-------- project/compact_flow.mmd | 6 +- project/compact_flow.png | Bin 32714 -> 28319 bytes project/context.md | 142 +- project/evolution.toon.yaml | 44 +- project/flow.mmd | 16 +- project/flow.png | Bin 14203 -> 14891 bytes project/index.html | 2 +- project/map.toon.yaml | 2118 +++--- project/mermaid.export | 541 +- project/planfile-tickets.yaml | 707 +- project/project.toon.yaml | 36 +- project/prompt.txt | 4 +- python/ast_extract.py | 37 +- scripts/live-contract-check.mjs | 67 +- scripts/live-model-comparison.mjs | 140 +- .../research/rank-intent-graph-embeddings.py | 148 +- scripts/verify-env-contract.mjs | 106 +- scripts/verify-no-llm-imports.mjs | 39 +- sdk/rust/src/client.rs | 42 +- src/cli.ts | 128 +- src/communication/analyzer.ts | 89 +- src/core/schema/utils.ts | 34 +- src/diff/reality-build.ts | 43 +- src/diff/reality-totals.ts | 66 + src/evaluation/gold-cli.ts | 27 +- src/evaluation/gold-reranker-validation.ts | 39 + src/evaluation/gold-types.ts | 25 +- src/interfaces/a2a-message-command.ts | 5 +- src/interfaces/command-input.ts | 3 + src/operations/compile-cli.ts | 41 +- src/operations/generation-validation.ts | 84 +- src/operations/operation-step-validation.ts | 178 + src/operations/validation.ts | 141 +- src/pipeline/persist-optional-artifacts.ts | 128 + src/pipeline/run-persistence.ts | 58 +- src/summary/generation-metadata.ts | 43 +- src/synthesis/task-synthesis-metadata.ts | 28 + src/synthesis/tasks-llm.ts | 27 +- src/web/diff-ui-compare.ts | 105 + src/web/diff-ui-script.ts | 4 +- 48 files changed, 7127 insertions(+), 5925 deletions(-) create mode 100644 src/diff/reality-totals.ts create mode 100644 src/evaluation/gold-reranker-validation.ts create mode 100644 src/interfaces/command-input.ts create mode 100644 src/operations/operation-step-validation.ts create mode 100644 src/pipeline/persist-optional-artifacts.ts create mode 100644 src/synthesis/task-synthesis-metadata.ts create mode 100644 src/web/diff-ui-compare.ts diff --git a/golang/ast_extract.go b/golang/ast_extract.go index 5b8b3d3..8e9c0a5 100644 --- a/golang/ast_extract.go +++ b/golang/ast_extract.go @@ -151,10 +151,18 @@ func parseFile(relative string, source []byte) ([]Fact, string) { lines := strings.Split(string(source), "\n") collector := &factCollector{relative: relative, fileSet: fileSet, lines: lines} + collectPackageFact(parsed, collector) + collectImportFacts(parsed, collector) + collectDeclarationFacts(parsed, collector) + return collector.facts, "" +} +func collectPackageFact(parsed *ast.File, collector *factCollector) { collector.add(parsed.Name, "go_package_fact", "declare", parsed.Name.Name, strPtr(parsed.Name.Name), nil, map[string]any{"package": parsed.Name.Name}) +} +func collectImportFacts(parsed *ast.File, collector *factCollector) { for _, importSpec := range parsed.Imports { importPath, err := strconv.Unquote(importSpec.Path.Value) if err != nil { @@ -166,12 +174,12 @@ func parseFile(relative string, source []byte) ([]Fact, string) { } collector.add(importSpec, "go_import_fact", "depend_on", importPath, nil, nil, metadata) } +} +func collectDeclarationFacts(parsed *ast.File, collector *factCollector) { for _, declaration := range parsed.Decls { collector.visitDecl(declaration, parsed.Name.Name) } - - return collector.facts, "" } type factCollector struct { diff --git a/java/JavaAstExtract.java b/java/JavaAstExtract.java index 0b24379..42f3841 100644 --- a/java/JavaAstExtract.java +++ b/java/JavaAstExtract.java @@ -79,22 +79,47 @@ private static void parseFile( List> facts, List warnings) throws Exception { String source = Files.readString(file, StandardCharsets.UTF_8); + String relative = slash(root.relativize(file).toString()); DiagnosticCollector diagnostics = new DiagnosticCollector<>(); try (StandardJavaFileManager manager = compiler.getStandardFileManager(diagnostics, Locale.ROOT, StandardCharsets.UTF_8)) { - Iterable units = manager.getJavaFileObjects(file.toFile()); - JavacTask task = (JavacTask) compiler.getTask(null, manager, diagnostics, - List.of("-proc:none"), null, units); - Iterable parsed = task.parse(); - Trees trees = Trees.instance(task); - SourcePositions positions = trees.getSourcePositions(); - String relative = slash(root.relativize(file).toString()); - for (CompilationUnitTree unit : parsed) { - new Collector(relative, source, unit, positions, facts).scan(unit, null); - } + ParsedJavaCompilation parsed = parseCompilationUnits(compiler, diagnostics, manager, file); + scanCompilationUnits(parsed, relative, source, facts); } + collectFileDiagnostics(relative, diagnostics, warnings); + } + + private static ParsedJavaCompilation parseCompilationUnits( + JavaCompiler compiler, + DiagnosticCollector diagnostics, + StandardJavaFileManager manager, + Path file) throws IOException { + Iterable units = manager.getJavaFileObjects(file.toFile()); + JavacTask task = (JavacTask) compiler.getTask(null, manager, diagnostics, + List.of("-proc:none"), null, units); + Iterable parsed = task.parse(); + SourcePositions positions = Trees.instance(task).getSourcePositions(); + return new ParsedJavaCompilation(parsed, positions); + } + + private static void scanCompilationUnits( + ParsedJavaCompilation parsed, + String relative, + String source, + List> facts) { + for (CompilationUnitTree unit : parsed.units()) { + new Collector(relative, source, unit, parsed.positions(), facts).scan(unit, null); + } + } + + private record ParsedJavaCompilation( + Iterable units, + SourcePositions positions) { + } + + private static void collectFileDiagnostics(String relative, DiagnosticCollector diagnostics, List warnings) { for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { if (diagnostic.getKind() == Diagnostic.Kind.ERROR) { - warnings.add(slash(root.relativize(file).toString()) + ":" + diagnostic.getLineNumber() + warnings.add(relative + ":" + diagnostic.getLineNumber() + ": parse error: " + diagnostic.getMessage(Locale.ROOT)); } } diff --git a/project/README.md b/project/README.md index 19770e7..baca231 100644 --- a/project/README.md +++ b/project/README.md @@ -333,8 +333,8 @@ code2llm ./ -f yaml --separate-orphans **Generated by**: `code2llm ./ -f all --readme` **Analysis Date**: 2026-08-04 -**Total Functions**: 4129 -**Total Classes**: 404 -**Modules**: 281 +**Total Functions**: 4218 +**Total Classes**: 403 +**Modules**: 294 For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm diff --git a/project/analysis.toon.yaml b/project/analysis.toon.yaml index 6590bfc..f7e61ad 100644 --- a/project/analysis.toon.yaml +++ b/project/analysis.toon.yaml @@ -1,34 +1,23 @@ -# code2llm | 281f 43441L | typescript:173,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 -# generated in 0.31s -# CC̅=3.1 | critical:24/4129 | dups:0 | cycles:0 +# code2llm | 294f 44016L | typescript:187,json:40,python:15,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04 +# generated in 0.33s +# CC̅=3.0 | critical:10/4218 | dups:0 | cycles:0 -HEALTH[20]: - 🔴 GOD src/diff/reality.ts = 690L, 4 classes, 89m, max CC=15 +HEALTH[10]: 🟡 CC generationMetadata CC=17 (limit:15) - 🟡 CC compareGraphs CC=15 (limit:15) - 🟡 CC looksLikeJson CC=20 (limit:15) - 🟡 CC buildRealityTotals CC=15 (limit:15) - 🟡 CC persistPipelineArtifacts CC=17 (limit:15) - 🟡 CC persistFailedRunState CC=19 (limit:15) - 🟡 CC assertRerankerDecision CC=17 (limit:15) - 🟡 CC assertGeneration CC=16 (limit:15) - 🟡 CC validateOperationStep CC=23 (limit:15) - 🟡 CC collectAgentActionIssues CC=15 (limit:15) 🟡 CC parseFile CC=38 (limit:15) - 🟡 CC makefile CC=28 (limit:15) - 🟡 CC visited CC=15 (limit:15) - 🟡 CC visit CC=15 (limit:15) + 🟡 CC collectDockerReferences CC=20 (limit:15) 🟡 CC main CC=27 (limit:15) - 🟡 CC iter_python_files CC=16 (limit:15) 🟡 CC run CC=26 (limit:15) 🟡 CC baseUrl CC=17 (limit:15) 🟡 CC token CC=17 (limit:15) + 🟡 CC root CC=17 (limit:15) + 🟡 CC main CC=17 (limit:15) + 🟡 CC run CC=20 (limit:15) -REFACTOR[2]: - 1. split src/diff/reality.ts (god module) - 2. split 19 high-CC methods (CC>15) +REFACTOR[1]: + 1. split 10 high-CC methods (CC>15) -PIPELINES[2116]: +PIPELINES[2102]: [1] Src [main]: main → arguments PURITY: 100% pure [2] Src [new]: new @@ -134,12 +123,8 @@ LAYERS: php/ CC̄=8.7 ←in:0 →out:0 │ !! ast_extract.php 233L 0C 7m CC=38 ←0 │ - golang/ CC̄=5.3 ←in:0 →out:0 - │ ast_extract.go 368L 3C 15m CC=14 ←0 - │ - python/ CC̄=4.2 ←in:0 →out:1 - │ !! ast_extract 221L 1C 18m CC=16 ←0 - │ requirements.txt 1L 0C 0m CC=0.0 ←0 + golang/ CC̄=4.6 ←in:0 →out:0 + │ ast_extract.go 376L 3C 18m CC=14 ←0 │ scripts/ CC̄=3.4 ←in:0 →out:0 │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0 @@ -147,13 +132,13 @@ LAYERS: │ live-contract-check.mjs 200L 0C 26m CC=5 ←0 │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0 │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0 + │ !! verify-env-contract.mjs 139L 0C 21m CC=20 ←0 │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0 │ e2e.sh 109L 0C 3m CC=0.0 ←0 - │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0 │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0 + │ verify-no-llm-imports.mjs 99L 0C 11m CC=8 ←0 │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0 │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0 - │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0 │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0 │ smoke.sh 57L 0C 0m CC=0.0 ←0 │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0 @@ -167,29 +152,27 @@ LAYERS: │ a2a-request.sh 23L 0C 0m CC=0.0 ←0 │ mcp-request.sh 11L 0C 0m CC=0.0 ←0 │ - src/ CC̄=3.1 ←in:0 →out:0 - │ !! cli.ts 942L 1C 124m CC=13 ←0 + src/ CC̄=3.0 ←in:0 →out:0 + │ !! cli.ts 985L 1C 133m CC=13 ←0 │ !! actions.ts 806L 1C 106m CC=13 ←0 - │ !! reality.ts 690L 4C 89m CC=15 ←0 - │ !! analyzer.ts 596L 3C 81m CC=15 ←0 + │ !! analyzer.ts 619L 3C 85m CC=14 ←0 │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0 │ !! text.ts 530L 0C 61m CC=14 ←0 │ gold-cases.ts 489L 4C 62m CC=8 ←0 │ diagnostics.ts 459L 1C 59m CC=11 ←0 │ implementation-source-patch-apply-core.ts 434L 6C 50m CC=13 ←0 - │ !! validation.ts 429L 0C 69m CC=23 ←0 - │ !! gold-types.ts 405L 15C 17m CC=17 ←0 │ git.ts 397L 6C 57m CC=11 ←0 │ implementation-source-patch-assert.ts 397L 2C 52m CC=11 ←0 - │ !! run.ts 384L 4C 33m CC=20 ←0 │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0 + │ gold-types.ts 382L 15C 16m CC=12 ←0 │ todo-patch.ts 372L 5C 52m CC=12 ←0 │ docs-deterministic.ts 369L 3C 43m CC=11 ←0 │ implementation-helpers.ts 357L 5C 33m CC=10 ←0 + │ reality-build.ts 346L 2C 44m CC=14 ←0 │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0 │ workspace.ts 342L 3C 54m CC=12 ←0 + │ validation.ts 338L 0C 64m CC=11 ←0 │ intake-contract.ts 334L 7C 34m CC=14 ←0 - │ summarizer.ts 333L 5C 27m CC=10 ←0 │ a2a.ts 332L 0C 47m CC=9 ←0 │ gold.ts 329L 3C 31m CC=14 ←0 │ mcp-tools.ts 323L 1C 10m CC=10 ←0 @@ -199,29 +182,31 @@ LAYERS: │ result.ts 311L 0C 23m CC=7 ←0 │ intent.ts 309L 4C 37m CC=12 ←0 │ runtime-cycle.ts 306L 1C 35m CC=9 ←0 - │ !! run-persistence.ts 297L 0C 28m CC=19 ←0 + │ summarizer.ts 304L 5C 24m CC=10 ←0 │ watcher.ts 292L 6C 42m CC=12 ←0 │ reranker-llm.ts 291L 2C 35m CC=9 ←0 │ intake-service.ts 291L 2C 48m CC=13 ←0 - │ linker.ts 286L 1C 52m CC=8 ←3 + │ linker.ts 286L 1C 52m CC=8 ←2 │ implementation-review.ts 274L 3C 33m CC=7 ←0 │ docs-llm.ts 269L 1C 28m CC=12 ←0 │ implementation-helpers-plans.ts 269L 3C 36m CC=9 ←0 │ typescript.ts 266L 1C 26m CC=8 ←0 - │ tasks-llm.ts 266L 4C 22m CC=11 ←0 │ nl-llm-helpers.ts 261L 3C 31m CC=11 ←0 │ mcp.ts 261L 2C 38m CC=9 ←0 + │ utils.ts 259L 0C 47m CC=8 ←0 │ text-render.ts 251L 2C 33m CC=13 ←0 │ candidate.ts 250L 1C 19m CC=8 ←0 │ code-change.ts 250L 19C 0m CC=0.0 ←0 + │ tasks-llm.ts 243L 4C 20m CC=11 ←0 │ openrouter-request.ts 242L 4C 30m CC=9 ←0 │ openrouter.ts 240L 5C 31m CC=13 ←0 - │ utils.ts 239L 0C 42m CC=8 ←0 + │ run-persistence.ts 236L 0C 16m CC=8 ←0 │ diff.ts 235L 1C 38m CC=11 ←0 │ implementation-source-patch-create.ts 235L 3C 30m CC=6 ←0 │ implementation-source-patch-apply-diff.ts 233L 3C 31m CC=11 ←0 │ code-change-path.ts 232L 0C 23m CC=11 ←0 │ env.ts 231L 1C 20m CC=13 ←0 + │ reality.ts 223L 2C 37m CC=9 ←0 │ structured-schema.ts 218L 5C 25m CC=10 ←0 │ model-comparison.ts 218L 4C 21m CC=12 ←0 │ identity.ts 216L 3C 33m CC=12 ←0 @@ -233,15 +218,18 @@ LAYERS: │ implementation.ts 208L 4C 21m CC=12 ←0 │ ignore.ts 200L 3C 23m CC=10 ←0 │ docs-record.ts 193L 0C 34m CC=14 ←0 - │ run-helpers.ts 188L 0C 18m CC=11 ←0 + │ run-execution.ts 189L 0C 26m CC=12 ←0 │ a2a-card.ts 181L 0C 7m CC=3 ←0 │ markdown-llm.ts 178L 2C 11m CC=9 ←0 + │ operation-step-validation.ts 178L 0C 18m CC=11 ←0 + │ run-helpers.ts 177L 0C 17m CC=11 ←0 │ pipeline.ts 173L 7C 0m CC=0.0 ←0 │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0 │ typescript.ts 172L 6C 16m CC=2 ←0 │ a2a-run-list-item.ts 171L 2C 29m CC=8 ←0 │ ast.ts 167L 2C 15m CC=12 ←0 │ id.ts 167L 0C 16m CC=5 ←0 + │ run-failed.ts 167L 0C 15m CC=9 ←0 │ a2a-types.ts 164L 9C 14m CC=10 ←0 │ nl-llm.ts 163L 2C 19m CC=10 ←0 │ linker-candidates.ts 163L 1C 23m CC=10 ←0 @@ -256,10 +244,11 @@ LAYERS: │ text-myers.ts 152L 3C 27m CC=9 ←0 │ docs-chunks.ts 147L 0C 29m CC=8 ←0 │ symbol-resolution.ts 146L 3C 22m CC=10 ←0 - │ !! a2a-message-command.ts 144L 0C 30m CC=20 ←1 │ implementation-helpers-acceptance.ts 141L 2C 15m CC=4 ←0 + │ a2a-message-command.ts 141L 0C 29m CC=6 ←1 │ content-cache.ts 139L 4C 12m CC=5 ←0 │ classifier.ts 135L 4C 32m CC=6 ←0 + │ persist-optional-artifacts.ts 128L 0C 6m CC=7 ←0 │ gold-extraction.ts 127L 0C 13m CC=5 ←0 │ implementation-semantic.ts 125L 1C 13m CC=9 ←0 │ a2a-message.ts 125L 0C 19m CC=12 ←0 @@ -268,15 +257,19 @@ LAYERS: │ validation.ts 111L 0C 11m CC=7 ←0 │ nl.ts 107L 1C 12m CC=10 ←0 │ types.ts 106L 11C 0m CC=0.0 ←0 + │ diff-ui-compare.ts 105L 0C 20m CC=7 ←0 │ svg.ts 104L 2C 7m CC=2 ←0 + │ generation-validation.ts 101L 0C 13m CC=8 ←0 │ changelog.ts 99L 0C 16m CC=11 ←0 │ records.ts 97L 0C 10m CC=6 ←0 │ a2a-history.ts 96L 1C 17m CC=13 ←0 │ todo.ts 93L 0C 18m CC=5 ←0 │ changelog-signal.ts 89L 0C 12m CC=8 ←0 + │ run-types.ts 89L 4C 0m CC=0.0 ←0 │ mcp-resources.ts 88L 0C 13m CC=6 ←0 │ contract.ts 84L 0C 7m CC=1 ←0 │ linker-relations.ts 83L 3C 7m CC=7 ←0 + │ run-documentation.ts 80L 0C 4m CC=9 ←0 │ governed-intake.proto 78L 0C 0m CC=0.0 ←0 │ implementation-helpers-close.ts 75L 2C 10m CC=4 ←0 │ implementation-source-patch-diff.ts 74L 0C 16m CC=6 ←0 @@ -284,33 +277,38 @@ LAYERS: │ docs-types.ts 68L 7C 0m CC=0.0 ←0 │ markdown-block.ts 67L 1C 3m CC=10 ←0 │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0 + │ reality-totals.ts 66L 0C 9m CC=5 ←0 + │ run.ts 66L 0C 6m CC=2 ←0 │ artifact.ts 66L 2C 10m CC=6 ←0 │ payload.ts 65L 0C 8m CC=12 ←0 + │ gold-cli.ts 65L 0C 11m CC=8 ←0 │ communication.ts 63L 1C 7m CC=7 ←0 │ capability-evidence.ts 62L 0C 14m CC=10 ←0 │ implementation-targets.ts 61L 0C 9m CC=5 ←0 + │ generation-metadata.ts 61L 0C 8m CC=4 ←0 │ render.ts 61L 0C 13m CC=10 ←0 │ run-summary.ts 58L 1C 4m CC=5 ←0 │ target.ts 57L 0C 12m CC=9 ←0 │ security.ts 55L 0C 11m CC=7 ←0 + │ compile-cli.ts 55L 0C 9m CC=6 ←0 │ index.ts 53L 0C 0m CC=0.0 ←0 │ gold-metrics.ts 50L 1C 11m CC=4 ←0 │ external.ts 48L 1C 5m CC=9 ←0 │ diagnostics.ts 45L 2C 0m CC=0.0 ←0 - │ gold-cli.ts 44L 0C 10m CC=12 ←0 │ docs-schema.ts 43L 0C 5m CC=1 ←0 │ reranker-response.ts 42L 1C 5m CC=1 ←0 │ python.ts 39L 0C 6m CC=2 ←0 + │ gold-reranker-validation.ts 39L 0C 4m CC=9 ←0 │ text-types.ts 39L 4C 0m CC=0.0 ←0 │ implementation-helpers.ts 39L 0C 0m CC=0.0 ←0 │ intake-actions.ts 38L 0C 10m CC=6 ←0 │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0 │ markdown.ts 35L 1C 4m CC=4 ←0 │ php.ts 34L 0C 6m CC=2 ←0 - │ compile-cli.ts 34L 0C 7m CC=10 ←0 │ constants.ts 31L 0C 14m CC=1 ←0 │ unsupported.ts 30L 0C 4m CC=5 ←0 │ implementation-helpers-shared.ts 29L 0C 2m CC=1 ←0 + │ task-synthesis-metadata.ts 28L 0C 2m CC=3 ←0 │ !! record-metadata.ts 27L 0C 3m CC=17 ←0 │ implementation-indexing.ts 25L 0C 4m CC=4 ←3 │ failure.ts 25L 1C 3m CC=7 ←0 @@ -321,8 +319,8 @@ LAYERS: │ types.ts 20L 2C 0m CC=0.0 ←0 │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0 │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0 + │ diff-ui-script.ts 19L 0C 7m CC=12 ←0 │ audit.ts 19L 0C 1m CC=1 ←0 - │ !! diff-ui-script.ts 17L 0C 8m CC=15 ←0 │ implementation-diagnostics.ts 17L 0C 2m CC=2 ←0 │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0 │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0 @@ -335,21 +333,19 @@ LAYERS: │ implementation-source-patch-apply.ts 8L 0C 0m CC=0.0 ←0 │ index.ts 4L 0C 0m CC=0.0 ←0 │ index.ts 4L 0C 0m CC=0.0 ←0 + │ command-input.ts 3L 0C 1m CC=1 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 │ version.ts 2L 0C 0m CC=0.0 ←0 │ index.ts 1L 0C 0m CC=0.0 ←0 │ implementation.ts 1L 0C 0m CC=0.0 ←0 │ llm.ts 1L 0C 0m CC=0.0 ←0 │ - java/ CC̄=3.0 ←in:2 →out:0 - │ JavaAstExtract.java 260L 1C 12m CC=10 ←1 - │ sdk/ CC̄=2.7 ←in:0 →out:0 │ client 469L 7C 45m CC=7 ←0 │ index.ts 420L 14C 45m CC=8 ←0 │ Client.php 401L 1C 27m CC=11 ←0 + │ client.rs 243L 1C 24m CC=14 ←0 │ runtime 225L 3C 10m CC=9 ←0 - │ !! client.rs 221L 1C 19m CC=18 ←0 │ types.go 215L 19C 2m CC=4 ←0 │ client.go 197L 3C 10m CC=9 ←0 │ todo2code_sdk 171L 1C 11m CC=2 ←0 @@ -375,6 +371,9 @@ LAYERS: │ __init__ 13L 0C 0m CC=0.0 ←0 │ __init__ 1L 0C 0m CC=0.0 ←0 │ + java/ CC̄=2.6 ←in:2 →out:0 + │ JavaAstExtract.java 285L 1C 14m CC=10 ←1 + │ examples/ CC̄=2.3 ←in:0 →out:0 │ request-handlers.ts 88L 0C 18m CC=9 ←0 │ render.ts 64L 1C 12m CC=4 ←0 @@ -438,22 +437,24 @@ LAYERS: │ !! dataset.json 2410L 0C 0m CC=0.0 ←0 │ !! dataset.json 761L 0C 0m CC=0.0 ←0 │ + python/ CC̄=0.0 ←in:0 →out:0 + │ requirements.txt 1L 0C 0m CC=0.0 ←0 + │ COUPLING: - scripts.research sdk.python src.live src.synthesis src.graph java examples.frontend python - scripts.research ── 7 1 1 !! fan-out - sdk.python ── 4 1 2 1 !! fan-out - src.live ←7 ── hub - src.synthesis ←1 ←4 ── hub - src.graph ←1 ←1 ── ←1 - java ←2 ── - examples.frontend ←1 ── - python 1 ── + scripts.research sdk.python src.live src.synthesis java src.graph examples.frontend + scripts.research ── 7 1 1 !! fan-out + sdk.python ── 4 2 1 1 !! fan-out + src.live ←7 ── hub + src.synthesis ←1 ←4 ── hub + java ←2 ── + src.graph ←1 ←1 ── + examples.frontend ←1 ── CYCLES: none - HUB: src.live/ (fan-in=7) HUB: src.synthesis/ (fan-in=5) - SMELL: scripts.research/ fan-out=9 → split needed + HUB: src.live/ (fan-in=7) SMELL: sdk.python/ fan-out=8 → split needed + SMELL: scripts.research/ fan-out=9 → split needed EXTERNAL: validation: run `vallm batch .` → validation.toon diff --git a/project/calls.mmd b/project/calls.mmd index 8ce239f..250ad32 100644 --- a/project/calls.mmd +++ b/project/calls.mmd @@ -1,417 +1,460 @@ flowchart LR -%% generated in 0.04s +%% generated in 0.05s subgraph examples__backend - examples__backend__src__request_handlers__handleHealth["handleHealth"] - examples__backend__src__validation__agent["agent"] - examples__backend__src__request_handlers__size["size"] - examples__backend__src__server__createBackend["createBackend"] - examples__backend__src__request_handlers__handleEventList["handleEventList"] examples__backend__src__request_handlers__handleRequest["handleRequest"] - examples__backend__src__validation__invalid["invalid"] - examples__backend__src__server__sendJson["sendJson"] - examples__backend__src__request_handlers__handleEventPublish["handleEventPublish"] + examples__backend__src__server__createBackend["createBackend"] + examples__backend__src__validation__validateEventPayload["validateEventPayload"] examples__backend__src__request_handlers__parseOffset["parseOffset"] - examples__backend__src__validation__record["record"] - examples__backend__src__request_handlers__event["event"] + examples__backend__src__request_handlers__handleEventPublish["handleEventPublish"] examples__backend__src__request_handlers__parseLimit["parseLimit"] - examples__backend__src__request_handlers__validation["validation"] - examples__backend__src__server__startBackend["startBackend"] - examples__backend__src__server__store["store"] - examples__backend__src__request_handlers__readBody["readBody"] + examples__backend__src__validation__invalid["invalid"] + examples__backend__src__validation__agent["agent"] + examples__backend__src__server__server["server"] examples__backend__src__request_handlers__sendJson["sendJson"] - examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] - examples__backend__src__validation__validateEventPayload["validateEventPayload"] - examples__backend__src__validation__action["action"] + examples__backend__src__server__store["store"] + examples__backend__src__request_handlers__event["event"] + examples__backend__src__validation__record["record"] + examples__backend__src__request_handlers__handleEventList["handleEventList"] examples__backend__src__request_handlers__MAX_BODY_BYTES["MAX_BODY_BYTES"] - examples__backend__src__server__server["server"] + examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"] examples__backend__src__validation__object["object"] + examples__backend__src__request_handlers__handleHealth["handleHealth"] + examples__backend__src__request_handlers__readBody["readBody"] + examples__backend__src__server__sendJson["sendJson"] + examples__backend__src__validation__action["action"] + examples__backend__src__request_handlers__validation["validation"] + examples__backend__src__request_handlers__size["size"] + examples__backend__src__server__startBackend["startBackend"] end subgraph examples__frontend - examples__frontend__src__app__state["state"] examples__frontend__src__render__renderTable["renderTable"] examples__frontend__src__app__refresh["refresh"] + examples__frontend__src__app__createState["createState"] + examples__frontend__src__app__reload["reload"] examples__frontend__src__render__headerRow["headerRow"] + examples__frontend__src__render__toRows["toRows"] examples__frontend__src__app__mountPanel["mountPanel"] - examples__frontend__src__app__reload["reload"] examples__frontend__src__render__classifyEvent["classifyEvent"] - examples__frontend__src__render__toRows["toRows"] - examples__frontend__src__app__createState["createState"] + examples__frontend__src__app__state["state"] end subgraph examples__src examples__src__runtime__executeContract["executeContract"] examples__src__runtime__validateContract["validateContract"] end subgraph java__JavaAstExtract - java__JavaAstExtract__JavaAstExtract__slash["slash"] - java__JavaAstExtract__JavaAstExtract__collect["collect"] - java__JavaAstExtract__JavaAstExtract__json["json"] java__JavaAstExtract__JavaAstExtract__map["map"] - java__JavaAstExtract__JavaAstExtract__try["try"] + java__JavaAstExtract__JavaAstExtract__collect["collect"] + java__JavaAstExtract__JavaAstExtract__add["add"] java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] + java__JavaAstExtract__JavaAstExtract__try["try"] java__JavaAstExtract__JavaAstExtract__escape["escape"] - java__JavaAstExtract__JavaAstExtract__add["add"] - java__JavaAstExtract__JavaAstExtract__emit["emit"] + java__JavaAstExtract__JavaAstExtract__scanCompilationUnits["scanCompilationUnits"] + java__JavaAstExtract__JavaAstExtract__json["json"] + java__JavaAstExtract__JavaAstExtract__collectFileDiagnostics["collectFileDiagnostics"] java__JavaAstExtract__JavaAstExtract__main["main"] + java__JavaAstExtract__JavaAstExtract__emit["emit"] end subgraph rust_ast__src - rust_ast__src__main__visit_item_use["visit_item_use"] - rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] rust_ast__src__main__visit_item_static["visit_item_static"] - rust_ast__src__main__visit_item_const["visit_item_const"] - rust_ast__src__main__add["add"] - rust_ast__src__main__visit_item_mod["visit_item_mod"] - rust_ast__src__main__visit_item_fn["visit_item_fn"] - rust_ast__src__main__qualified["qualified"] - rust_ast__src__main__modifiers["modifiers"] rust_ast__src__main__visit_item_type["visit_item_type"] - rust_ast__src__main__visit_item_enum["visit_item_enum"] - rust_ast__src__main__slash["slash"] + rust_ast__src__main__arguments["arguments"] rust_ast__src__main__visit_expr_call["visit_expr_call"] + rust_ast__src__main__visit_item_mod["visit_item_mod"] + rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"] + rust_ast__src__main__visit_item_struct["visit_item_struct"] rust_ast__src__main__visit_item_trait["visit_item_trait"] + rust_ast__src__main__qualified["qualified"] + rust_ast__src__main__collect_files["collect_files"] rust_ast__src__main__excerpt["excerpt"] - rust_ast__src__main__main["main"] + rust_ast__src__main__add["add"] rust_ast__src__main__type_item["type_item"] - rust_ast__src__main__collect_files["collect_files"] + rust_ast__src__main__visit_item_fn["visit_item_fn"] + rust_ast__src__main__main["main"] + rust_ast__src__main__visit_item_use["visit_item_use"] rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"] - rust_ast__src__main__arguments["arguments"] - rust_ast__src__main__visit_item_struct["visit_item_struct"] - end - subgraph src__cli - src__cli__main["main"] - src__cli__svg["svg"] - src__cli__handleExtractAst["handleExtractAst"] - src__cli__handleDiagnose["handleDiagnose"] - src__cli__handleExtract["handleExtract"] - src__cli__result["result"] - src__cli__taskFile["taskFile"] - src__cli__handleCommunication["handleCommunication"] - src__cli__isPlanSet["isPlanSet"] - src__cli__doctor["doctor"] - src__cli__handleLink["handleLink"] - src__cli__emitExtraction["emitExtraction"] - src__cli__parseArgs["parseArgs"] - src__cli__handleDiff["handleDiff"] - src__cli__optionTaskMode["optionTaskMode"] - src__cli__handleCompareWorkspace["handleCompareWorkspace"] - src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"] - src__cli__handleWatch["handleWatch"] - src__cli__handleExtractCommunication["handleExtractCommunication"] - src__cli__handleGraphDiff["handleGraphDiff"] - src__cli__emitJson["emitJson"] - src__cli__view["view"] - src__cli__controller["controller"] - src__cli__handleApplySourcePatch["handleApplySourcePatch"] - src__cli__buildDiffPayload["buildDiffPayload"] - src__cli__context["context"] - src__cli__handleRenderTodo["handleRenderTodo"] - src__cli__handleExtractDocs["handleExtractDocs"] - src__cli__printHelp["printHelp"] - src__cli__optionNullableString["optionNullableString"] - src__cli__optionPipelineTaskMode["optionPipelineTaskMode"] - src__cli__handleReality["handleReality"] - src__cli__optionString["optionString"] - src__cli__handleProposeTodo["handleProposeTodo"] - src__cli__resolveMainCommand["resolveMainCommand"] - src__cli__handleExtractConfig["handleExtractConfig"] - src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] - src__cli__diff["diff"] - src__cli__optionNumber["optionNumber"] - src__cli__handler["handler"] - src__cli__resolvePipelineRoot["resolvePipelineRoot"] - src__cli__root["root"] - src__cli__handleIntake["handleIntake"] - src__cli__handleProposeSourcePatch["handleProposeSourcePatch"] - src__cli__handleProposeCodeChange["handleProposeCodeChange"] - src__cli__optionNlMode["optionNlMode"] - src__cli__commandHandlers["commandHandlers"] - src__cli__execFileAsync["execFileAsync"] - src__cli__optionList["optionList"] - src__cli__handleExtractGit["handleExtractGit"] - src__cli__handleExtractNl["handleExtractNl"] - src__cli__command["command"] - src__cli__formatWatchEvent["formatWatchEvent"] - src__cli__diagnosticsPath["diagnosticsPath"] - src__cli__handleRenderCodeChange["handleRenderCodeChange"] - src__cli__handleSummarize["handleSummarize"] - src__cli__reportPipelineDegradation["reportPipelineDegradation"] - src__cli__file["file"] - src__cli__handleExtractMarkdown["handleExtractMarkdown"] - src__cli__pipeline["pipeline"] - src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"] - src__cli__handleExtractRuntime["handleExtractRuntime"] - src__cli__absolute["absolute"] - src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] - src__cli__diagnostics["diagnostics"] - src__cli__parsed["parsed"] - src__cli__initProject["initProject"] - src__cli__invokedPath["invokedPath"] - src__cli__handleCloseCodeChange["handleCloseCodeChange"] - src__cli__buildGitDiff["buildGitDiff"] - src__cli__stop["stop"] - src__cli__handleApplyTodo["handleApplyTodo"] - src__cli__optionBoolean["optionBoolean"] - src__cli__optionLlmMode["optionLlmMode"] - src__cli__parseDiffMode["parseDiffMode"] - src__cli__stamp["stamp"] - src__cli__optionSummaryMode["optionSummaryMode"] - src__cli__buildFileDiff["buildFileDiff"] - src__cli__handlePipeline["handlePipeline"] - src__cli__buildPipelineOptions["buildPipelineOptions"] + rust_ast__src__main__modifiers["modifiers"] + rust_ast__src__main__slash["slash"] + rust_ast__src__main__visit_item_const["visit_item_const"] + rust_ast__src__main__visit_item_enum["visit_item_enum"] end subgraph src__extractors - src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] - src__extractors__nl__absolute["absolute"] - src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] - src__extractors__git__extractChangedSymbols["extractChangedSymbols"] - src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] - src__extractors__nl__confidence["confidence"] - src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] - src__extractors__docs_deterministic__primePathMapper["primePathMapper"] + src__extractors__docs_record__fallback["fallback"] src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"] - src__extractors__docs_chunks__sectionText["sectionText"] - src__extractors__docs_deterministic__heading["heading"] - src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] - src__extractors__ast__isIntentRecords["isIntentRecords"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] - src__extractors__todo__body["body"] - src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"] - src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] - src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] - src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] - src__extractors__docs_record__anchorToSource["anchorToSource"] - src__extractors__docs_record__allowedAction["allowedAction"] - src__extractors__communication_helpers__listValue["listValue"] + src__extractors__docs_chunks__index["index"] + src__extractors__ast__typescript__context["context"] + src__extractors__nl__body["body"] + src__extractors__ast__external__result["result"] + src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] + src__extractors__ast__typescript__handleCallExpression["handleCallExpression"] + src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"] + src__extractors__todo__raw["raw"] + src__extractors__ast__typescript__callee["callee"] src__extractors__todo__resolvedPaths["resolvedPaths"] - src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] - src__extractors__runtime_cycle__proposalAction["proposalAction"] - src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] - src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] - src__extractors__runtime_cycle__results["results"] - src__extractors__docs_deterministic__resolver["resolver"] - src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] - src__extractors__docs_schema__documentRecord["documentRecord"] - src__extractors__configuration__uniqueEntries["uniqueEntries"] - src__extractors__runtime_cycle__tags["tags"] - src__extractors__nl_llm_helpers__NlAttemptError__action["action"] - src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] - src__extractors__docs_record__hasTarget["hasTarget"] - src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] - src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] - src__extractors__configuration__entry["entry"] - src__extractors__todo__match["match"] - src__extractors__docs_chunks__workerCount["workerCount"] - src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] - src__extractors__communication_helpers__match["match"] - src__extractors__todo__checked["checked"] - src__extractors__ast__records__moduleRecords["moduleRecords"] - src__extractors__runtime_cycle__proposalRecord["proposalRecord"] - src__extractors__runtime_cycle__factsMetadata["factsMetadata"] - src__extractors__git__extractGitIntent["extractGitIntent"] - src__extractors__docs_schema__target["target"] - src__extractors__nl__object["object"] - src__extractors__communication_helpers__heading["heading"] src__extractors__configuration__bounded["bounded"] - src__extractors__ast__external__execFileAsync["execFileAsync"] - src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] - src__extractors__nl_llm__NlLlmRequiredError__client["client"] - src__extractors__git__root["root"] - src__extractors__runtime_cycle__violationRecord["violationRecord"] - src__extractors__todo__text["text"] - src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] - src__extractors__configuration__tomlEntries["tomlEntries"] - src__extractors__ast__records__adapterRecords["adapterRecords"] - src__extractors__communication_helpers__raw["raw"] - src__extractors__markdown_paths__basenames["basenames"] - src__extractors__changelog__relative["relative"] - src__extractors__git__readStats["readStats"] - src__extractors__runtime_cycle__jsonScalar["jsonScalar"] + src__extractors__todo__classified["classified"] + src__extractors__communication_helpers__normalize["normalize"] + src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"] + src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"] + src__extractors__configuration__uniqueEntries["uniqueEntries"] + src__extractors__todo__extractTodo["extractTodo"] + src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"] + src__extractors__nl__extractNlIntent["extractNlIntent"] + src__extractors__nl__missing["missing"] + src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET["NL_ACTION_SET"] + src__extractors__ast__typescript__extractSymbolName["extractSymbolName"] + src__extractors__docs_record__isPlaceholder["isPlaceholder"] src__extractors__docs_deterministic__match["match"] - src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] - src__extractors__git__runGit["runGit"] - src__extractors__git__readCommits["readCommits"] - src__extractors__markdown_paths__headingScopes["headingScopes"] - src__extractors__ast__isExtractionResult["isExtractionResult"] - src__extractors__markdown_paths__index["index"] - src__extractors__communication_file_helpers__envelope["envelope"] + src__extractors__communication_helpers__item["item"] + src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] + src__extractors__runtime_cycle__probeRecord["probeRecord"] + src__extractors__docs_record__action["action"] + src__extractors__changelog__relative["relative"] + src__extractors__ast__typescript__scriptKind["scriptKind"] + src__extractors__docs_deterministic__action["action"] + src__extractors__nl_llm__NlLlmRequiredError__client["client"] + src__extractors__git__state["state"] src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"] - src__extractors__todo__block["block"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] - src__extractors__configuration__lines["lines"] - src__extractors__docs_chunks__markdownSections["markdownSections"] - src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] - src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] - src__extractors__todo__raw["raw"] - src__extractors__runtime_cycle__text["text"] - src__extractors__communication_helpers__basename["basename"] + src__extractors__communication_helpers__sameStrings["sameStrings"] + src__extractors__git__mapWithConcurrency["mapWithConcurrency"] + src__extractors__markdown_paths__headingScopes["headingScopes"] + src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"] src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"] + src__extractors__communication_helpers__flush["flush"] + src__extractors__todo__inferOwner["inferOwner"] + src__extractors__todo__extractExplicitId["extractExplicitId"] + src__extractors__git__extractGitIntent["extractGitIntent"] + src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"] + src__extractors__runtime_cycle__factsMetadata["factsMetadata"] + src__extractors__configuration__fileAggregate["fileAggregate"] + src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] + src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"] + src__extractors__docs_record__hasTarget["hasTarget"] + src__extractors__docs_deterministic__statementRecord["statementRecord"] + src__extractors__nl__object["object"] + src__extractors__docs_chunks__splitLongSection["splitLongSection"] + src__extractors__ast__typescript__recordModuleFact["recordModuleFact"] src__extractors__configuration__parsed["parsed"] + src__extractors__docs_chunks__chunkPriority["chunkPriority"] + src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"] - src__extractors__configuration__isConfigurationPath["isConfigurationPath"] - src__extractors__docs_record__resolveAction["resolveAction"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveModality["resolveModality"] - src__extractors__git__readChangedFiles["readChangedFiles"] - src__extractors__docs_record__modality["modality"] - src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] - src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] - src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] - src__extractors__communication_helpers__item["item"] - src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] - src__extractors__configuration__fileAggregate["fileAggregate"] - src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] - src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] - src__extractors__nl__sourcePath["sourcePath"] - src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] - src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] - src__extractors__git__mapWithConcurrency["mapWithConcurrency"] - src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"] - src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET["NL_ACTION_SET"] - src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__docs_record__resolveTarget["resolveTarget"] + src__extractors__configuration__jsonEntries["jsonEntries"] + src__extractors__git__finishDiscovery["finishDiscovery"] src__extractors__configuration__pair["pair"] - src__extractors__nl__action["action"] - src__extractors__docs_deterministic__action["action"] + src__extractors__ast__typescript__declarationIsCallable["declarationIsCallable"] + src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"] + src__extractors__nl__confidence["confidence"] + src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] + src__extractors__configuration__line["line"] + src__extractors__runtime_cycle__label["label"] + src__extractors__todo__body["body"] + src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] + src__extractors__git__gitMarkerState["gitMarkerState"] + src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] + src__extractors__docs_deterministic__convertDocument["convertDocument"] + src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] + src__extractors__ast__external__execFileAsync["execFileAsync"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] + src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"] + src__extractors__docs_schema__documentRecord["documentRecord"] + src__extractors__communication_helpers__nestedRole["nestedRole"] + src__extractors__runtime_cycle__text["text"] src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"] - src__extractors__configuration__jsonEntries["jsonEntries"] - src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] - src__extractors__runtime_cycle__watched["watched"] - src__extractors__docs_record__fallback["fallback"] - src__extractors__communication_helpers__fileParts["fileParts"] - src__extractors__changelog__extractChangelog["extractChangelog"] - src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"] - src__extractors__docs_chunks__needles["needles"] - src__extractors__docs_chunks__chunkPriority["chunkPriority"] + src__extractors__git__isGitWorkTree["isGitWorkTree"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"] + src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"] + src__extractors__configuration__match["match"] + src__extractors__runtime_cycle__proposalRecord["proposalRecord"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"] + src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] src__extractors__configuration__heading["heading"] + src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"] + src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] + src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"] + src__extractors__markdown_paths__basenames["basenames"] + src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"] + src__extractors__ast__typescript__symbolModifiers["symbolModifiers"] + src__extractors__ast__typescript__isTopLevel["isTopLevel"] + src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"] + src__extractors__docs_deterministic__resolver["resolver"] + src__extractors__nl__absolute["absolute"] + src__extractors__git__discoverGitRepositories["discoverGitRepositories"] + src__extractors__ast__records__boundedCapabilities["boundedCapabilities"] + src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"] + src__extractors__configuration__tomlEntries["tomlEntries"] + src__extractors__todo__lines["lines"] + src__extractors__todo__heading["heading"] + src__extractors__todo__text["text"] + src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] + src__extractors__configuration__findKeyLine["findKeyLine"] + src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"] + src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"] + src__extractors__docs_record__anchorToSource["anchorToSource"] + src__extractors__docs_deterministic__heading["heading"] + src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] + src__extractors__docs_deterministic__primePathMapper["primePathMapper"] + src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] + src__extractors__configuration__files["files"] + src__extractors__todo__match["match"] + src__extractors__communication_helpers__raw["raw"] src__extractors__git__count["count"] - src__extractors__nl__extractNlIntent["extractNlIntent"] + src__extractors__ast__records__capabilities["capabilities"] + src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"] + src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"] src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"] - src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"] - src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET["NL_MODALITY_SET"] - src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] - src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] - src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] - src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] - src__extractors__docs_chunks__sectionLines["sectionLines"] - src__extractors__configuration__relative["relative"] - src__extractors__communication_helpers__nestedRole["nestedRole"] - src__extractors__docs_chunks__takeLineBatch["takeLineBatch"] - src__extractors__configuration__match["match"] - src__extractors__changelog__lines["lines"] - src__extractors__docs_record__isPlaceholder["isPlaceholder"] - src__extractors__docs_record__allowedLifecycle["allowedLifecycle"] - src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"] - src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] - src__extractors__git__result["result"] - src__extractors__todo__lines["lines"] - src__extractors__communication_helpers__normalize["normalize"] - src__extractors__git__execFileAsync["execFileAsync"] - src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] - src__extractors__docs_deterministic__statementRecord["statementRecord"] - src__extractors__docs_deterministic__root["root"] - src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] - src__extractors__nl__detectMissingFields["detectMissingFields"] - src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] - src__extractors__ast__external__result["result"] - src__extractors__todo__extractTodo["extractTodo"] - src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] - src__extractors__docs_record__resolveModality["resolveModality"] + src__extractors__configuration__entry["entry"] + src__extractors__docs_record__allowedModality["allowedModality"] + src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"] + src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] + src__extractors__ast__isExtractionResult["isExtractionResult"] + src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"] src__extractors__todo__task["task"] + src__extractors__changelog__lines["lines"] + src__extractors__docs_deterministic__marker["marker"] src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"] - src__extractors__docs_deterministic__targetsOf["targetsOf"] - src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] - src__extractors__communication_helpers__unquote["unquote"] - src__extractors__docs_chunks__item["item"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] - src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"] - src__extractors__docs_deterministic__convertDocument["convertDocument"] - src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"] src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"] - src__extractors__docs_schema__strings["strings"] - src__extractors__runtime_cycle__label["label"] - src__extractors__todo__extractExplicitId["extractExplicitId"] - src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] - src__extractors__communication_helpers__sameStrings["sameStrings"] - src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"] - src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"] - src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] - src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"] - src__extractors__communication_helpers__inferIdentity["inferIdentity"] - src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] - src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"] - src__extractors__markdown_paths__headingDirectories["headingDirectories"] - src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"] - src__extractors__todo__inferOwner["inferOwner"] - src__extractors__runtime_cycle__probeRecord["probeRecord"] - src__extractors__docs_record__target["target"] - src__extractors__git__createDiscoveryState["createDiscoveryState"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"] + src__extractors__communication_helpers__unquote["unquote"] + src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"] src__extractors__docs_chunks__worker["worker"] - src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"] - src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] - src__extractors__git__gitMarkerState["gitMarkerState"] - src__extractors__runtime_cycle__parseCycle["parseCycle"] - src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"] + src__extractors__communication_helpers__fileParts["fileParts"] + src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"] + src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"] + src__extractors__git__readChangedFiles["readChangedFiles"] + src__extractors__docs_chunks__sectionText["sectionText"] + src__extractors__nl__sourcePath["sourcePath"] src__extractors__configuration__dockerEntries["dockerEntries"] - src__extractors__git__isGitWorkTree["isGitWorkTree"] - src__extractors__communication_helpers__communicationSegments["communicationSegments"] - src__extractors__changelog__body["body"] + src__extractors__git__result["result"] + src__extractors__docs_record__statementText["statementText"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"] src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"] - src__extractors__configuration__configurationFormat["configurationFormat"] - src__extractors__docs_deterministic__marker["marker"] - src__extractors__configuration__findKeyLine["findKeyLine"] - src__extractors__communication_file_helpers__inferred["inferred"] - src__extractors__todo__heading["heading"] + src__extractors__ast__isIntentRecords["isIntentRecords"] + src__extractors__docs_record__clampLine["clampLine"] + src__extractors__nl_llm_helpers__NlAttemptError__action["action"] + src__extractors__git__execFileAsync["execFileAsync"] + src__extractors__docs_record__linesFromChunk["linesFromChunk"] + src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"] + src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] + src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] + src__extractors__docs_record__resolveObject["resolveObject"] + src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] + src__extractors__communication_helpers__listValue["listValue"] + src__extractors__communication_helpers__inferIdentity["inferIdentity"] + src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"] + src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET["NL_MODALITY_SET"] + src__extractors__ast__typescript__handleNode["handleNode"] + src__extractors__docs_chunks__sectionLines["sectionLines"] + src__extractors__changelog__extractChangelog["extractChangelog"] src__extractors__docs_chunks__flush["flush"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"] + src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"] + src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"] + src__extractors__docs_schema__target["target"] + src__extractors__ast__records__moduleTopicText["moduleTopicText"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] + src__extractors__git__extractChangedSymbols["extractChangedSymbols"] + src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"] + src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] + src__extractors__ast__typescript__addTypeScriptRecord["addTypeScriptRecord"] + src__extractors__markdown_paths__headingDirectories["headingDirectories"] + src__extractors__runtime_cycle__jsonScalar["jsonScalar"] + src__extractors__communication_helpers__parseEnvelope["parseEnvelope"] + src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"] + src__extractors__ast__typescript__isTypeScriptSymbolDeclaration["isTypeScriptSymbolDeclaration"] + src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"] + src__extractors__communication_helpers__heading["heading"] + src__extractors__configuration__isConfigurationPath["isConfigurationPath"] + src__extractors__todo__checked["checked"] src__extractors__communication_helpers__isCommunicationType["isCommunicationType"] - src__extractors__communication_helpers__normalizeType["normalizeType"] - src__extractors__configuration__files["files"] - src__extractors__docs_deterministic__readParagraph["readParagraph"] - src__extractors__docs_record__linesFromChunk["linesFromChunk"] - src__extractors__nl__inferActor["inferActor"] - src__extractors__docs_record__action["action"] - src__extractors__docs_record__clampLine["clampLine"] - src__extractors__runtime_cycle__boundedArray["boundedArray"] - src__extractors__docs_chunks__splitLongSection["splitLongSection"] - src__extractors__todo__classified["classified"] - src__extractors__git__state["state"] - src__extractors__runtime_cycle__driftRecord["driftRecord"] + src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] + src__extractors__changelog__body["body"] + src__extractors__todo__block["block"] + src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"] + src__extractors__docs_chunks__needles["needles"] + src__extractors__configuration__lines["lines"] + src__extractors__docs_record__modality["modality"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] + src__extractors__ast__records__start["start"] + src__extractors__docs_chunks__item["item"] + src__extractors__ast__records__adapterRecords["adapterRecords"] + src__extractors__configuration__configurationRecords["configurationRecords"] + src__extractors__runtime_cycle__proposalAction["proposalAction"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"] + src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"] + src__extractors__docs_record__resolveModality["resolveModality"] + src__extractors__runtime_cycle__violationRecord["violationRecord"] src__extractors__configuration__entries["entries"] + src__extractors__communication_file_helpers__envelope["envelope"] + src__extractors__nl__action["action"] + src__extractors__docs_record__keywordOverlap["keywordOverlap"] + src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"] + src__extractors__communication_helpers__basename["basename"] + src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"] + src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"] src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"] + src__extractors__communication_helpers__nestedParticipant["nestedParticipant"] + src__extractors__runtime_cycle__watched["watched"] + src__extractors__git__runGit["runGit"] src__extractors__todo__relative["relative"] - src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"] - src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"] - src__extractors__nl__classified["classified"] - src__extractors__docs_chunks__index["index"] + src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"] + src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"] + src__extractors__docs_deterministic__targetsOf["targetsOf"] + src__extractors__runtime_cycle__driftRecord["driftRecord"] + src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"] + src__extractors__docs_record__target["target"] + src__extractors__runtime_cycle__tags["tags"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveModality["resolveModality"] src__extractors__todo__action["action"] - src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"] - src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"] - src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"] - src__extractors__configuration__configurationRecords["configurationRecords"] - src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"] - src__extractors__docs_record__allowedModality["allowedModality"] - src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"] - src__extractors__communication_helpers__flush["flush"] - src__extractors__docs_record__keywordOverlap["keywordOverlap"] - src__extractors__changelog__changelogAction["changelogAction"] - src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"] - src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"] - src__extractors__configuration__line["line"] - src__extractors__docs_record__statementText["statementText"] - src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"] - src__extractors__nl__body["body"] - src__extractors__docs_record__resolveTarget["resolveTarget"] - src__extractors__git__discoverGitRepositories["discoverGitRepositories"] - src__extractors__git__finishDiscovery["finishDiscovery"] - src__extractors__nl__missing["missing"] - src__extractors__docs_chunks__mapConcurrent["mapConcurrent"] + src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"] + src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"] + src__extractors__runtime_cycle__parseCycle["parseCycle"] + src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"] + src__extractors__markdown_paths__index["index"] + src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"] + src__extractors__ast__records__moduleRecords["moduleRecords"] + src__extractors__ast__records__end["end"] + src__extractors__communication_file_helpers__inferred["inferred"] + src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"] + src__extractors__docs_schema__strings["strings"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"] + src__extractors__nl__inferActor["inferActor"] + src__extractors__docs_record__allowedAction["allowedAction"] + src__extractors__communication_helpers__match["match"] + src__extractors__docs_chunks__markdownSections["markdownSections"] + src__extractors__ast__typescript__extractModifiers["extractModifiers"] + src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"] + src__extractors__nl__detectMissingFields["detectMissingFields"] + src__extractors__git__readCommits["readCommits"] + src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"] + src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"] + src__extractors__docs_chunks__workerCount["workerCount"] + src__extractors__communication_helpers__normalizeType["normalizeType"] + src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"] + src__extractors__nl__classified["classified"] + src__extractors__markdown_paths__repositoryRoot["repositoryRoot"] + src__extractors__git__root["root"] + src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"] + src__extractors__configuration__configurationFormat["configurationFormat"] + src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"] + src__extractors__runtime_cycle__boundedArray["boundedArray"] + src__extractors__docs_record__resolveAction["resolveAction"] + src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"] + src__extractors__git__createDiscoveryState["createDiscoveryState"] + src__extractors__communication_helpers__communicationSegments["communicationSegments"] src__extractors__docs_schema__documentResponseContract["documentResponseContract"] - src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"] src__extractors__markdown_paths__state["state"] - src__extractors__docs_record__resolveObject["resolveObject"] + src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"] + src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"] + src__extractors__changelog__changelogAction["changelogAction"] + src__extractors__git__readStats["readStats"] + src__extractors__runtime_cycle__results["results"] + src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"] + src__extractors__configuration__relative["relative"] + src__extractors__docs_deterministic__readParagraph["readParagraph"] + src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"] + src__extractors__docs_deterministic__root["root"] + src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"] + src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"] + end + subgraph src__graph + src__graph__linker__aliases["aliases"] + src__graph__linker_relations__matchSourceRule["matchSourceRule"] + src__graph__linker__expand["expand"] + src__graph__diagnostics__buildImplementedWithoutPlanDiagnostic["buildImplementedWithoutPlanDia"] + src__graph__linker__scoreSharedTickets["scoreSharedTickets"] + src__graph__diagnostics__collectMissingFields["collectMissingFields"] + src__graph__linker__intersectsAliases["intersectsAliases"] + src__graph__diff__escapeXml["escapeXml"] + src__graph__diff__beforeRecord["beforeRecord"] + src__graph__linker__keywordIndex["keywordIndex"] + src__graph__diff__truncate["truncate"] + src__graph__diff__height["height"] + src__graph__diff__groups["groups"] + src__graph__symbol_resolution__resolveSymbol["resolveSymbol"] + src__graph__symbol_resolution__selected["selected"] + src__graph__diagnostics__diagnoseGraph["diagnoseGraph"] + src__graph__diff__values["values"] + src__graph__diff__beforeGroups["beforeGroups"] + src__graph__linker__resolvableBasenames["resolvableBasenames"] + src__graph__diagnostics__collectRelatedRecords["collectRelatedRecords"] + src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"] + src__graph__linker__scoreSharedPath["scoreSharedPath"] + src__graph__diagnostics__buildDiagnosticContext["buildDiagnosticContext"] + src__graph__diff__metricCard["metricCard"] + src__graph__linker_relations__orientRelation["orientRelation"] + src__graph__diff__y["y"] + src__graph__diff__renderGraphDiffSvg["renderGraphDiffSvg"] + src__graph__diagnostics__makeDiagnostic["makeDiagnostic"] + src__graph__diagnostics__buildNeighbors["buildNeighbors"] + src__graph__diff__compareRelations["compareRelations"] + src__graph__diagnostics__indexGroundedImplementationEvidence["indexGroundedImplementationEvi"] + src__graph__diagnostics__hasDocumentedTarget["hasDocumentedTarget"] + src__graph__diff__relationKey["relationKey"] + src__graph__symbol_resolution__pathSelects["pathSelects"] + src__graph__linker__scoreSourceKindPenalty["scoreSourceKindPenalty"] + src__graph__diff__isObject["isObject"] + src__graph__linker__linkIntentRecords["linkIntentRecords"] + src__graph__diff__changedFieldPaths["changedFieldPaths"] + src__graph__symbol_resolution__uniquePaths["uniquePaths"] + src__graph__linker__scorePair["scorePair"] + src__graph__symbol_resolution__byAlias["byAlias"] + src__graph__diagnostics__map["map"] + src__graph__linker__isFileAggregateEvidencePair["isFileAggregateEvidencePair"] + src__graph__diagnostics__context["context"] + src__graph__linker_relations__determineRelation["determineRelation"] + src__graph__symbol_resolution__values["values"] + src__graph__diff__left["left"] + src__graph__diff__normalizeRecord["normalizeRecord"] + src__graph__linker__scoreSharedTopics["scoreSharedTopics"] + src__graph__symbol_resolution__collectAstCandidates["collectAstCandidates"] + src__graph__symbol_resolution__buildAstCandidate["buildAstCandidate"] + src__graph__diagnostics__indexImplementedPaths["indexImplementedPaths"] + src__graph__linker_relations__relationForSourceKinds["relationForSourceKinds"] + src__graph__linker__intersectionSize["intersectionSize"] + src__graph__diagnostics__indexDocumentedPaths["indexDocumentedPaths"] + src__graph__linker__scoreObjectSimilarity["scoreObjectSimilarity"] + src__graph__diagnostics__recordsById["recordsById"] + src__graph__linker__candidatePairs["candidatePairs"] + src__graph__diagnostics__buildChangelogWithoutImplementationDiagnostic["buildChangelogWithoutImplement"] + src__graph__linker__pathsIntersect["pathsIntersect"] + src__graph__diagnostics__buildAmbiguousRequirementDiagnostic["buildAmbiguousRequirementDiagn"] + src__graph__linker__records["records"] + src__graph__linker__indexResolvableBasenames["indexResolvableBasenames"] + src__graph__diff__afterRecord["afterRecord"] + src__graph__diagnostics__isRecordEvidenced["isRecordEvidenced"] + src__graph__linker__owners["owners"] + src__graph__diff__paired["paired"] + src__graph__linker__deduplicateRecords["deduplicateRecords"] + src__graph__linker__isModuleTopicEvidencePair["isModuleTopicEvidencePair"] + src__graph__symbol_resolution__sortCandidates["sortCandidates"] + src__graph__diff__recordIdentity["recordIdentity"] + src__graph__diagnostics__collectSymbolIssues["collectSymbolIssues"] + src__graph__linker__byId["byId"] + src__graph__diff__assertGraph["assertGraph"] + src__graph__linker__set["set"] + src__graph__diff__width["width"] + src__graph__diagnostics__collectContradictionDiagnostics["collectContradictionDiagnostic"] + src__graph__linker__jaccard["jaccard"] + src__graph__diagnostics__buildUndocumentedImplementationDiagnostic["buildUndocumentedImplementatio"] + src__graph__diff__afterGroups["afterGroups"] + src__graph__symbol_resolution__uniqueSymbols["uniqueSymbols"] + src__graph__symbol_resolution__buildSymbolResolutionIndex["buildSymbolResolutionIndex"] + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair["hasResolvedNlAstSymbolPair"] + src__graph__diagnostics__buildPlannedNotImplementedDiagnostic["buildPlannedNotImplementedDiag"] + src__graph__diff__right["right"] + src__graph__symbol_resolution__byNlRecord["byNlRecord"] + src__graph__diagnostics__collectRecordDiagnostics["collectRecordDiagnostics"] + src__graph__diagnostics__hasImplementedTarget["hasImplementedTarget"] + src__graph__linker__scoreSharedSymbol["scoreSharedSymbol"] + src__graph__diff__diffIntentGraphs["diffIntentGraphs"] + src__graph__symbol_resolution__isAstDeclaration["isAstDeclaration"] + src__graph__diff__groupRecords["groupRecords"] + src__graph__linker__scoreSameAction["scoreSameAction"] + src__graph__diff__visibleRows["visibleRows"] + src__graph__linker__intersects["intersects"] + src__graph__diagnostics__neighbors["neighbors"] + src__graph__symbol_resolution__collectNlResolutions["collectNlResolutions"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -482,144 +525,9 @@ flowchart LR java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored - java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash + java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__scanCompilationUnits + java__JavaAstExtract__JavaAstExtract__collectFileDiagnostics --> java__JavaAstExtract__JavaAstExtract__add java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape - src__cli__main --> src__cli__printHelp - src__cli__main --> src__cli__parseArgs - src__cli__main --> src__cli__resolveMainCommand - src__cli__main --> src__cli__commandHandlers - src__cli__parsed --> src__cli__printHelp - src__cli__command --> src__cli__printHelp - src__cli__commandHandlers --> src__cli__initProject - src__cli__commandHandlers --> src__cli__doctor - src__cli__handleLink --> src__cli__emitJson - src__cli__handleLink --> src__cli__optionString - src__cli__handleDiagnose --> src__cli__emitJson - src__cli__handleDiagnose --> src__cli__optionString - src__cli__handleSummarize --> src__cli__optionString - src__cli__handleSummarize --> src__cli__optionSummaryMode - src__cli__diagnosticsPath --> src__cli__optionNumber - src__cli__diagnosticsPath --> src__cli__optionBoolean - src__cli__diagnostics --> src__cli__optionNumber - src__cli__diagnostics --> src__cli__optionBoolean - src__cli__result --> src__cli__execFileAsync - src__cli__handleProposeTodo --> src__cli__optionString - src__cli__handleProposeTodo --> src__cli__optionTaskMode - src__cli__handleRenderTodo --> src__cli__optionString - src__cli__handleApplyTodo --> src__cli__optionString - src__cli__handleProposeCodeChange --> src__cli__optionString - src__cli__handleRenderCodeChange --> src__cli__optionString - src__cli__handleProposeSourcePatch --> src__cli__optionString - src__cli__isPlanSet --> src__cli__optionString - src__cli__handleApplySourcePatch --> src__cli__optionString - src__cli__handleEvaluateCodeChange --> src__cli__optionString - src__cli__handleCloseCodeChange --> src__cli__optionString - src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot - src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions - src__cli__root --> src__cli__optionString - src__cli__root --> src__cli__optionNullableString - src__cli__root --> src__cli__optionLlmMode - src__cli__handlePipeline --> src__cli__resolvePipelineRoot - src__cli__handlePipeline --> src__cli__buildPipelineOptions - src__cli__handlePipeline --> src__cli__optionNullableString - src__cli__handlePipeline --> src__cli__reportPipelineDegradation - src__cli__handleWatch --> src__cli__resolvePipelineRoot - src__cli__handleWatch --> src__cli__resolveWatchTaskFile - src__cli__handleWatch --> src__cli__buildPipelineOptions - src__cli__handleWatch --> src__cli__optionNumber - src__cli__handleWatch --> src__cli__optionBoolean - src__cli__taskFile --> src__cli__optionNumber - src__cli__taskFile --> src__cli__optionBoolean - src__cli__taskFile --> src__cli__formatWatchEvent - src__cli__pipeline --> src__cli__optionNumber - src__cli__pipeline --> src__cli__optionBoolean - src__cli__pipeline --> src__cli__formatWatchEvent - src__cli__controller --> src__cli__optionNumber - src__cli__controller --> src__cli__optionBoolean - src__cli__controller --> src__cli__formatWatchEvent - src__cli__stop --> src__cli__optionNumber - src__cli__stop --> src__cli__optionBoolean - src__cli__stop --> src__cli__formatWatchEvent - src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions - src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString - src__cli__buildCommonPipelineOptions --> src__cli__optionList - src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean - src__cli__buildCommonPipelineOptions --> src__cli__optionString - src__cli__buildCommonPipelineOptions --> src__cli__optionNumber - src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode - src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode - src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode - src__cli__resolveWatchTaskFile --> src__cli__optionNullableString - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber - src__cli__formatWatchEvent --> src__cli__file - src__cli__stamp --> src__cli__file - src__cli__handleDiff --> src__cli__parseDiffMode - src__cli__handleDiff --> src__cli__handleGraphDiff - src__cli__handleDiff --> src__cli__buildDiffPayload - src__cli__handleDiff --> src__cli__optionString - src__cli__handleDiff --> src__cli__optionNumber - src__cli__svg --> src__cli__optionNumber - src__cli__svg --> src__cli__optionBoolean - src__cli__parseDiffMode --> src__cli__optionString - src__cli__handleGraphDiff --> src__cli__optionString - src__cli__handleGraphDiff --> src__cli__optionNumber - src__cli__diff --> src__cli__optionNumber - src__cli__buildDiffPayload --> src__cli__buildFileDiff - src__cli__buildDiffPayload --> src__cli__buildGitDiff - src__cli__buildFileDiff --> src__cli__optionNumber - src__cli__context --> src__cli__optionString - src__cli__context --> src__cli__optionBoolean - src__cli__context --> src__cli__optionNumber - src__cli__buildGitDiff --> src__cli__optionNumber - src__cli__buildGitDiff --> src__cli__optionString - src__cli__buildGitDiff --> src__cli__optionBoolean - src__cli__handleReality --> src__cli__optionString - src__cli__handleReality --> src__cli__optionNumber - src__cli__handleReality --> src__cli__optionBoolean - src__cli__view --> src__cli__optionNumber - src__cli__view --> src__cli__optionBoolean - src__cli__handleExtract --> src__cli__optionString - src__cli__handleExtract --> src__cli__handler - src__cli__handleExtractNl --> src__cli__optionString - src__cli__handleExtractNl --> src__cli__optionNlMode - src__cli__handleExtractNl --> src__cli__emitExtraction - src__cli__handleExtractGit --> src__cli__optionNumber - src__cli__handleExtractGit --> src__cli__emitExtraction - src__cli__handleExtractAst --> src__cli__emitExtraction - src__cli__handleExtractConfig --> src__cli__emitExtraction - src__cli__handleExtractRuntime --> src__cli__emitExtraction - src__cli__handleExtractMarkdown --> src__cli__optionNullableString - src__cli__handleExtractMarkdown --> src__cli__optionLlmMode - src__cli__handleExtractMarkdown --> src__cli__emitExtraction - src__cli__handleExtractDocs --> src__cli__optionList - src__cli__handleExtractDocs --> src__cli__emitExtraction - src__cli__handleExtractCommunication --> src__cli__optionString - src__cli__handleExtractCommunication --> src__cli__optionNullableString - src__cli__handleExtractCommunication --> src__cli__optionLlmMode - src__cli__handleExtractCommunication --> src__cli__emitExtraction - src__cli__handleCommunication --> src__cli__optionString - src__cli__handleCommunication --> src__cli__optionNullableString - src__cli__handleCommunication --> src__cli__optionLlmMode - src__cli__handleCommunication --> src__cli__optionNumber - src__cli__handleCommunication --> src__cli__optionBoolean - src__cli__handleIntake --> src__cli__optionString - src__cli__handleIntake --> src__cli__optionBoolean - src__cli__absolute --> src__cli__optionString - src__cli__doctor --> src__cli__execFileAsync - src__cli__optionNumber --> src__cli__optionString - src__cli__optionList --> src__cli__optionString - src__cli__optionNlMode --> src__cli__optionLlmMode - src__cli__optionLlmMode --> src__cli__optionString - src__cli__optionTaskMode --> src__cli__optionString - src__cli__optionSummaryMode --> src__cli__optionLlmMode - src__cli__optionSummaryMode --> src__cli__optionBoolean - src__cli__optionPipelineTaskMode --> src__cli__optionString - src__cli__invokedPath --> src__cli__main src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields @@ -913,3 +821,138 @@ flowchart LR src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords + src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities + src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode + src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact + src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext + src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind + src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration + src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleCallExpression + src__extractors__ast__typescript__handleImportDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleExportDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__isTypeScriptSymbolDeclaration + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__extractSymbolName + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__extractModifiers + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__visitTypeScriptNode + src__extractors__ast__typescript__symbolModifiers --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleVariableDeclaration --> src__extractors__ast__typescript__isTopLevel + src__extractors__ast__typescript__handleVariableDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__handleCallExpression --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__callee --> src__extractors__ast__typescript__addTypeScriptRecord + src__extractors__ast__typescript__recordModuleFact --> src__extractors__ast__typescript__addTypeScriptRecord + src__graph__diff__diffIntentGraphs --> src__graph__diff__assertGraph + src__graph__diff__diffIntentGraphs --> src__graph__diff__groupRecords + src__graph__diff__beforeGroups --> src__graph__diff__changedFieldPaths + src__graph__diff__beforeGroups --> src__graph__diff__normalizeRecord + src__graph__diff__afterGroups --> src__graph__diff__changedFieldPaths + src__graph__diff__afterGroups --> src__graph__diff__normalizeRecord + src__graph__diff__left --> src__graph__diff__changedFieldPaths + src__graph__diff__left --> src__graph__diff__normalizeRecord + src__graph__diff__right --> src__graph__diff__changedFieldPaths + src__graph__diff__right --> src__graph__diff__normalizeRecord + src__graph__diff__paired --> src__graph__diff__changedFieldPaths + src__graph__diff__paired --> src__graph__diff__normalizeRecord + src__graph__diff__beforeRecord --> src__graph__diff__changedFieldPaths + src__graph__diff__beforeRecord --> src__graph__diff__normalizeRecord + src__graph__diff__afterRecord --> src__graph__diff__changedFieldPaths + src__graph__diff__afterRecord --> src__graph__diff__normalizeRecord + src__graph__diff__renderGraphDiffSvg --> src__graph__diff__escapeXml + src__graph__diff__renderGraphDiffSvg --> src__graph__diff__truncate + src__graph__diff__visibleRows --> src__graph__diff__escapeXml + src__graph__diff__visibleRows --> src__graph__diff__truncate + src__graph__diff__width --> src__graph__diff__escapeXml + src__graph__diff__width --> src__graph__diff__truncate + src__graph__diff__height --> src__graph__diff__escapeXml + src__graph__diff__height --> src__graph__diff__truncate + src__graph__diff__y --> src__graph__diff__escapeXml + src__graph__diff__y --> src__graph__diff__truncate + src__graph__diff__groupRecords --> src__graph__diff__recordIdentity + src__graph__diff__groupRecords --> src__graph__diff__values + src__graph__diff__groups --> src__graph__diff__recordIdentity + src__graph__diff__changedFieldPaths --> src__graph__diff__isObject + src__graph__diff__compareRelations --> src__graph__diff__relationKey + src__graph__diff__metricCard --> src__graph__diff__escapeXml + src__graph__linker_relations__determineRelation --> src__graph__linker_relations__relationForSourceKinds + src__graph__linker_relations__relationForSourceKinds --> src__graph__linker_relations__matchSourceRule + src__graph__linker_relations__matchSourceRule --> src__graph__linker_relations__orientRelation + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectAstCandidates + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__sortCandidates + src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectNlResolutions + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__uniqueSymbols + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__buildAstCandidate + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__uniqueSymbols + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__buildAstCandidate + src__graph__symbol_resolution__sortCandidates --> src__graph__symbol_resolution__values + src__graph__symbol_resolution__collectNlResolutions --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths + src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths + src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords + src__graph__linker__records --> src__graph__linker__scorePair + src__graph__linker__byId --> src__graph__linker__set + src__graph__linker__keywordIndex --> src__graph__linker__scorePair + src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair + src__graph__linker__candidatePairs --> src__graph__linker__scorePair + src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair + src__graph__linker__deduplicateRecords --> src__graph__linker__set + src__graph__linker__indexResolvableBasenames --> src__graph__linker__set + src__graph__linker__owners --> src__graph__linker__set + src__graph__linker__pathsIntersect --> src__graph__linker__expand + src__graph__linker__scorePair --> src__graph__linker__scoreSharedTickets + src__graph__linker__scorePair --> src__graph__linker__scoreSharedSymbol + src__graph__linker__scorePair --> src__graph__linker__scoreSharedPath + src__graph__linker__scorePair --> src__graph__linker__scoreSameAction + src__graph__linker__scorePair --> src__graph__linker__scoreObjectSimilarity + src__graph__linker__scorePair --> src__graph__linker__scoreSharedTopics + src__graph__linker__scorePair --> src__graph__linker__scoreSourceKindPenalty + src__graph__linker__scoreSharedTickets --> src__graph__linker__intersects + src__graph__linker__scoreSharedSymbol --> src__graph__linker__intersectsAliases + src__graph__linker__scoreSharedPath --> src__graph__linker__pathsIntersect + src__graph__linker__scoreSharedPath --> src__graph__linker__isFileAggregateEvidencePair + src__graph__linker__scoreObjectSimilarity --> src__graph__linker__jaccard + src__graph__linker__scoreSharedTopics --> src__graph__linker__isModuleTopicEvidencePair + src__graph__linker__scoreSharedTopics --> src__graph__linker__intersectionSize + src__graph__linker__intersectsAliases --> src__graph__linker__aliases + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__buildDiagnosticContext + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__collectRecordDiagnostics + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__collectContradictionDiagnostics + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__context --> src__graph__diagnostics__collectRecordDiagnostics + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__buildNeighbors + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__map + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__indexGroundedImplementationEvidence + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__indexImplementedPaths + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__indexDocumentedPaths + src__graph__diagnostics__neighbors --> src__graph__diagnostics__indexGroundedImplementationEvidence + src__graph__diagnostics__neighbors --> src__graph__diagnostics__indexImplementedPaths + src__graph__diagnostics__neighbors --> src__graph__diagnostics__indexDocumentedPaths + src__graph__diagnostics__recordsById --> src__graph__diagnostics__indexGroundedImplementationEvidence + src__graph__diagnostics__recordsById --> src__graph__diagnostics__indexImplementedPaths + src__graph__diagnostics__recordsById --> src__graph__diagnostics__indexDocumentedPaths + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__collectRelatedRecords + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__collectMissingFields + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__collectSymbolIssues + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__isRecordEvidenced + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildPlannedNotImplementedDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildImplementedWithoutPlanDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildUndocumentedImplementationDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildChangelogWithoutImplementationDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildAmbiguousRequirementDiagnostic + src__graph__diagnostics__collectRelatedRecords --> src__graph__diagnostics__map + src__graph__diagnostics__isRecordEvidenced --> src__graph__diagnostics__hasImplementedTarget + src__graph__diagnostics__isRecordEvidenced --> src__graph__diagnostics__hasDocumentedTarget diff --git a/project/calls.png b/project/calls.png index 0ea1cbbc91c7e5cd4214e0012868579b245d09e6..da9d437ee47b711acf1af181e2b08138464e3165 100644 GIT binary patch literal 83125 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 literal 100231 zcmZ^~b9iLkw=Epowr$(CZJQn2w(X8>+fF)0C#hJSPQ~iv_WSQedEnp)F6K-Z#y&6LU>0at()=#1BK|Hw~MBLs1vH zdItt>BJXTk5Sb(=Gr-Eiz?QUa^YA{pE1&IZ?pOO=?)7LAQe9u)T-SUKZtY!O&UlRS zo&|+6XZg|L#G@e-33%Tg42MDguOF_Bs&ct@@1c!Za8}x&fdBJ4Y{m-W&xJJmwdGpp z0n<{>fG;m%T}sn(@tU0WgH;u4L*%HD>axy#7P0?1#HeJPp5o|GeRUP5KPKMVKm2^df-@w(1nlzC;%0D?H<|W!b557URD|Sb`=3oc(Vr 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 z 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 funcs"] - java__JavaAstExtract["java.JavaAstExtract
12 funcs"] - python__ast_extract["python.ast_extract
18 funcs"] + java__JavaAstExtract["java.JavaAstExtract
14 funcs"] scripts__research["scripts.research
71 funcs"] sdk__python["sdk.python
68 funcs"] src__graph["src.graph
227 funcs"] @@ -13,6 +12,5 @@ flowchart TD sdk__python -->|2| java__JavaAstExtract scripts__research -->|1| src__synthesis scripts__research -->|1| src__graph - python__ast_extract -->|1| src__graph sdk__python -->|1| src__graph sdk__python -->|1| examples__frontend diff --git a/project/compact_flow.png b/project/compact_flow.png index ba631114b26c7b7a5ca34a348456761462417b4f..00fbacc5daee63e6f0540ef2eca4da4f389bfbb9 100644 GIT binary patch literal 28319 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 literal 32714 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

Uw8x+_|(Gsor{j&JGrSqL`pMHl?ny zchwlkT0j1nci7Pmkdg7B@3hl+)*oeW`S%6%aESNG|DV3{e|ustU*5fY_xEp`=iU|Y f;=>zkhI)s*@2#c9%UBP*^G;G!PNZ7MAmD!iP{}eM diff --git a/project/context.md b/project/context.md index c2c4270..6bf1ae5 100644 --- a/project/context.md +++ b/project/context.md @@ -5,17 +5,17 @@ - **Project**: /home/tom/github/semcod/todo2code - **Primary Language**: typescript -- **Languages**: typescript: 173, json: 40, python: 16, javascript: 15, shell: 8 +- **Languages**: typescript: 187, json: 40, python: 15, javascript: 15, shell: 8 - **Analysis Mode**: static -- **Total Functions**: 4129 -- **Total Classes**: 404 -- **Modules**: 281 -- **Entry Points**: 2776 +- **Total Functions**: 4218 +- **Total Classes**: 403 +- **Modules**: 294 +- **Entry Points**: 2791 ## Architecture by Module ### src.cli -- **Functions**: 202 +- **Functions**: 212 - **Classes**: 1 - **File**: `cli.ts` @@ -29,13 +29,8 @@ - **Classes**: 3 - **File**: `a2a-task-store.ts` -### src.diff.reality -- **Functions**: 97 -- **Classes**: 4 -- **File**: `reality.ts` - ### src.communication.analyzer -- **Functions**: 88 +- **Functions**: 92 - **Classes**: 3 - **File**: `analyzer.ts` @@ -55,7 +50,7 @@ - **File**: `gold-cases.ts` ### src.operations.validation -- **Functions**: 75 +- **Functions**: 67 - **File**: `validation.ts` ### src.core.text @@ -102,6 +97,11 @@ - **Classes**: 3 - **File**: `communication-helpers.ts` +### src.diff.reality-build +- **Functions**: 49 +- **Classes**: 2 +- **File**: `reality-build.ts` + ### src.interfaces.a2a - **Functions**: 48 - **File**: `a2a.ts` @@ -130,6 +130,9 @@ Main execution flows into the system: ### src.interfaces.intake_cli.main - **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument +### src.pipeline.run-execution.executePipeline +- **Calls**: src.pipeline.run-execution.resolveGlobs, src.pipeline.run-execution.skippedAudit, src.pipeline.run-execution.extractNlIntentAudited, src.pipeline.run-execution.push, src.pipeline.run-execution.extractGitIntent, src.pipeline.run-execution.extractAstIntent, src.pipeline.run-execution.extractMarkdownIntentAudited, src.pipeline.run-execution.filter + ### src.comparison.workspace.temporaryParent - **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs @@ -139,12 +142,6 @@ Main execution flows into the system: ### src.extractors.todo.extractTodo - **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim -### scripts.verify-env-contract.makefile -- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort - -### python.ast_extract.main -- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print - ### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited - **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured @@ -202,8 +199,11 @@ Main execution flows into the system: ### php.ast_extract.parseFile - **Calls**: php.ast_extract.file_get_contents, php.ast_extract.RuntimeException, php.ast_extract.preg_split, php.ast_extract.token_get_all, php.ast_extract.foreach, php.ast_extract.normalizedToken, php.ast_extract.substr_count, php.ast_extract.defined -### src.cli.handleCommunication -- **Calls**: src.cli.resolve, src.cli.all, src.cli.extractCommunicationIntentAudited, src.cli.optionString, src.cli.optionNullableString, src.cli.optionLlmMode, src.cli.extractGitIntent, src.cli.optionNumber +### src.services.actions.executeAnalyzeCommunicationAction +- **Calls**: src.services.actions.all, src.services.actions.extractCommunicationIntentAudited, src.services.actions.scopedPath, src.services.actions.nullableString, src.services.actions.llmModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.booleanValue + +### src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse +- **Calls**: src.synthesis.task-synthesis-materialize.parse, src.synthesis.task-synthesis-materialize.normalizeLocalKeys, src.synthesis.task-synthesis-materialize.flatMap, src.synthesis.task-synthesis-materialize.map, src.synthesis.task-synthesis-materialize.sortedUnique, src.synthesis.task-synthesis-materialize.groundRecordIdsByDiagnostics, src.synthesis.task-synthesis-materialize.normalizeStringArray, src.synthesis.task-synthesis-materialize.createConclusionId ## Process Flows @@ -221,30 +221,30 @@ compareWorkspaceIntent [src.comparison.workspace] └─> execFileAsync ``` -### Flow 3: temporaryParent +### Flow 3: executePipeline +``` +executePipeline [src.pipeline.run-execution] +``` + +### Flow 4: temporaryParent ``` temporaryParent [src.comparison.workspace] └─> git └─> execFileAsync ``` -### Flow 4: baseWorktree +### Flow 5: baseWorktree ``` baseWorktree [src.comparison.workspace] └─> git └─> execFileAsync ``` -### Flow 5: extractTodo +### Flow 6: extractTodo ``` extractTodo [src.extractors.todo] ``` -### Flow 6: makefile -``` -makefile [scripts.verify-env-contract] -``` - ### Flow 7: extractCommunicationIntentAudited ``` extractCommunicationIntentAudited [src.communication.llm.implementation.CommunicationLlmRequiredError] @@ -313,30 +313,30 @@ Example: - **Methods**: 29 - **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results +### java.JavaAstExtract.JavaAstExtract +- **Methods**: 28 +- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.scanCompilationUnits, java.JavaAstExtract.JavaAstExtract.collectFileDiagnostics + ### sdk.php.src.Client.Todo2Code.Client - **Methods**: 27 - **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs -### java.JavaAstExtract.JavaAstExtract -- **Methods**: 25 -- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add - -### src.synthesis.tasks-llm.TaskSynthesisAttemptError -- **Methods**: 21 -- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection - -### src.summary.summarizer.SummaryAttemptError -- **Methods**: 21 -- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions - ### src.extractors.nl-llm.NlLlmRequiredError - **Methods**: 19 - **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine +### src.synthesis.tasks-llm.TaskSynthesisAttemptError +- **Methods**: 19 +- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection + ### src.communication.intake-store.IntakeEventStore - **Methods**: 19 - **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry +### src.summary.summarizer.SummaryAttemptError +- **Methods**: 17 +- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions + ### src.sdk.typescript.Todo2CodeClient - **Methods**: 16 - **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange @@ -349,10 +349,9 @@ Example: - **Methods**: 13 - **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory -### python.ast_extract.FactVisitor -- **Methods**: 13 -- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign -- **Inherits**: ast.NodeVisitor +### src.extractors.markdown-llm.MarkdownLlmRequiredError +- **Methods**: 11 +- **Key Methods**: src.extractors.markdown-llm.MarkdownLlmRequiredError.super, src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited, src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt, src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic, src.extractors.markdown-llm.MarkdownLlmRequiredError.client, src.extractors.markdown-llm.MarkdownLlmRequiredError.prompt, src.extractors.markdown-llm.MarkdownLlmRequiredError.failure, src.extractors.markdown-llm.MarkdownLlmRequiredError.failedResponses, src.extractors.markdown-llm.MarkdownLlmRequiredError.classifyLlmFailure, src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow ## Data Transformation Functions @@ -374,18 +373,6 @@ Key functions that process and transform data: ### java.JavaAstExtract.JavaAstExtract.parseFile -### src.cli.parsed -- **Output to**: src.cli.has, src.cli.printHelp - -### src.cli.formatWatchEvent -- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change - -### src.cli.parseDiffMode -- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error - -### src.cli.parseArgs -- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set - ### src.extractors.runtime-cycle.parseCycle - **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray @@ -430,12 +417,19 @@ Key functions that process and transform data: ### src.services.actions.parseCommunicationGraphFilter - **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue -## Behavioral Patterns +### src.core.ignore.parseIgnoreFile +- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter + +### src.core.schema.code-change.validateCodeChangePlanContext +- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue + +### src.core.schema.conclusions.validateGroundedContext +- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test -### recursion_dotted_name -- **Type**: recursion -- **Confidence**: 0.90 -- **Functions**: python.ast_extract.dotted_name +### src.core.schema.conclusions.validateTodoProposalContext +- **Output to**: src.core.schema.conclusions.validateGroundedContext, src.core.schema.conclusions.assertConclusions, src.core.schema.conclusions.Set, src.core.schema.conclusions.map + +## Behavioral Patterns ### state_machine_GovernedIntakeService - **Type**: state_machine @@ -449,25 +443,21 @@ Functions exposed as public API (no underscore prefix): - `sdk.python.examples.basic.main` - 62 calls - `scripts.research.rank-intent-graph-embeddings.main` - 43 calls - `src.comparison.workspace.compareWorkspaceIntent` - 40 calls -- `sdk.rust.src.client.parse_http_response` - 37 calls - `sdk.rust.examples.basic.run` - 33 calls -- `src.pipeline.run.executePipeline` - 31 calls - `scripts.research.evaluate-embedding-pairs.main` - 30 calls - `src.interfaces.intake_cli.main` - 29 calls +- `sdk.rust.src.client.validate_http_status_body` - 28 calls +- `src.pipeline.run-execution.executePipeline` - 26 calls - `src.comparison.workspace.temporaryParent` - 25 calls - `src.comparison.workspace.baseWorktree` - 25 calls - `sdk.go.examples.basic.main.run` - 25 calls - `src.extractors.todo.extractTodo` - 24 calls -- `src.interfaces.a2a-message-command.looksLikeJson` - 24 calls -- `scripts.verify-env-contract.makefile` - 24 calls -- `python.ast_extract.main` - 24 calls - `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls - `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls - `src.graph.linker.linkIntentRecords` - 22 calls - `scripts.live-model-comparison.main` - 22 calls - `rust-ast.src.main.main` - 21 calls - `src.extractors.git.extractRepositoryGitIntent` - 21 calls -- `python.ast_extract.iter_python_files` - 21 calls - `sdk.typescript.examples.basic.baseUrl` - 21 calls - `sdk.typescript.examples.basic.token` - 21 calls - `sdk.typescript.examples.basic.root` - 21 calls @@ -485,7 +475,11 @@ Functions exposed as public API (no underscore prefix): - `src.extractors.changelog.extractChangelog` - 19 calls - `src.graph.diff.diffIntentGraphs` - 19 calls - `php.ast_extract.parseFile` - 19 calls -- `src.cli.handleCommunication` - 18 calls +- `scripts.verify-env-contract.collectDockerReferences` - 19 calls +- `src.services.actions.executeAnalyzeCommunicationAction` - 18 calls +- `src.core.schema.conclusions.assertTodoProposalValue` - 18 calls +- `src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse` - 18 calls +- `src.operations.subactor.compileSubactorProcessEnvelope` - 18 calls ## System Interactions @@ -512,17 +506,17 @@ graph TD main --> add_subparsers main --> add_parser main --> add_argument + executePipeline --> resolveGlobs + executePipeline --> skippedAudit + executePipeline --> extractNlIntentAudit + executePipeline --> push + executePipeline --> extractGitIntent temporaryParent --> git temporaryParent --> join temporaryParent --> commonPipelineOption temporaryParent --> optionsForRoot temporaryParent --> runPipeline baseWorktree --> git - baseWorktree --> join - baseWorktree --> commonPipelineOption - baseWorktree --> optionsForRoot - baseWorktree --> runPipeline - extractTodo --> resolve ``` ## Reverse Engineering Guidelines diff --git a/project/evolution.toon.yaml b/project/evolution.toon.yaml index 78036dd..b4a654c 100644 --- a/project/evolution.toon.yaml +++ b/project/evolution.toon.yaml @@ -1,10 +1,10 @@ -# code2llm/evolution | 3812 func | 162f | 2026-08-04 +# code2llm/evolution | 3890 func | 174f | 2026-08-04 # generated in 0.01s -NEXT[10] (ranked by impact): +NEXT[4] (ranked by impact): [1] !! SPLIT src/cli.ts - WHY: 942L, 1 classes, max CC=13 - EFFORT: ~4h IMPACT: 12246 + WHY: 985L, 1 classes, max CC=13 + EFFORT: ~4h IMPACT: 12805 [2] !! SPLIT src/services/actions.ts WHY: 806L, 1 classes, max CC=13 @@ -14,45 +14,21 @@ NEXT[10] (ranked by impact): WHY: CC=38 exceeds 15 EFFORT: ~1h IMPACT: 722 - [4] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37 - WHY: CC=18 exceeds 15 - EFFORT: ~1h IMPACT: 666 - - [5] ! SPLIT-FUNC executePipeline CC=20 fan=31 - WHY: CC=20 exceeds 15 - EFFORT: ~1h IMPACT: 620 - - [6] ! SPLIT-FUNC looksLikeJson CC=20 fan=24 - WHY: CC=20 exceeds 15 - EFFORT: ~1h IMPACT: 480 - - [7] ! SPLIT-FUNC validateOperationStep CC=23 fan=13 - WHY: CC=23 exceeds 15 - EFFORT: ~1h IMPACT: 299 - - [8] ! SPLIT-FUNC iter_python_files CC=16 fan=15 - WHY: CC=16 exceeds 15 - EFFORT: ~1h IMPACT: 240 - - [9] ! SPLIT-FUNC persistFailedRunState CC=19 fan=12 - WHY: CC=19 exceeds 15 - EFFORT: ~1h IMPACT: 228 - - [10] ! SPLIT-FUNC collectAgentActionIssues CC=15 fan=15 - WHY: CC=15 exceeds 15 - EFFORT: ~1h IMPACT: 225 + [4] !! SPLIT evaluation/gold/v2/dataset.json + WHY: 2410L, 0 classes, max CC=0 + EFFORT: ~4h IMPACT: 0 RISKS[3]: ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths - ⚠ Splitting src/cli.ts may break 124 import paths + ⚠ Splitting src/cli.ts may break 133 import paths ⚠ Splitting src/services/actions.ts may break 106 import paths METRICS-TARGET: CC̄: 3.0 → ≤2.1 max-CC: 38 → ≤19 - god-modules: 10 → 0 - high-CC(≥15): 14 → ≤7 + god-modules: 9 → 0 + high-CC(≥15): 2 → ≤1 hub-types: 0 → ≤0 PATTERNS (language parser shared logic): diff --git a/project/flow.mmd b/project/flow.mmd index eb3602f..403c448 100644 --- a/project/flow.mmd +++ b/project/flow.mmd @@ -1,5 +1,5 @@ flowchart TD -%% generated in 0.04s +%% generated in 0.05s %% Entry points (blue) classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff @@ -11,16 +11,16 @@ flowchart TD src__cli__command["command"] src__cli__config["config"] src__cli__handler["handler"] + src__cli__shouldShowGlobalHelp["shouldShowGlobalHelp"] + src__cli__shouldShowGlobalVersion["shouldShowGlobalVersion"] + src__cli__resolveRequestedCommand["resolveRequestedCommand"] + src__cli__isHelpRequest["isHelpRequest"] + src__cli__resolveCommandHandler["resolveCommandHandler"] src__cli__commandHandlers["commandHandlers"] src__cli__resolveMainCommand["resolveMainCommand"] src__cli__handleLink["handleLink"] src__cli__files["files"] - src__cli__records["records"] - src__cli__graph["graph"] - src__cli__handleDiagnose["handleDiagnose"] - src__cli__graphFile["graphFile"] - src__cli__handleSummarize["handleSummarize"] - ...["+109 more"] + ...["+118 more"] end subgraph Core @@ -39,7 +39,7 @@ flowchart TD rust_ast__src__main__visit_item_static["visit_item_static"] rust_ast__src__main__visit_item_fn["visit_item_fn"] rust_ast__src__main__visit_item_impl["visit_item_impl"] - ...["+2517 more"] + ...["+2532 more"] end subgraph Exporters diff --git a/project/flow.png b/project/flow.png index 64ba21ebcfb63e7dcde5e8a49bc77d1fc41399f4..e76e552bf64022bccb432e5e026ba1fccf5d22b0 100644 GIT binary patch literal 14891 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 diff --git a/project/index.html b/project/index.html index 06244c2..48ca449 100644 --- a/project/index.html +++ b/project/index.html @@ -481,7 +481,7 @@

Analysis Results

// Initialize mermaid mermaid.initialize({ startOnLoad: false, theme: 'dark' }); - const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "97.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "31.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "13.9KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 4129 \n**Total Classes**: 404 \n**Modules**: 281 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "33.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 173, json: 40, python: 16, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 4129\n- **Total Classes**: 404\n- **Modules**: 281\n- **Entry Points**: 2776\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 202\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.services.actions\n- **Functions**: 145\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.diff.reality\n- **Functions**: 97\n- **Classes**: 4\n- **File**: `reality.ts`\n\n### src.communication.analyzer\n- **Functions**: 88\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.intake-contract\n- **Functions**: 76\n- **Classes**: 7\n- **File**: `intake-contract.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 75\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.operations.validation\n- **Functions**: 75\n- **File**: `validation.ts`\n\n### src.core.text\n- **Functions**: 66\n- **File**: `text.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.graph.linker\n- **Functions**: 55\n- **Classes**: 1\n- **File**: `linker.ts`\n\n### src.synthesis.code-change-plan.implementation-source-patch-assert\n- **Functions**: 55\n- **Classes**: 2\n- **File**: `implementation-source-patch-assert.ts`\n\n### src.synthesis.code-change-plan.implementation-source-patch-apply-core\n- **Functions**: 54\n- **Classes**: 6\n- **File**: `implementation-source-patch-apply-core.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation-indexing.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### scripts.verify-env-contract.makefile\n- **Calls**: scripts.verify-env-contract.readFile, scripts.verify-env-contract.join, scripts.verify-env-contract.matchAll, scripts.verify-env-contract.add, scripts.verify-env-contract.b, scripts.verify-env-contract.filter, scripts.verify-env-contract.has, scripts.verify-env-contract.sort\n\n### python.ast_extract.main\n- **Calls**: argparse.ArgumentParser, parser.add_argument, parser.add_argument, parser.add_argument, parser.parse_args, None.resolve, python.ast_extract.iter_python_files, print\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.python.todo2code.runtime.TypeScriptRuntime.reality\n- **Calls**: tempfile.TemporaryDirectory, self.invoke, Path, Path, Path, str, str, str\n\n### src.extractors.nl.extractNlIntent\n- **Calls**: src.extractors.nl.assertNlExtractionOptions, src.extractors.nl.resolve, src.extractors.nl.readText, src.extractors.nl.isAbsolute, src.extractors.nl.relativePosix, src.extractors.nl.replace, src.extractors.nl.splitIntentLines, src.extractors.nl.classifyAction\n\n### src.extractors.ast.extractAstIntent\n- **Calls**: src.extractors.ast.resolve, src.extractors.ast.ContentCache, src.extractors.ast.loadIgnoreMatcher, src.extractors.ast.walkFiles, src.extractors.ast.readText, src.extractors.ast.relativePosix, src.extractors.ast.getOrCompute, src.extractors.ast.sha256\n\n### src.extractors.todo.body\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.relative\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.lines\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.synthesis.todo-patch.applyTodoPatch\n- **Calls**: src.synthesis.todo-patch.all, src.synthesis.todo-patch.readText, src.synthesis.todo-patch.assertTodoPatchArtifact, src.synthesis.todo-patch.sha256, src.synthesis.todo-patch.Error, src.synthesis.todo-patch.assertApproval, src.synthesis.todo-patch.ensureDir, src.synthesis.todo-patch.dirname\n\n### src.extractors.changelog.extractChangelog\n- **Calls**: src.extractors.changelog.resolve, src.extractors.changelog.pathExists, src.extractors.changelog.readText, src.extractors.changelog.relativePosix, src.extractors.changelog.split, src.extractors.changelog.match, src.extractors.changelog.trim, src.extractors.changelog.readListBlock\n\n### src.graph.diff.diffIntentGraphs\n- **Calls**: src.graph.diff.assertGraph, src.graph.diff.Map, src.graph.diff.map, src.graph.diff.has, src.graph.diff.push, src.graph.diff.groupRecords, src.graph.diff.Set, src.graph.diff.keys\n\n### php.ast_extract.parseFile\n- **Calls**: php.ast_extract.file_get_contents, php.ast_extract.RuntimeException, php.ast_extract.preg_split, php.ast_extract.token_get_all, php.ast_extract.foreach, php.ast_extract.normalizedToken, php.ast_extract.substr_count, php.ast_extract.defined\n\n### src.cli.handleCommunication\n- **Calls**: src.cli.resolve, src.cli.all, src.cli.extractCommunicationIntentAudited, src.cli.optionString, src.cli.optionNullableString, src.cli.optionLlmMode, src.cli.extractGitIntent, src.cli.optionNumber\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 2: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 3: temporaryParent\n```\ntemporaryParent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 4: baseWorktree\n```\nbaseWorktree [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 5: extractTodo\n```\nextractTodo [src.extractors.todo]\n```\n\n### Flow 6: makefile\n```\nmakefile [scripts.verify-env-contract]\n```\n\n### Flow 7: extractCommunicationIntentAudited\n```\nextractCommunicationIntentAudited [src.communication.llm.implementation.CommunicationLlmRequiredError]\n```\n\n### Flow 8: extractNlIntentAudited\n```\nextractNlIntentAudited [src.extractors.nl-llm.NlLlmRequiredError]\n └─> assertNlExtractionOptions\n```\n\n### Flow 9: linkIntentRecords\n```\nlinkIntentRecords [src.graph.linker]\n```\n\n### Flow 10: baseUrl\n```\nbaseUrl [sdk.typescript.examples.basic]\n └─> health\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 76\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.validateIntakeEnvelopeHeader, src.communication.intake-contract.IntakeError.validateIntakeEnvelopeTimestamp, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.assertQuery\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 43\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 33\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 31\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 25\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.Collector, java.JavaAstExtract.JavaAstExtract.add\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 21\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 21\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### python.ast_extract.FactVisitor\n- **Methods**: 13\n- **Key Methods**: python.ast_extract.FactVisitor.__init__, python.ast_extract.FactVisitor.excerpt, python.ast_extract.FactVisitor.add, python.ast_extract.FactVisitor.visit_Import, python.ast_extract.FactVisitor.visit_ImportFrom, python.ast_extract.FactVisitor.visit_FunctionDef, python.ast_extract.FactVisitor.visit_AsyncFunctionDef, python.ast_extract.FactVisitor.visit_ClassDef, python.ast_extract.FactVisitor.add_named_constant, python.ast_extract.FactVisitor.visit_Assign\n- **Inherits**: ast.NodeVisitor\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.request-handlers.parseOffset\n- **Output to**: examples.backend.src.request-handlers.Number, examples.backend.src.request-handlers.isFinite\n\n### examples.backend.src.request-handlers.parsed\n\n### examples.backend.src.request-handlers.parseLimit\n- **Output to**: examples.backend.src.request-handlers.Number, examples.backend.src.request-handlers.isFinite\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.cli.parsed\n- **Output to**: src.cli.has, src.cli.printHelp\n\n### src.cli.formatWatchEvent\n- **Output to**: src.cli.Date, src.cli.toISOString, src.cli.file, src.cli.join, src.cli.change\n\n### src.cli.parseDiffMode\n- **Output to**: src.cli.optionString, src.cli.toLowerCase, src.cli.Error\n\n### src.cli.parseArgs\n- **Output to**: src.cli.push, src.cli.slice, src.cli.startsWith, src.cli.split, src.cli.set\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n## Behavioral Patterns\n\n### recursion_dotted_name\n- **Type**: recursion\n- **Confidence**: 0.90\n- **Functions**: python.ast_extract.dotted_name\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `sdk.python.examples.basic.main` - 62 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.src.client.parse_http_response` - 37 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `src.pipeline.run.executePipeline` - 31 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `src.interfaces.a2a-message-command.looksLikeJson` - 24 calls\n- `scripts.verify-env-contract.makefile` - 24 calls\n- `python.ast_extract.main` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `python.ast_extract.iter_python_files` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n- `src.extractors.ast.extractAstIntent` - 20 calls\n- `src.extractors.todo.body` - 20 calls\n- `src.extractors.todo.relative` - 20 calls\n- `src.extractors.todo.lines` - 20 calls\n- `src.synthesis.todo-patch.createTodoPatch` - 20 calls\n- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls\n- `src.communication.intake-service.GovernedIntakeService.validateProjection` - 20 calls\n- `src.extractors.changelog.extractChangelog` - 19 calls\n- `src.graph.diff.diffIntentGraphs` - 19 calls\n- `php.ast_extract.parseFile` - 19 calls\n- `src.cli.handleCommunication` - 18 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n main --> get\n main --> T2CClient\n main --> print\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n compareWorkspaceInte --> relative\n compareWorkspaceInte --> startsWith\n main --> list\n main --> monotonic\n main --> SentenceTransformer\n main --> ArgumentParser\n main --> add_subparsers\n main --> add_parser\n main --> add_argument\n temporaryParent --> git\n temporaryParent --> join\n temporaryParent --> commonPipelineOption\n temporaryParent --> optionsForRoot\n temporaryParent --> runPipeline\n baseWorktree --> git\n baseWorktree --> join\n baseWorktree --> commonPipelineOption\n baseWorktree --> optionsForRoot\n baseWorktree --> runPipeline\n extractTodo --> resolve\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "71.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.04s\n subgraph examples__backend\n examples__backend__src__request_handlers__handleHealth["handleHealth"]\n examples__backend__src__validation__agent["agent"]\n examples__backend__src__request_handlers__size["size"]\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__request_handlers__handleEventList["handleEventList"]\n examples__backend__src__request_handlers__handleRequest["handleRequest"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__request_handlers__handleEventPublish["handleEventPublish"]\n examples__backend__src__request_handlers__parseOffset["parseOffset"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__request_handlers__event["event"]\n examples__backend__src__request_handlers__parseLimit["parseLimit"]\n examples__backend__src__request_handlers__validation["validation"]\n examples__backend__src__server__startBackend["startBackend"]\n examples__backend__src__server__store["store"]\n examples__backend__src__request_handlers__readBody["readBody"]\n examples__backend__src__request_handlers__sendJson["sendJson"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__request_handlers__MAX_BODY_BYTES["MAX_BODY_BYTES"]\n examples__backend__src__server__server["server"]\n examples__backend__src__validation__object["object"]\n end\n subgraph examples__frontend\n examples__frontend__src__app__state["state"]\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__refresh["refresh"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__app__createState["createState"]\n end\n subgraph examples__src\n examples__src__runtime__executeContract["executeContract"]\n examples__src__runtime__validateContract["validateContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__slash["slash"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n end\n subgraph src__cli\n src__cli__main["main"]\n src__cli__svg["svg"]\n src__cli__handleExtractAst["handleExtractAst"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__handleExtract["handleExtract"]\n src__cli__result["result"]\n src__cli__taskFile["taskFile"]\n src__cli__handleCommunication["handleCommunication"]\n src__cli__isPlanSet["isPlanSet"]\n src__cli__doctor["doctor"]\n src__cli__handleLink["handleLink"]\n src__cli__emitExtraction["emitExtraction"]\n src__cli__parseArgs["parseArgs"]\n src__cli__handleDiff["handleDiff"]\n src__cli__optionTaskMode["optionTaskMode"]\n src__cli__handleCompareWorkspace["handleCompareWorkspace"]\n src__cli__handleEvaluateCodeChange["handleEvaluateCodeChange"]\n src__cli__handleWatch["handleWatch"]\n src__cli__handleExtractCommunication["handleExtractCommunication"]\n src__cli__handleGraphDiff["handleGraphDiff"]\n src__cli__emitJson["emitJson"]\n src__cli__view["view"]\n src__cli__controller["controller"]\n src__cli__handleApplySourcePatch["handleApplySourcePatch"]\n src__cli__buildDiffPayload["buildDiffPayload"]\n src__cli__context["context"]\n src__cli__handleRenderTodo["handleRenderTodo"]\n src__cli__handleExtractDocs["handleExtractDocs"]\n src__cli__printHelp["printHelp"]\n src__cli__optionNullableString["optionNullableString"]\n src__cli__optionPipelineTaskMode["optionPipelineTaskMode"]\n src__cli__handleReality["handleReality"]\n src__cli__optionString["optionString"]\n src__cli__handleProposeTodo["handleProposeTodo"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleExtractConfig["handleExtractConfig"]\n src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"]\n src__cli__diff["diff"]\n src__cli__optionNumber["optionNumber"]\n src__cli__handler["handler"]\n src__cli__resolvePipelineRoot["resolvePipelineRoot"]\n src__cli__root["root"]\n src__cli__handleIntake["handleIntake"]\n src__cli__handleProposeSourcePatch["handleProposeSourcePatch"]\n src__cli__handleProposeCodeChange["handleProposeCodeChange"]\n src__cli__optionNlMode["optionNlMode"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__execFileAsync["execFileAsync"]\n src__cli__optionList["optionList"]\n src__cli__handleExtractGit["handleExtractGit"]\n src__cli__handleExtractNl["handleExtractNl"]\n src__cli__command["command"]\n src__cli__formatWatchEvent["formatWatchEvent"]\n src__cli__diagnosticsPath["diagnosticsPath"]\n src__cli__handleRenderCodeChange["handleRenderCodeChange"]\n src__cli__handleSummarize["handleSummarize"]\n src__cli__reportPipelineDegradation["reportPipelineDegradation"]\n src__cli__file["file"]\n src__cli__handleExtractMarkdown["handleExtractMarkdown"]\n src__cli__pipeline["pipeline"]\n src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOption"]\n src__cli__handleExtractRuntime["handleExtractRuntime"]\n src__cli__absolute["absolute"]\n src__cli__resolveWatchTaskFile["resolveWatchTaskFile"]\n src__cli__diagnostics["diagnostics"]\n src__cli__parsed["parsed"]\n src__cli__initProject["initProject"]\n src__cli__invokedPath["invokedPath"]\n src__cli__handleCloseCodeChange["handleCloseCodeChange"]\n src__cli__buildGitDiff["buildGitDiff"]\n src__cli__stop["stop"]\n src__cli__handleApplyTodo["handleApplyTodo"]\n src__cli__optionBoolean["optionBoolean"]\n src__cli__optionLlmMode["optionLlmMode"]\n src__cli__parseDiffMode["parseDiffMode"]\n src__cli__stamp["stamp"]\n src__cli__optionSummaryMode["optionSummaryMode"]\n src__cli__buildFileDiff["buildFileDiff"]\n src__cli__handlePipeline["handlePipeline"]\n src__cli__buildPipelineOptions["buildPipelineOptions"]\n end\n subgraph src__extractors\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__todo__body["body"]\n src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__configuration__entry["entry"]\n src__extractors__todo__match["match"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__todo__checked["checked"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__docs_schema__target["target"]\n src__extractors__nl__object["object"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__git__root["root"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__todo__text["text"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__changelog__relative["relative"]\n src__extractors__git__readStats["readStats"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__git__runGit["runGit"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__todo__block["block"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__configuration__lines["lines"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__todo__raw["raw"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveModality["resolveModality"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET["NL_ACTION_SET"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__configuration__pair["pair"]\n src__extractors__nl__action["action"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__configuration__heading["heading"]\n src__extractors__git__count["count"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET["NL_MODALITY_SET"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__configuration__relative["relative"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__configuration__match["match"]\n src__extractors__changelog__lines["lines"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__git__result["result"]\n src__extractors__todo__lines["lines"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__ast__external__result["result"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__todo__task["task"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__docs_record__target["target"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__changelog__body["body"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__todo__heading["heading"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__configuration__files["files"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__docs_record__action["action"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__todo__classified["classified"]\n src__extractors__git__state["state"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__configuration__entries["entries"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__todo__relative["relative"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"]\n src__extractors__nl__classified["classified"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__todo__action["action"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__configuration__line["line"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__nl__body["body"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__nl__missing["missing"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleHealth\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventPublish\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventList\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleHealth\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventPublish\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventList\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__size\n examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__readBody\n examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__validation --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__event --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseOffset\n examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseLimit\n examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__cli__main --> src__cli__printHelp\n src__cli__main --> src__cli__parseArgs\n src__cli__main --> src__cli__resolveMainCommand\n src__cli__main --> src__cli__commandHandlers\n src__cli__parsed --> src__cli__printHelp\n src__cli__command --> src__cli__printHelp\n src__cli__commandHandlers --> src__cli__initProject\n src__cli__commandHandlers --> src__cli__doctor\n src__cli__handleLink --> src__cli__emitJson\n src__cli__handleLink --> src__cli__optionString\n src__cli__handleDiagnose --> src__cli__emitJson\n src__cli__handleDiagnose --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionString\n src__cli__handleSummarize --> src__cli__optionSummaryMode\n src__cli__diagnosticsPath --> src__cli__optionNumber\n src__cli__diagnosticsPath --> src__cli__optionBoolean\n src__cli__diagnostics --> src__cli__optionNumber\n src__cli__diagnostics --> src__cli__optionBoolean\n src__cli__result --> src__cli__execFileAsync\n src__cli__handleProposeTodo --> src__cli__optionString\n src__cli__handleProposeTodo --> src__cli__optionTaskMode\n src__cli__handleRenderTodo --> src__cli__optionString\n src__cli__handleApplyTodo --> src__cli__optionString\n src__cli__handleProposeCodeChange --> src__cli__optionString\n src__cli__handleRenderCodeChange --> src__cli__optionString\n src__cli__handleProposeSourcePatch --> src__cli__optionString\n src__cli__isPlanSet --> src__cli__optionString\n src__cli__handleApplySourcePatch --> src__cli__optionString\n src__cli__handleEvaluateCodeChange --> src__cli__optionString\n src__cli__handleCloseCodeChange --> src__cli__optionString\n src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot\n src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions\n src__cli__root --> src__cli__optionString\n src__cli__root --> src__cli__optionNullableString\n src__cli__root --> src__cli__optionLlmMode\n src__cli__handlePipeline --> src__cli__resolvePipelineRoot\n src__cli__handlePipeline --> src__cli__buildPipelineOptions\n src__cli__handlePipeline --> src__cli__optionNullableString\n src__cli__handlePipeline --> src__cli__reportPipelineDegradation\n src__cli__handleWatch --> src__cli__resolvePipelineRoot\n src__cli__handleWatch --> src__cli__resolveWatchTaskFile\n src__cli__handleWatch --> src__cli__buildPipelineOptions\n src__cli__handleWatch --> src__cli__optionNumber\n src__cli__handleWatch --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__optionNumber\n src__cli__taskFile --> src__cli__optionBoolean\n src__cli__taskFile --> src__cli__formatWatchEvent\n src__cli__pipeline --> src__cli__optionNumber\n src__cli__pipeline --> src__cli__optionBoolean\n src__cli__pipeline --> src__cli__formatWatchEvent\n src__cli__controller --> src__cli__optionNumber\n src__cli__controller --> src__cli__optionBoolean\n src__cli__controller --> src__cli__formatWatchEvent\n src__cli__stop --> src__cli__optionNumber\n src__cli__stop --> src__cli__optionBoolean\n src__cli__stop --> src__cli__formatWatchEvent\n src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions\n src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString\n src__cli__buildCommonPipelineOptions --> src__cli__optionList\n src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean\n src__cli__buildCommonPipelineOptions --> src__cli__optionString\n src__cli__buildCommonPipelineOptions --> src__cli__optionNumber\n src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode\n src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode\n src__cli__resolveWatchTaskFile --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode\n src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber\n src__cli__formatWatchEvent --> src__cli__file\n src__cli__stamp --> src__cli__file\n src__cli__handleDiff --> src__cli__parseDiffMode\n src__cli__handleDiff --> src__cli__handleGraphDiff\n src__cli__handleDiff --> src__cli__buildDiffPayload\n src__cli__handleDiff --> src__cli__optionString\n src__cli__handleDiff --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionNumber\n src__cli__svg --> src__cli__optionBoolean\n src__cli__parseDiffMode --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionString\n src__cli__handleGraphDiff --> src__cli__optionNumber\n src__cli__diff --> src__cli__optionNumber\n src__cli__buildDiffPayload --> src__cli__buildFileDiff\n src__cli__buildDiffPayload --> src__cli__buildGitDiff\n src__cli__buildFileDiff --> src__cli__optionNumber\n src__cli__context --> src__cli__optionString\n src__cli__context --> src__cli__optionBoolean\n src__cli__context --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionNumber\n src__cli__buildGitDiff --> src__cli__optionString\n src__cli__buildGitDiff --> src__cli__optionBoolean\n src__cli__handleReality --> src__cli__optionString\n src__cli__handleReality --> src__cli__optionNumber\n src__cli__handleReality --> src__cli__optionBoolean\n src__cli__view --> src__cli__optionNumber\n src__cli__view --> src__cli__optionBoolean\n src__cli__handleExtract --> src__cli__optionString\n src__cli__handleExtract --> src__cli__handler\n src__cli__handleExtractNl --> src__cli__optionString\n src__cli__handleExtractNl --> src__cli__optionNlMode\n src__cli__handleExtractNl --> src__cli__emitExtraction\n src__cli__handleExtractGit --> src__cli__optionNumber\n src__cli__handleExtractGit --> src__cli__emitExtraction\n src__cli__handleExtractAst --> src__cli__emitExtraction\n src__cli__handleExtractConfig --> src__cli__emitExtraction\n src__cli__handleExtractRuntime --> src__cli__emitExtraction\n src__cli__handleExtractMarkdown --> src__cli__optionNullableString\n src__cli__handleExtractMarkdown --> src__cli__optionLlmMode\n src__cli__handleExtractMarkdown --> src__cli__emitExtraction\n src__cli__handleExtractDocs --> src__cli__optionList\n src__cli__handleExtractDocs --> src__cli__emitExtraction\n src__cli__handleExtractCommunication --> src__cli__optionString\n src__cli__handleExtractCommunication --> src__cli__optionNullableString\n src__cli__handleExtractCommunication --> src__cli__optionLlmMode\n src__cli__handleExtractCommunication --> src__cli__emitExtraction\n src__cli__handleCommunication --> src__cli__optionString\n src__cli__handleCommunication --> src__cli__optionNullableString\n src__cli__handleCommunication --> src__cli__optionLlmMode\n src__cli__handleCommunication --> src__cli__optionNumber\n src__cli__handleCommunication --> src__cli__optionBoolean\n src__cli__handleIntake --> src__cli__optionString\n src__cli__handleIntake --> src__cli__optionBoolean\n src__cli__absolute --> src__cli__optionString\n src__cli__doctor --> src__cli__execFileAsync\n src__cli__optionNumber --> src__cli__optionString\n src__cli__optionList --> src__cli__optionString\n src__cli__optionNlMode --> src__cli__optionLlmMode\n src__cli__optionLlmMode --> src__cli__optionString\n src__cli__optionTaskMode --> src__cli__optionString\n src__cli__optionSummaryMode --> src__cli__optionLlmMode\n src__cli__optionSummaryMode --> src__cli__optionBoolean\n src__cli__optionPipelineTaskMode --> src__cli__optionString\n src__cli__invokedPath --> src__cli__main\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__resolveModality --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "764B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>12 funcs"]\n python__ast_extract["python.ast_extract<br/>18 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__graph["src.graph<br/>227 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>477 funcs"]\n scripts__research ==>|7| src__live\n sdk__python ==>|4| src__synthesis\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n python__ast_extract -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.1KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.04s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n src__cli__records["records"]\n src__cli__graph["graph"]\n src__cli__handleDiagnose["handleDiagnose"]\n src__cli__graphFile["graphFile"]\n src__cli__handleSummarize["handleSummarize"]\n ...["+109 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2517 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [25KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [181KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [33KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "168.7KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "25.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 281f 43441L | typescript:173,json:40,python:16,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.31s\n# CC̅=3.1 | critical:24/4129 | dups:0 | cycles:0\n\nHEALTH[20]:\n 🔴 GOD src/diff/reality.ts = 690L, 4 classes, 89m, max CC=15\n 🟡 CC generationMetadata CC=17 (limit:15)\n 🟡 CC compareGraphs CC=15 (limit:15)\n 🟡 CC looksLikeJson CC=20 (limit:15)\n 🟡 CC buildRealityTotals CC=15 (limit:15)\n 🟡 CC persistPipelineArtifacts CC=17 (limit:15)\n 🟡 CC persistFailedRunState CC=19 (limit:15)\n 🟡 CC assertRerankerDecision CC=17 (limit:15)\n 🟡 CC assertGeneration CC=16 (limit:15)\n 🟡 CC validateOperationStep CC=23 (limit:15)\n 🟡 CC collectAgentActionIssues CC=15 (limit:15)\n 🟡 CC parseFile CC=38 (limit:15)\n 🟡 CC makefile CC=28 (limit:15)\n 🟡 CC visited CC=15 (limit:15)\n 🟡 CC visit CC=15 (limit:15)\n 🟡 CC main CC=27 (limit:15)\n 🟡 CC iter_python_files CC=16 (limit:15)\n 🟡 CC run CC=26 (limit:15)\n 🟡 CC baseUrl CC=17 (limit:15)\n 🟡 CC token CC=17 (limit:15)\n\nREFACTOR[2]:\n 1. split src/diff/reality.ts (god module)\n 2. split 19 high-CC methods (CC>15)\n\nPIPELINES[2116]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [MAX_BODY_BYTES]: MAX_BODY_BYTES → handleHealth → sendJson\n PURITY: 100% pure\n [17] Src [handleRequest]: handleRequest → handleHealth → sendJson\n PURITY: 100% pure\n [18] Src [url]: url\n PURITY: 100% pure\n [19] Src [body]: body\n PURITY: 100% pure\n [20] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [21] Src [event]: event → sendJson\n PURITY: 100% pure\n [22] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [23] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [24] Src [record]: record → invalid\n PURITY: 100% pure\n [25] Src [agent]: agent → invalid\n PURITY: 100% pure\n [26] Src [action]: action → invalid\n PURITY: 100% pure\n [27] Src [object]: object → invalid\n PURITY: 100% pure\n [28] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [29] Src [listEvents]: listEvents\n PURITY: 100% pure\n [30] Src [start]: start\n PURITY: 100% pure\n [31] Src [store]: store → sendJson\n PURITY: 100% pure\n [32] Src [server]: server → sendJson\n PURITY: 100% pure\n [33] Src [body]: body\n PURITY: 100% pure\n [34] Src [startBackend]: startBackend → createBackend → sendJson\n PURITY: 100% pure\n [35] Src [port]: port\n PURITY: 100% pure\n [36] Src [host]: host\n PURITY: 100% pure\n [37] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [38] Src [url]: url\n PURITY: 100% pure\n [39] Src [response]: response\n PURITY: 100% pure\n [40] Src [payload]: payload\n PURITY: 100% pure\n [41] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [42] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [43] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [44] Src [table]: table\n PURITY: 100% pure\n [45] Src [head]: head\n PURITY: 100% pure\n [46] Src [body]: body\n PURITY: 100% pure\n [47] Src [tr]: tr\n PURITY: 100% pure\n [48] Src [renderError]: renderError\n PURITY: 100% pure\n [49] Src [message]: message\n PURITY: 100% pure\n [50] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=5.3 ←in:0 →out:0\n │ ast_extract.go 368L 3C 15m CC=14 ←0\n │\n python/ CC̄=4.2 ←in:0 →out:1\n │ !! ast_extract 221L 1C 18m CC=16 ←0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ !! verify-env-contract.mjs 103L 0C 15m CC=28 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ !! verify-no-llm-imports.mjs 78L 0C 6m CC=15 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.1 ←in:0 →out:0\n │ !! cli.ts 942L 1C 124m CC=13 ←0\n │ !! actions.ts 806L 1C 106m CC=13 ←0\n │ !! reality.ts 690L 4C 89m CC=15 ←0\n │ !! analyzer.ts 596L 3C 81m CC=15 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! text.ts 530L 0C 61m CC=14 ←0\n │ gold-cases.ts 489L 4C 62m CC=8 ←0\n │ diagnostics.ts 459L 1C 59m CC=11 ←0\n │ implementation-source-patch-apply-core.ts 434L 6C 50m CC=13 ←0\n │ !! validation.ts 429L 0C 69m CC=23 ←0\n │ !! gold-types.ts 405L 15C 17m CC=17 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ implementation-source-patch-assert.ts 397L 2C 52m CC=11 ←0\n │ !! run.ts 384L 4C 33m CC=20 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ intake-contract.ts 334L 7C 34m CC=14 ←0\n │ summarizer.ts 333L 5C 27m CC=10 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ result.ts 311L 0C 23m CC=7 ←0\n │ intent.ts 309L 4C 37m CC=12 ←0\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ !! run-persistence.ts 297L 0C 28m CC=19 ←0\n │ watcher.ts 292L 6C 42m CC=12 ←0\n │ reranker-llm.ts 291L 2C 35m CC=9 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ linker.ts 286L 1C 52m CC=8 ←3\n │ implementation-review.ts 274L 3C 33m CC=7 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ implementation-helpers-plans.ts 269L 3C 36m CC=9 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ tasks-llm.ts 266L 4C 22m CC=11 ←0\n │ nl-llm-helpers.ts 261L 3C 31m CC=11 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ candidate.ts 250L 1C 19m CC=8 ←0\n │ code-change.ts 250L 19C 0m CC=0.0 ←0\n │ openrouter-request.ts 242L 4C 30m CC=9 ←0\n │ openrouter.ts 240L 5C 31m CC=13 ←0\n │ utils.ts 239L 0C 42m CC=8 ←0\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ implementation-source-patch-create.ts 235L 3C 30m CC=6 ←0\n │ implementation-source-patch-apply-diff.ts 233L 3C 31m CC=11 ←0\n │ code-change-path.ts 232L 0C 23m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ identity.ts 216L 3C 33m CC=12 ←0\n │ intent.ts 212L 13C 0m CC=0.0 ←0\n │ io.ts 211L 2C 30m CC=11 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ git.ts 208L 4C 27m CC=6 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ run-helpers.ts 188L 0C 18m CC=11 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ markdown-llm.ts 178L 2C 11m CC=9 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ a2a-run-list-item.ts 171L 2C 29m CC=8 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ linker-candidates.ts 163L 1C 23m CC=10 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ record.ts 158L 2C 10m CC=6 ←0\n │ intake-protobuf.ts 158L 0C 29m CC=13 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ text.ts 153L 0C 34m CC=6 ←0\n │ diff-ui.ts 152L 0C 7m CC=5 ←0\n │ text-myers.ts 152L 3C 27m CC=9 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ !! a2a-message-command.ts 144L 0C 30m CC=20 ←1\n │ implementation-helpers-acceptance.ts 141L 2C 15m CC=4 ←0\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ implementation-semantic.ts 125L 1C 13m CC=9 ←0\n │ a2a-message.ts 125L 0C 19m CC=12 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ a2a-history.ts 96L 1C 17m CC=13 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ linker-relations.ts 83L 3C 7m CC=7 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ implementation-helpers-close.ts 75L 2C 10m CC=4 ←0\n │ implementation-source-patch-diff.ts 74L 0C 16m CC=6 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ implementation-targets.ts 61L 0C 9m CC=5 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ run-summary.ts 58L 1C 4m CC=5 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ gold-cli.ts 44L 0C 10m CC=12 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ implementation-helpers.ts 39L 0C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ compile-cli.ts 34L 0C 7m CC=10 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ implementation-helpers-shared.ts 29L 0C 2m CC=1 ←0\n │ !! record-metadata.ts 27L 0C 3m CC=17 ←0\n │ implementation-indexing.ts 25L 0C 4m CC=4 ←3\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ !! diff-ui-script.ts 17L 0C 8m CC=15 ←0\n │ implementation-diagnostics.ts 17L 0C 2m CC=2 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ git-binary.ts 10L 0C 2m CC=1 ←0\n │ implementation-source-patch.ts 9L 0C 0m CC=0.0 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ implementation-source-patch-apply.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ implementation.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=3.0 ←in:2 →out:0\n │ JavaAstExtract.java 260L 1C 12m CC=10 ←1\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ !! client.rs 221L 1C 19m CC=18 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n examples/ CC̄=2.3 ←in:0 →out:0\n │ request-handlers.ts 88L 0C 18m CC=9 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ server.ts 43L 1C 8m CC=4 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.synthesis src.graph java examples.frontend python\n scripts.research ── 7 1 1 !! fan-out\n sdk.python ── 4 1 2 1 !! fan-out\n src.live ←7 ── hub\n src.synthesis ←1 ←4 ── hub\n src.graph ←1 ←1 ── ←1\n java ←2 ── \n examples.frontend ←1 ── \n python 1 ──\n CYCLES: none\n HUB: src.live/ (fan-in=7)\n HUB: src.synthesis/ (fan-in=5)\n SMELL: scripts.research/ fan-out=9 → split needed\n SMELL: sdk.python/ fan-out=8 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "13.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.23s\n# nodes: 399 | edges: 500 | modules: 30\n# CC̄=3.1\n\nHUBS[20]:\n src.cli.optionString\n CC=2 in:33 out:1 total:34\n src.cli.optionNumber\n CC=5 in:20 out:5 total:25\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n src.cli.optionBoolean\n CC=3 in:17 out:3 total:20\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n src.cli.handleCommunication\n CC=11 in:0 out:18 total:18\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.ast.records.moduleRecords\n CC=6 in:1 out:14 total:15\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.lines\n CC=7 in:0 out:15 total:15\n\nMODULES:\n examples.backend.src.request-handlers [12 funcs]\n MAX_BODY_BYTES CC=9 out:5\n event CC=1 out:1\n handleEventList CC=1 out:5\n handleEventPublish CC=4 out:6\n handleHealth CC=1 out:2\n handleRequest CC=9 out:5\n parseLimit CC=2 out:2\n parseOffset CC=2 out:2\n readBody CC=3 out:5\n sendJson CC=1 out:4\n examples.backend.src.server [5 funcs]\n createBackend CC=4 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n startBackend CC=3 out:3\n store CC=3 out:4\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [10 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n slash CC=1 out:1\n try CC=3 out:13\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.cli [80 funcs]\n absolute CC=3 out:1\n buildCommonPipelineOptions CC=3 out:8\n buildDiffPayload CC=2 out:2\n buildFileDiff CC=3 out:6\n buildGitDiff CC=5 out:6\n buildPipelineOptions CC=1 out:1\n buildWorkspaceComparisonOptions CC=3 out:6\n command CC=3 out:2\n commandHandlers CC=2 out:6\n context CC=2 out:4\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [2 funcs]\n adapterRecords CC=2 out:3\n moduleRecords CC=6 out:14\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [10 funcs]\n appendA2aAgentWarnings CC=5 out:4\n appendIdentityWarnings CC=4 out:2\n appendRegistryAlignmentWarnings CC=7 out:2\n appendRoleAndParticipantWarnings CC=3 out:2\n appendTimestampWarnings CC=3 out:2\n buildLocalWarnings CC=3 out:5\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [18 funcs]\n NL_ACTION_SET CC=1 out:7\n NL_MODALITY_SET CC=1 out:7\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleHealth\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleEventPublish\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleEventList\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleHealth\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleEventPublish\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleEventList\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleHealth → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleHealth → examples.backend.src.request-handlers.size\n examples.backend.src.request-handlers.handleEventPublish → examples.backend.src.request-handlers.readBody\n examples.backend.src.request-handlers.handleEventPublish → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.validation → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.event → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.parseOffset\n examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.parseLimit\n examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.sendJson\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "262.9KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 399\n total_edges: 500\n modules_count: 30\nnodes:\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n examples.backend.src.request-handlers.handleHealth:\n name: handleHealth\n module: examples.backend.src.request-handlers\n line: 25\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.slash:\n name: slash\n module: java.JavaAstExtract\n line: 259\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.cli.main:\n name: main\n module: src.cli\n line: 61\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.cli.svg:\n name: svg\n module: src.cli\n line: 564\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtractAst:\n name: handleExtractAst\n module: src.cli\n line: 619\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.handleDiagnose:\n name: handleDiagnose\n module: src.cli\n line: 139\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.handleExtract:\n name: handleExtract\n module: src.cli\n line: 577\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.cli.result:\n name: result\n module: src.cli\n line: 770\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.taskFile:\n name: taskFile\n module: src.cli\n line: 348\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.cli.handleCommunication:\n name: handleCommunication\n module: src.cli\n line: 666\n cyclomatic_complexity: 11\n calls_out: 18\n calls_in: 0\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.cli.isPlanSet:\n name: isPlanSet\n module: src.cli\n line: 263\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-file-helpers.buildLocalWarnings:\n name: buildLocalWarnings\n module: src.extractors.communication-file-helpers\n line: 254\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.cli.doctor:\n name: doctor\n module: src.cli\n line: 757\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 1\n examples.backend.src.request-handlers.size:\n name: size\n module: examples.backend.src.request-handlers\n line: 71\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 16\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.cli.handleLink:\n name: handleLink\n module: src.cli\n line: 131\n cyclomatic_complexity: 2\n calls_out: 9\n calls_in: 0\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n examples.backend.src.request-handlers.handleEventList:\n name: handleEventList\n module: examples.backend.src.request-handlers\n line: 50\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.cli.emitExtraction:\n name: emitExtraction\n module: src.cli\n line: 691\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 8\n src.extractors.communication-file-helpers.appendRegistryAlignmentWarnings:\n name: appendRegistryAlignmentWarnings\n module: src.extractors.communication-file-helpers\n line: 299\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 78\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 237\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.cli.parseArgs:\n name: parseArgs\n module: src.cli\n line: 779\n cyclomatic_complexity: 13\n calls_out: 5\n calls_in: 1\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 88\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n src.cli.handleDiff:\n name: handleDiff\n module: src.cli\n line: 468\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n src.cli.optionTaskMode:\n name: optionTaskMode\n module: src.cli\n line: 860\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.cli.handleCompareWorkspace:\n name: handleCompareWorkspace\n module: src.cli\n line: 330\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.cli.handleEvaluateCodeChange:\n name: handleEvaluateCodeChange\n module: src.cli\n line: 290\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.handleWatch:\n name: handleWatch\n module: src.cli\n line: 346\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.cli.handleExtractCommunication:\n name: handleExtractCommunication\n module: src.cli\n line: 656\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 0\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 182\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.cli.handleGraphDiff:\n name: handleGraphDiff\n module: src.cli\n line: 494\n cyclomatic_complexity: 7\n calls_out: 11\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n examples.backend.src.request-handlers.handleRequest:\n name: handleRequest\n module: examples.backend.src.request-handlers\n line: 7\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 83\n cyclomatic_complexity: 3\n calls_out: 13\n calls_in: 1\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.cli.emitJson:\n name: emitJson\n module: src.cli\n line: 701\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 2\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.cli.view:\n name: view\n module: src.cli\n line: 561\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.cli.controller:\n name: controller\n module: src.cli\n line: 351\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 26\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 3\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.handleApplySourcePatch:\n name: handleApplySourcePatch\n module: src.cli\n line: 272\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.cli.buildDiffPayload:\n name: buildDiffPayload\n module: src.cli\n line: 512\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.cli.context:\n name: context\n module: src.cli\n line: 535\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.cli.handleRenderTodo:\n name: handleRenderTodo\n module: src.cli\n line: 180\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n examples.backend.src.request-handlers.handleEventPublish:\n name: handleEventPublish\n module: examples.backend.src.request-handlers\n line: 29\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 2\n src.cli.handleExtractDocs:\n name: handleExtractDocs\n module: src.cli\n line: 646\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.printHelp:\n name: printHelp\n module: src.cli\n line: 890\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 242\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.cli.optionNullableString:\n name: optionNullableString\n module: src.cli\n line: 823\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 167\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.optionPipelineTaskMode:\n name: optionPipelineTaskMode\n module: src.cli\n line: 876\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.resolveModality:\n name: resolveModality\n module: src.extractors.nl-llm-helpers\n line: 171\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.cli.handleReality:\n name: handleReality\n module: src.cli\n line: 551\n cyclomatic_complexity: 9\n calls_out: 12\n calls_in: 0\n examples.backend.src.request-handlers.parseOffset:\n name: parseOffset\n module: examples.backend.src.request-handlers\n line: 59\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.cli.optionString:\n name: optionString\n module: src.cli\n line: 818\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 33\n src.cli.handleProposeTodo:\n name: handleProposeTodo\n module: src.cli\n line: 163\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n examples.backend.src.request-handlers.event:\n name: event\n module: examples.backend.src.request-handlers\n line: 46\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 218\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.cli.resolveMainCommand:\n name: resolveMainCommand\n module: src.cli\n line: 125\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 188\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.NL_ACTION_SET:\n name: NL_ACTION_SET\n module: src.extractors.nl-llm-helpers\n line: 234\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n examples.backend.src.request-handlers.parseLimit:\n name: parseLimit\n module: examples.backend.src.request-handlers\n line: 64\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 91\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 0\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 222\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.cli.handleExtractConfig:\n name: handleExtractConfig\n module: src.cli\n line: 624\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-file-helpers.appendIdentityWarnings:\n name: appendIdentityWarnings\n module: src.extractors.communication-file-helpers\n line: 282\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 192\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.cli.buildCommonPipelineOptions:\n name: buildCommonPipelineOptions\n module: src.cli\n line: 384\n cyclomatic_complexity: 3\n calls_out: 8\n calls_in: 1\n examples.backend.src.request-handlers.validation:\n name: validation\n module: examples.backend.src.request-handlers\n line: 39\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.cli.diff:\n name: diff\n module: src.cli\n line: 504\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.NL_MODALITY_SET:\n name: NL_MODALITY_SET\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.cli.optionNumber:\n name: optionNumber\n module: src.cli\n line: 837\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 20\n src.cli.handler:\n name: handler\n module: src.cli\n line: 594\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.cli.resolvePipelineRoot:\n name: resolvePipelineRoot\n module: src.cli\n line: 367\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 197\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 240\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 181\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.root:\n name: root\n module: src.cli\n line: 667\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 0\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.cli.handleIntake:\n name: handleIntake\n module: src.cli\n line: 706\n cyclomatic_complexity: 13\n calls_out: 13\n calls_in: 0\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 35\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.cli.handleProposeSourcePatch:\n name: handleProposeSourcePatch\n module: src.cli\n line: 257\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 0\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 241\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 3\n src.cli.handleProposeCodeChange:\n name: handleProposeCodeChange\n module: src.cli\n line: 222\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 17\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.cli.optionNlMode:\n name: optionNlMode\n module: src.cli\n line: 850\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n src.cli.commandHandlers:\n name: commandHandlers\n module: src.cli\n line: 89\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 85\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.cli.execFileAsync:\n name: execFileAsync\n module: src.cli\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n examples.backend.src.request-handlers.readBody:\n name: readBody\n module: examples.backend.src.request-handlers\n line: 69\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 219\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n examples.backend.src.request-handlers.sendJson:\n name: sendJson\n module: examples.backend.src.request-handlers\n line: 81\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 7\n src.cli.optionList:\n name: optionList\n module: src.cli\n line: 845\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 3\n src.cli.handleExtractGit:\n name: handleExtractGit\n module: src.cli\n line: 614\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.cli.handleExtractNl:\n name: handleExtractNl\n module: src.cli\n line: 601\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 0\n src.cli.command:\n name: command\n module: src.cli\n line: 72\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.cli.formatWatchEvent:\n name: formatWatchEvent\n module: src.cli\n line: 448\n cyclomatic_complexity: 10\n calls_out: 7\n calls_in: 5\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.diagnosticsPath:\n name: diagnosticsPath\n module: src.cli\n line: 557\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.communication-file-helpers.appendTimestampWarnings:\n name: appendTimestampWarnings\n module: src.extractors.communication-file-helpers\n line: 328\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.cli.handleRenderCodeChange:\n name: handleRenderCodeChange\n module: src.cli\n line: 241\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n src.cli.handleSummarize:\n name: handleSummarize\n module: src.cli\n line: 146\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.cli.reportPipelineDegradation:\n name: reportPipelineDegradation\n module: src.cli\n line: 882\n cyclomatic_complexity: 6\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n src.cli.file:\n name: file\n module: src.cli\n line: 602\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.communication-file-helpers.appendA2aAgentWarnings:\n name: appendA2aAgentWarnings\n module: src.extractors.communication-file-helpers\n line: 314\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.cli.handleExtractMarkdown:\n name: handleExtractMarkdown\n module: src.cli\n line: 636\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 34\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.cli.pipeline:\n name: pipeline\n module: src.cli\n line: 349\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.cli.buildWorkspaceComparisonOptions:\n name: buildWorkspaceComparisonOptions\n module: src.cli\n line: 414\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.cli.handleExtractRuntime:\n name: handleExtractRuntime\n module: src.cli\n line: 629\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.cli.absolute:\n name: absolute\n module: src.cli\n line: 712\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.cli.resolveWatchTaskFile:\n name: resolveWatchTaskFile\n module: src.cli\n line: 409\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.cli.diagnostics:\n name: diagnostics\n module: src.cli\n line: 558\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n examples.backend.src.request-handlers.MAX_BODY_BYTES:\n name: MAX_BODY_BYTES\n module: examples.backend.src.request-handlers\n line: 5\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 0\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.cli.parsed:\n name: parsed\n module: src.cli\n line: 71\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.communication-file-helpers.appendRoleAndParticipantWarnings:\n name: appendRoleAndParticipantWarnings\n module: src.extractors.communication-file-helpers\n line: 273\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.cli.initProject:\n name: initProject\n module: src.cli\n line: 736\n cyclomatic_complexity: 6\n calls_out: 9\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.cli.invokedPath:\n name: invokedPath\n module: src.cli\n line: 936\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n src.cli.handleCloseCodeChange:\n name: handleCloseCodeChange\n module: src.cli\n line: 310\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 0\n src.cli.buildGitDiff:\n name: buildGitDiff\n module: src.cli\n line: 534\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 1\n src.cli.stop:\n name: stop\n module: src.cli\n line: 352\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.cli.handleApplyTodo:\n name: handleApplyTodo\n module: src.cli\n line: 201\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 0\n src.cli.optionBoolean:\n name: optionBoolean\n module: src.cli\n line: 830\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 17\n src.cli.optionLlmMode:\n name: optionLlmMode\n module: src.cli\n line: 854\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 8\n src.cli.parseDiffMode:\n name: parseDiffMode\n module: src.cli\n line: 488\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.cli.stamp:\n name: stamp\n module: src.cli\n line: 449\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.cli.optionSummaryMode:\n name: optionSummaryMode\n module: src.cli\n line: 866\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.cli.buildFileDiff:\n name: buildFileDiff\n module: src.cli\n line: 517\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.cli.handlePipeline:\n name: handlePipeline\n module: src.cli\n line: 338\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.cli.buildPipelineOptions:\n name: buildPipelineOptions\n module: src.cli\n line: 371\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 226\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.handleHealth\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.handleEventPublish\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.handleEventList\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.handleHealth\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.handleEventPublish\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.handleEventList\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleHealth\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleHealth\n callee: examples.backend.src.request-handlers.size\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventPublish\n callee: examples.backend.src.request-handlers.readBody\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventPublish\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.validation\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.event\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventList\n callee: examples.backend.src.request-handlers.parseOffset\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventList\n callee: examples.backend.src.request-handlers.parseLimit\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventList\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.slash\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.parseArgs\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.resolveMainCommand\n call_type: resolved\n- caller: src.cli.main\n callee: src.cli.commandHandlers\n call_type: resolved\n- caller: src.cli.parsed\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.command\n callee: src.cli.printHelp\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.initProject\n call_type: resolved\n- caller: src.cli.commandHandlers\n callee: src.cli.doctor\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleLink\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.emitJson\n call_type: resolved\n- caller: src.cli.handleDiagnose\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleSummarize\n callee: src.cli.optionSummaryMode\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnosticsPath\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diagnostics\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.result\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeTodo\n callee: src.cli.optionTaskMode\n call_type: resolved\n- caller: src.cli.handleRenderTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplyTodo\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleRenderCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleProposeSourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.isPlanSet\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleApplySourcePatch\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleEvaluateCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCloseCodeChange\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleCompareWorkspace\n callee: src.cli.buildWorkspaceComparisonOptions\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.root\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handlePipeline\n callee: src.cli.reportPipelineDegradation\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolvePipelineRoot\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.resolveWatchTaskFile\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.buildPipelineOptions\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleWatch\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.taskFile\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.pipeline\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.controller\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.stop\n callee: src.cli.formatWatchEvent\n call_type: resolved\n- caller: src.cli.buildPipelineOptions\n callee: src.cli.buildCommonPipelineOptions\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildCommonPipelineOptions\n callee: src.cli.optionPipelineTaskMode\n call_type: resolved\n- caller: src.cli.resolveWatchTaskFile\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.buildWorkspaceComparisonOptions\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.formatWatchEvent\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.stamp\n callee: src.cli.file\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.parseDiffMode\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.handleGraphDiff\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.buildDiffPayload\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.svg\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.parseDiffMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleGraphDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.diff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildFileDiff\n call_type: resolved\n- caller: src.cli.buildDiffPayload\n callee: src.cli.buildGitDiff\n call_type: resolved\n- caller: src.cli.buildFileDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.context\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.buildGitDiff\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleReality\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.view\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtract\n callee: src.cli.handler\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.optionNlMode\n call_type: resolved\n- caller: src.cli.handleExtractNl\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleExtractGit\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractAst\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractConfig\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractRuntime\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractMarkdown\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.optionList\n call_type: resolved\n- caller: src.cli.handleExtractDocs\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleExtractCommunication\n callee: src.cli.emitExtraction\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNullableString\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionNumber\n call_type: resolved\n- caller: src.cli.handleCommunication\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.handleIntake\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.absolute\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.doctor\n callee: src.cli.execFileAsync\n call_type: resolved\n- caller: src.cli.optionNumber\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionList\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionNlMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionLlmMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionLlmMode\n call_type: resolved\n- caller: src.cli.optionSummaryMode\n callee: src.cli.optionBoolean\n call_type: resolved\n- caller: src.cli.optionPipelineTaskMode\n callee: src.cli.optionString\n call_type: resolved\n- caller: src.cli.invokedPath\n callee: src.cli.main\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntrie\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.7KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3812 func | 162f | 2026-08-04\n# generated in 0.01s\n\nNEXT[10] (ranked by impact):\n [1] !! SPLIT src/cli.ts\n WHY: 942L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12246\n\n [2] !! SPLIT src/services/actions.ts\n WHY: 806L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 10478\n\n [3] !! SPLIT-FUNC parseFile CC=38 fan=19\n WHY: CC=38 exceeds 15\n EFFORT: ~1h IMPACT: 722\n\n [4] ! SPLIT-FUNC Client.parse_http_response CC=18 fan=37\n WHY: CC=18 exceeds 15\n EFFORT: ~1h IMPACT: 666\n\n [5] ! SPLIT-FUNC executePipeline CC=20 fan=31\n WHY: CC=20 exceeds 15\n EFFORT: ~1h IMPACT: 620\n\n [6] ! SPLIT-FUNC looksLikeJson CC=20 fan=24\n WHY: CC=20 exceeds 15\n EFFORT: ~1h IMPACT: 480\n\n [7] ! SPLIT-FUNC validateOperationStep CC=23 fan=13\n WHY: CC=23 exceeds 15\n EFFORT: ~1h IMPACT: 299\n\n [8] ! SPLIT-FUNC iter_python_files CC=16 fan=15\n WHY: CC=16 exceeds 15\n EFFORT: ~1h IMPACT: 240\n\n [9] ! SPLIT-FUNC persistFailedRunState CC=19 fan=12\n WHY: CC=19 exceeds 15\n EFFORT: ~1h IMPACT: 228\n\n [10] ! SPLIT-FUNC collectAgentActionIssues CC=15 fan=15\n WHY: CC=15 exceeds 15\n EFFORT: ~1h IMPACT: 225\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/cli.ts may break 124 import paths\n ⚠ Splitting src/services/actions.ts may break 106 import paths\n\nMETRICS-TARGET:\n CC̄: 3.0 → ≤2.1\n max-CC: 38 → ≤19\n god-modules: 10 → 0\n high-CC(≥15): 14 → ≤7\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.0 → now CC̄=3.0\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "181.1KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 281f 43441L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:173,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.04s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 4129 func | 0 cls | 281 mod | CC̄=3.1 | critical:24 | cycles:0\n# alerts[5]: fan-out compareWorkspaceIntent=40; CC parseFile=38; fan-out Client.parse_http_response=37; fan-out run=33; fan-out executePipeline=31\n# hotspots[5]: compareWorkspaceIntent fan=40; Client.parse_http_response fan=37; run fan=33; main fan=31; executePipeline fan=31\n# evolution: CC̄ 3.0→3.1 (regressed +0.1)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[281]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/request-handlers.ts,88\n examples/backend/src/server.ts,43\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,368\n java/JavaAstExtract.java,260\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/ast_extract.py,221\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,103\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,78\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,221\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,942\n src/communication/analyzer.ts,596\n src/communication/identity.ts,216\n src/communication/intake-contract.ts,334\n src/communication/intake-protobuf.ts,158\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,211\n src/core/record.ts,158\n src/core/record-metadata.ts,27\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,309\n src/core/schema/utils.ts,239\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,530\n src/core/types/index.ts,4\n src/core/types/code-change.ts,250\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,212\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,208\n src/diff/git-binary.ts,10\n src/diff/reality.ts,690\n src/diff/svg.ts,104\n src/diff/text.ts,153\n src/diff/text-myers.ts,152\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,489\n src/evaluation/gold-cli.ts,44\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-types.ts,405\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,342\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,178\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,261\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,286\n src/graph/linker-candidates.ts,163\n src/graph/linker-relations.ts,83\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,96\n src/interfaces/a2a-message.ts,125\n src/interfaces/a2a-message-command.ts,144\n src/interfaces/a2a-run-list-item.ts,171\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,240\n src/llm/openrouter-request.ts,242\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,34\n src/operations/contract.ts,84\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,429\n src/pipeline/run.ts,384\n src/pipeline/run-helpers.ts,188\n src/pipeline/run-persistence.ts,297\n src/pipeline/run-summary.ts,58\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,291\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,250\n src/semantic/reranker/result.ts,311\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,806\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,333\n src/synthesis/code-change-path.ts,232\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/code-change-plan/implementation-diagnostics.ts,17\n src/synthesis/code-change-plan/implementation-helpers.ts,39\n src/synthesis/code-change-plan/implementation-helpers-acceptance.ts,141\n src/synthesis/code-change-plan/implementation-helpers-close.ts,75\n src/synthesis/code-change-plan/implementation-helpers-plans.ts,269\n src/synthesis/code-change-plan/implementation-helpers-shared.ts,29\n src/synthesis/code-change-plan/implementation-indexing.ts,25\n src/synthesis/code-change-plan/implementation-review.ts,274\n src/synthesis/code-change-plan/implementation-semantic.ts,125\n src/synthesis/code-change-plan/implementation-source-patch.ts,9\n src/synthesis/code-change-plan/implementation-source-patch-apply.ts,8\n src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts,434\n src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts,233\n src/synthesis/code-change-plan/implementation-source-patch-assert.ts,397\n src/synthesis/code-change-plan/implementation-source-patch-create.ts,235\n src/synthesis/code-change-plan/implementation-source-patch-diff.ts,74\n src/synthesis/code-change-plan/implementation-targets.ts,61\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,266\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,292\n src/web/diff-ui.ts,152\n src/web/diff-ui-script.ts,17\n tsconfig.json,23\nD:\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n match()\n expected()\n configBody()\n body()\n makefile()\n body()\n local()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,expectedId,assertVariableContractShape,assertVariableContractCore,assertVariableSource,source,assertVariableAccess,access,assertVariableAuthoritativeness,assertVariableMutability,buildVariableContractId,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,variables,variableById,validateOperationPlanShape,validateOperationPlanMetadata,validateOperationPlanEvidence,evidence,collectOperationPlanVariables,variables,validateOperationSteps,stepIds,steps,hasCommandStep,founderDecisionRequired,step,validateOperationStep,step,parameters,rollback,validateOperationStepParameters,parameters,reference,variable,validateOperationStepRollback,rollback,validateOperationExpectations,coveredSteps,expectationIds,expectation,verifiedBy,validateOperationDecision,decision,validateOperationVerification,verification,validateOperationPlanHash,castPlan,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n expectedId()\n assertVariableContractShape()\n assertVariableContractCore()\n assertVariableSource()\n source()\n assertVariableAccess()\n access()\n assertVariableAuthoritativeness()\n assertVariableMutability()\n buildVariableContractId()\n assertGeneration()\n generation()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n assertOperationPlan()\n plan()\n variables()\n variableById()\n validateOperationPlanShape()\n validateOperationPlanMetadata()\n validateOperationPlanEvidence()\n evidence()\n collectOperationPlanVariables()\n variables()\n validateOperationSteps()\n stepIds()\n steps()\n hasCommandStep()\n founderDecisionRequired()\n step()\n validateOperationStep()\n step()\n parameters()\n rollback()\n validateOperationStepParameters()\n parameters()\n reference()\n variable()\n validateOperationStepRollback()\n rollback()\n validateOperationExpectations()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n validateOperationDecision()\n decision()\n validateOperationVerification()\n verification()\n validateOperationPlanHash()\n castPlan()\n expectedHash()\n src/interfaces/a2a-message-command.ts:\n i: ../communication/intake-protobuf.js\n e: parseCommand,protobufCommand,objectCommand,parseCommandFromProtobuf,protobuf,bytes,parseCommandFromObject,objectData,parseCommandFromText,text,looksLikeJson,parseCommandFromJson,parseCommandFromSentence,parseSentenceInput,defaultTextCommand,isSupportedAction,commandInputFromSentence,first,parseText,firstToken,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,normalizeAction,normalized,action\n parseCommand()\n protobufCommand()\n objectCommand()\n parseCommandFromProtobuf()\n protobuf()\n bytes()\n parseCommandFromObject()\n objectData()\n parseCommandFromText()\n text()\n looksLikeJson()\n parseCommandFromJson()\n parseCommandFromSentence()\n parseSentenceInput()\n defaultTextCommand()\n isSupportedAction()\n commandInputFromSentence()\n first()\n parseText()\n firstToken()\n commandFromData()\n action()\n nested()\n parseKeyValues()\n key()\n raw()\n stringValue()\n parseScalar()\n normalizeAction()\n normalized()\n action()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/pipeline/run.ts:\n i: ../communication/analyzer.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../version.js,./run-summary.js,node:path\n e: PipelineContext,PipelineExecutionOutput,PipelinePersistedPaths,PipelineResult,runPipeline,context,execution,persisted,manifest,manifestPath,initializePipelineContext,root,runId,baseOutput,runDirectory,executePipeline,deterministicDocumentFiles,naturalLanguageAudit,result,git,ast,markdown,markdownAudit,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,communicationInput,communicationAudit,communicationSyntheses,allRecords,generatedAt,graph,diagnostics,communicationAnalysis,taskSynthesis\n PipelineContext:\n PipelineExecutionOutput:\n PipelinePersistedPaths:\n PipelineResult:\n runPipeline()\n context()\n execution()\n persisted()\n manifest()\n manifestPath()\n initializePipelineContext()\n root()\n runId()\n baseOutput()\n runDirectory()\n executePipeline()\n deterministicDocumentFiles()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n markdownAudit()\n documentationStartedAt()\n deterministicDocs()\n docs()\n configurationExtraction()\n runtime()\n communicationInput()\n communicationAudit()\n communicationSyntheses()\n allRecords()\n generatedAt()\n graph()\n diagnostics()\n communicationAnalysis()\n taskSynthesis()\n src/pipeline/run-persistence.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../extractors/docs-llm.js,../extractors/nl-llm.js,../llm/audit.js,../synthesis/tasks-llm.js,../version.js,./run.js,node:path\n e: makePipelineManifest,persistPipelineArtifacts,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,persistFailedRun,manifestConfiguration,persistFailedRunState,aborted,message,knownAudit,failedAudit,stageValue,reason,skippedAudit,failureCode\n makePipelineManifest()\n persistPipelineArtifacts()\n filePath()\n graphPath()\n diagnosticsPath()\n summaryPath()\n summaryConclusionsPath()\n taskSynthesisPath()\n todoValidationPath()\n todoPatchPath()\n todoPatchAuditPath()\n codeChangePlansPath()\n codeChangeReviewPath()\n codeChangeReviewAuditPath()\n codeChangeSourcePatchesPath()\n communicationAnalysisPath()\n communicationMarkdownPath()\n persistFailedRun()\n manifestConfiguration()\n persistFailedRunState()\n aborted()\n message()\n knownAudit()\n failedAudit()\n stageValue()\n reason()\n skippedAudit()\n failureCode()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/core/record-metadata.ts:\n i: ./types.js,./version.js\n e: generationMetadata,generationIdentity,separator\n generationMetadata()\n generationIdentity()\n separator()\n src/evaluation/gold-types.ts:\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,assertGoldLinkingCohort,assertRerankerFixture,assertRerankerModelIdentity,assertRerankerDecisions,decisions,recordLabels,seenModules,assertRerankerDecision\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n assertGoldLinkingCohort()\n assertRerankerFixture()\n assertRerankerModelIdentity()\n assertRerankerDecisions()\n decisions()\n recordLabels()\n seenModules()\n assertRerankerDecision()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n python/ast_extract.py:\n e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main\n FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1)\n source_hash(value)\n dotted_name(node)\n is_module_entrypoint(node)\n iter_python_files(root;files_from)\n main()\n src/web/diff-ui-script.ts:\n e: byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n compareGraphs()\n src/diff/reality.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js\n e: RealityRow,IntentRealityView,RealitySvgOptions,RealitySvgLayout,buildRealityView,components,diagnosticsByRecord,rows,buildRealityRows,rows,buildRealityRow,codes,status,compareRealityRows,bySeverity,alignment,bySize,buildRealityTotals,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,summarizeLaneTotals,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,layout,header,body,overflow,height,buildRealityLayout,laneX,laneStep,statusX,statusWidth,renderRealityLaneHeaders,isDeclared,renderRealityRow,y,color,renderRealityLanes,count,cx,renderRealityLaneCell,fill,label,pillWidth,renderMoreTopicsLabel,y,renderRealityHeight,footer,y,renderRealityMarkdown,lanes,escapeMarkdown\n RealityRow:\n IntentRealityView:\n RealitySvgOptions:\n RealitySvgLayout:\n buildRealityView()\n components()\n diagnosticsByRecord()\n rows()\n buildRealityRows()\n rows()\n buildRealityRow()\n codes()\n status()\n compareRealityRows()\n bySeverity()\n alignment()\n bySize()\n buildRealityTotals()\n declaredRecords()\n observedRecords()\n aligned()\n declaredTopics()\n observedTopics()\n implementationAlignedTopics()\n documentedObservedTopics()\n ratio()\n documentedCoverageLabel()\n LABEL_CHAR()\n BADGE_CHAR()\n widestLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n summarizeLaneTotals()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n renderRealitySvg()\n theme()\n maxRows()\n title()\n rows()\n visible()\n layout()\n header()\n body()\n overflow()\n height()\n buildRealityLayout()\n laneX()\n laneStep()\n statusX()\n statusWidth()\n renderRealityLaneHeaders()\n isDeclared()\n renderRealityRow()\n y()\n color()\n renderRealityLanes()\n count()\n cx()\n renderRealityLaneCell()\n fill()\n label()\n pillWidth()\n renderMoreTopicsLabel()\n y()\n renderRealityHeight()\n footer()\n y()\n renderRealityMarkdown()\n lanes()\n escapeMarkdown()\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,humanRequests,agentMessages,uniqueIssues,participantRows,collectParticipantsAndIdentityIssues,participants,participant,values,collectConflictIssues,left,right,leftRole,rightRole,code,responseRequiredFrom,resolveConflictCode,collectRequestResponseIssues,response,collectAgentActionIssues,type,participantGit,linked,matchedRequest,deduplicateCommunicationIssues,buildParticipantRows,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n humanRequests()\n agentMessages()\n uniqueIssues()\n participantRows()\n collectParticipantsAndIdentityIssues()\n participants()\n participant()\n values()\n collectConflictIssues()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n resolveConflictCode()\n collectRequestResponseIssues()\n response()\n collectAgentActionIssues()\n type()\n participantGit()\n linked()\n matchedRequest()\n deduplicateCommunicationIssues()\n buildParticipantRows()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n scripts/verify-no-llm-imports.mjs:\n i: node:fs,node:path\n e: visited,visit,body,resolved,resolveSource,raw\n visited()\n visit()\n body()\n resolved()\n resolveSource()\n raw()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n appendRoleAndParticipantWarnings()\n appendIdentityWarnings()\n appendRegistryAlignmentWarnings()\n appendA2aAgentWarnings()\n declaredA2aAgentId()\n hasRegistryEntry()\n appendTimestampWarnings()\n rawTimestamp()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n withoutAction()\n result()\n normalizeForObject()\n removeObjectAction()\n stripObjectConnector()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),validateIntakeEnvelopeHeader(-1),validateIntakeEnvelopeTimestamp(-1),assertCommand(-1),assertQuery(-1),invalid(-1),validateIntakeEnvelopeHeader(-1),invalid(-1),invalid(-1),validateIntakeEnvelopeTimestamp(-1),invalid(-1),assertCommand(-1),base(-1),validateCommandPayload(-1),validateCommandPayload(-1),assertParticipant(-1),participantId(-1),assertPrincipal(-1),participantId(-1),role(-1),stringArray(-1),capabilities(-1),participantId(-1),role(-1),ticketId(-1),invalid(-1),invalid(-1),participantId(-1),ticketId(-1),invalid(-1),assertQuery(-1),base(-1),validateQueryPayload(-1),validateQueryPayload(-1),nonBlank(-1),participantId(-1),ticketId(-1),nonBlank(-1),participantId(-1),ticketId(-1),invalid(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n next()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n handler()\n executeExtractNlAction()\n file()\n text()\n executeExtractGitAction()\n executeExtractAstAction()\n executeExtractConfigAction()\n executeExtractMarkdownAction()\n executeExtractDocsAction()\n executeExtractCommunicationAction()\n executeAnalyzeCommunicationAction()\n analysis()\n executeLinkAction()\n records()\n executeDiagnoseAction()\n graph()\n executeSummarizeAction()\n graph()\n diagnostics()\n executeProposeTodoAction()\n graph()\n diagnostics()\n result()\n output()\n executeRenderTodoAction()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n executeApplyTodoAction()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n executeProposeCodeChangeAction()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n executeRenderCodeChangeAction()\n planSet()\n review()\n patchPath()\n auditPath()\n executeProposeSourcePatchAction()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n executeApplySourcePatchAction()\n patch()\n receiptPath()\n result()\n executeEvaluateCodeChangeAction()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n executeCloseCodeChangeAction()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n executeDiffAction()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n executeDiffFilesAction()\n beforePath()\n afterPath()\n diff()\n executeDiffGitAction()\n result()\n executeRealityAction()\n graph()\n diagnostics()\n view()\n executeCompareWorkspaceAction()\n executePipelineAction()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:\n i: ../../core/io.js,../../core/schema.js,../../core/security.js,../../version.js,./implementation-diagnostics.js,./implementation-source-patch-apply-diff.js,./implementation-source-patch-assert.js,node:crypto,node:fs,node:path\n e: ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,exactSourcePatchKeys,actual,exactSourcePatchSet,deterministicGeneration\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n NormalizedApplyCodeChangeSourcePatchRequest:\n SourcePatchApplyLock:\n SourcePatchEditTarget:\n PreparedSourceEdit:\n applyCodeChangeSourcePatch()\n request()\n root()\n receiptPath()\n lock()\n idempotentResult()\n prepared()\n now()\n receipt()\n readExistingReceipt()\n existing()\n assertPatchApplicationRequest()\n patch()\n assertPatchApprovalActor()\n assertPatchApprovalHash()\n assertPatchEditsContainDiffs()\n acquireApplyLock()\n lock()\n prepareSourceEdits()\n target()\n before()\n after()\n prepareSourceEditTarget()\n relative()\n absolute()\n existed()\n assertSourcePatchTargetNotSymlink()\n assertDeleteEditClearsAll()\n validatePatchTargetForEdit()\n applyPreparedEdits()\n receipt()\n rollbackErrors()\n writePreparedEdits()\n buildPatchApplyReceipt()\n fileHashesAfter()\n rollbackPreparedEdits()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n validateSourceApplyReceiptShape()\n validateSourceApplyReceiptIdentity()\n validateSourceApplyReceiptTimestamps()\n validateSourceApplyReceiptPathHashes()\n expectedPaths()\n hashPaths()\n validateSourceApplyReceiptGeneration()\n atomicWriteRaw()\n exactSourcePatchKeys()\n actual()\n exactSourcePatchSet()\n deterministicGeneration()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),createModelError(-1),formatInvalidModelError(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),shouldRetryWithoutJsonSchema(-1)\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,node:fs,node:path\n e: RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,matchesRunFilters,participant,role,ticket,severity,normalized,safeRunPath\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n safeRunPath()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,parsed,values,unknownFields,payload,envelope,encodeIntakeResult,decodeIntakeResult,parsed,strings,numbers,decodeDelimitedFields,values,strings,numbers,offset,fieldStart,field,wire,raw,value,parsePayloadJson,parseOptionalJson,buildIntakeEnvelope,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n parsed()\n values()\n unknownFields()\n payload()\n envelope()\n encodeIntakeResult()\n decodeIntakeResult()\n parsed()\n strings()\n numbers()\n decodeDelimitedFields()\n values()\n strings()\n numbers()\n offset()\n fieldStart()\n field()\n wire()\n raw()\n value()\n parsePayloadJson()\n parseOptionalJson()\n buildIntakeEnvelope()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,recordId,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n recordId()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/interfaces/a2a-message.ts:\n e: parseSendConfiguration,validateOutputModes,supported,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/evaluation/gold-cli.ts:\n i: node:fs,node:path\n e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered\n main()\n args()\n arg()\n json()\n requirePerfect()\n outIndex()\n outPath()\n dataset()\n report()\n rendered()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,WatchConfiguration,WatchRuntime,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,configuration,runtime,defaultSleep,timer,onAbort,finish,createWatchConfiguration,root,minIntervalMs,scanIntervalMs,emit,now,sleep,matcher,runReport,result,createWatchRuntime,initialSnapshot,scanTreeCurrent,evaluateChangeCycle,current,delta,handleDelta,maybeGenerateReport,waitMs,generateReportForReason,startedAt,result\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n WatchConfiguration:\n WatchRuntime:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n configuration()\n runtime()\n defaultSleep()\n timer()\n onAbort()\n finish()\n createWatchConfiguration()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n matcher()\n runReport()\n result()\n createWatchRuntime()\n initialSnapshot()\n scanTreeCurrent()\n evaluateChangeCycle()\n current()\n delta()\n handleDelta()\n maybeGenerateReport()\n waitMs()\n generateReportForReason()\n startedAt()\n result()\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,participants,validateRegistryShape,assertParticipantIdentityEntry,entry,participantId,role,values,assertParticipantIdentityId,assertParticipantIdentityRole,assertDisplayName,assertDuplicateId,assertParticipantIdentityField,values,assertParticipantIdentityFieldUnique,owner,assertRoleCompatibility,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n participants()\n validateRegistryShape()\n assertParticipantIdentityEntry()\n entry()\n participantId()\n role()\n values()\n assertParticipantIdentityId()\n assertParticipantIdentityRole()\n assertDisplayName()\n assertDuplicateId()\n assertParticipantIdentityField()\n values()\n assertParticipantIdentityFieldUnique()\n owner()\n assertRoleCompatibility()\n exactKeys()\n allowed()\n missing()\n extra()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),resolveModality(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),NL_ACTION_SET(-1),NL_MODALITY_SET(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTargetEvidence,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTargetEvidence()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,WalkState,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,state,createWalkState,walkDirectory,entries,walkEntry,absolute,relative,isTargetFile,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n WalkState:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n state()\n createWalkState()\n walkDirectory()\n entries()\n walkEntry()\n absolute()\n relative()\n isTargetFile()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isUsefulCodeChangePath,isPlannablePath,normalized,segments,lowerSegments,basename,normalizePlannablePath,isCandidatePathSyntax,splitPathSegments,isInvalidSegmentShape,isConcretePath,hasShellPattern,isDisallowedSegment,isPlannableBasename,lowerBasename,dot,ext,isGeneratedArtifactPath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isUsefulCodeChangePath()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n normalizePlannablePath()\n isCandidatePathSyntax()\n splitPathSegments()\n isInvalidSegmentShape()\n isConcretePath()\n hasShellPattern()\n isDisallowedSegment()\n isPlannableBasename()\n lowerBasename()\n dot()\n ext()\n isGeneratedArtifactPath()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/synthesis/code-change-plan/implementation-source-patch-assert.ts:\n i: ../../core/schema.js,./implementation-source-patch-diff.js\n e: SourcePatchEditValidationContext,SourcePatchSetValidationContext,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,marker,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet\n SourcePatchEditValidationContext:\n SourcePatchSetValidationContext:\n assertCodeChangeSourcePatch()\n patch()\n editPaths()\n assertCodeChangeSourcePatchObject()\n patch()\n validateSourcePatchSchema()\n validateSourcePatchIdentifiers()\n validateSourcePatchEdits()\n collectSourcePatchEditPathActions()\n paths()\n editContext()\n validateSourcePatchEdit()\n normalizedEdit()\n normalizedPath()\n assertSourcePatchEditObject()\n validateSourcePatchEditBody()\n validateSourcePatchEditDiff()\n assertUniqueSourcePatchEditPathAction()\n normalizeSourcePatchEditPath()\n normalizedPath()\n ensureSourcePatchEditAction()\n ensureSourcePatchEditInstruction()\n validateSourcePatchHashAndId()\n expectedHash()\n validateSourcePatchGeneration()\n validateSourcePatchAgainstPlan()\n expectedChanges()\n assertSourcePatchPlanBinding()\n collectExpectedPlanChanges()\n validateSourcePatchEditsAgainstPlan()\n allowed()\n editPath()\n validateSourcePatchEvidence()\n marker()\n assertCodeChangeSourcePatchSet()\n set()\n context()\n createSourcePatchSetValidationContext()\n expectedPlanIds()\n assertSourcePatchSetObject()\n set()\n validateSourcePatchSetSchema()\n validateSourcePatchSetPatches()\n patchIds()\n validateSetPatchAndTrackDuplicates()\n expectedPlan()\n validateSetPatchGraphFingerprint()\n assertUniqueSetPatchId()\n validateSetPatchesPlanCoverage()\n validateSourcePatchSetGeneration()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts:\n i: ./implementation-source-patch-diff.js\n e: ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines\n ParsedUnifiedDiffHunk:\n UnifiedDiffParsingContext:\n UnifiedDiffCursor:\n applyUnifiedDiffToText()\n baseLines()\n hunks()\n output()\n joinAppliedText()\n parseUnifiedDiffIntoHunks()\n normalizedDiff()\n context()\n createEmptyUnifiedDiffContext()\n parseUnifiedDiffLines()\n finalizeUnifiedDiffContext()\n applyUnifiedDiffLineToContext()\n header()\n parseUnifiedDiffHeader()\n buildParsedUnifiedDiffHunk()\n applyUnifiedDiffHunks()\n applyUnifiedDiffHunk()\n oldIndex()\n copyBaseLinesToCursor()\n appendRemainingBaseLines()\n validateHunkCounts()\n oldCount()\n newCount()\n applyUnifiedDiffLine()\n mark()\n body()\n applyUnifiedDiffContextLine()\n applyUnifiedDiffDeletionLine()\n applyUnifiedDiffAdditionLine()\n splitKeep()\n lines()\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskSt\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "149.6KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.13s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)'\n description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41`\n with cyclomatic complexity 28 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_god\n title: 'Split god module: src/diff/reality.ts'\n description: 'code2llm reports `src/diff/reality.ts` as a large module (690 lines,\n 4 classes).\n\n\n Split it by responsibility, keep public imports stable, and add focused tests\n around the moved behavior.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - god-module\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:god:src/diff/reality.ts\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)'\n description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - python/ast_extract.py\n dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)'\n description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-no-llm-imports.mjs\n dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)'\n description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152`\n with cyclomatic complexity 18 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/src/client.rs\n dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.communication.analyzer.collectAgentActionIssues\n (CC=15)'\n description: 'code2llm reports `src.communication.analyzer.collectAgentActionIssues`\n at `src/communication/analyzer.ts:173` with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/communication/analyzer.ts\n dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.collectAgentActionIssues\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record-metadata.generationMetadata\n (CC=17)'\n description: 'code2llm reports `src.core.record-metadata.generationMetadata` at\n `src/core/record-metadata.ts:4` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record-metadata.ts\n dedupe_key: code2llm:cc:src/core/record-metadata.ts:src.core.record-metadata.generationMetadata\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityTotals (CC=15)'\n description: 'code2llm reports `src.diff.reality.buildRealityTotals` at `src/diff/reality.ts:224`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/diff/reality.ts\n dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityTotals\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertRerankerDecision\n (CC=17)'\n description: 'code2llm reports `src.evaluation.gold-types.assertRerankerDecision`\n at `src/evaluation/gold-types.ts:383` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/evaluation/gold-types.ts\n dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertRerankerDecision\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message-command.looksLikeJson\n (CC=20)'\n description: 'code2llm reports `src.interfaces.a2a-message-command.looksLikeJson`\n at `src/interfaces/a2a-message-command.ts:56` with cyclomatic complexity 20 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/interfaces/a2a-message-command.ts\n dedupe_key: code2llm:cc:src/interfaces/a2a-message-command.ts:src.interfaces.a2a-message-command.looksLikeJson\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration\n (CC=16)'\n description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:162`\n with cyclomatic complexity 16 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.operations.validation.validateOperationStep\n (CC=23)'\n description: 'code2llm reports `src.operations.validation.validateOperationStep`\n at `src/operations/validation.ts:277` with cyclomatic complexity 23 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/operations/validation.ts\n dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.validateOperationStep\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run-persistence.persistFailedRunState\n (CC=19)'\n description: 'code2llm reports `src.pipeline.run-persistence.persistFailedRunState`\n at `src/pipeline/run-persistence.ts:206` with cyclomatic complexity 19 (limit\n 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run-persistence.ts\n dedupe_key: code2llm:cc:src/pipeline/run-persistence.ts:src.pipeline.run-persistence.persistFailedRunState\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run-persistence.persistPipelineArtifacts\n (CC=17)'\n description: 'code2llm reports `src.pipeline.run-persistence.persistPipelineArtifacts`\n at `src/pipeline/run-persistence.ts:57` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run-persistence.ts\n dedupe_key: code2llm:cc:src/pipeline/run-persistence.ts:src.pipeline.run-persistence.persistPipelineArtifacts\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.pipeline.run.executePipeline (CC=20)'\n description: 'code2llm reports `src.pipeline.run.executePipeline` at `src/pipeline/run.ts:198`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/pipeline/run.ts\n dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.executePipeline\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.web.diff-ui-script.compareGraphs (CC=15)'\n description: 'code2llm reports `src.web.diff-ui-script.compareGraphs` at `src/web/diff-ui-script.ts:11`\n with cyclomatic complexity 15 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/web/diff-ui-script.ts\n dedupe_key: code2llm:cc:src/web/diff-ui-script.ts:src.web.diff-ui-script.compareGraphs\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, self, root, nl_mode'\n description: 'code2llm reports `Data Clump: file, self, root, nl_mode` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (file, self, root, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n file, self, root, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: file, self, root, nl_mode'\n description: 'code2llm reports `Data Clump: file, self, root, nl_mode` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (file, self, root, nl_mode) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n file, self, root, nl_mode'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo'\n description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self,\n todo` in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n root, markdown_mode, changelog, self, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo'\n description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self,\n todo` in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n root, markdown_mode, changelog, self, todo'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, payload, action'\n description: 'code2llm reports `Data Clump: self, payload, action` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (self, payload, action) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n self, payload, action'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, payload, action'\n description: 'code2llm reports `Data Clump: self, payload, action` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (self, payload, action) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n self, payload, action'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, patterns, excludes'\n description: 'code2llm reports `Data Clump: self, root, patterns, excludes` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (self, root, patterns, excludes) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n self, root, patterns, excludes'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, root, patterns, excludes'\n description: 'code2llm reports `Data Clump: self, root, patterns, excludes` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (self, root, patterns, excludes) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n self, root, patterns, excludes'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:305`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:305:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: analyzeCommunication'\n description: 'code2llm reports `God Function: analyzeCommunication` in `src/communication/analyzer.ts:56`.\n\n\n Function ''analyzeCommunication'' is oversized: CC=5, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:56:God Function:\n analyzeCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:226`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:226:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:59`.\n\n\n Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:59:God\n Function: applyCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:167`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:220`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:220:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:249`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:249:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertOperationPlan'\n description: 'code2llm reports `God Function: assertOperationPlan` in `src/operations/validation.ts:205`.\n\n\n Function ''assertOperationPlan'' is oversized: CC=1, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/validation.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:205:God Function:\n assertOperationPlan'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:248`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:248:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipantIdentityEntry'\n description: 'code2llm reports `God Function: assertParticipantIdentityEntry` in\n `src/communication/identity.ts:119`.\n\n\n Function ''assertParticipantIdentityEntry'' is oversized: CC=5, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/identity.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/identity.ts:119:God Function:\n assertParticipantIdentityEntry'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildAcceptanceContext'\n description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers-acceptance.ts:65`.\n\n\n Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers-acceptance.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers-acceptance.ts:65:God\n Function: buildAcceptanceContext'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildParticipantRows'\n description: 'code2llm reports `God Function: buildParticipantRows` in `src/communication/analyzer.ts:225`.\n\n\n Function ''buildParticipantRows'' is oversized: CC=7, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:225:God Function:\n buildParticipantRows'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectConflictIssues'\n description: 'code2llm reports `God Function: collectConflictIssues` in `src/communication/analyzer.ts:111`.\n\n\n Function ''collectConflictIssues'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:111:God Function:\n collectConflictIssues'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: controller'\n description: 'code2llm reports `God Function: controller` in `src/llm/openrouter.ts:45`.\n\n\n Function ''controller'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/llm/openrouter.ts\n dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:45:God Function:\n controller'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:16:God\n Function: createSemanticCandidateSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticRerankResult'\n description: 'code2llm reports `God Function: createSemanticRerankResult` in `src/semantic/reranker/result.ts:23`.\n\n\n Function ''createSemanticRerankResult'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:23:God\n Function: createSemanticRerankResult'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createTodoPatch'\n description: 'code2llm reports `God Function: createTodoPatch` in `src/synthesis/todo-patch.ts:69`.\n\n\n Function ''createTodoPatch'' is oversized: CC=8, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:69:God Function:\n createTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decodeDelimitedFields'\n description: 'code2llm reports `God Function: decodeDelimitedFields` in `src/communication/intake-protobuf.ts:69`.\n\n\n Function ''decodeDelimitedFields'' is oversized: CC=13, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:69:God\n Function: decodeDelimitedFields'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_chunked'\n description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:189`.\n\n\n Function ''decode_chunked'' is oversized: CC=7, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:189:God Function:\n decode_chunked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diagnoseGraph'\n description: 'code2llm reports `God Function: diagnoseGraph` in `src/graph/diagnostics.ts:16`.\n\n\n Function ''diagnoseGraph'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:16:God Function:\n diagnoseGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diffIntentGraphs'\n description: 'code2llm reports `God Function: diffIntentGraphs` in `src/graph/diff.ts:16`.\n\n\n Function ''diffIntentGraphs'' is oversized: CC=11, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diff.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diff.ts:16:God Function: diffIntentGraphs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: encode_envelope'\n description: 'code2llm reports `God Function: encode_envelope` in `src/interfaces/intake_cli.py:55`.\n\n\n Function ''encode_envelope'' is oversized: CC=6, fan-out=11, mutations=11.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:55:God Function:\n encode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichBatchCovering'\n description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm-helpers.ts:112`.\n\n\n Function ''enrichBatchCovering'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:112:God\n Function: enrichBatchCovering'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichMarkdownRecords'\n description: 'code2llm reports `God Function: enrichMarkdownRecords` in `src/extractors/markdown-llm-helpers.ts:57`.\n\n\n Function ''enrichMarkdownRecords'' is oversized: CC=13, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:57:God\n Function: enrichMarkdownRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichRecord'\n description: 'code2llm reports `God Function: enrichRecord` in `src/extractors/markdown-llm-helpers.ts:274`.\n\n\n Function ''enrichRecord'' is oversized: CC=14, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God\n Function: enrichRecord'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDiagnosticsCase'\n description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:277`.\n\n\n Function ''evaluateDiagnosticsCase'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:277:God Function:\n evaluateDiagnosticsCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDsl2TodoCase'\n description: 'code2llm reports `God Function: evaluateDsl2TodoCase` in `src/evaluation/gold-cases.ts:305`.\n\n\n Function ''evaluateDsl2TodoCase'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:305:God Function:\n evaluateDsl2TodoCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateRerankingCase'\n description: 'code2llm reports `God Function: evaluateRerankingCase` in `src/evaluation/gold-cases.ts:71`.\n\n\n Function ''evaluateRerankingCase'' is oversized: CC=1, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:71:God Function:\n evaluateRerankingCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: exchange'\n description: 'code2llm reports `God Function: exchange` in `sdk/rust/src/client.rs:125`.\n\n\n Function ''exchange'' is oversized: CC=10, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function:\n exchange'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeAnalyzeCommunicationAction'\n description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction`\n in `src/services/actions.ts:158`.\n\n\n Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:158:God Function:\n executeAnalyzeCommunicationAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeCloseCodeChangeAction'\n description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:413`.\n\n\n Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:413:God Function:\n executeCloseCodeChangeAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executePipelineAction'\n description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:556`.\n\n\n Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:556:God Function:\n executePipelineAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractAstIntent'\n description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`.\n\n\n Function ''extractAstIntent'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast.ts:23:God Function:\n extractAstIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractChangelog'\n description: 'code2llm reports `God Function: extractChangelog` in `src/extractors/changelog.ts:18`.\n\n\n Function ''extractChangelog'' is oversized: CC=10, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:18:God Function:\n extractChangelog'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractCommunicationIntentAudited'\n description: 'code2llm reports `God Function: extractCommunicationIntentAudited`\n in `src/communication/llm/implementation.ts:63`.\n\n\n Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:63:God\n Function: extractCommunicationIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractConventionalAction'\n description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`.\n\n\n Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractDocumentationIntent'\n description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`.\n\n\n Function ''extractDocumentationIntent'' is oversized: CC=3, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-llm.ts:45:God Function:\n extractDocumentationIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractMarkdownIntentAudited'\n description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:34`.\n\n\n Function ''extractMarkdownIntentAudited'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:34:God Function:\n extractMarkdownIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntent'\n description: 'code2llm reports `God Function: extractNlIntent` in `src/extractors/nl.ts:38`.\n\n\n Function ''extractNlIntent'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:38:God Function: extractNlIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntentAudited'\n description: 'code2llm reports `God Function: extractNlIntentAudited` in `src/extractors/nl-llm.ts:33`.\n\n\n Function ''extractNlIntentAudited'' is oversized: CC=10, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:33:God Function:\n extractNlIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPhpAst'\n description: 'code2llm reports `God Function: extractPhpAst` in `src/extractors/ast/php.ts:11`.\n\n\n Function ''extractPhpAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/php.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/php.ts:11:God Function:\n extractPhpAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPythonAst'\n description: 'code2llm reports `God Function: extractPythonAst` in `src/extractors/ast/python.ts:11`.\n\n\n Function ''extractPythonAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/python.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/python.ts:11:God Function:\n extractPythonAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRepositoryGitIntent'\n description: 'code2llm reports `God Function: extractRepositoryGitIntent` in `src/extractors/git.ts:74`.\n\n\n Function ''extractRepositoryGitIntent'' is oversized: CC=11, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/git.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:74:God Function:\n extractRepositoryGitIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRuntimeCycleIntent'\n description: 'code2llm reports `God Function: extractRuntimeCycleIntent` in `src/extractors/runtime-cycle.ts:29`.\n\n\n Function ''extractRuntimeCycleIntent'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:29:God\n Function: extractRuntimeCycleIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractSymbols'\n description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`.\n\n\n Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractTodo'\n description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`.\n\n\n Function ''extractTodo'' is oversized: CC=5, fan-out=24, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:19:God Function:\n extractTodo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `src/interfaces/a2a-run-list-item.ts:43`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-run-list-item.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-run-list-item.ts:43:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `scripts/verify-module-boundaries.mjs:6`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:6:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: goldReportIsPerfect'\n description: 'code2llm reports `God Function: goldReportIsPerfect` in `src/evaluation/gold.ts:100`.\n\n\n Function ''goldReportIsPerfect'' is oversized: CC=14, fan-out=0, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold.ts:100:God Function:\n goldReportIsPerfect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: graph'\n description: 'code2llm reports `God Function: graph` in `scripts/verify-module-boundaries.mjs:7`.\n\n\n Function ''graph'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:7:God\n Function: graph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleCommunication'\n description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:666`.\n\n\n Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:666:God Function: handleCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleDiff'\n description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:468`.\n\n\n Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:468:God Function: handleDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleGraphDiff'\n description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:494`.\n\n\n Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:494:God Function: handleGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleIntake'\n description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:706`.\n\n\n Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:706:God Function: handleIntake'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleReality'\n description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:551`.\n\n\n Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:551:God Function: handleReality'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleWatch'\n description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:346`.\n\n\n Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:346:God Function: handleWatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: index'\n description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`.\n\n\n Function ''index'' is oversized: CC=13, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/text-render.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/text-render.ts:43:God Function:\n index'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: indexModuleAnchors'\n description: 'code2llm reports `God Function: indexModuleAnchors` in `src/diff/reality.ts:324`.\n\n\n Function ''indexModuleAnchors'' is oversized: CC=12, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/reality.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:324:God Function: indexModuleAnchors'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: indexResolvableBasenames'\n description: 'code2llm reports `God Function: indexResolvableBasenames` in `src/graph/linker.ts:94`.\n\n\n Function ''indexResolvableBasenames'' is oversized: CC=8, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/linker.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:94:God Function: indexResolvableBasenames'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: isPathLike'\n description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:408`.\n\n\n Function ''isPathLike'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:408:God Function: isPathLike'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: lines'\n description: 'code2llm reports `God Function: lines` in `src/extractors/changelog.ts:30`.\n\n\n Function ''lines'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:30:God Function:\n lines'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: lines'\n description: 'code2llm reports `God Function: lines` in `src/extractors/todo.ts:32`.\n\n\n Function ''lines'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:32:God Function:\n lines'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: linkIntentRecords'\n description: 'code2llm reports `God Function: linkIntentRecords` in `src/graph/linker.ts:32`.\n\n\n Function ''linkIntentRecords'' is oversized: CC=5, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/linker.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:32:God Function: linkIntentRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: listAvailableModels'\n description: 'code2llm reports `God Function: listAvailableModels` in `src/llm/openrouter.ts:44`.\n\n\n Function ''listAvailableModels'' is oversized: CC=13, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/llm/openrouter.ts\n dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:44:God Function:\n listAvailableModels'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: listIntentRuns'\n description: 'code2llm reports `God Function: listIntentRuns` in `src/interfaces/a2a-history.ts:25`.\n\n\n Function ''listIntentRuns'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:25:God Function:\n listIntentRuns'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: listTasks'\n description: 'code2llm reports `God Function: listTasks` in `src/interfaces/a2a-task-store.ts:444`.\n\n\n Function ''listTasks'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-task-store.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-task-store.ts:444:God\n Function: listTasks'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: loadEnvFile'\n description: 'code2llm reports `God Function: loadEnvFile` in `src/config/env.ts:76`.\n\n\n Function ''loadEnvFile'' is oversized: CC=13, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/config/env.ts\n dedupe_key: 'code2llm:smell:god_function:src/config/env.ts:76:God Function: loadEnvFile'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: loadRuns'\n description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui-script.ts:9`.\n\n\n Function ''loadRuns'' is oversized: CC=12, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/web/diff-ui-script.ts\n dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui-script.ts:9:God Function:\n loadRuns'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: local'\n description: 'code2llm reports `God Function: local` in `scripts/verify-env-contract.mjs:52`.\n\n\n Function ''local'' is oversized: CC=13, fan-out=3, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-env-contract.mjs:52:God\n Function: local'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `rust-ast/src/main.rs:36`.\n\n\n Function ''main'' is oversized: CC=6, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:36:God Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `java/JavaAstExtract.java:21`.\n\n\n Function ''main'' is oversized: CC=10, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:21:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/cli.ts:61`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:61:God Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/evaluation/gold-cli.ts:11`.\n\n\n Function ''main'' is oversized: CC=12, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cli.ts:11:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `golang/ast_extract.go:53`.\n\n\n Function ''main'' is oversized: CC=14, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - golang/ast_extract.go\n dedupe_key: 'code2llm:smell:god_function:golang/ast_extract.go:53:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/live-model-comparison.mjs:27`.\n\n\n Function ''main'' is oversized: CC=13, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/live-model-comparison.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/live-model-comparison.mjs:27:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/live-contract-check.mjs:41`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/live-contract-check.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/live-contract-check.mjs:41:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `python/ast_extract.py:195`.\n\n\n Function ''main'' is oversized: CC=4, fan-out=19, mutations=12.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - python/ast_extract.py\n dedupe_key: 'code2llm:smell:god_function:python/ast_extract.py:195:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: matchesRunFilters'\n description: 'code2llm reports `God Function: matchesRunFilters` in `src/interfaces/a2a-history.ts:77`.\n\n\n Function ''matchesRunFilters'' is oversized: CC=13, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:77:God Function:\n matchesRunFilters'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: materializeSyntheses'\n description: 'code2llm reports `God Function: materializeSyntheses` in `src/communication/llm/implementation-helpers.ts:127`.\n\n\n Function ''materializeSyntheses'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:127:God\n Function: materializeSyntheses'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: materializeTaskSynthesisResponse'\n description: 'code2llm reports `God Function: materializeTaskSynthesisResponse`\n in `src/synthesis/task-synthesis-materialize.ts:14`.\n\n\n Function ''materializeTaskSynthesisResponse'' is oversized: CC=2, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/task-synthesis-materialize.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/task-synthesis-materialize.ts:14:God\n Function: materializeTaskSynthesisResponse'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: maxFiles'\n description: 'code2llm reports `God Function: maxFiles` in `src/watch/watcher.ts:38`.\n\n\n Function ''maxFiles'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:38:God Function: maxFiles'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: measureStage'\n description: 'code2llm reports `God Function: measureStage` in `src/live/contract-check.ts:115`.\n\n\n Function ''measureStage'' is oversized: CC=14, fan-out=3, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/live/contract-check.ts\n dedupe_key: 'code2llm:smell:god_function:src/live/contract-check.ts:115:God Function:\n measureStage'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: moduleRecords'\n description: 'code2llm reports `God Function: moduleRecords` in `src/extractors/ast/records.ts:34`.\n\n\n Function ''moduleRecords'' is oversized: CC=6, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/records.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/records.ts:34:God Function:\n moduleRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: normalizeParticipantIdentityRegistry'\n description: 'code2llm reports `God Function: normalizeParticipantIdentityRegistry`\n in `src/communication/identity.ts:53`.\n\n\n Function ''normalizeParticipantIdentityRegistry'' is oversized: CC=12, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/identity.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/identity.ts:53:God Function:\n normalizeParticipantIdentityRegistry'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: numbers'\n description: 'code2llm reports `God Function: numbers` in `src/communication/intake-protobuf.ts:77`.\n\n\n Function ''numbers'' is oversized: CC=13, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:77:God\n Function: numbers'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: object'\n description: 'code2llm reports `God Function: object` in `src/llm/structured-schema.ts:155`.\n\n\n Function ''object'' is oversized: CC=7, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/llm/structured-schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/llm/structured-schema.ts:155:God Function:\n object'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: offset'\n description: 'code2llm reports `God Function: offset` in `src/communication/intake-protobuf.ts:79`.\n\n\n Function ''offset'' is oversized: CC=13, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:79:God\n Function: offset'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: options'\n description: 'code2llm reports `God Function: options` in `src/cli.ts:781`.\n\n\n Function ''options'' is oversized: CC=13, fan-out=5, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:781:God Function: options'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: output'\n description: 'code2llm reports `God Function: output` in `src/communication/llm/implementation-helpers.ts:148`.\n\n\n Function ''output'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:148:God\n Function: output'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parseArgs'\n description: 'code2llm reports `God Function: parseArgs` in `src/cli.ts:779`.\n\n\n Function ''parseArgs'' is oversized: CC=13, fan-out=5, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:779:God Function: parseArgs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parseArgs'\n description: 'code2llm reports `God Function: parseArgs` in `scripts/research/rerank-embedding-shortlist.mjs:164`.\n\n\n Function ''parseArgs'' is oversized: CC=14, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/rerank-embedding-shortlist.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/research/rerank-embedding-shortlist.mjs:164:God\n Function: parseArgs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parse_args'\n description: 'code2llm reports `God Function: parse_args` in `scripts/research/evaluate-embedding-pairs.py:14`.\n\n\n Function ''parse_args'' is oversized: CC=1, fan-out=3, mutations=8.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:14:God\n Function: parse_args'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parse_args'\n description: 'code2llm reports `God Function: p\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 4129 func | 197f | 43441L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.1 critical=187 (limit:10) dup=29 cycles=0\n\nALERTS[20]:\n !!! high_fan_out compareWorkspaceIntent = 40 (limit:10)\n !!! cc_exceeded parseFile = 38 (limit:15)\n !!! high_fan_out Client.parse_http_response = 37 (limit:10)\n !!! high_fan_out run = 33 (limit:10)\n !!! high_fan_out main = 31 (limit:10)\n !!! high_fan_out executePipeline = 31 (limit:10)\n !!! cc_exceeded makefile = 28 (limit:15)\n !!! cc_exceeded main = 27 (limit:15)\n !!! cc_exceeded run = 26 (limit:15)\n !!! high_fan_out temporaryParent = 25 (limit:10)\n\nMODULES[281] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/cli.ts] 942L C:1 F:124 CC↑13 D:0 (typescript)\n M[src/services/actions.ts] 806L C:1 F:106 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/diff/reality.ts] 690L C:4 F:89 CC↑15 D:0 (typescript)\n M[src/communication/analyzer.ts] 596L C:3 F:81 CC↑15 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[src/evaluation/gold-cases.ts] 489L C:4 F:62 CC↑8 D:0 (typescript)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:59 CC↑11 D:0 (typescript)\n M[src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts] 434L C:6 F:50 CC↑13 D:0 (typescript)\n M[src/operations/validation.ts] 429L C:0 F:69 CC↑23 D:0 (typescript)\n LANGS: typescript:173/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n ★ Client.parse_http_response fan=37 // Orchestrates 37 calls\n ★ run fan=33 // Orchestrates 33 calls\n ★ main fan=31 // Orchestrates 31 calls\n ★ executePipeline fan=31 // Orchestrates 31 calls\n\nREFACTOR[15]:\n [1] H/L Split parseFile (CC=38)\n [2] H/L Split makefile (CC=28)\n [3] H/L Split main (CC=27)\n [4] H/L Split run (CC=26)\n [5] H/H Split god module src/communication/analyzer.ts (596L, 3 classes)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.1 crit=187 43441L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; + const files = [{"name": "calls.png", "rel_path": "calls.png", "path": "calls.png", "size": "81.2KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "compact_flow.png", "rel_path": "compact_flow.png", "path": "compact_flow.png", "size": "27.7KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "flow.png", "rel_path": "flow.png", "path": "flow.png", "size": "14.5KB", "icon": "🖼️", "type": "image", "type_name": "Image", "content": "[Binary file]", "is_subdir": false}, {"name": "README.md", "rel_path": "README.md", "path": "README.md", "size": "9.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# code2llm - Generated Analysis Files\n\n\nThis directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase. # noqa: E501\n\n## 📁 Generated Files Overview\n\nWhen you run `code2llm ./ -f all`, the following files are created:\n\n### 🎯 Core Analysis Files\n\n| File | Format | Purpose | Key Insights |\n|------|--------|---------|--------------|\n| `evolution.toon.yaml` | **YAML** | **📋 Refactoring queue** - Prioritized improvements | 0 refactoring actions needed |\n| `map.toon.yaml` | **YAML** | **🗺️ Structural map + project header** - Modules, imports, exports, signatures, stats, alerts, hotspots, trend | Project architecture overview |\n\n### 🤖 LLM-Ready Documentation\n\n| File | Format | Purpose | Use Case |\n|------|--------|---------|----------|\n| `prompt.txt` | **Text** | **📝 Ready-to-send prompt** - Lists all files with instructions | Attach to LLM conversation as context guide |\n| `context.md` | **Markdown** | **📖 LLM narrative** - Architecture summary | Paste into ChatGPT/Claude for code analysis |\n\n### 📊 Visualizations\n\n| File | Format | Purpose | Description |\n|------|--------|---------|-------------|\n| `flow.mmd` | **Mermaid** | **🔄 Control flow diagram** | Function call paths with complexity styling |\n| `calls.mmd` | **Mermaid** | **📞 Call graph** | Function dependencies (edges only) |\n| `compact_flow.mmd` | **Mermaid** | **📦 Module overview** | Aggregated module-level view |\n\n## 🚀 Quick Start Commands\n\n### Basic Analysis\n```bash\n# Quick health check (TOON format only)\ncode2llm ./ -f toon\n\n# Generate all formats (what created these files)\ncode2llm ./ -f all\n\n# LLM-ready context only\ncode2llm ./ -f context\n```\n\n### Performance Options\n```bash\n# Fast analysis for large projects\ncode2llm ./ -f toon --strategy quick\n\n# Memory-limited analysis\ncode2llm ./ -f all --max-memory 500\n\n# Skip PNG generation (faster)\ncode2llm ./ -f all --no-png\n```\n\n### Refactoring Focus\n```bash\n# Get refactoring recommendations\ncode2llm ./ -f evolution\n\n# Focus on specific code smells\ncode2llm ./ -f toon --refactor --smell god_function\n\n# Data flow analysis\ncode2llm ./ -f flow --data-flow\n```\n\n## 📖 Understanding Each File\n\n### `analysis.toon` - Health Diagnostics\n**Purpose**: Quick overview of code health issues\n**Key sections**:\n- **HEALTH**: Critical issues (🔴) and warnings (🟡)\n- **REFACTOR**: Prioritized refactoring actions\n- **COUPLING**: Module dependencies and potential cycles\n- **LAYERS**: Package complexity metrics\n- **FUNCTIONS**: High-complexity functions (CC ≥ 10)\n- **CLASSES**: Complex classes needing attention\n\n**Example usage**:\n```bash\n# View health issues\ncat analysis.toon | head -30\n\n# Check refactoring priorities\ngrep \"REFACTOR\" analysis.toon\n```\n\n### `evolution.toon.yaml` - Refactoring Queue\n**Purpose**: Step-by-step refactoring plan\n**Key sections**:\n- **NEXT**: Immediate actions to take\n- **RISKS**: Potential breaking changes\n- **METRICS-TARGET**: Success criteria\n\n**Example usage**:\n```bash\n# Get refactoring plan\ncat evolution.toon.yaml\n\n# Track progress\ngrep \"NEXT\" evolution.toon.yaml\n```\n\n### `flow.toon` - Legacy Data Flow Analysis\n**Purpose**: Understand data movement through the system (legacy / explicit opt-in)\n**Key sections**:\n- **PIPELINES**: Data processing chains\n- **CONTRACTS**: Function input/output contracts\n- **SIDE_EFFECTS**: Functions with external impacts\n\n**Example usage**:\n```bash\n# Find data pipelines\ngrep \"PIPELINES\" flow.toon\n\n# Identify side effects\ngrep \"SIDE_EFFECTS\" flow.toon\n```\n\n### `map.toon.yaml` - Structural Map + Project Header\n**Purpose**: High-level architecture overview plus compact project header\n**Key sections**:\n- **MODULES**: All modules with basic stats\n- **IMPORTS**: Dependency relationships\n- **EXPORTS**: Public API surface and signatures\n- **HEADER**: Stats, alerts, hotspots, evolution trend\n\n**Example usage**:\n```bash\n# See project structure\ncat map.toon.yaml | head -50\n\n# Find public APIs\ngrep \"SIGNATURES\" map.toon.yaml\n```\n\n### `project.toon.yaml` - Compact Analysis View\n**Purpose**: Compact module view generated from project.yaml data\n**Status**: Legacy view generated on demand from unified project.yaml\n\n**Example usage**:\n```bash\n# View compact project structure\ncat project.toon.yaml | head -30\n\n# Find largest files\ngrep -E \"^ .*[0-9]{3,}$\" project.toon.yaml | sort -t',' -k2 -n -r | head -10\n```\n\n### `prompt.txt` - Ready-to-Send LLM Prompt\n**Purpose**: Pre-formatted prompt listing all generated files for LLM conversation\n**Generation**: Written when `code2llm` runs with a source path and requests `-f all` (including `--no-chunk`) or `code2logic` # noqa: E501\n**Contents**:\n- **Files section**: Lists all existing generated files with descriptions, including `project.toon.yaml` when generated by `-f all` # noqa: E501\n- **Source files section**: Highlights important source files such as `cli_exports/orchestrator.py`\n- **Missing section**: Shows which files weren't generated (if any)\n- **Task section**: Refactoring brief with concrete execution instructions, not just analysis\n- **Priority Order section**: State-dependent refactoring priorities, starting with blockers and then architecture cleanup # noqa: E501\n- **Requirements section**: Guidelines for suggested changes\n\n**Example usage**:\n```bash\n# View the prompt\ncat prompt.txt\n\n# Copy to clipboard and paste into ChatGPT/Claude\ncat prompt.txt | pbcopy # macOS\ncat prompt.txt | xclip -sel clip # Linux\n```\n\n### `context.md` - LLM Narrative\n**Purpose**: Ready-to-paste context for AI assistants\n**Key sections**:\n- **Overview**: Project statistics\n- **Architecture**: Module breakdown\n- **Entry Points**: Public interfaces\n- **Patterns**: Design patterns detected\n\n**Example usage**:\n```bash\n# Copy to clipboard for LLM\ncat context.md | pbcopy # macOS\ncat context.md | xclip -sel clip # Linux\n\n# Use with Claude/ChatGPT for code analysis\n```\n\n### Visualization Files (`*.mmd`, `*.png`)\n**Purpose**: Visual understanding of code structure\n**Files**:\n- `flow.mmd` - Detailed control flow with complexity colors\n- `calls.mmd` - Simple call graph\n- `compact_flow.mmd` - High-level module view\n- `*.png` - Pre-rendered images\n\n**Example usage**:\n```bash\n# View diagrams\nopen flow.png # macOS\nxdg-open flow.png # Linux\n\n# Edit in Mermaid Live Editor\n# Copy content of .mmd files to https://mermaid.live\n```\n\n## 🔍 Common Analysis Patterns\n\n### 1. Code Health Assessment\n```bash\n# Quick health check\ncode2llm ./ -f toon\ncat analysis.toon | grep -E \"(HEALTH|REFACTOR)\"\n```\n\n### 2. Refactoring Planning\n```bash\n# Get refactoring queue\ncode2llm ./ -f evolution\ncat evolution.toon.yaml\n\n# Focus on specific issues\ncode2llm ./ -f toon --refactor --smell god_function\n```\n\n### 3. LLM Assistance\n```bash\n# Generate context for AI\ncode2llm ./ -f context\ncat context.md\n\n# Use with Claude: \"Based on this context, help me refactor the god modules\"\n```\n\n### 4. Team Documentation\n```bash\n# Generate all docs for team\ncode2llm ./ -f all -o ./docs/\n\n# Create visual diagrams\nopen docs/flow.png\n```\n\n## 📊 Interpreting Metrics\n\n### Complexity Metrics (CC)\n- **🔴 Critical (≥5.0)**: Immediate refactoring needed\n- **🟠 High (3.0-4.9)**: Consider refactoring\n- **🟡 Medium (1.5-2.9)**: Monitor complexity\n- **🟢 Low (0.1-1.4)**: Acceptable\n- **⚪ Basic (0.0)**: Simple functions\n\n### Module Health\n- **GOD Module**: Too large (>500 lines, >20 methods)\n- **HUB**: High fan-out (calls many modules)\n- **FAN-IN**: High incoming dependencies\n- **CYCLES**: Circular dependencies\n\n### Data Flow Indicators\n- **PIPELINE**: Sequential data processing\n- **CONTRACT**: Clear input/output specification\n- **SIDE_EFFECT**: External state modification\n\n## 🛠️ Integration Examples\n\n### CI/CD Pipeline\n```bash\n#!/bin/bash\n# Analyze code quality in CI\ncode2llm ./ -f toon -o ./analysis\nif grep -q \"🔴 GOD\" ./analysis/analysis.toon; then\n echo \"❌ God modules detected\"\n exit 1\nfi\n```\n\n### Pre-commit Hook\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncode2llm ./ -f toon -o ./temp_analysis\nif grep -q \"🔴\" ./temp_analysis/analysis.toon; then\n echo \"⚠️ Critical issues found. Review before committing.\"\nfi\nrm -rf ./temp_analysis\n```\n\n### Documentation Generation\n```bash\n# Generate docs for README\ncode2llm ./ -f context -o ./docs/\necho \"## Architecture\" >> README.md\ncat docs/context.md >> README.md\n```\n\n## 📚 Next Steps\n\n1. **Review `analysis.toon`** - Identify critical issues\n2. **Check `evolution.toon.yaml`** - Plan refactoring priorities\n3. **Use `context.md`** - Get LLM assistance for complex changes\n4. **Reference visualizations** - Understand system architecture\n5. **Track progress** - Re-run analysis after changes\n\n## 🔧 Advanced Usage\n\n### Custom Analysis\n```bash\n# Deep analysis with all insights\ncode2llm ./ -m hybrid -f all --max-depth 15 -v\n\n# Performance-optimized\ncode2llm ./ -m static -f toon --strategy quick\n\n# Refactoring-focused\ncode2llm ./ -f toon,evolution --refactor\n```\n\n### Output Customization\n```bash\n# Separate output directories\ncode2llm ./ -f all -o ./analysis-$(date +%Y%m%d)\n\n# Split YAML into multiple files\ncode2llm ./ -f yaml --split-output\n\n# Separate orphaned functions\ncode2llm ./ -f yaml --separate-orphans\n```\n\n---\n\n**Generated by**: `code2llm ./ -f all --readme` \n**Analysis Date**: 2026-08-04 \n**Total Functions**: 4218 \n**Total Classes**: 403 \n**Modules**: 294 \n\nFor more information about code2llm, visit: https://github.com/tom-sapletta/code2llm\n", "is_subdir": false}, {"name": "TICKETS.md", "rel_path": "TICKETS.md", "path": "TICKETS.md", "size": "5.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket index (`project/`)\n\nThis index follows `wellmanifest/new-project` 0.6.0 without taking ownership\nof `project/README.md`, which remains a generated technical-analysis artifact.\n\n\n| Ticket ID | Spec | Preprompt | Human input | Agent plans | Agent logs | Changelog |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| **ticket-001** | [`README.md`](./ticket-001/README.md) | - | - | - | - | - |\n| **ticket-002** | [`README.md`](./ticket-002/README.md) | [`preprompt.md`](./ticket-002/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-002/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-002/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-002/ai-codex-logs.txt) | [`changelog.md`](./ticket-002/changelog.md) |\n| **ticket-003** | [`README.md`](./ticket-003/README.md) | [`preprompt.md`](./ticket-003/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-003/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-003/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-003/ai-codex-logs.txt) | [`changelog.md`](./ticket-003/changelog.md) |\n| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-004/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |\n| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | [`user-tom-sapletta-com.md`](./ticket-005/user-tom-sapletta-com.md) | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |\n| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |\n| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-codex.md`](./ticket-007/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-007/ai-codex-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |\n| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-codex.md`](./ticket-008/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-008/ai-codex-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |\n| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-codex.md`](./ticket-009/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-009/ai-codex-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |\n| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-codex.md`](./ticket-010/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-010/ai-codex-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |\n| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-codex.md`](./ticket-011/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-011/ai-codex-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |\n| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-codex.md`](./ticket-012/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-012/ai-codex-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |\n| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-codex.md`](./ticket-013/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-013/ai-codex-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |\n| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-codex.md`](./ticket-014/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-014/ai-codex-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |\n| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-codex.md`](./ticket-015/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-015/ai-codex-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |\n| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |\n| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |\n| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |\n| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |\n| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-codex.md`](./ticket-020/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-020/ai-codex-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |\n| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-codex.md`](./ticket-022/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-022/ai-codex-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |\n\n", "is_subdir": false}, {"name": "context.md", "rel_path": "context.md", "path": "context.md", "size": "35.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# System Architecture Analysis\n\n\n## Overview\n\n- **Project**: /home/tom/github/semcod/todo2code\n- **Primary Language**: typescript\n- **Languages**: typescript: 187, json: 40, python: 15, javascript: 15, shell: 8\n- **Analysis Mode**: static\n- **Total Functions**: 4218\n- **Total Classes**: 403\n- **Modules**: 294\n- **Entry Points**: 2791\n\n## Architecture by Module\n\n### src.cli\n- **Functions**: 212\n- **Classes**: 1\n- **File**: `cli.ts`\n\n### src.services.actions\n- **Functions**: 145\n- **Classes**: 1\n- **File**: `actions.ts`\n\n### src.interfaces.a2a-task-store\n- **Functions**: 101\n- **Classes**: 3\n- **File**: `a2a-task-store.ts`\n\n### src.communication.analyzer\n- **Functions**: 92\n- **Classes**: 3\n- **File**: `analyzer.ts`\n\n### src.communication.intake-service\n- **Functions**: 82\n- **Classes**: 2\n- **File**: `intake-service.ts`\n\n### src.communication.intake-contract\n- **Functions**: 76\n- **Classes**: 7\n- **File**: `intake-contract.ts`\n\n### src.evaluation.gold-cases\n- **Functions**: 75\n- **Classes**: 4\n- **File**: `gold-cases.ts`\n\n### src.operations.validation\n- **Functions**: 67\n- **File**: `validation.ts`\n\n### src.core.text\n- **Functions**: 66\n- **File**: `text.ts`\n\n### src.extractors.git\n- **Functions**: 64\n- **Classes**: 6\n- **File**: `git.ts`\n\n### src.graph.diagnostics\n- **Functions**: 61\n- **Classes**: 1\n- **File**: `diagnostics.ts`\n\n### src.comparison.workspace\n- **Functions**: 56\n- **Classes**: 3\n- **File**: `workspace.ts`\n\n### src.graph.linker\n- **Functions**: 55\n- **Classes**: 1\n- **File**: `linker.ts`\n\n### src.synthesis.code-change-plan.implementation-source-patch-assert\n- **Functions**: 55\n- **Classes**: 2\n- **File**: `implementation-source-patch-assert.ts`\n\n### src.synthesis.code-change-plan.implementation-source-patch-apply-core\n- **Functions**: 54\n- **Classes**: 6\n- **File**: `implementation-source-patch-apply-core.ts`\n\n### src.synthesis.todo-patch\n- **Functions**: 53\n- **Classes**: 5\n- **File**: `todo-patch.ts`\n\n### src.extractors.communication-helpers\n- **Functions**: 49\n- **Classes**: 3\n- **File**: `communication-helpers.ts`\n\n### src.diff.reality-build\n- **Functions**: 49\n- **Classes**: 2\n- **File**: `reality-build.ts`\n\n### src.interfaces.a2a\n- **Functions**: 48\n- **File**: `a2a.ts`\n\n### sdk.typescript.src\n- **Functions**: 48\n- **Classes**: 14\n- **File**: `index.ts`\n\n## Key Entry Points\n\nMain execution flows into the system:\n\n### sdk.python.examples.basic.main\n- **Calls**: os.environ.get, os.environ.get, os.environ.get, T2CClient, print, client.agent_card, print, client.extract_nl_result\n\n### scripts.research.rank-intent-graph-embeddings.main\n- **Calls**: scripts.research.rank-intent-graph-embeddings.parse_args, args.graph.read_bytes, json.loads, sorted, sorted, time.monotonic, SentenceTransformer, model.encode\n\n### src.comparison.workspace.compareWorkspaceIntent\n- **Calls**: src.comparison.workspace.resolve, src.comparison.workspace.git, src.comparison.workspace.trim, src.comparison.workspace.relative, src.comparison.workspace.startsWith, src.comparison.workspace.isAbsolute, src.comparison.workspace.Error, src.comparison.workspace.scopedOutputDirectory\n\n### scripts.research.evaluate-embedding-pairs.main\n- **Calls**: scripts.research.evaluate-embedding-pairs.parse_args, json.loads, src.synthesis.code-change-plan.implementation-indexing.list, time.monotonic, SentenceTransformer, model.encode, dict, args.output.write_text\n\n### src.interfaces.intake_cli.main\n- **Calls**: argparse.ArgumentParser, parser.add_subparsers, sub.add_parser, encode.add_argument, encode.add_argument, sub.add_parser, decode.add_argument, decode.add_argument\n\n### src.pipeline.run-execution.executePipeline\n- **Calls**: src.pipeline.run-execution.resolveGlobs, src.pipeline.run-execution.skippedAudit, src.pipeline.run-execution.extractNlIntentAudited, src.pipeline.run-execution.push, src.pipeline.run-execution.extractGitIntent, src.pipeline.run-execution.extractAstIntent, src.pipeline.run-execution.extractMarkdownIntentAudited, src.pipeline.run-execution.filter\n\n### src.comparison.workspace.temporaryParent\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.comparison.workspace.baseWorktree\n- **Calls**: src.comparison.workspace.git, src.comparison.workspace.join, src.comparison.workspace.commonPipelineOptions, src.comparison.workspace.optionsForRoot, src.comparison.workspace.runPipeline, src.comparison.workspace.all, src.comparison.workspace.buildRealityView, src.comparison.workspace.diffIntentGraphs\n\n### src.extractors.todo.extractTodo\n- **Calls**: src.extractors.todo.resolve, src.extractors.todo.pathExists, src.extractors.todo.readText, src.extractors.todo.relativePosix, src.extractors.todo.split, src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited\n- **Calls**: src.communication.llm.implementation.now, src.communication.llm.implementation.extractCommunicationIntent, src.communication.llm.implementation.audit, src.communication.llm.implementation.markDeterministic, src.communication.llm.implementation.deterministicSyntheses, src.communication.llm.implementation.deterministicGeneration, src.communication.llm.implementation.OpenRouterClient, src.communication.llm.implementation.isConfigured\n\n### src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n- **Calls**: src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.now, src.extractors.nl-llm.extractNlIntent, src.extractors.nl-llm.markDeterministicNlRecords, src.extractors.nl-llm.nlStageAudit, src.extractors.nl-llm.OpenRouterClient, src.extractors.nl-llm.isConfigured, src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow\n\n### src.graph.linker.linkIntentRecords\n- **Calls**: src.graph.linker.Date, src.graph.linker.toISOString, src.graph.linker.assertIntentRecords, src.graph.linker.deduplicateRecords, src.graph.linker.sort, src.graph.linker.localeCompare, src.graph.linker.Map, src.graph.linker.map\n\n### scripts.live-model-comparison.main\n- **Calls**: scripts.live-model-comparison.loadEnvFile, scripts.live-model-comparison.getConfig, scripts.live-model-comparison.Error, scripts.live-model-comparison.write, scripts.live-model-comparison.SKIPPED, scripts.live-model-comparison.Number, scripts.live-model-comparison.split, scripts.live-model-comparison.map\n\n### rust-ast.src.main.main\n- **Calls**: rust-ast.src.main.let, rust-ast.src.main.arguments, rust-ast.src.main.collect_files, rust-ast.src.main.sort, rust-ast.src.main.slash, rust-ast.src.main.strip_prefix, rust-ast.src.main.unwrap_or, rust-ast.src.main.metadata\n\n### sdk.typescript.examples.basic.baseUrl\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.token\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.root\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.typescript.examples.basic.main\n- **Calls**: sdk.typescript.examples.basic.T2CClient, sdk.typescript.examples.basic.health, sdk.typescript.examples.basic.log, sdk.typescript.examples.basic.agentCard, sdk.typescript.examples.basic.map, sdk.typescript.examples.basic.join, sdk.typescript.examples.basic.extractNl, sdk.typescript.examples.basic.Error\n\n### sdk.python.todo2code.runtime.TypeScriptRuntime.reality\n- **Calls**: tempfile.TemporaryDirectory, self.invoke, Path, Path, Path, str, str, str\n\n### src.extractors.nl.extractNlIntent\n- **Calls**: src.extractors.nl.assertNlExtractionOptions, src.extractors.nl.resolve, src.extractors.nl.readText, src.extractors.nl.isAbsolute, src.extractors.nl.relativePosix, src.extractors.nl.replace, src.extractors.nl.splitIntentLines, src.extractors.nl.classifyAction\n\n### src.extractors.ast.extractAstIntent\n- **Calls**: src.extractors.ast.resolve, src.extractors.ast.ContentCache, src.extractors.ast.loadIgnoreMatcher, src.extractors.ast.walkFiles, src.extractors.ast.readText, src.extractors.ast.relativePosix, src.extractors.ast.getOrCompute, src.extractors.ast.sha256\n\n### src.extractors.todo.body\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.relative\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.extractors.todo.lines\n- **Calls**: src.extractors.todo.match, src.extractors.todo.splice, src.extractors.todo.trim, src.extractors.todo.toLowerCase, src.extractors.todo.readListBlock, src.extractors.todo.classifyAction, src.extractors.todo.resolve, src.extractors.todo.extractPaths\n\n### src.synthesis.todo-patch.applyTodoPatch\n- **Calls**: src.synthesis.todo-patch.all, src.synthesis.todo-patch.readText, src.synthesis.todo-patch.assertTodoPatchArtifact, src.synthesis.todo-patch.sha256, src.synthesis.todo-patch.Error, src.synthesis.todo-patch.assertApproval, src.synthesis.todo-patch.ensureDir, src.synthesis.todo-patch.dirname\n\n### src.extractors.changelog.extractChangelog\n- **Calls**: src.extractors.changelog.resolve, src.extractors.changelog.pathExists, src.extractors.changelog.readText, src.extractors.changelog.relativePosix, src.extractors.changelog.split, src.extractors.changelog.match, src.extractors.changelog.trim, src.extractors.changelog.readListBlock\n\n### src.graph.diff.diffIntentGraphs\n- **Calls**: src.graph.diff.assertGraph, src.graph.diff.Map, src.graph.diff.map, src.graph.diff.has, src.graph.diff.push, src.graph.diff.groupRecords, src.graph.diff.Set, src.graph.diff.keys\n\n### php.ast_extract.parseFile\n- **Calls**: php.ast_extract.file_get_contents, php.ast_extract.RuntimeException, php.ast_extract.preg_split, php.ast_extract.token_get_all, php.ast_extract.foreach, php.ast_extract.normalizedToken, php.ast_extract.substr_count, php.ast_extract.defined\n\n### src.services.actions.executeAnalyzeCommunicationAction\n- **Calls**: src.services.actions.all, src.services.actions.extractCommunicationIntentAudited, src.services.actions.scopedPath, src.services.actions.nullableString, src.services.actions.llmModeValue, src.services.actions.extractGitIntent, src.services.actions.numberValue, src.services.actions.booleanValue\n\n### src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse\n- **Calls**: src.synthesis.task-synthesis-materialize.parse, src.synthesis.task-synthesis-materialize.normalizeLocalKeys, src.synthesis.task-synthesis-materialize.flatMap, src.synthesis.task-synthesis-materialize.map, src.synthesis.task-synthesis-materialize.sortedUnique, src.synthesis.task-synthesis-materialize.groundRecordIdsByDiagnostics, src.synthesis.task-synthesis-materialize.normalizeStringArray, src.synthesis.task-synthesis-materialize.createConclusionId\n\n## Process Flows\n\nKey execution flows identified:\n\n### Flow 1: main\n```\nmain [sdk.python.examples.basic]\n```\n\n### Flow 2: compareWorkspaceIntent\n```\ncompareWorkspaceIntent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 3: executePipeline\n```\nexecutePipeline [src.pipeline.run-execution]\n```\n\n### Flow 4: temporaryParent\n```\ntemporaryParent [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 5: baseWorktree\n```\nbaseWorktree [src.comparison.workspace]\n └─> git\n └─> execFileAsync\n```\n\n### Flow 6: extractTodo\n```\nextractTodo [src.extractors.todo]\n```\n\n### Flow 7: extractCommunicationIntentAudited\n```\nextractCommunicationIntentAudited [src.communication.llm.implementation.CommunicationLlmRequiredError]\n```\n\n### Flow 8: extractNlIntentAudited\n```\nextractNlIntentAudited [src.extractors.nl-llm.NlLlmRequiredError]\n └─> assertNlExtractionOptions\n```\n\n### Flow 9: linkIntentRecords\n```\nlinkIntentRecords [src.graph.linker]\n```\n\n### Flow 10: baseUrl\n```\nbaseUrl [sdk.typescript.examples.basic]\n └─> health\n```\n\n## Key Classes\n\n### src.communication.intake-service.GovernedIntakeService\n- **Methods**: 82\n- **Key Methods**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event, src.communication.intake-service.GovernedIntakeService.appended, src.communication.intake-service.GovernedIntakeService.actual, src.communication.intake-service.GovernedIntakeService.updated, src.communication.intake-service.GovernedIntakeService.participantId, src.communication.intake-service.GovernedIntakeService.ticketId\n\n### src.communication.intake-contract.IntakeError\n- **Methods**: 76\n- **Key Methods**: src.communication.intake-contract.IntakeError.super, src.communication.intake-contract.IntakeError.payloadHash, src.communication.intake-contract.IntakeError.canonicalJson, src.communication.intake-contract.IntakeError.record, src.communication.intake-contract.IntakeError.assertIntakeEnvelope, src.communication.intake-contract.IntakeError.envelope, src.communication.intake-contract.IntakeError.validateIntakeEnvelopeHeader, src.communication.intake-contract.IntakeError.validateIntakeEnvelopeTimestamp, src.communication.intake-contract.IntakeError.assertCommand, src.communication.intake-contract.IntakeError.assertQuery\n\n### sdk.typescript.src.T2CClient\n- **Methods**: 46\n- **Key Methods**: sdk.typescript.src.T2CClient.health, sdk.typescript.src.T2CClient.agentCard, sdk.typescript.src.T2CClient.send, sdk.typescript.src.T2CClient.result, sdk.typescript.src.T2CClient.call, sdk.typescript.src.T2CClient.task, sdk.typescript.src.T2CClient.detail, sdk.typescript.src.T2CClient.part, sdk.typescript.src.T2CClient.getTask, sdk.typescript.src.T2CClient.cancelTask\n\n### src.semantic.reranker-llm.SemanticRerankerRequiredError\n- **Methods**: 43\n- **Key Methods**: src.semantic.reranker-llm.SemanticRerankerRequiredError.super, src.semantic.reranker-llm.SemanticRerankerRequiredError.rerankSemanticCandidates, src.semantic.reranker-llm.SemanticRerankerRequiredError.assertSemanticCandidateSet, src.semantic.reranker-llm.SemanticRerankerRequiredError.validateCandidateSetSize, src.semantic.reranker-llm.SemanticRerankerRequiredError.model, src.semantic.reranker-llm.SemanticRerankerRequiredError.modelRevision, src.semantic.reranker-llm.SemanticRerankerRequiredError.cached, src.semantic.reranker-llm.SemanticRerankerRequiredError.client, src.semantic.reranker-llm.SemanticRerankerRequiredError.payload, src.semantic.reranker-llm.SemanticRerankerRequiredError.response\n\n### src.llm.structured-schema.StructuredResponseError\n- **Methods**: 37\n- **Key Methods**: src.llm.structured-schema.StructuredResponseError.super, src.llm.structured-schema.StructuredResponseError.schema, src.llm.structured-schema.StructuredResponseError.parse, src.llm.structured-schema.StructuredResponseError.string, src.llm.structured-schema.StructuredResponseError.pattern, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.fail, src.llm.structured-schema.StructuredResponseError.nullableString, src.llm.structured-schema.StructuredResponseError.base, src.llm.structured-schema.StructuredResponseError.number\n\n### sdk.python.todo2code.client.T2CClient\n> Client for the todo2code A2A endpoint.\n\nExample:\n >>> client = T2CClient(\"http://localhost:8787\")\n- **Methods**: 34\n- **Key Methods**: sdk.python.todo2code.client.T2CClient.__init__, sdk.python.todo2code.client.T2CClient._headers, sdk.python.todo2code.client.T2CClient._open, sdk.python.todo2code.client.T2CClient._rpc, sdk.python.todo2code.client.T2CClient._get, sdk.python.todo2code.client.T2CClient.health, sdk.python.todo2code.client.T2CClient.agent_card, sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call, sdk.python.todo2code.client.T2CClient.compare_workspace\n\n### src.llm.openrouter.OpenRouterClient\n- **Methods**: 33\n- **Key Methods**: src.llm.openrouter.OpenRouterClient.isConfigured, src.llm.openrouter.OpenRouterClient.listAvailableModels, src.llm.openrouter.OpenRouterClient.controller, src.llm.openrouter.OpenRouterClient.timeout, src.llm.openrouter.OpenRouterClient.response, src.llm.openrouter.OpenRouterClient.text, src.llm.openrouter.OpenRouterClient.clearTimeout, src.llm.openrouter.OpenRouterClient.chatText, src.llm.openrouter.OpenRouterClient.chatTextWithMetadata, src.llm.openrouter.OpenRouterClient.response\n\n### src.extractors.nl-llm-helpers.NlAttemptError\n- **Methods**: 31\n- **Key Methods**: src.extractors.nl-llm-helpers.NlAttemptError.super, src.extractors.nl-llm-helpers.NlAttemptError.extractNlWithCorrection, src.extractors.nl-llm-helpers.NlAttemptError.completion, src.extractors.nl-llm-helpers.NlAttemptError.markDeterministicNlRecords, src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord, src.extractors.nl-llm-helpers.NlAttemptError.lines, src.extractors.nl-llm-helpers.NlAttemptError.action, src.extractors.nl-llm-helpers.NlAttemptError.normalizedText, src.extractors.nl-llm-helpers.NlAttemptError.statementText, src.extractors.nl-llm-helpers.NlAttemptError.nlStageAudit\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError\n- **Methods**: 30\n- **Key Methods**: src.extractors.markdown-llm-helpers.MarkdownAttemptError.super, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichments, src.extractors.markdown-llm-helpers.MarkdownAttemptError.responseByRecord, src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes, src.extractors.markdown-llm-helpers.MarkdownAttemptError.corrected, src.extractors.markdown-llm-helpers.MarkdownAttemptError.failed, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment, src.extractors.markdown-llm-helpers.MarkdownAttemptError.metadata, src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering\n\n### src.extractors.docs-llm.DocumentationLlmRequiredError\n- **Methods**: 29\n- **Key Methods**: src.extractors.docs-llm.DocumentationLlmRequiredError.super, src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent, src.extractors.docs-llm.DocumentationLlmRequiredError.startedAt, src.extractors.docs-llm.DocumentationLlmRequiredError.client, src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient, src.extractors.docs-llm.DocumentationLlmRequiredError.cache, src.extractors.docs-llm.DocumentationLlmRequiredError.chunks, src.extractors.docs-llm.DocumentationLlmRequiredError.selectedChunks, src.extractors.docs-llm.DocumentationLlmRequiredError.systemPrompt, src.extractors.docs-llm.DocumentationLlmRequiredError.results\n\n### java.JavaAstExtract.JavaAstExtract\n- **Methods**: 28\n- **Key Methods**: java.JavaAstExtract.JavaAstExtract.main, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.parseFile, java.JavaAstExtract.JavaAstExtract.emit, java.JavaAstExtract.JavaAstExtract.collect, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.containsIgnored, java.JavaAstExtract.JavaAstExtract.try, java.JavaAstExtract.JavaAstExtract.scanCompilationUnits, java.JavaAstExtract.JavaAstExtract.collectFileDiagnostics\n\n### sdk.php.src.Client.Todo2Code.Client\n- **Methods**: 27\n- **Key Methods**: sdk.php.src.Client.Client.__construct, sdk.php.src.Client.Client.health, sdk.php.src.Client.Client.agentCard, sdk.php.src.Client.Client.send, sdk.php.src.Client.Client.call, sdk.php.src.Client.Client.rpc, sdk.php.src.Client.Client.extractAst, sdk.php.src.Client.Client.extractConfig, sdk.php.src.Client.Client.extractNl, sdk.php.src.Client.Client.extractDocs\n\n### src.extractors.nl-llm.NlLlmRequiredError\n- **Methods**: 19\n- **Key Methods**: src.extractors.nl-llm.NlLlmRequiredError.super, src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited, src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions, src.extractors.nl-llm.NlLlmRequiredError.startedAt, src.extractors.nl-llm.NlLlmRequiredError.result, src.extractors.nl-llm.NlLlmRequiredError.client, src.extractors.nl-llm.NlLlmRequiredError.absolute, src.extractors.nl-llm.NlLlmRequiredError.body, src.extractors.nl-llm.NlLlmRequiredError.sourcePath, src.extractors.nl-llm.NlLlmRequiredError.maxLine\n\n### src.synthesis.tasks-llm.TaskSynthesisAttemptError\n- **Methods**: 19\n- **Key Methods**: src.synthesis.tasks-llm.TaskSynthesisAttemptError.super, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeTodoProposals, src.synthesis.tasks-llm.TaskSynthesisAttemptError.startedAt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.assertConclusions, src.synthesis.tasks-llm.TaskSynthesisAttemptError.client, src.synthesis.tasks-llm.TaskSynthesisAttemptError.prompt, src.synthesis.tasks-llm.TaskSynthesisAttemptError.payload, src.synthesis.tasks-llm.TaskSynthesisAttemptError.failure, src.synthesis.tasks-llm.TaskSynthesisAttemptError.responses, src.synthesis.tasks-llm.TaskSynthesisAttemptError.synthesizeWithCorrection\n\n### src.communication.intake-store.IntakeEventStore\n- **Methods**: 19\n- **Key Methods**: src.communication.intake-store.IntakeEventStore.read, src.communication.intake-store.IntakeEventStore.names, src.communication.intake-store.IntakeEventStore.name, src.communication.intake-store.IntakeEventStore.eventPath, src.communication.intake-store.IntakeEventStore.stat, src.communication.intake-store.IntakeEventStore.event, src.communication.intake-store.IntakeEventStore.lockPath, src.communication.intake-store.IntakeEventStore.stream, src.communication.intake-store.IntakeEventStore.existing, src.communication.intake-store.IntakeEventStore.writeRegistry\n\n### src.summary.summarizer.SummaryAttemptError\n- **Methods**: 17\n- **Key Methods**: src.summary.summarizer.SummaryAttemptError.super, src.summary.summarizer.SummaryAttemptError.summarizeWithCorrection, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.generationMetadata, src.summary.summarizer.SummaryAttemptError.message, src.summary.summarizer.SummaryAttemptError.materializeConclusions, src.summary.summarizer.SummaryAttemptError.parsed, src.summary.summarizer.SummaryAttemptError.conclusions, src.summary.summarizer.SummaryAttemptError.diagnosticIds, src.summary.summarizer.SummaryAttemptError.assertConclusions\n\n### src.sdk.typescript.Todo2CodeClient\n- **Methods**: 16\n- **Key Methods**: src.sdk.typescript.Todo2CodeClient.a2a, src.sdk.typescript.Todo2CodeClient.health, src.sdk.typescript.Todo2CodeClient.diffGraphs, src.sdk.typescript.Todo2CodeClient.diffGraphFiles, src.sdk.typescript.Todo2CodeClient.compareWorkspace, src.sdk.typescript.Todo2CodeClient.proposeTodo, src.sdk.typescript.Todo2CodeClient.renderTodo, src.sdk.typescript.Todo2CodeClient.applyTodo, src.sdk.typescript.Todo2CodeClient.proposeCodeChange, src.sdk.typescript.Todo2CodeClient.renderCodeChange\n\n### src.communication.llm.implementation.CommunicationLlmRequiredError\n- **Methods**: 15\n- **Key Methods**: src.communication.llm.implementation.CommunicationLlmRequiredError.super, src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited, src.communication.llm.implementation.CommunicationLlmRequiredError.startedAt, src.communication.llm.implementation.CommunicationLlmRequiredError.deterministic, src.communication.llm.implementation.CommunicationLlmRequiredError.records, src.communication.llm.implementation.CommunicationLlmRequiredError.client, src.communication.llm.implementation.CommunicationLlmRequiredError.groups, src.communication.llm.implementation.CommunicationLlmRequiredError.response, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichments, src.communication.llm.implementation.CommunicationLlmRequiredError.enrichedByOriginal\n\n### src.core.content-cache.ContentCache\n- **Methods**: 13\n- **Key Methods**: src.core.content-cache.ContentCache.getOrCompute, src.core.content-cache.ContentCache.assertNamespace, src.core.content-cache.ContentCache.key, src.core.content-cache.ContentCache.filePath, src.core.content-cache.ContentCache.cached, src.core.content-cache.ContentCache.value, src.core.content-cache.ContentCache.snapshot, src.core.content-cache.ContentCache.envelope, src.core.content-cache.ContentCache.write, src.core.content-cache.ContentCache.directory\n\n### src.extractors.markdown-llm.MarkdownLlmRequiredError\n- **Methods**: 11\n- **Key Methods**: src.extractors.markdown-llm.MarkdownLlmRequiredError.super, src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited, src.extractors.markdown-llm.MarkdownLlmRequiredError.startedAt, src.extractors.markdown-llm.MarkdownLlmRequiredError.deterministic, src.extractors.markdown-llm.MarkdownLlmRequiredError.client, src.extractors.markdown-llm.MarkdownLlmRequiredError.prompt, src.extractors.markdown-llm.MarkdownLlmRequiredError.failure, src.extractors.markdown-llm.MarkdownLlmRequiredError.failedResponses, src.extractors.markdown-llm.MarkdownLlmRequiredError.classifyLlmFailure, src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow\n\n## Data Transformation Functions\n\nKey functions that process and transform data:\n\n### examples.backend.src.request-handlers.parseOffset\n- **Output to**: examples.backend.src.request-handlers.Number, examples.backend.src.request-handlers.isFinite\n\n### examples.backend.src.request-handlers.parsed\n\n### examples.backend.src.request-handlers.parseLimit\n- **Output to**: examples.backend.src.request-handlers.Number, examples.backend.src.request-handlers.isFinite\n\n### examples.backend.src.validation.validateEventPayload\n- **Output to**: examples.backend.src.validation.isArray, examples.backend.src.validation.invalid, examples.backend.src.validation.trim, examples.backend.src.validation.has, examples.backend.src.validation.join\n\n### examples.src.runtime.validateContract\n- **Output to**: examples.src.runtime.Error\n\n### java.JavaAstExtract.JavaAstExtract.parseFile\n\n### src.extractors.runtime-cycle.parseCycle\n- **Output to**: src.extractors.runtime-cycle.parse, src.extractors.runtime-cycle.Error, src.extractors.runtime-cycle.JSON, src.extractors.runtime-cycle.String, src.extractors.runtime-cycle.isArray\n\n### src.extractors.configuration.format\n- **Output to**: src.extractors.configuration.buildRecord, src.extractors.configuration.join, src.extractors.configuration.trim\n\n### src.extractors.configuration.configurationFormat\n- **Output to**: src.extractors.configuration.basename, src.extractors.configuration.toLowerCase, src.extractors.configuration.startsWith, src.extractors.configuration.endsWith\n\n### src.extractors.configuration.parsed\n- **Output to**: src.extractors.configuration.keys, src.extractors.configuration.sort, src.extractors.configuration.map, src.extractors.configuration.findKeyLine\n\n### src.extractors.docs-deterministic.convertDocument\n- **Output to**: src.extractors.docs-deterministic.relativePosix, src.extractors.docs-deterministic.split, src.extractors.docs-deterministic.handleDocumentationLine, src.extractors.docs-deterministic.push\n\n### src.extractors.docs-deterministic.parseFenceBlock\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.codeBlockRecord, src.extractors.docs-deterministic.startsWith, src.extractors.docs-deterministic.slice\n\n### src.extractors.docs-deterministic.parseSectionHeading\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.splice, src.extractors.docs-deterministic.statementRecord\n\n### src.extractors.docs-deterministic.parseBulletStatement\n- **Output to**: src.extractors.docs-deterministic.match, src.extractors.docs-deterministic.readListBlock, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.docs-deterministic.parseParagraphStatement\n- **Output to**: src.extractors.docs-deterministic.trim, src.extractors.docs-deterministic.readParagraph, src.extractors.docs-deterministic.qualifyingStatement\n\n### src.extractors.markdown-llm-helpers.MarkdownAttemptError.validateEnrichments\n- **Output to**: src.extractors.markdown-llm-helpers.isArray, src.extractors.markdown-llm-helpers.Error, src.extractors.markdown-llm-helpers.Set, src.extractors.markdown-llm-helpers.map, src.extractors.markdown-llm-helpers.has\n\n### src.extractors.communication-helpers.parseEnvelope\n- **Output to**: src.extractors.communication-helpers.split, src.extractors.communication-helpers.trim, src.extractors.communication-helpers.slice, src.extractors.communication-helpers.findIndex, src.extractors.communication-helpers.match\n\n### src.extractors.communication-helpers.parsed\n\n### src.extractors.git.processDiscoveryDirectory\n- **Output to**: src.extractors.git.join, src.extractors.git.resolveDiscoveryPrefix, src.extractors.git.gitMarkerState, src.extractors.git.push, src.extractors.git.registerDiscoveredRepository\n\n### src.extractors.ast.external.parsed\n- **Output to**: src.extractors.ast.external.adapterRecords\n\n### src.services.actions.parseCommunicationGraphFilter\n- **Output to**: src.services.actions.stringValue, src.services.actions.toLowerCase, src.services.actions.booleanValue\n\n### src.core.ignore.parseIgnoreFile\n- **Output to**: src.core.ignore.split, src.core.ignore.map, src.core.ignore.compileIgnorePattern, src.core.ignore.filter\n\n### src.core.schema.code-change.validateCodeChangePlanContext\n- **Output to**: src.core.schema.code-change.validateGroundedContext, src.core.schema.code-change.assertConclusions, src.core.schema.code-change.assertTodoProposals, src.core.schema.code-change.entries, src.core.schema.code-change.objectValue\n\n### src.core.schema.conclusions.validateGroundedContext\n- **Output to**: src.core.schema.conclusions.assertIntentGraph, src.core.schema.conclusions.objectValue, src.core.schema.conclusions.Error, src.core.schema.conclusions.isArray, src.core.schema.conclusions.test\n\n### src.core.schema.conclusions.validateTodoProposalContext\n- **Output to**: src.core.schema.conclusions.validateGroundedContext, src.core.schema.conclusions.assertConclusions, src.core.schema.conclusions.Set, src.core.schema.conclusions.map\n\n## Behavioral Patterns\n\n### state_machine_GovernedIntakeService\n- **Type**: state_machine\n- **Confidence**: 0.70\n- **Functions**: src.communication.intake-service.GovernedIntakeService.command, src.communication.intake-service.GovernedIntakeService.duplicate, src.communication.intake-service.GovernedIntakeService.state, src.communication.intake-service.GovernedIntakeService.actor, src.communication.intake-service.GovernedIntakeService.event\n\n## Public API Surface\n\nFunctions exposed as public API (no underscore prefix):\n\n- `sdk.python.examples.basic.main` - 62 calls\n- `scripts.research.rank-intent-graph-embeddings.main` - 43 calls\n- `src.comparison.workspace.compareWorkspaceIntent` - 40 calls\n- `sdk.rust.examples.basic.run` - 33 calls\n- `scripts.research.evaluate-embedding-pairs.main` - 30 calls\n- `src.interfaces.intake_cli.main` - 29 calls\n- `sdk.rust.src.client.validate_http_status_body` - 28 calls\n- `src.pipeline.run-execution.executePipeline` - 26 calls\n- `src.comparison.workspace.temporaryParent` - 25 calls\n- `src.comparison.workspace.baseWorktree` - 25 calls\n- `sdk.go.examples.basic.main.run` - 25 calls\n- `src.extractors.todo.extractTodo` - 24 calls\n- `src.communication.llm.implementation.CommunicationLlmRequiredError.extractCommunicationIntentAudited` - 23 calls\n- `src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited` - 22 calls\n- `src.graph.linker.linkIntentRecords` - 22 calls\n- `scripts.live-model-comparison.main` - 22 calls\n- `rust-ast.src.main.main` - 21 calls\n- `src.extractors.git.extractRepositoryGitIntent` - 21 calls\n- `sdk.typescript.examples.basic.baseUrl` - 21 calls\n- `sdk.typescript.examples.basic.token` - 21 calls\n- `sdk.typescript.examples.basic.root` - 21 calls\n- `sdk.typescript.examples.basic.main` - 21 calls\n- `sdk.python.todo2code.runtime.TypeScriptRuntime.reality` - 21 calls\n- `rust-ast.src.main.collect_files` - 20 calls\n- `src.extractors.nl.extractNlIntent` - 20 calls\n- `src.extractors.ast.extractAstIntent` - 20 calls\n- `src.extractors.todo.body` - 20 calls\n- `src.extractors.todo.relative` - 20 calls\n- `src.extractors.todo.lines` - 20 calls\n- `src.synthesis.todo-patch.createTodoPatch` - 20 calls\n- `src.synthesis.todo-patch.applyTodoPatch` - 20 calls\n- `src.communication.intake-service.GovernedIntakeService.validateProjection` - 20 calls\n- `src.extractors.changelog.extractChangelog` - 19 calls\n- `src.graph.diff.diffIntentGraphs` - 19 calls\n- `php.ast_extract.parseFile` - 19 calls\n- `scripts.verify-env-contract.collectDockerReferences` - 19 calls\n- `src.services.actions.executeAnalyzeCommunicationAction` - 18 calls\n- `src.core.schema.conclusions.assertTodoProposalValue` - 18 calls\n- `src.synthesis.task-synthesis-materialize.materializeTaskSynthesisResponse` - 18 calls\n- `src.operations.subactor.compileSubactorProcessEnvelope` - 18 calls\n\n## System Interactions\n\nHow components interact:\n\n```mermaid\ngraph TD\n main --> get\n main --> T2CClient\n main --> print\n main --> parse_args\n main --> read_bytes\n main --> loads\n main --> sorted\n compareWorkspaceInte --> resolve\n compareWorkspaceInte --> git\n compareWorkspaceInte --> trim\n compareWorkspaceInte --> relative\n compareWorkspaceInte --> startsWith\n main --> list\n main --> monotonic\n main --> SentenceTransformer\n main --> ArgumentParser\n main --> add_subparsers\n main --> add_parser\n main --> add_argument\n executePipeline --> resolveGlobs\n executePipeline --> skippedAudit\n executePipeline --> extractNlIntentAudit\n executePipeline --> push\n executePipeline --> extractGitIntent\n temporaryParent --> git\n temporaryParent --> join\n temporaryParent --> commonPipelineOption\n temporaryParent --> optionsForRoot\n temporaryParent --> runPipeline\n baseWorktree --> git\n```\n\n## Reverse Engineering Guidelines\n\n1. **Entry Points**: Start analysis from the entry points listed above\n2. **Core Logic**: Focus on classes with many methods\n3. **Data Flow**: Follow data transformation functions\n4. **Process Flows**: Use the flow diagrams for execution paths\n5. **API Surface**: Public API functions reveal the interface\n\n## Context for LLM\n\nMaintain the identified architectural patterns and public API surface when suggesting changes.", "is_subdir": false}, {"name": "calls.mmd", "rel_path": "calls.mmd", "path": "calls.mmd", "size": "79.9KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart LR\n%% generated in 0.05s\n subgraph examples__backend\n examples__backend__src__request_handlers__handleRequest["handleRequest"]\n examples__backend__src__server__createBackend["createBackend"]\n examples__backend__src__validation__validateEventPayload["validateEventPayload"]\n examples__backend__src__request_handlers__parseOffset["parseOffset"]\n examples__backend__src__request_handlers__handleEventPublish["handleEventPublish"]\n examples__backend__src__request_handlers__parseLimit["parseLimit"]\n examples__backend__src__validation__invalid["invalid"]\n examples__backend__src__validation__agent["agent"]\n examples__backend__src__server__server["server"]\n examples__backend__src__request_handlers__sendJson["sendJson"]\n examples__backend__src__server__store["store"]\n examples__backend__src__request_handlers__event["event"]\n examples__backend__src__validation__record["record"]\n examples__backend__src__request_handlers__handleEventList["handleEventList"]\n examples__backend__src__request_handlers__MAX_BODY_BYTES["MAX_BODY_BYTES"]\n examples__backend__src__validation__ALLOWED_ACTIONS["ALLOWED_ACTIONS"]\n examples__backend__src__validation__object["object"]\n examples__backend__src__request_handlers__handleHealth["handleHealth"]\n examples__backend__src__request_handlers__readBody["readBody"]\n examples__backend__src__server__sendJson["sendJson"]\n examples__backend__src__validation__action["action"]\n examples__backend__src__request_handlers__validation["validation"]\n examples__backend__src__request_handlers__size["size"]\n examples__backend__src__server__startBackend["startBackend"]\n end\n subgraph examples__frontend\n examples__frontend__src__render__renderTable["renderTable"]\n examples__frontend__src__app__refresh["refresh"]\n examples__frontend__src__app__createState["createState"]\n examples__frontend__src__app__reload["reload"]\n examples__frontend__src__render__headerRow["headerRow"]\n examples__frontend__src__render__toRows["toRows"]\n examples__frontend__src__app__mountPanel["mountPanel"]\n examples__frontend__src__render__classifyEvent["classifyEvent"]\n examples__frontend__src__app__state["state"]\n end\n subgraph examples__src\n examples__src__runtime__executeContract["executeContract"]\n examples__src__runtime__validateContract["validateContract"]\n end\n subgraph java__JavaAstExtract\n java__JavaAstExtract__JavaAstExtract__map["map"]\n java__JavaAstExtract__JavaAstExtract__collect["collect"]\n java__JavaAstExtract__JavaAstExtract__add["add"]\n java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"]\n java__JavaAstExtract__JavaAstExtract__try["try"]\n java__JavaAstExtract__JavaAstExtract__escape["escape"]\n java__JavaAstExtract__JavaAstExtract__scanCompilationUnits["scanCompilationUnits"]\n java__JavaAstExtract__JavaAstExtract__json["json"]\n java__JavaAstExtract__JavaAstExtract__collectFileDiagnostics["collectFileDiagnostics"]\n java__JavaAstExtract__JavaAstExtract__main["main"]\n java__JavaAstExtract__JavaAstExtract__emit["emit"]\n end\n subgraph rust_ast__src\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__arguments["arguments"]\n rust_ast__src__main__visit_expr_call["visit_expr_call"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_impl_item_fn["visit_impl_item_fn"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__qualified["qualified"]\n rust_ast__src__main__collect_files["collect_files"]\n rust_ast__src__main__excerpt["excerpt"]\n rust_ast__src__main__add["add"]\n rust_ast__src__main__type_item["type_item"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_expr_method_call["visit_expr_method_call"]\n rust_ast__src__main__modifiers["modifiers"]\n rust_ast__src__main__slash["slash"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n end\n subgraph src__extractors\n src__extractors__docs_record__fallback["fallback"]\n src__extractors__markdown_paths__buildBasenameIndex["buildBasenameIndex"]\n src__extractors__docs_chunks__index["index"]\n src__extractors__ast__typescript__context["context"]\n src__extractors__nl__body["body"]\n src__extractors__ast__external__result["result"]\n src__extractors__docs_chunks__mapConcurrent["mapConcurrent"]\n src__extractors__ast__typescript__handleCallExpression["handleCallExpression"]\n src__extractors__ast__typescript__createTypeScriptExtractionContext["createTypeScriptExtractionCont"]\n src__extractors__todo__raw["raw"]\n src__extractors__ast__typescript__callee["callee"]\n src__extractors__todo__resolvedPaths["resolvedPaths"]\n src__extractors__configuration__bounded["bounded"]\n src__extractors__todo__classified["classified"]\n src__extractors__communication_helpers__normalize["normalize"]\n src__extractors__markdown_paths__createMarkdownPathResolver["createMarkdownPathResolver"]\n src__extractors__markdown_paths__addBasenameIndexMatch["addBasenameIndexMatch"]\n src__extractors__configuration__uniqueEntries["uniqueEntries"]\n src__extractors__todo__extractTodo["extractTodo"]\n src__extractors__runtime_cycle__MAX_PER_SECTION["MAX_PER_SECTION"]\n src__extractors__nl__extractNlIntent["extractNlIntent"]\n src__extractors__nl__missing["missing"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET["NL_ACTION_SET"]\n src__extractors__ast__typescript__extractSymbolName["extractSymbolName"]\n src__extractors__docs_record__isPlaceholder["isPlaceholder"]\n src__extractors__docs_deterministic__match["match"]\n src__extractors__communication_helpers__item["item"]\n src__extractors__docs_chunks__prioritizeDocumentChunks["prioritizeDocumentChunks"]\n src__extractors__runtime_cycle__probeRecord["probeRecord"]\n src__extractors__docs_record__action["action"]\n src__extractors__changelog__relative["relative"]\n src__extractors__ast__typescript__scriptKind["scriptKind"]\n src__extractors__docs_deterministic__action["action"]\n src__extractors__nl_llm__NlLlmRequiredError__client["client"]\n src__extractors__git__state["state"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT["NL_RECORD_CONTRACT"]\n src__extractors__communication_helpers__sameStrings["sameStrings"]\n src__extractors__git__mapWithConcurrency["mapWithConcurrency"]\n src__extractors__markdown_paths__headingScopes["headingScopes"]\n src__extractors__docs_deterministic__extractDocumentationBaseline["extractDocumentationBaseline"]\n src__extractors__git__filterDiscoveryChildren["filterDiscoveryChildren"]\n src__extractors__communication_helpers__flush["flush"]\n src__extractors__todo__inferOwner["inferOwner"]\n src__extractors__todo__extractExplicitId["extractExplicitId"]\n src__extractors__git__extractGitIntent["extractGitIntent"]\n src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings["appendRoleAndParticipantWarnin"]\n src__extractors__runtime_cycle__factsMetadata["factsMetadata"]\n src__extractors__configuration__fileAggregate["fileAggregate"]\n src__extractors__configuration__MAX_ENTRIES_PER_FILE["MAX_ENTRIES_PER_FILE"]\n src__extractors__docs_record__OBJECT_PLACEHOLDERS["OBJECT_PLACEHOLDERS"]\n src__extractors__docs_record__hasTarget["hasTarget"]\n src__extractors__docs_deterministic__statementRecord["statementRecord"]\n src__extractors__nl__object["object"]\n src__extractors__docs_chunks__splitLongSection["splitLongSection"]\n src__extractors__ast__typescript__recordModuleFact["recordModuleFact"]\n src__extractors__configuration__parsed["parsed"]\n src__extractors__docs_chunks__chunkPriority["chunkPriority"]\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder["isPlaceholder"]\n src__extractors__docs_schema__documentResponseSchema["documentResponseSchema"]\n src__extractors__docs_record__resolveTarget["resolveTarget"]\n src__extractors__configuration__jsonEntries["jsonEntries"]\n src__extractors__git__finishDiscovery["finishDiscovery"]\n src__extractors__configuration__pair["pair"]\n src__extractors__ast__typescript__declarationIsCallable["declarationIsCallable"]\n src__extractors__communication_helpers__isCommunicationNoise["isCommunicationNoise"]\n src__extractors__nl__confidence["confidence"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__files["files"]\n src__extractors__configuration__line["line"]\n src__extractors__runtime_cycle__label["label"]\n src__extractors__todo__body["body"]\n src__extractors__nl_llm_helpers__NlAttemptError__nlStrings["nlStrings"]\n src__extractors__git__gitMarkerState["gitMarkerState"]\n src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__markdown_paths__scanDirectoryForBasenames["scanDirectoryForBasenames"]\n src__extractors__docs_deterministic__convertDocument["convertDocument"]\n src__extractors__docs_chunks__takeLineBatch["takeLineBatch"]\n src__extractors__ast__external__execFileAsync["execFileAsync"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering["enrichBatchCovering"]\n src__extractors__markdown_paths__createBasenameIndexState["createBasenameIndexState"]\n src__extractors__docs_schema__documentRecord["documentRecord"]\n src__extractors__communication_helpers__nestedRole["nestedRole"]\n src__extractors__runtime_cycle__text["text"]\n src__extractors__runtime_cycle__extractRuntimeCycleIntent["extractRuntimeCycleIntent"]\n src__extractors__git__isGitWorkTree["isGitWorkTree"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment["enrichment"]\n src__extractors__communication_file_helpers__appendA2aAgentWarnings["appendA2aAgentWarnings"]\n src__extractors__configuration__match["match"]\n src__extractors__runtime_cycle__proposalRecord["proposalRecord"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract["markdownResponseContract"]\n src__extractors__docs_deterministic__parseSectionHeading["parseSectionHeading"]\n src__extractors__configuration__heading["heading"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks["loadDocumentChunks"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt["readPrompt"]\n src__extractors__ast__typescript__handleExportDeclaration["handleExportDeclaration"]\n src__extractors__markdown_paths__basenames["basenames"]\n src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText["nonEmptyText"]\n src__extractors__ast__typescript__symbolModifiers["symbolModifiers"]\n src__extractors__ast__typescript__isTopLevel["isTopLevel"]\n src__extractors__communication_file_helpers__appendTimestampWarnings["appendTimestampWarnings"]\n src__extractors__docs_deterministic__resolver["resolver"]\n src__extractors__nl__absolute["absolute"]\n src__extractors__git__discoverGitRepositories["discoverGitRepositories"]\n src__extractors__ast__records__boundedCapabilities["boundedCapabilities"]\n src__extractors__docs_deterministic__parseBulletStatement["parseBulletStatement"]\n src__extractors__configuration__tomlEntries["tomlEntries"]\n src__extractors__todo__lines["lines"]\n src__extractors__todo__heading["heading"]\n src__extractors__todo__text["text"]\n src__extractors__ast__external__runExternalAstAdapter["runExternalAstAdapter"]\n src__extractors__configuration__findKeyLine["findKeyLine"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage["errorMessage"]\n src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings["appendRegistryAlignmentWarning"]\n src__extractors__docs_record__anchorToSource["anchorToSource"]\n src__extractors__docs_deterministic__heading["heading"]\n src__extractors__docs_record__allowedLifecycle["allowedLifecycle"]\n src__extractors__docs_deterministic__primePathMapper["primePathMapper"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient["requireConfiguredClient"]\n src__extractors__configuration__files["files"]\n src__extractors__todo__match["match"]\n src__extractors__communication_helpers__raw["raw"]\n src__extractors__git__count["count"]\n src__extractors__ast__records__capabilities["capabilities"]\n src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata["hasExplicitEnvelopeMetadata"]\n src__extractors__nl_llm_helpers__NlAttemptError__statementText["statementText"]\n src__extractors__communication_file_helpers__appendIdentityWarnings["appendIdentityWarnings"]\n src__extractors__configuration__entry["entry"]\n src__extractors__docs_record__allowedModality["allowedModality"]\n src__extractors__docs_deterministic__parseParagraphStatement["parseParagraphStatement"]\n src__extractors__communication_helpers__isTicketEvidenceFile["isTicketEvidenceFile"]\n src__extractors__ast__isExtractionResult["isExtractionResult"]\n src__extractors__git__readDiscoveryEntries["readDiscoveryEntries"]\n src__extractors__todo__task["task"]\n src__extractors__changelog__lines["lines"]\n src__extractors__docs_deterministic__marker["marker"]\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename["inferIdentityFromPathAndFilena"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk["extractChunk"]\n src__extractors__communication_helpers__unquote["unquote"]\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord["toIntentRecord"]\n src__extractors__docs_chunks__worker["worker"]\n src__extractors__communication_helpers__fileParts["fileParts"]\n src__extractors__configuration__extractConfigurationIntent["extractConfigurationIntent"]\n src__extractors__ast__typescript__extractTypeScriptFile["extractTypeScriptFile"]\n src__extractors__git__readChangedFiles["readChangedFiles"]\n src__extractors__docs_chunks__sectionText["sectionText"]\n src__extractors__nl__sourcePath["sourcePath"]\n src__extractors__configuration__dockerEntries["dockerEntries"]\n src__extractors__git__result["result"]\n src__extractors__docs_record__statementText["statementText"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords["enrichMarkdownRecords"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection["enrichMarkdownBatchWithCorrect"]\n src__extractors__ast__isIntentRecords["isIntentRecords"]\n src__extractors__docs_record__clampLine["clampLine"]\n src__extractors__nl_llm_helpers__NlAttemptError__action["action"]\n src__extractors__git__execFileAsync["execFileAsync"]\n src__extractors__docs_record__linesFromChunk["linesFromChunk"]\n src__extractors__markdown_paths__readBasenameDirectoryEntries["readBasenameDirectoryEntries"]\n src__extractors__git__hasMoreDiscoveryWork["hasMoreDiscoveryWork"]\n src__extractors__nl_llm_helpers__NlAttemptError__lines["lines"]\n src__extractors__docs_record__resolveObject["resolveObject"]\n src__extractors__docs_record__toDocumentIntentRecord["toDocumentIntentRecord"]\n src__extractors__communication_helpers__listValue["listValue"]\n src__extractors__communication_helpers__inferIdentity["inferIdentity"]\n src__extractors__git__takeNextDiscoveryDirectory["takeNextDiscoveryDirectory"]\n src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET["NL_MODALITY_SET"]\n src__extractors__ast__typescript__handleNode["handleNode"]\n src__extractors__docs_chunks__sectionLines["sectionLines"]\n src__extractors__changelog__extractChangelog["extractChangelog"]\n src__extractors__docs_chunks__flush["flush"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes["outcomes"]\n src__extractors__docs_deterministic__codeBlockRecord["codeBlockRecord"]\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt["sourceExcerpt"]\n src__extractors__docs_schema__target["target"]\n src__extractors__ast__records__moduleTopicText["moduleTopicText"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedModality["allowedModality"]\n src__extractors__git__extractChangedSymbols["extractChangedSymbols"]\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText["normalizedText"]\n src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow["fallbackOrThrow"]\n src__extractors__ast__typescript__addTypeScriptRecord["addTypeScriptRecord"]\n src__extractors__markdown_paths__headingDirectories["headingDirectories"]\n src__extractors__runtime_cycle__jsonScalar["jsonScalar"]\n src__extractors__communication_helpers__parseEnvelope["parseEnvelope"]\n src__extractors__communication_helpers__nestedRoleIndex["nestedRoleIndex"]\n src__extractors__ast__typescript__isTypeScriptSymbolDeclaration["isTypeScriptSymbolDeclaration"]\n src__extractors__nl__assertNlExtractionOptions["assertNlExtractionOptions"]\n src__extractors__communication_helpers__heading["heading"]\n src__extractors__configuration__isConfigurationPath["isConfigurationPath"]\n src__extractors__todo__checked["checked"]\n src__extractors__communication_helpers__isCommunicationType["isCommunicationType"]\n src__extractors__docs_chunks__chunkMarkdown["chunkMarkdown"]\n src__extractors__changelog__body["body"]\n src__extractors__todo__block["block"]\n src__extractors__configuration__yamlOrAssignmentEntries["yamlOrAssignmentEntries"]\n src__extractors__docs_chunks__needles["needles"]\n src__extractors__configuration__lines["lines"]\n src__extractors__docs_record__modality["modality"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings["strings"]\n src__extractors__ast__records__start["start"]\n src__extractors__docs_chunks__item["item"]\n src__extractors__ast__records__adapterRecords["adapterRecords"]\n src__extractors__configuration__configurationRecords["configurationRecords"]\n src__extractors__runtime_cycle__proposalAction["proposalAction"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client["client"]\n src__extractors__docs_deterministic__qualifyingStatement["qualifyingStatement"]\n src__extractors__docs_record__resolveModality["resolveModality"]\n src__extractors__runtime_cycle__violationRecord["violationRecord"]\n src__extractors__configuration__entries["entries"]\n src__extractors__communication_file_helpers__envelope["envelope"]\n src__extractors__nl__action["action"]\n src__extractors__docs_record__keywordOverlap["keywordOverlap"]\n src__extractors__git__registerDiscoveredRepository["registerDiscoveredRepository"]\n src__extractors__communication_helpers__basename["basename"]\n src__extractors__docs_deterministic__parseFenceBlock["parseFenceBlock"]\n src__extractors__ast__typescript__handleSymbolDeclaration["handleSymbolDeclaration"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage["emptyCoverage"]\n src__extractors__communication_helpers__nestedParticipant["nestedParticipant"]\n src__extractors__runtime_cycle__watched["watched"]\n src__extractors__git__runGit["runGit"]\n src__extractors__todo__relative["relative"]\n src__extractors__ast__typescript__handleImportDeclaration["handleImportDeclaration"]\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited["extractMarkdownIntentAudited"]\n src__extractors__docs_deterministic__targetsOf["targetsOf"]\n src__extractors__runtime_cycle__driftRecord["driftRecord"]\n src__extractors__markdown_paths__isNestedCheckout["isNestedCheckout"]\n src__extractors__docs_record__target["target"]\n src__extractors__runtime_cycle__tags["tags"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveModality["resolveModality"]\n src__extractors__todo__action["action"]\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename["inferGovernanceIdentityFromFil"]\n src__extractors__nl_llm_helpers__NlAttemptError__allowedAction["allowedAction"]\n src__extractors__runtime_cycle__parseCycle["parseCycle"]\n src__extractors__git__resolveDiscoveryPrefix["resolveDiscoveryPrefix"]\n src__extractors__markdown_paths__index["index"]\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch["enrichSplitBatch"]\n src__extractors__ast__records__moduleRecords["moduleRecords"]\n src__extractors__ast__records__end["end"]\n src__extractors__communication_file_helpers__inferred["inferred"]\n src__extractors__runtime_cycle__sourcePathFor["sourcePathFor"]\n src__extractors__docs_schema__strings["strings"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction["resolveAction"]\n src__extractors__nl__inferActor["inferActor"]\n src__extractors__docs_record__allowedAction["allowedAction"]\n src__extractors__communication_helpers__match["match"]\n src__extractors__docs_chunks__markdownSections["markdownSections"]\n src__extractors__ast__typescript__extractModifiers["extractModifiers"]\n src__extractors__ast__typescript__visitTypeScriptNode["visitTypeScriptNode"]\n src__extractors__nl__detectMissingFields["detectMissingFields"]\n src__extractors__git__readCommits["readCommits"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent["extractDocumentationIntent"]\n src__extractors__git__processDiscoveryDirectory["processDiscoveryDirectory"]\n src__extractors__docs_chunks__workerCount["workerCount"]\n src__extractors__communication_helpers__normalizeType["normalizeType"]\n src__extractors__ast__typescript__handleVariableDeclaration["handleVariableDeclaration"]\n src__extractors__nl__classified["classified"]\n src__extractors__markdown_paths__repositoryRoot["repositoryRoot"]\n src__extractors__git__root["root"]\n src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget["selectWithinBudget"]\n src__extractors__configuration__configurationFormat["configurationFormat"]\n src__extractors__docs_deterministic__handleDocumentationLine["handleDocumentationLine"]\n src__extractors__runtime_cycle__boundedArray["boundedArray"]\n src__extractors__docs_record__resolveAction["resolveAction"]\n src__extractors__markdown_paths__isRepositoryPath["isRepositoryPath"]\n src__extractors__git__createDiscoveryState["createDiscoveryState"]\n src__extractors__communication_helpers__communicationSegments["communicationSegments"]\n src__extractors__docs_schema__documentResponseContract["documentResponseContract"]\n src__extractors__markdown_paths__state["state"]\n src__extractors__communication_file_helpers__buildLocalWarnings["buildLocalWarnings"]\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited["extractNlIntentAudited"]\n src__extractors__changelog__changelogAction["changelogAction"]\n src__extractors__git__readStats["readStats"]\n src__extractors__runtime_cycle__results["results"]\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile["shouldSkipCommunicationFile"]\n src__extractors__configuration__relative["relative"]\n src__extractors__docs_deterministic__readParagraph["readParagraph"]\n src__extractors__git__extractRepositoryGitIntent["extractRepositoryGitIntent"]\n src__extractors__docs_deterministic__root["root"]\n src__extractors__nl_llm_helpers__NlAttemptError__clampLine["clampLine"]\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject["resolveObject"]\n end\n subgraph src__graph\n src__graph__linker__aliases["aliases"]\n src__graph__linker_relations__matchSourceRule["matchSourceRule"]\n src__graph__linker__expand["expand"]\n src__graph__diagnostics__buildImplementedWithoutPlanDiagnostic["buildImplementedWithoutPlanDia"]\n src__graph__linker__scoreSharedTickets["scoreSharedTickets"]\n src__graph__diagnostics__collectMissingFields["collectMissingFields"]\n src__graph__linker__intersectsAliases["intersectsAliases"]\n src__graph__diff__escapeXml["escapeXml"]\n src__graph__diff__beforeRecord["beforeRecord"]\n src__graph__linker__keywordIndex["keywordIndex"]\n src__graph__diff__truncate["truncate"]\n src__graph__diff__height["height"]\n src__graph__diff__groups["groups"]\n src__graph__symbol_resolution__resolveSymbol["resolveSymbol"]\n src__graph__symbol_resolution__selected["selected"]\n src__graph__diagnostics__diagnoseGraph["diagnoseGraph"]\n src__graph__diff__values["values"]\n src__graph__diff__beforeGroups["beforeGroups"]\n src__graph__linker__resolvableBasenames["resolvableBasenames"]\n src__graph__diagnostics__collectRelatedRecords["collectRelatedRecords"]\n src__graph__linker__symbolResolutionIndex["symbolResolutionIndex"]\n src__graph__linker__scoreSharedPath["scoreSharedPath"]\n src__graph__diagnostics__buildDiagnosticContext["buildDiagnosticContext"]\n src__graph__diff__metricCard["metricCard"]\n src__graph__linker_relations__orientRelation["orientRelation"]\n src__graph__diff__y["y"]\n src__graph__diff__renderGraphDiffSvg["renderGraphDiffSvg"]\n src__graph__diagnostics__makeDiagnostic["makeDiagnostic"]\n src__graph__diagnostics__buildNeighbors["buildNeighbors"]\n src__graph__diff__compareRelations["compareRelations"]\n src__graph__diagnostics__indexGroundedImplementationEvidence["indexGroundedImplementationEvi"]\n src__graph__diagnostics__hasDocumentedTarget["hasDocumentedTarget"]\n src__graph__diff__relationKey["relationKey"]\n src__graph__symbol_resolution__pathSelects["pathSelects"]\n src__graph__linker__scoreSourceKindPenalty["scoreSourceKindPenalty"]\n src__graph__diff__isObject["isObject"]\n src__graph__linker__linkIntentRecords["linkIntentRecords"]\n src__graph__diff__changedFieldPaths["changedFieldPaths"]\n src__graph__symbol_resolution__uniquePaths["uniquePaths"]\n src__graph__linker__scorePair["scorePair"]\n src__graph__symbol_resolution__byAlias["byAlias"]\n src__graph__diagnostics__map["map"]\n src__graph__linker__isFileAggregateEvidencePair["isFileAggregateEvidencePair"]\n src__graph__diagnostics__context["context"]\n src__graph__linker_relations__determineRelation["determineRelation"]\n src__graph__symbol_resolution__values["values"]\n src__graph__diff__left["left"]\n src__graph__diff__normalizeRecord["normalizeRecord"]\n src__graph__linker__scoreSharedTopics["scoreSharedTopics"]\n src__graph__symbol_resolution__collectAstCandidates["collectAstCandidates"]\n src__graph__symbol_resolution__buildAstCandidate["buildAstCandidate"]\n src__graph__diagnostics__indexImplementedPaths["indexImplementedPaths"]\n src__graph__linker_relations__relationForSourceKinds["relationForSourceKinds"]\n src__graph__linker__intersectionSize["intersectionSize"]\n src__graph__diagnostics__indexDocumentedPaths["indexDocumentedPaths"]\n src__graph__linker__scoreObjectSimilarity["scoreObjectSimilarity"]\n src__graph__diagnostics__recordsById["recordsById"]\n src__graph__linker__candidatePairs["candidatePairs"]\n src__graph__diagnostics__buildChangelogWithoutImplementationDiagnostic["buildChangelogWithoutImplement"]\n src__graph__linker__pathsIntersect["pathsIntersect"]\n src__graph__diagnostics__buildAmbiguousRequirementDiagnostic["buildAmbiguousRequirementDiagn"]\n src__graph__linker__records["records"]\n src__graph__linker__indexResolvableBasenames["indexResolvableBasenames"]\n src__graph__diff__afterRecord["afterRecord"]\n src__graph__diagnostics__isRecordEvidenced["isRecordEvidenced"]\n src__graph__linker__owners["owners"]\n src__graph__diff__paired["paired"]\n src__graph__linker__deduplicateRecords["deduplicateRecords"]\n src__graph__linker__isModuleTopicEvidencePair["isModuleTopicEvidencePair"]\n src__graph__symbol_resolution__sortCandidates["sortCandidates"]\n src__graph__diff__recordIdentity["recordIdentity"]\n src__graph__diagnostics__collectSymbolIssues["collectSymbolIssues"]\n src__graph__linker__byId["byId"]\n src__graph__diff__assertGraph["assertGraph"]\n src__graph__linker__set["set"]\n src__graph__diff__width["width"]\n src__graph__diagnostics__collectContradictionDiagnostics["collectContradictionDiagnostic"]\n src__graph__linker__jaccard["jaccard"]\n src__graph__diagnostics__buildUndocumentedImplementationDiagnostic["buildUndocumentedImplementatio"]\n src__graph__diff__afterGroups["afterGroups"]\n src__graph__symbol_resolution__uniqueSymbols["uniqueSymbols"]\n src__graph__symbol_resolution__buildSymbolResolutionIndex["buildSymbolResolutionIndex"]\n src__graph__symbol_resolution__hasResolvedNlAstSymbolPair["hasResolvedNlAstSymbolPair"]\n src__graph__diagnostics__buildPlannedNotImplementedDiagnostic["buildPlannedNotImplementedDiag"]\n src__graph__diff__right["right"]\n src__graph__symbol_resolution__byNlRecord["byNlRecord"]\n src__graph__diagnostics__collectRecordDiagnostics["collectRecordDiagnostics"]\n src__graph__diagnostics__hasImplementedTarget["hasImplementedTarget"]\n src__graph__linker__scoreSharedSymbol["scoreSharedSymbol"]\n src__graph__diff__diffIntentGraphs["diffIntentGraphs"]\n src__graph__symbol_resolution__isAstDeclaration["isAstDeclaration"]\n src__graph__diff__groupRecords["groupRecords"]\n src__graph__linker__scoreSameAction["scoreSameAction"]\n src__graph__diff__visibleRows["visibleRows"]\n src__graph__linker__intersects["intersects"]\n src__graph__diagnostics__neighbors["neighbors"]\n src__graph__symbol_resolution__collectNlResolutions["collectNlResolutions"]\n end\n rust_ast__src__main__main --> rust_ast__src__main__arguments\n rust_ast__src__main__main --> rust_ast__src__main__collect_files\n rust_ast__src__main__main --> rust_ast__src__main__slash\n rust_ast__src__main__collect_files --> rust_ast__src__main__slash\n rust_ast__src__main__add --> rust_ast__src__main__excerpt\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_mod --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_use --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_struct --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_enum --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_trait --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_type --> rust_ast__src__main__type_item\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_const --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__add\n rust_ast__src__main__visit_item_static --> rust_ast__src__main__modifiers\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__qualified\n rust_ast__src__main__visit_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_impl_item_fn --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_call --> rust_ast__src__main__add\n rust_ast__src__main__visit_expr_method_call --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__qualified\n rust_ast__src__main__type_item --> rust_ast__src__main__add\n rust_ast__src__main__type_item --> rust_ast__src__main__modifiers\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleHealth\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventPublish\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__handleEventList\n examples__backend__src__request_handlers__MAX_BODY_BYTES --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleHealth\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventPublish\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__handleEventList\n examples__backend__src__request_handlers__handleRequest --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleHealth --> examples__backend__src__request_handlers__size\n examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__readBody\n examples__backend__src__request_handlers__handleEventPublish --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__validation --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__event --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseOffset\n examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__parseLimit\n examples__backend__src__request_handlers__handleEventList --> examples__backend__src__request_handlers__sendJson\n examples__backend__src__validation__ALLOWED_ACTIONS --> examples__backend__src__validation__invalid\n examples__backend__src__validation__validateEventPayload --> examples__backend__src__validation__invalid\n examples__backend__src__validation__record --> examples__backend__src__validation__invalid\n examples__backend__src__validation__agent --> examples__backend__src__validation__invalid\n examples__backend__src__validation__action --> examples__backend__src__validation__invalid\n examples__backend__src__validation__object --> examples__backend__src__validation__invalid\n examples__backend__src__server__createBackend --> examples__backend__src__server__sendJson\n examples__backend__src__server__store --> examples__backend__src__server__sendJson\n examples__backend__src__server__server --> examples__backend__src__server__sendJson\n examples__backend__src__server__startBackend --> examples__backend__src__server__createBackend\n examples__frontend__src__render__toRows --> examples__frontend__src__render__classifyEvent\n examples__frontend__src__render__renderTable --> examples__frontend__src__render__headerRow\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__createState\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__refresh\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__reload\n examples__frontend__src__app__mountPanel --> examples__frontend__src__app__state\n examples__frontend__src__app__state --> examples__frontend__src__app__refresh\n examples__frontend__src__app__reload --> examples__frontend__src__app__refresh\n examples__src__runtime__executeContract --> examples__src__runtime__validateContract\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__emit\n java__JavaAstExtract__JavaAstExtract__main --> java__JavaAstExtract__JavaAstExtract__collect\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__json\n java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try\n java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored\n java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__scanCompilationUnits\n java__JavaAstExtract__JavaAstExtract__collectFileDiagnostics --> java__JavaAstExtract__JavaAstExtract__add\n java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape\n src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions\n src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__detectMissingFields\n src__extractors__nl__absolute --> src__extractors__nl__inferActor\n src__extractors__nl__body --> src__extractors__nl__detectMissingFields\n src__extractors__nl__body --> src__extractors__nl__inferActor\n src__extractors__nl__sourcePath --> src__extractors__nl__detectMissingFields\n src__extractors__nl__sourcePath --> src__extractors__nl__inferActor\n src__extractors__nl__classified --> src__extractors__nl__inferActor\n src__extractors__nl__action --> src__extractors__nl__inferActor\n src__extractors__nl__object --> src__extractors__nl__inferActor\n src__extractors__nl__missing --> src__extractors__nl__inferActor\n src__extractors__nl__confidence --> src__extractors__nl__inferActor\n src__extractors__ast__isExtractionResult --> src__extractors__ast__isIntentRecords\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__MAX_PER_SECTION --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__parseCycle\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__sourcePathFor\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__extractRuntimeCycleIntent --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__probeRecord\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__boundedArray\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__results --> src__extractors__runtime_cycle__violationRecord\n src__extractors__runtime_cycle__label --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__probeRecord --> src__extractors__runtime_cycle__factsMetadata\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__label\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__watched\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__violationRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__tags\n src__extractors__runtime_cycle__driftRecord --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__text\n src__extractors__runtime_cycle__proposalRecord --> src__extractors__runtime_cycle__proposalAction\n src__extractors__runtime_cycle__factsMetadata --> src__extractors__runtime_cycle__jsonScalar\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__MAX_ENTRIES_PER_FILE --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__isConfigurationPath\n src__extractors__configuration__extractConfigurationIntent --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__files --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__relative --> src__extractors__configuration__configurationRecords\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__dockerEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__jsonEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__tomlEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__yamlOrAssignmentEntries\n src__extractors__configuration__configurationRecords --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__entries --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__bounded --> src__extractors__configuration__fileAggregate\n src__extractors__configuration__fileAggregate --> src__extractors__configuration__configurationFormat\n src__extractors__configuration__jsonEntries --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__parsed --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__lines --> src__extractors__configuration__findKeyLine\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entries\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__match\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__entry\n src__extractors__configuration__tomlEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__line --> src__extractors__configuration__entry\n src__extractors__configuration__heading --> src__extractors__configuration__entry\n src__extractors__configuration__pair --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entries\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__match\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__entry\n src__extractors__configuration__yamlOrAssignmentEntries --> src__extractors__configuration__uniqueEntries\n src__extractors__configuration__dockerEntries --> src__extractors__configuration__match\n src__extractors__docs_schema__target --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__strings\n src__extractors__docs_schema__documentRecord --> src__extractors__docs_schema__target\n src__extractors__docs_schema__documentResponseSchema --> src__extractors__docs_schema__documentResponseContract\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__assertNlExtractionOptions\n src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__nl_llm__NlLlmRequiredError__client --> src__extractors__nl_llm__NlLlmRequiredError__fallbackOrThrow\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__requireConfiguredClient\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__selectWithinBudget\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__readPrompt\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractDocumentationIntent --> src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk\n src__extractors__docs_llm__DocumentationLlmRequiredError__loadDocumentChunks --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__files --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk --> src__extractors__docs_llm__DocumentationLlmRequiredError__errorMessage\n src__extractors__changelog__extractChangelog --> src__extractors__changelog__changelogAction\n src__extractors__changelog__body --> src__extractors__changelog__changelogAction\n src__extractors__changelog__relative --> src__extractors__changelog__changelogAction\n src__extractors__changelog__lines --> src__extractors__changelog__changelogAction\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__extractDocumentationBaseline --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__root --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__convertDocument\n src__extractors__docs_deterministic__resolver --> src__extractors__docs_deterministic__primePathMapper\n src__extractors__docs_deterministic__convertDocument --> src__extractors__docs_deterministic__handleDocumentationLine\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseFenceBlock\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseSectionHeading\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseBulletStatement\n src__extractors__docs_deterministic__handleDocumentationLine --> src__extractors__docs_deterministic__parseParagraphStatement\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseFenceBlock --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__marker --> src__extractors__docs_deterministic__codeBlockRecord\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseSectionHeading --> src__extractors__docs_deterministic__statementRecord\n src__extractors__docs_deterministic__heading --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__match\n src__extractors__docs_deterministic__parseBulletStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__readParagraph\n src__extractors__docs_deterministic__parseParagraphStatement --> src__extractors__docs_deterministic__qualifyingStatement\n src__extractors__docs_deterministic__action --> src__extractors__docs_deterministic__targetsOf\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__buildBasenameIndex\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__createMarkdownPathResolver --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__repositoryRoot --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__headingScopes\n src__extractors__markdown_paths__basenames --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__isRepositoryPath\n src__extractors__markdown_paths__headingDirectories --> src__extractors__markdown_paths__basenames\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__createBasenameIndexState\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__buildBasenameIndex --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__index --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__readBasenameDirectoryEntries\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__isNestedCheckout\n src__extractors__markdown_paths__state --> src__extractors__markdown_paths__scanDirectoryForBasenames\n src__extractors__markdown_paths__scanDirectoryForBasenames --> src__extractors__markdown_paths__addBasenameIndexMatch\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__OBJECT_PLACEHOLDERS --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__anchorToSource\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveTarget\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveAction\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__resolveModality\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__toDocumentIntentRecord --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__statementText --> src__extractors__docs_record__resolveObject\n src__extractors__docs_record__target --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__target --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__action --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__action --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__modality --> src__extractors__docs_record__allowedLifecycle\n src__extractors__docs_record__modality --> src__extractors__docs_record__linesFromChunk\n src__extractors__docs_record__resolveObject --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__fallback --> src__extractors__docs_record__isPlaceholder\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__clampLine\n src__extractors__docs_record__anchorToSource --> src__extractors__docs_record__keywordOverlap\n src__extractors__docs_record__resolveTarget --> src__extractors__docs_record__hasTarget\n src__extractors__docs_record__resolveAction --> src__extractors__docs_record__allowedAction\n src__extractors__docs_record__resolveModality --> src__extractors__docs_record__allowedModality\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownRecords --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__outcomes --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichment --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichMarkdownBatchWithCorrection\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__emptyCoverage\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichSplitBatch --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__enrichBatchCovering\n src__extractors__markdown_llm_helpers__MarkdownAttemptError__markdownResponseContract --> src__extractors__markdown_llm_helpers__MarkdownAttemptError__strings\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__parseEnvelope --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferGovernanceIdentityFromFilename\n src__extractors__communication_helpers__inferIdentity --> src__extractors__communication_helpers__inferIdentityFromPathAndFilename\n src__extractors__communication_helpers__inferGovernanceIdentityFromFilename --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__inferIdentityFromPathAndFilename --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__fileParts --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRoleIndex --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedRole --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__nestedParticipant --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__isTicketEvidenceFile --> src__extractors__communication_helpers__basename\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__communicationSegments --> src__extractors__communication_helpers__flush\n src__extractors__communication_helpers__flush --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__item --> src__extractors__communication_helpers__isCommunicationNoise\n src__extractors__communication_helpers__raw --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__heading --> src__extractors__communication_helpers__match\n src__extractors__communication_helpers__normalizeType --> src__extractors__communication_helpers__isCommunicationType\n src__extractors__communication_helpers__listValue --> src__extractors__communication_helpers__unquote\n src__extractors__communication_helpers__sameStrings --> src__extractors__communication_helpers__normalize\n src__extractors__todo__extractTodo --> src__extractors__todo__match\n src__extractors__todo__body --> src__extractors__todo__match\n src__extractors__todo__relative --> src__extractors__todo__match\n src__extractors__todo__lines --> src__extractors__todo__match\n src__extractors__todo__raw --> src__extractors__todo__match\n src__extractors__todo__heading --> src__extractors__todo__match\n src__extractors__todo__task --> src__extractors__todo__inferOwner\n src__extractors__todo__checked --> src__extractors__todo__inferOwner\n src__extractors__todo__block --> src__extractors__todo__inferOwner\n src__extractors__todo__text --> src__extractors__todo__inferOwner\n src__extractors__todo__classified --> src__extractors__todo__inferOwner\n src__extractors__todo__action --> src__extractors__todo__inferOwner\n src__extractors__todo__resolvedPaths --> src__extractors__todo__inferOwner\n src__extractors__todo__inferOwner --> src__extractors__todo__match\n src__extractors__todo__extractExplicitId --> src__extractors__todo__match\n src__extractors__git__extractGitIntent --> src__extractors__git__isGitWorkTree\n src__extractors__git__extractGitIntent --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractGitIntent --> src__extractors__git__discoverGitRepositories\n src__extractors__git__extractGitIntent --> src__extractors__git__mapWithConcurrency\n src__extractors__git__root --> src__extractors__git__isGitWorkTree\n src__extractors__git__root --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__count --> src__extractors__git__isGitWorkTree\n src__extractors__git__count --> src__extractors__git__extractRepositoryGitIntent\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readCommits\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readChangedFiles\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__readStats\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__runGit\n src__extractors__git__extractRepositoryGitIntent --> src__extractors__git__extractChangedSymbols\n src__extractors__git__discoverGitRepositories --> src__extractors__git__createDiscoveryState\n src__extractors__git__discoverGitRepositories --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__discoverGitRepositories --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__discoverGitRepositories --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__discoverGitRepositories --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__discoverGitRepositories --> src__extractors__git__finishDiscovery\n src__extractors__git__state --> src__extractors__git__hasMoreDiscoveryWork\n src__extractors__git__state --> src__extractors__git__takeNextDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__readDiscoveryEntries\n src__extractors__git__state --> src__extractors__git__processDiscoveryDirectory\n src__extractors__git__state --> src__extractors__git__filterDiscoveryChildren\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__resolveDiscoveryPrefix\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__gitMarkerState\n src__extractors__git__processDiscoveryDirectory --> src__extractors__git__registerDiscoveredRepository\n src__extractors__git__registerDiscoveredRepository --> src__extractors__git__isGitWorkTree\n src__extractors__git__isGitWorkTree --> src__extractors__git__runGit\n src__extractors__git__runGit --> src__extractors__git__execFileAsync\n src__extractors__git__result --> src__extractors__git__execFileAsync\n src__extractors__git__readCommits --> src__extractors__git__runGit\n src__extractors__git__readChangedFiles --> src__extractors__git__runGit\n src__extractors__git__readStats --> src__extractors__git__runGit\n src__extractors__docs_chunks__prioritizeDocumentChunks --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__needles --> src__extractors__docs_chunks__chunkPriority\n src__extractors__docs_chunks__mapConcurrent --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__index --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__item --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__workerCount --> src__extractors__docs_chunks__worker\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__markdownSections\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__chunkMarkdown --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionLines --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__flush\n src__extractors__docs_chunks__sectionText --> src__extractors__docs_chunks__splitLongSection\n src__extractors__docs_chunks__splitLongSection --> src__extractors__docs_chunks__takeLineBatch\n src__extractors__markdown_llm__MarkdownLlmRequiredError__extractMarkdownIntentAudited --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__markdown_llm__MarkdownLlmRequiredError__client --> src__extractors__markdown_llm__MarkdownLlmRequiredError__fallbackOrThrow\n src__extractors__communication_file_helpers__envelope --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__inferred --> src__extractors__communication_file_helpers__shouldSkipCommunicationFile\n src__extractors__communication_file_helpers__shouldSkipCommunicationFile --> src__extractors__communication_file_helpers__hasExplicitEnvelopeMetadata\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRoleAndParticipantWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendIdentityWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendRegistryAlignmentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendA2aAgentWarnings\n src__extractors__communication_file_helpers__buildLocalWarnings --> src__extractors__communication_file_helpers__appendTimestampWarnings\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveAction\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__toIntentRecord --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality\n src__extractors__nl_llm_helpers__NlAttemptError__lines --> src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt\n src__extractors__nl_llm_helpers__NlAttemptError__action --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__normalizedText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveObject\n src__extractors__nl_llm_helpers__NlAttemptError__statementText --> src__extractors__nl_llm_helpers__NlAttemptError__resolveModality\n src__extractors__nl_llm_helpers__NlAttemptError__sourceExcerpt --> src__extractors__nl_llm_helpers__NlAttemptError__clampLine\n src__extractors__nl_llm_helpers__NlAttemptError__resolveAction --> src__extractors__nl_llm_helpers__NlAttemptError__allowedAction\n src__extractors__nl_llm_helpers__NlAttemptError__resolveModality --> src__extractors__nl_llm_helpers__NlAttemptError__allowedModality\n src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__isPlaceholder\n src__extractors__nl_llm_helpers__NlAttemptError__resolveObject --> src__extractors__nl_llm_helpers__NlAttemptError__nonEmptyText\n src__extractors__nl_llm_helpers__NlAttemptError__NL_ACTION_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__nl_llm_helpers__NlAttemptError__NL_MODALITY_SET --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__nl_llm_helpers__NlAttemptError__NL_RECORD_CONTRACT --> src__extractors__nl_llm_helpers__NlAttemptError__nlStrings\n src__extractors__ast__external__runExternalAstAdapter --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__external__result --> src__extractors__ast__external__execFileAsync\n src__extractors__ast__records__adapterRecords --> src__extractors__ast__records__moduleRecords\n src__extractors__ast__records__moduleRecords --> src__extractors__ast__records__boundedCapabilities\n src__extractors__ast__records__start --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__end --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__records__capabilities --> src__extractors__ast__records__moduleTopicText\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__extractTypeScriptFile --> src__extractors__ast__typescript__recordModuleFact\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__createTypeScriptExtractionContext\n src__extractors__ast__typescript__context --> src__extractors__ast__typescript__scriptKind\n src__extractors__ast__typescript__visitTypeScriptNode --> src__extractors__ast__typescript__handleNode\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleImportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleExportDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleSymbolDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleVariableDeclaration\n src__extractors__ast__typescript__handleNode --> src__extractors__ast__typescript__handleCallExpression\n src__extractors__ast__typescript__handleImportDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord\n src__extractors__ast__typescript__handleExportDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord\n src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__isTypeScriptSymbolDeclaration\n src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__extractSymbolName\n src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__extractModifiers\n src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord\n src__extractors__ast__typescript__handleSymbolDeclaration --> src__extractors__ast__typescript__visitTypeScriptNode\n src__extractors__ast__typescript__symbolModifiers --> src__extractors__ast__typescript__addTypeScriptRecord\n src__extractors__ast__typescript__handleVariableDeclaration --> src__extractors__ast__typescript__isTopLevel\n src__extractors__ast__typescript__handleVariableDeclaration --> src__extractors__ast__typescript__addTypeScriptRecord\n src__extractors__ast__typescript__declarationIsCallable --> src__extractors__ast__typescript__addTypeScriptRecord\n src__extractors__ast__typescript__handleCallExpression --> src__extractors__ast__typescript__addTypeScriptRecord\n src__extractors__ast__typescript__callee --> src__extractors__ast__typescript__addTypeScriptRecord\n src__extractors__ast__typescript__recordModuleFact --> src__extractors__ast__typescript__addTypeScriptRecord\n src__graph__diff__diffIntentGraphs --> src__graph__diff__assertGraph\n src__graph__diff__diffIntentGraphs --> src__graph__diff__groupRecords\n src__graph__diff__beforeGroups --> src__graph__diff__changedFieldPaths\n src__graph__diff__beforeGroups --> src__graph__diff__normalizeRecord\n src__graph__diff__afterGroups --> src__graph__diff__changedFieldPaths\n src__graph__diff__afterGroups --> src__graph__diff__normalizeRecord\n src__graph__diff__left --> src__graph__diff__changedFieldPaths\n src__graph__diff__left --> src__graph__diff__normalizeRecord\n src__graph__diff__right --> src__graph__diff__changedFieldPaths\n src__graph__diff__right --> src__graph__diff__normalizeRecord\n src__graph__diff__paired --> src__graph__diff__changedFieldPaths\n src__graph__diff__paired --> src__graph__diff__normalizeRecord\n src__graph__diff__beforeRecord --> src__graph__diff__changedFieldPaths\n src__graph__diff__beforeRecord --> src__graph__diff__normalizeRecord\n src__graph__diff__afterRecord --> src__graph__diff__changedFieldPaths\n src__graph__diff__afterRecord --> src__graph__diff__normalizeRecord\n src__graph__diff__renderGraphDiffSvg --> src__graph__diff__escapeXml\n src__graph__diff__renderGraphDiffSvg --> src__graph__diff__truncate\n src__graph__diff__visibleRows --> src__graph__diff__escapeXml\n src__graph__diff__visibleRows --> src__graph__diff__truncate\n src__graph__diff__width --> src__graph__diff__escapeXml\n src__graph__diff__width --> src__graph__diff__truncate\n src__graph__diff__height --> src__graph__diff__escapeXml\n src__graph__diff__height --> src__graph__diff__truncate\n src__graph__diff__y --> src__graph__diff__escapeXml\n src__graph__diff__y --> src__graph__diff__truncate\n src__graph__diff__groupRecords --> src__graph__diff__recordIdentity\n src__graph__diff__groupRecords --> src__graph__diff__values\n src__graph__diff__groups --> src__graph__diff__recordIdentity\n src__graph__diff__changedFieldPaths --> src__graph__diff__isObject\n src__graph__diff__compareRelations --> src__graph__diff__relationKey\n src__graph__diff__metricCard --> src__graph__diff__escapeXml\n src__graph__linker_relations__determineRelation --> src__graph__linker_relations__relationForSourceKinds\n src__graph__linker_relations__relationForSourceKinds --> src__graph__linker_relations__matchSourceRule\n src__graph__linker_relations__matchSourceRule --> src__graph__linker_relations__orientRelation\n src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectAstCandidates\n src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__sortCandidates\n src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectNlResolutions\n src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration\n src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__uniqueSymbols\n src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__buildAstCandidate\n src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__isAstDeclaration\n src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__uniqueSymbols\n src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__buildAstCandidate\n src__graph__symbol_resolution__sortCandidates --> src__graph__symbol_resolution__values\n src__graph__symbol_resolution__collectNlResolutions --> src__graph__symbol_resolution__resolveSymbol\n src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol\n src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration\n src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects\n src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths\n src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths\n src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords\n src__graph__linker__records --> src__graph__linker__scorePair\n src__graph__linker__byId --> src__graph__linker__set\n src__graph__linker__keywordIndex --> src__graph__linker__scorePair\n src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair\n src__graph__linker__candidatePairs --> src__graph__linker__scorePair\n src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair\n src__graph__linker__deduplicateRecords --> src__graph__linker__set\n src__graph__linker__indexResolvableBasenames --> src__graph__linker__set\n src__graph__linker__owners --> src__graph__linker__set\n src__graph__linker__pathsIntersect --> src__graph__linker__expand\n src__graph__linker__scorePair --> src__graph__linker__scoreSharedTickets\n src__graph__linker__scorePair --> src__graph__linker__scoreSharedSymbol\n src__graph__linker__scorePair --> src__graph__linker__scoreSharedPath\n src__graph__linker__scorePair --> src__graph__linker__scoreSameAction\n src__graph__linker__scorePair --> src__graph__linker__scoreObjectSimilarity\n src__graph__linker__scorePair --> src__graph__linker__scoreSharedTopics\n src__graph__linker__scorePair --> src__graph__linker__scoreSourceKindPenalty\n src__graph__linker__scoreSharedTickets --> src__graph__linker__intersects\n src__graph__linker__scoreSharedSymbol --> src__graph__linker__intersectsAliases\n src__graph__linker__scoreSharedPath --> src__graph__linker__pathsIntersect\n src__graph__linker__scoreSharedPath --> src__graph__linker__isFileAggregateEvidencePair\n src__graph__linker__scoreObjectSimilarity --> src__graph__linker__jaccard\n src__graph__linker__scoreSharedTopics --> src__graph__linker__isModuleTopicEvidencePair\n src__graph__linker__scoreSharedTopics --> src__graph__linker__intersectionSize\n src__graph__linker__intersectsAliases --> src__graph__linker__aliases\n src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__buildDiagnosticContext\n src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__collectRecordDiagnostics\n src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__collectContradictionDiagnostics\n src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__makeDiagnostic\n src__graph__diagnostics__context --> src__graph__diagnostics__collectRecordDiagnostics\n src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__buildNeighbors\n src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__map\n src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__indexGroundedImplementationEvidence\n src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__indexImplementedPaths\n src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__indexDocumentedPaths\n src__graph__diagnostics__neighbors --> src__graph__diagnostics__indexGroundedImplementationEvidence\n src__graph__diagnostics__neighbors --> src__graph__diagnostics__indexImplementedPaths\n src__graph__diagnostics__neighbors --> src__graph__diagnostics__indexDocumentedPaths\n src__graph__diagnostics__recordsById --> src__graph__diagnostics__indexGroundedImplementationEvidence\n src__graph__diagnostics__recordsById --> src__graph__diagnostics__indexImplementedPaths\n src__graph__diagnostics__recordsById --> src__graph__diagnostics__indexDocumentedPaths\n src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__collectRelatedRecords\n src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__collectMissingFields\n src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__collectSymbolIssues\n src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__isRecordEvidenced\n src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildPlannedNotImplementedDiagnostic\n src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildImplementedWithoutPlanDiagnostic\n src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildUndocumentedImplementationDiagnostic\n src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildChangelogWithoutImplementationDiagnostic\n src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildAmbiguousRequirementDiagnostic\n src__graph__diagnostics__collectRelatedRecords --> src__graph__diagnostics__map\n src__graph__diagnostics__isRecordEvidenced --> src__graph__diagnostics__hasImplementedTarget\n src__graph__diagnostics__isRecordEvidenced --> src__graph__diagnostics__hasDocumentedTarget\n", "is_subdir": false}, {"name": "compact_flow.mmd", "rel_path": "compact_flow.mmd", "path": "compact_flow.mmd", "size": "663B", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.05s\n examples__frontend["examples.frontend<br/>25 funcs"]\n java__JavaAstExtract["java.JavaAstExtract<br/>14 funcs"]\n scripts__research["scripts.research<br/>71 funcs"]\n sdk__python["sdk.python<br/>68 funcs"]\n src__graph["src.graph<br/>227 funcs"]\n src__live["src.live<br/>60 funcs"]\n src__synthesis["src.synthesis<br/>477 funcs"]\n scripts__research ==>|7| src__live\n sdk__python ==>|4| src__synthesis\n sdk__python -->|2| java__JavaAstExtract\n scripts__research -->|1| src__synthesis\n scripts__research -->|1| src__graph\n sdk__python -->|1| src__graph\n sdk__python -->|1| examples__frontend\n", "is_subdir": false}, {"name": "flow.mmd", "rel_path": "flow.mmd", "path": "flow.mmd", "size": "2.2KB", "icon": "📈", "type": "mermaid", "type_name": "Mermaid", "content": "flowchart TD\n%% generated in 0.05s\n\n %% Entry points (blue)\n classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff\n\n subgraph CLI\n src__cli__execFileAsync["execFileAsync"]\n src__cli__main["main"]\n src__cli__parsed["parsed"]\n src__cli__command["command"]\n src__cli__config["config"]\n src__cli__handler["handler"]\n src__cli__shouldShowGlobalHelp["shouldShowGlobalHelp"]\n src__cli__shouldShowGlobalVersion["shouldShowGlobalVersion"]\n src__cli__resolveRequestedCommand["resolveRequestedCommand"]\n src__cli__isHelpRequest["isHelpRequest"]\n src__cli__resolveCommandHandler["resolveCommandHandler"]\n src__cli__commandHandlers["commandHandlers"]\n src__cli__resolveMainCommand["resolveMainCommand"]\n src__cli__handleLink["handleLink"]\n src__cli__files["files"]\n ...["+118 more"]\n end\n\n subgraph Core\n project__install_project_package["install_project_package"]\n project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"]\n project__run_analysis_tool["run_analysis_tool"]\n rust_ast__src__main__main["main"]\n rust_ast__src__main__new["new"]\n rust_ast__src__main__visit_item_mod["visit_item_mod"]\n rust_ast__src__main__visit_item_use["visit_item_use"]\n rust_ast__src__main__visit_item_struct["visit_item_struct"]\n rust_ast__src__main__visit_item_enum["visit_item_enum"]\n rust_ast__src__main__visit_item_trait["visit_item_trait"]\n rust_ast__src__main__visit_item_type["visit_item_type"]\n rust_ast__src__main__visit_item_const["visit_item_const"]\n rust_ast__src__main__visit_item_static["visit_item_static"]\n rust_ast__src__main__visit_item_fn["visit_item_fn"]\n rust_ast__src__main__visit_item_impl["visit_item_impl"]\n ...["+2532 more"]\n end\n\n subgraph Exporters\n end\n\n class project__install_project_package,project__cleanup_analysis_snapshot,project__run_analysis_tool,rust_ast__src__main__main,rust_ast__src__main__new,rust_ast__src__main__visit_item_mod,rust_ast__src__main__visit_item_use,rust_ast__src__main__visit_item_struct,rust_ast__src__main__visit_item_enum,rust_ast__src__main__visit_item_trait entry\n", "is_subdir": false}, {"name": "prompt.txt", "rel_path": "prompt.txt", "path": "prompt.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "You are an AI assistant helping me understand and improve a codebase.\n# generated in 0.00s\nUse the attached/generated files as the authoritative context.\nYour goal is to refactor the project based on these files, not just summarize it.\n\nwe are in project path: todo2code\n\nFiles for analysis:\n\nNote: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup)\n- analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [25KB]\n- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [187KB]\n- evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB]\n- project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB]\n- context.md (LLM narrative - architecture summary and project context) [34KB]\n- README.md (Generated documentation - overview and usage guide) [9KB]\n\nTask:\n- Treat this prompt as a refactoring brief: identify the highest-priority changes and prepare concrete edits.\n- Use the file set to decide whether the first pass should focus on correctness, duplication, complexity reduction, or architecture cleanup.\n- If you can safely implement the refactor, do it; otherwise give an exact file-by-file change plan and test plan.\n- Use analysis.toon.yaml to locate high-CC functions and god modules that should be split first.\n- Keep module boundaries intact and update imports/exports according to map.toon.yaml.\n- Use evolution.toon.yaml as the execution backlog and work from the top-ranked items.\n- Keep project.toon.yaml aligned with the refactored architecture.\n\nPriority Order:\nP1 — Split or simplify the highest-CC / god modules identified in analysis.toon.yaml.\nP1 — Preserve module boundaries and update imports/exports according to map.toon.yaml.\nP2 — Keep the compact project overview in project.toon.yaml aligned with the refactor.\nP2 — Execute the highest-impact items from evolution.toon.yaml in order of benefit/risk.\n\nFocus Areas for Analysis:\n1. **Code Health Analysis** - Review complexity metrics, god modules, coupling issues from analysis.toon.yaml\n2. **Structural Map** - Use map.toon.yaml to inspect imports, exports, signatures, and the project header\n3. **Refactoring Priorities** - Examine ranked refactoring actions and risk assessment from evolution.toon.yaml\n4. **Project Overview** - Review the compact project overview from project.toon.yaml\n\nAnalysis Strategy:\n- Start with analysis.toon.yaml for health metrics, then map.toon.yaml for structure and signatures\n- Review evolution.toon.yaml for action priorities and next steps\n- Compare the compact project overview in project.toon.yaml with the main analysis files\n\nConstraints:\n- Prefer minimal, incremental changes.\n- Maintain full backward compatibility.\n- Base recommendations on concrete metrics from the provided files.\n- If uncertain, ask clarifying questions.\n", "is_subdir": false}, {"name": "governance-check.bat", "rel_path": "governance-check.bat", "path": "governance-check.bat", "size": "265B", "icon": "📄", "type": "unknown", "type_name": "BAT", "content": "[Binary file]", "is_subdir": false}, {"name": "governance-check.sh", "rel_path": "governance-check.sh", "path": "governance-check.sh", "size": "322B", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "mermaid.export", "rel_path": "mermaid.export", "path": "mermaid.export", "size": "176.6KB", "icon": "📄", "type": "unknown", "type_name": "EXPORT", "content": "[Binary file]", "is_subdir": false}, {"name": "new-ticket.sh", "rel_path": "new-ticket.sh", "path": "new-ticket.sh", "size": "7.4KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "readme.sh", "rel_path": "readme.sh", "path": "readme.sh", "size": "3.2KB", "icon": "📄", "type": "unknown", "type_name": "SH", "content": "[Binary file]", "is_subdir": false}, {"name": "analysis.toon.yaml", "rel_path": "analysis.toon.yaml", "path": "analysis.toon.yaml", "size": "25.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm | 294f 44016L | typescript:187,json:40,python:15,javascript:15,shell:8,rust:7,go:6,php:4,toml:3,yaml:2,yml:2,java:1,proto:1,txt:1 | 2026-08-04\n# generated in 0.33s\n# CC̅=3.0 | critical:10/4218 | dups:0 | cycles:0\n\nHEALTH[10]:\n 🟡 CC generationMetadata CC=17 (limit:15)\n 🟡 CC parseFile CC=38 (limit:15)\n 🟡 CC collectDockerReferences CC=20 (limit:15)\n 🟡 CC main CC=27 (limit:15)\n 🟡 CC run CC=26 (limit:15)\n 🟡 CC baseUrl CC=17 (limit:15)\n 🟡 CC token CC=17 (limit:15)\n 🟡 CC root CC=17 (limit:15)\n 🟡 CC main CC=17 (limit:15)\n 🟡 CC run CC=20 (limit:15)\n\nREFACTOR[1]:\n 1. split 10 high-CC methods (CC>15)\n\nPIPELINES[2102]:\n [1] Src [main]: main → arguments\n PURITY: 100% pure\n [2] Src [new]: new\n PURITY: 100% pure\n [3] Src [visit_item_mod]: visit_item_mod → qualified\n PURITY: 100% pure\n [4] Src [visit_item_use]: visit_item_use → add → excerpt\n PURITY: 100% pure\n [5] Src [visit_item_struct]: visit_item_struct → type_item → qualified\n PURITY: 100% pure\n [6] Src [visit_item_enum]: visit_item_enum → type_item → qualified\n PURITY: 100% pure\n [7] Src [visit_item_trait]: visit_item_trait → type_item → qualified\n PURITY: 100% pure\n [8] Src [visit_item_type]: visit_item_type → type_item → qualified\n PURITY: 100% pure\n [9] Src [visit_item_const]: visit_item_const → qualified\n PURITY: 100% pure\n [10] Src [visit_item_static]: visit_item_static → qualified\n PURITY: 100% pure\n [11] Src [visit_item_fn]: visit_item_fn → qualified\n PURITY: 100% pure\n [12] Src [visit_item_impl]: visit_item_impl\n PURITY: 100% pure\n [13] Src [visit_impl_item_fn]: visit_impl_item_fn → add → excerpt\n PURITY: 100% pure\n [14] Src [visit_expr_call]: visit_expr_call → add → excerpt\n PURITY: 100% pure\n [15] Src [visit_expr_method_call]: visit_expr_method_call → add → excerpt\n PURITY: 100% pure\n [16] Src [MAX_BODY_BYTES]: MAX_BODY_BYTES → handleHealth → sendJson\n PURITY: 100% pure\n [17] Src [handleRequest]: handleRequest → handleHealth → sendJson\n PURITY: 100% pure\n [18] Src [url]: url\n PURITY: 100% pure\n [19] Src [body]: body\n PURITY: 100% pure\n [20] Src [validation]: validation → sendJson\n PURITY: 100% pure\n [21] Src [event]: event → sendJson\n PURITY: 100% pure\n [22] Src [ALLOWED_ACTIONS]: ALLOWED_ACTIONS → invalid\n PURITY: 100% pure\n [23] Src [validateEventPayload]: validateEventPayload → invalid\n PURITY: 100% pure\n [24] Src [record]: record → invalid\n PURITY: 100% pure\n [25] Src [agent]: agent → invalid\n PURITY: 100% pure\n [26] Src [action]: action → invalid\n PURITY: 100% pure\n [27] Src [object]: object → invalid\n PURITY: 100% pure\n [28] Src [enqueueEvent]: enqueueEvent\n PURITY: 100% pure\n [29] Src [listEvents]: listEvents\n PURITY: 100% pure\n [30] Src [start]: start\n PURITY: 100% pure\n [31] Src [store]: store → sendJson\n PURITY: 100% pure\n [32] Src [server]: server → sendJson\n PURITY: 100% pure\n [33] Src [body]: body\n PURITY: 100% pure\n [34] Src [startBackend]: startBackend → createBackend → sendJson\n PURITY: 100% pure\n [35] Src [port]: port\n PURITY: 100% pure\n [36] Src [host]: host\n PURITY: 100% pure\n [37] Src [fetchEvents]: fetchEvents\n PURITY: 100% pure\n [38] Src [url]: url\n PURITY: 100% pure\n [39] Src [response]: response\n PURITY: 100% pure\n [40] Src [payload]: payload\n PURITY: 100% pure\n [41] Src [publishEvent]: publishEvent\n PURITY: 100% pure\n [42] Src [toRows]: toRows → classifyEvent\n PURITY: 100% pure\n [43] Src [renderTable]: renderTable → headerRow\n PURITY: 100% pure\n [44] Src [table]: table\n PURITY: 100% pure\n [45] Src [head]: head\n PURITY: 100% pure\n [46] Src [body]: body\n PURITY: 100% pure\n [47] Src [tr]: tr\n PURITY: 100% pure\n [48] Src [renderError]: renderError\n PURITY: 100% pure\n [49] Src [message]: message\n PURITY: 100% pure\n [50] Src [mountPanel]: mountPanel → createState\n PURITY: 100% pure\n\nLAYERS:\n php/ CC̄=8.7 ←in:0 →out:0\n │ !! ast_extract.php 233L 0C 7m CC=38 ←0\n │\n golang/ CC̄=4.6 ←in:0 →out:0\n │ ast_extract.go 376L 3C 18m CC=14 ←0\n │\n scripts/ CC̄=3.4 ←in:0 →out:0\n │ audit-changelog-sample.mjs 226L 0C 39m CC=11 ←0\n │ examples-check.sh 210L 0C 3m CC=0.0 ←0\n │ live-contract-check.mjs 200L 0C 26m CC=5 ←0\n │ rerank-embedding-shortlist.mjs 191L 0C 27m CC=14 ←0\n │ !! rank-intent-graph-embeddings 174L 0C 3m CC=27 ←0\n │ !! verify-env-contract.mjs 139L 0C 21m CC=20 ←0\n │ live-model-comparison.mjs 125L 0C 15m CC=13 ←0\n │ e2e.sh 109L 0C 3m CC=0.0 ←0\n │ evaluate-embedding-pairs 101L 0C 2m CC=9 ←0\n │ verify-no-llm-imports.mjs 99L 0C 11m CC=8 ←0\n │ verify-generated-analysis.mjs 88L 0C 14m CC=8 ←0\n │ verify-module-boundaries.mjs 87L 0C 16m CC=7 ←0\n │ sync-generated-readme-metadata.mjs 66L 0C 14m CC=4 ←0\n │ smoke.sh 57L 0C 0m CC=0.0 ←0\n │ assert-demollm-run.mjs 45L 0C 9m CC=2 ←0\n │ verify-workflow-yaml.mjs 43L 0C 9m CC=11 ←0\n │ normalize-generated-analysis-roots.mjs 38L 0C 7m CC=4 ←0\n │ docker-smoke.sh 36L 0C 1m CC=0.0 ←0\n │ verify-structured-responses.mjs 35L 0C 7m CC=8 ←0\n │ generate-response-schemas.mjs 27L 0C 4m CC=2 ←0\n │ vallm-compatible 25L 0C 1m CC=2 ←0\n │ package 25L 0C 0m CC=0.0 ←0\n │ a2a-request.sh 23L 0C 0m CC=0.0 ←0\n │ mcp-request.sh 11L 0C 0m CC=0.0 ←0\n │\n src/ CC̄=3.0 ←in:0 →out:0\n │ !! cli.ts 985L 1C 133m CC=13 ←0\n │ !! actions.ts 806L 1C 106m CC=13 ←0\n │ !! analyzer.ts 619L 3C 85m CC=14 ←0\n │ !! a2a-task-store.ts 560L 3C 88m CC=11 ←0\n │ !! text.ts 530L 0C 61m CC=14 ←0\n │ gold-cases.ts 489L 4C 62m CC=8 ←0\n │ diagnostics.ts 459L 1C 59m CC=11 ←0\n │ implementation-source-patch-apply-core.ts 434L 6C 50m CC=13 ←0\n │ git.ts 397L 6C 57m CC=11 ←0\n │ implementation-source-patch-assert.ts 397L 2C 52m CC=11 ←0\n │ markdown-llm-helpers.ts 383L 5C 30m CC=14 ←0\n │ gold-types.ts 382L 15C 16m CC=12 ←0\n │ todo-patch.ts 372L 5C 52m CC=12 ←0\n │ docs-deterministic.ts 369L 3C 43m CC=11 ←0\n │ implementation-helpers.ts 357L 5C 33m CC=10 ←0\n │ reality-build.ts 346L 2C 44m CC=14 ←0\n │ communication-file-helpers.ts 342L 2C 45m CC=14 ←0\n │ workspace.ts 342L 3C 54m CC=12 ←0\n │ validation.ts 338L 0C 64m CC=11 ←0\n │ intake-contract.ts 334L 7C 34m CC=14 ←0\n │ a2a.ts 332L 0C 47m CC=9 ←0\n │ gold.ts 329L 3C 31m CC=14 ←0\n │ mcp-tools.ts 323L 1C 10m CC=10 ←0\n │ code-change.ts 322L 0C 35m CC=11 ←0\n │ communication-helpers.ts 320L 3C 45m CC=14 ←0\n │ contract-check.ts 317L 6C 39m CC=14 ←2\n │ result.ts 311L 0C 23m CC=7 ←0\n │ intent.ts 309L 4C 37m CC=12 ←0\n │ runtime-cycle.ts 306L 1C 35m CC=9 ←0\n │ summarizer.ts 304L 5C 24m CC=10 ←0\n │ watcher.ts 292L 6C 42m CC=12 ←0\n │ reranker-llm.ts 291L 2C 35m CC=9 ←0\n │ intake-service.ts 291L 2C 48m CC=13 ←0\n │ linker.ts 286L 1C 52m CC=8 ←2\n │ implementation-review.ts 274L 3C 33m CC=7 ←0\n │ docs-llm.ts 269L 1C 28m CC=12 ←0\n │ implementation-helpers-plans.ts 269L 3C 36m CC=9 ←0\n │ typescript.ts 266L 1C 26m CC=8 ←0\n │ nl-llm-helpers.ts 261L 3C 31m CC=11 ←0\n │ mcp.ts 261L 2C 38m CC=9 ←0\n │ utils.ts 259L 0C 47m CC=8 ←0\n │ text-render.ts 251L 2C 33m CC=13 ←0\n │ candidate.ts 250L 1C 19m CC=8 ←0\n │ code-change.ts 250L 19C 0m CC=0.0 ←0\n │ tasks-llm.ts 243L 4C 20m CC=11 ←0\n │ openrouter-request.ts 242L 4C 30m CC=9 ←0\n │ openrouter.ts 240L 5C 31m CC=13 ←0\n │ run-persistence.ts 236L 0C 16m CC=8 ←0\n │ diff.ts 235L 1C 38m CC=11 ←0\n │ implementation-source-patch-create.ts 235L 3C 30m CC=6 ←0\n │ implementation-source-patch-apply-diff.ts 233L 3C 31m CC=11 ←0\n │ code-change-path.ts 232L 0C 23m CC=11 ←0\n │ env.ts 231L 1C 20m CC=13 ←0\n │ reality.ts 223L 2C 37m CC=9 ←0\n │ structured-schema.ts 218L 5C 25m CC=10 ←0\n │ model-comparison.ts 218L 4C 21m CC=12 ←0\n │ identity.ts 216L 3C 33m CC=12 ←0\n │ intent.ts 212L 13C 0m CC=0.0 ←0\n │ io.ts 211L 2C 30m CC=11 ←0\n │ conclusions.ts 210L 0C 21m CC=9 ←0\n │ configuration.ts 208L 1C 38m CC=10 ←0\n │ git.ts 208L 4C 27m CC=6 ←0\n │ implementation.ts 208L 4C 21m CC=12 ←0\n │ ignore.ts 200L 3C 23m CC=10 ←0\n │ docs-record.ts 193L 0C 34m CC=14 ←0\n │ run-execution.ts 189L 0C 26m CC=12 ←0\n │ a2a-card.ts 181L 0C 7m CC=3 ←0\n │ markdown-llm.ts 178L 2C 11m CC=9 ←0\n │ operation-step-validation.ts 178L 0C 18m CC=11 ←0\n │ run-helpers.ts 177L 0C 17m CC=11 ←0\n │ pipeline.ts 173L 7C 0m CC=0.0 ←0\n │ task-synthesis-materialize.ts 172L 0C 35m CC=5 ←0\n │ typescript.ts 172L 6C 16m CC=2 ←0\n │ a2a-run-list-item.ts 171L 2C 29m CC=8 ←0\n │ ast.ts 167L 2C 15m CC=12 ←0\n │ id.ts 167L 0C 16m CC=5 ←0\n │ run-failed.ts 167L 0C 15m CC=9 ←0\n │ a2a-types.ts 164L 9C 14m CC=10 ←0\n │ nl-llm.ts 163L 2C 19m CC=10 ←0\n │ linker-candidates.ts 163L 1C 23m CC=10 ←0\n │ intake-store.ts 161L 3C 19m CC=11 ←0\n │ markdown-paths.ts 158L 2C 22m CC=12 ←0\n │ record.ts 158L 2C 10m CC=6 ←0\n │ intake-protobuf.ts 158L 0C 29m CC=13 ←0\n │ intake_cli 156L 0C 6m CC=10 ←0\n │ types.ts 155L 8C 0m CC=0.0 ←0\n │ text.ts 153L 0C 34m CC=6 ←0\n │ diff-ui.ts 152L 0C 7m CC=5 ←0\n │ text-myers.ts 152L 3C 27m CC=9 ←0\n │ docs-chunks.ts 147L 0C 29m CC=8 ←0\n │ symbol-resolution.ts 146L 3C 22m CC=10 ←0\n │ implementation-helpers-acceptance.ts 141L 2C 15m CC=4 ←0\n │ a2a-message-command.ts 141L 0C 29m CC=6 ←1\n │ content-cache.ts 139L 4C 12m CC=5 ←0\n │ classifier.ts 135L 4C 32m CC=6 ←0\n │ persist-optional-artifacts.ts 128L 0C 6m CC=7 ←0\n │ gold-extraction.ts 127L 0C 13m CC=5 ←0\n │ implementation-semantic.ts 125L 1C 13m CC=9 ←0\n │ a2a-message.ts 125L 0C 19m CC=12 ←0\n │ subactor.ts 122L 1C 9m CC=13 ←0\n │ validation.ts 113L 2C 28m CC=11 ←0\n │ validation.ts 111L 0C 11m CC=7 ←0\n │ nl.ts 107L 1C 12m CC=10 ←0\n │ types.ts 106L 11C 0m CC=0.0 ←0\n │ diff-ui-compare.ts 105L 0C 20m CC=7 ←0\n │ svg.ts 104L 2C 7m CC=2 ←0\n │ generation-validation.ts 101L 0C 13m CC=8 ←0\n │ changelog.ts 99L 0C 16m CC=11 ←0\n │ records.ts 97L 0C 10m CC=6 ←0\n │ a2a-history.ts 96L 1C 17m CC=13 ←0\n │ todo.ts 93L 0C 18m CC=5 ←0\n │ changelog-signal.ts 89L 0C 12m CC=8 ←0\n │ run-types.ts 89L 4C 0m CC=0.0 ←0\n │ mcp-resources.ts 88L 0C 13m CC=6 ←0\n │ contract.ts 84L 0C 7m CC=1 ←0\n │ linker-relations.ts 83L 3C 7m CC=7 ←0\n │ run-documentation.ts 80L 0C 4m CC=9 ←0\n │ governed-intake.proto 78L 0C 0m CC=0.0 ←0\n │ implementation-helpers-close.ts 75L 2C 10m CC=4 ←0\n │ implementation-source-patch-diff.ts 74L 0C 16m CC=6 ←0\n │ task-synthesis-payload.ts 70L 0C 8m CC=3 ←0\n │ docs-types.ts 68L 7C 0m CC=0.0 ←0\n │ markdown-block.ts 67L 1C 3m CC=10 ←0\n │ task-synthesis-contract.ts 66L 3C 6m CC=1 ←0\n │ reality-totals.ts 66L 0C 9m CC=5 ←0\n │ run.ts 66L 0C 6m CC=2 ←0\n │ artifact.ts 66L 2C 10m CC=6 ←0\n │ payload.ts 65L 0C 8m CC=12 ←0\n │ gold-cli.ts 65L 0C 11m CC=8 ←0\n │ communication.ts 63L 1C 7m CC=7 ←0\n │ capability-evidence.ts 62L 0C 14m CC=10 ←0\n │ implementation-targets.ts 61L 0C 9m CC=5 ←0\n │ generation-metadata.ts 61L 0C 8m CC=4 ←0\n │ render.ts 61L 0C 13m CC=10 ←0\n │ run-summary.ts 58L 1C 4m CC=5 ←0\n │ target.ts 57L 0C 12m CC=9 ←0\n │ security.ts 55L 0C 11m CC=7 ←0\n │ compile-cli.ts 55L 0C 9m CC=6 ←0\n │ index.ts 53L 0C 0m CC=0.0 ←0\n │ gold-metrics.ts 50L 1C 11m CC=4 ←0\n │ external.ts 48L 1C 5m CC=9 ←0\n │ diagnostics.ts 45L 2C 0m CC=0.0 ←0\n │ docs-schema.ts 43L 0C 5m CC=1 ←0\n │ reranker-response.ts 42L 1C 5m CC=1 ←0\n │ python.ts 39L 0C 6m CC=2 ←0\n │ gold-reranker-validation.ts 39L 0C 4m CC=9 ←0\n │ text-types.ts 39L 4C 0m CC=0.0 ←0\n │ implementation-helpers.ts 39L 0C 0m CC=0.0 ←0\n │ intake-actions.ts 38L 0C 10m CC=6 ←0\n │ participant-registry-v2.schema.json 36L 0C 0m CC=0.0 ←0\n │ markdown.ts 35L 1C 4m CC=4 ←0\n │ php.ts 34L 0C 6m CC=2 ←0\n │ constants.ts 31L 0C 14m CC=1 ←0\n │ unsupported.ts 30L 0C 4m CC=5 ←0\n │ implementation-helpers-shared.ts 29L 0C 2m CC=1 ←0\n │ task-synthesis-metadata.ts 28L 0C 2m CC=3 ←0\n │ !! record-metadata.ts 27L 0C 3m CC=17 ←0\n │ implementation-indexing.ts 25L 0C 4m CC=4 ←3\n │ failure.ts 25L 1C 3m CC=7 ←0\n │ grounding.ts 24L 0C 5m CC=5 ←0\n │ rust.ts 20L 0C 2m CC=1 ←0\n │ go.ts 20L 0C 2m CC=1 ←0\n │ java.ts 20L 0C 2m CC=1 ←0\n │ types.ts 20L 2C 0m CC=0.0 ←0\n │ event-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ envelope-v1.schema.json 20L 0C 0m CC=0.0 ←0\n │ diff-ui-script.ts 19L 0C 7m CC=12 ←0\n │ audit.ts 19L 0C 1m CC=1 ←0\n │ implementation-diagnostics.ts 17L 0C 2m CC=2 ←0\n │ command-v1.schema.json 17L 0C 0m CC=0.0 ←0\n │ query-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ diagnostic-v1.schema.json 11L 0C 0m CC=0.0 ←0\n │ mcp-errors.ts 10L 1C 2m CC=3 ←0\n │ git-binary.ts 10L 0C 2m CC=1 ←0\n │ implementation-source-patch.ts 9L 0C 0m CC=0.0 ←0\n │ result-v1.schema.json 9L 0C 0m CC=0.0 ←0\n │ index.ts 8L 0C 0m CC=0.0 ←0\n │ implementation-source-patch-apply.ts 8L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ index.ts 4L 0C 0m CC=0.0 ←0\n │ command-input.ts 3L 0C 1m CC=1 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ version.ts 2L 0C 0m CC=0.0 ←0\n │ index.ts 1L 0C 0m CC=0.0 ←0\n │ implementation.ts 1L 0C 0m CC=0.0 ←0\n │ llm.ts 1L 0C 0m CC=0.0 ←0\n │\n sdk/ CC̄=2.7 ←in:0 →out:0\n │ client 469L 7C 45m CC=7 ←0\n │ index.ts 420L 14C 45m CC=8 ←0\n │ Client.php 401L 1C 27m CC=11 ←0\n │ client.rs 243L 1C 24m CC=14 ←0\n │ runtime 225L 3C 10m CC=9 ←0\n │ types.go 215L 19C 2m CC=4 ←0\n │ client.go 197L 3C 10m CC=9 ←0\n │ todo2code_sdk 171L 1C 11m CC=2 ←0\n │ !! main.go 163L 0C 5m CC=26 ←0\n │ types.rs 140L 11C 1m CC=2 ←0\n │ actions.go 136L 0C 18m CC=3 ←0\n │ basic.php 112L 0C 0m CC=0.0 ←0\n │ !! basic.rs 108L 0C 3m CC=20 ←0\n │ actions.rs 100L 1C 20m CC=4 ←0\n │ basic 95L 0C 1m CC=11 ←0\n │ !! basic.ts 84L 0C 19m CC=17 ←0\n │ lib.rs 49L 0C 0m CC=0.0 ←0\n │ error.rs 37L 2C 2m CC=2 ←0\n │ local_runtime 36L 0C 1m CC=1 ←0\n │ __init__ 33L 0C 0m CC=0.0 ←0\n │ package.json 32L 0C 0m CC=0.0 ←0\n │ todo2code.go 30L 0C 0m CC=0.0 ←0\n │ Error.php 25L 1C 2m CC=1 ←0\n │ tsconfig.json 20L 0C 0m CC=0.0 ←0\n │ composer.json 18L 0C 0m CC=0.0 ←0\n │ Cargo.toml 17L 0C 0m CC=0.0 ←0\n │ pyproject.toml 17L 0C 0m CC=0.0 ←0\n │ __init__ 13L 0C 0m CC=0.0 ←0\n │ __init__ 1L 0C 0m CC=0.0 ←0\n │\n java/ CC̄=2.6 ←in:2 →out:0\n │ JavaAstExtract.java 285L 1C 14m CC=10 ←1\n │\n examples/ CC̄=2.3 ←in:0 →out:0\n │ request-handlers.ts 88L 0C 18m CC=9 ←0\n │ render.ts 64L 1C 12m CC=4 ←0\n │ api.ts 50L 3C 6m CC=6 ←1\n │ store.ts 48L 3C 4m CC=1 ←0\n │ server.ts 43L 1C 8m CC=4 ←0\n │ app.ts 43L 1C 7m CC=4 ←0\n │ participants.json 37L 0C 0m CC=0.0 ←0\n │ validation.ts 31L 1C 7m CC=10 ←0\n │ python 23L 0C 0m CC=0.0 ←0\n │ typescript.mjs 16L 0C 1m CC=1 ←0\n │ tsconfig.json 15L 0C 0m CC=0.0 ←0\n │ tsconfig.json 14L 0C 0m CC=0.0 ←0\n │ runtime.ts 13L 1C 2m CC=2 ←0\n │ helper 9L 0C 2m CC=1 ←0\n │\n rust-ast/ CC̄=1.9 ←in:0 →out:0\n │ main.rs 322L 3C 23m CC=9 ←0\n │ Cargo.toml 12L 0C 0m CC=0.0 ←0\n │\n ./ CC̄=0.0 ←in:0 →out:0\n │ !! goal.yaml 530L 0C 0m CC=0.0 ←0\n │ Makefile 132L 0C 0m CC=0.0 ←0\n │ project.sh 124L 0C 3m CC=0.0 ←0\n │ project2.sh 79L 0C 0m CC=0.0 ←0\n │ package.json 52L 0C 0m CC=0.0 ←0\n │ Dockerfile 45L 0C 0m CC=0.0 ←0\n │ compose.e2e.yml 27L 0C 0m CC=0.0 ←0\n │ tsconfig.json 23L 0C 0m CC=0.0 ←0\n │ docker-compose.yml 18L 0C 0m CC=0.0 ←0\n │ nlp2uri.yaml 8L 0C 0m CC=0.0 ←0\n │\n schemas/ CC̄=0.0 ←in:0 →out:0\n │ !! gold-dataset.schema.json 585L 0C 0m CC=0.0 ←0\n │ document-extraction-response.schema.json 186L 0C 0m CC=0.0 ←0\n │ intent-record.schema.json 132L 0C 0m CC=0.0 ←0\n │ semantic-rerank.schema.json 113L 0C 0m CC=0.0 ←0\n │ code-change-plan.schema.json 98L 0C 0m CC=0.0 ←0\n │ operation-plan.schema.json 94L 0C 0m CC=0.0 ←0\n │ intent-graph-diff.schema.json 80L 0C 0m CC=0.0 ←0\n │ code-change-source-patch.schema.json 63L 0C 0m CC=0.0 ←0\n │ todo-proposal.schema.json 61L 0C 0m CC=0.0 ←0\n │ todo-patch.schema.json 59L 0C 0m CC=0.0 ←0\n │ semantic-candidate-set.schema.json 54L 0C 0m CC=0.0 ←0\n │ code-change-acceptance.schema.json 53L 0C 0m CC=0.0 ←0\n │ conclusion.schema.json 51L 0C 0m CC=0.0 ←0\n │ intent-graph.schema.json 40L 0C 0m CC=0.0 ←0\n │ participant-synthesis.schema.json 39L 0C 0m CC=0.0 ←0\n │ variable-contract.schema.json 38L 0C 0m CC=0.0 ←0\n │ code-change-source-apply-receipt.schema.json 31L 0C 0m CC=0.0 ←0\n │ code-change-review.schema.json 27L 0C 0m CC=0.0 ←0\n │ participant-registry.schema.json 27L 0C 0m CC=0.0 ←0\n │ code-change-close-result.schema.json 26L 0C 0m CC=0.0 ←0\n │ code-change-plan-set.schema.json 22L 0C 0m CC=0.0 ←0\n │ code-change-source-patch-set.schema.json 18L 0C 0m CC=0.0 ←0\n │\n adapters/ CC̄=0.0 ←in:0 →out:0\n │ package.json 14L 0C 0m CC=0.0 ←0\n │\n evaluation/ CC̄=0.0 ←in:0 →out:0\n │ !! dataset.json 2410L 0C 0m CC=0.0 ←0\n │ !! dataset.json 761L 0C 0m CC=0.0 ←0\n │\n python/ CC̄=0.0 ←in:0 →out:0\n │ requirements.txt 1L 0C 0m CC=0.0 ←0\n │\n\nCOUPLING:\n scripts.research sdk.python src.live src.synthesis java src.graph examples.frontend\n scripts.research ── 7 1 1 !! fan-out\n sdk.python ── 4 2 1 1 !! fan-out\n src.live ←7 ── hub\n src.synthesis ←1 ←4 ── hub\n java ←2 ── \n src.graph ←1 ←1 ── \n examples.frontend ←1 ──\n CYCLES: none\n HUB: src.synthesis/ (fan-in=5)\n HUB: src.live/ (fan-in=7)\n SMELL: sdk.python/ fan-out=8 → split needed\n SMELL: scripts.research/ fan-out=9 → split needed\n\nEXTERNAL:\n validation: run `vallm batch .` → validation.toon\n duplication: run `redup scan .` → duplication.toon\n", "is_subdir": false}, {"name": "calls.toon.yaml", "rel_path": "calls.toon.yaml", "path": "calls.toon.yaml", "size": "15.5KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm call graph | /home/tom/github/semcod/todo2code\n# generated in 0.25s\n# nodes: 442 | edges: 500 | modules: 35\n# CC̄=3.0\n\nHUBS[20]:\n src.extractors.todo.extractTodo\n CC=5 in:0 out:24 total:24\n src.extractors.git.extractRepositoryGitIntent\n CC=11 in:3 out:21 total:24\n src.graph.linker.linkIntentRecords\n CC=5 in:0 out:22 total:22\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n CC=10 in:0 out:22 total:22\n rust-ast.src.main.collect_files\n CC=9 in:1 out:20 total:21\n rust-ast.src.main.main\n CC=6 in:0 out:21 total:21\n src.extractors.nl.extractNlIntent\n CC=5 in:0 out:20 total:20\n src.extractors.todo.body\n CC=5 in:0 out:20 total:20\n src.extractors.todo.lines\n CC=5 in:0 out:20 total:20\n src.extractors.todo.relative\n CC=5 in:0 out:20 total:20\n rust-ast.src.main.add\n CC=1 in:9 out:10 total:19\n src.extractors.changelog.extractChangelog\n CC=10 in:0 out:19 total:19\n src.graph.diff.diffIntentGraphs\n CC=11 in:0 out:19 total:19\n src.graph.linker.scorePair\n CC=1 in:6 out:11 total:17\n src.extractors.configuration.configurationRecords\n CC=4 in:4 out:12 total:16\n java.JavaAstExtract.JavaAstExtract.main\n CC=10 in:0 out:16 total:16\n src.extractors.changelog.relative\n CC=7 in:0 out:15 total:15\n src.graph.diagnostics.diagnoseGraph\n CC=6 in:0 out:15 total:15\n src.extractors.changelog.lines\n CC=7 in:0 out:15 total:15\n src.extractors.changelog.body\n CC=7 in:0 out:15 total:15\n\nMODULES:\n examples.backend.src.request-handlers [12 funcs]\n MAX_BODY_BYTES CC=9 out:5\n event CC=1 out:1\n handleEventList CC=1 out:5\n handleEventPublish CC=4 out:6\n handleHealth CC=1 out:2\n handleRequest CC=9 out:5\n parseLimit CC=2 out:2\n parseOffset CC=2 out:2\n readBody CC=3 out:5\n sendJson CC=1 out:4\n examples.backend.src.server [5 funcs]\n createBackend CC=4 out:5\n sendJson CC=1 out:4\n server CC=3 out:4\n startBackend CC=3 out:3\n store CC=3 out:4\n examples.backend.src.validation [7 funcs]\n ALLOWED_ACTIONS CC=10 out:5\n action CC=2 out:3\n agent CC=2 out:3\n invalid CC=1 out:0\n object CC=2 out:3\n record CC=2 out:3\n validateEventPayload CC=10 out:5\n examples.frontend.src.app [5 funcs]\n createState CC=1 out:0\n mountPanel CC=1 out:4\n refresh CC=4 out:6\n reload CC=1 out:1\n state CC=1 out:1\n examples.frontend.src.render [4 funcs]\n classifyEvent CC=4 out:0\n headerRow CC=2 out:2\n renderTable CC=3 out:4\n toRows CC=1 out:2\n examples.src.runtime [2 funcs]\n executeContract CC=1 out:1\n validateContract CC=2 out:1\n java.JavaAstExtract [11 funcs]\n add CC=1 out:0\n collect CC=1 out:11\n collectFileDiagnostics CC=4 out:5\n containsIgnored CC=3 out:2\n emit CC=1 out:3\n escape CC=9 out:6\n json CC=1 out:1\n main CC=10 out:16\n map CC=1 out:0\n scanCompilationUnits CC=1 out:0\n rust-ast.src.main [21 funcs]\n add CC=1 out:10\n arguments CC=5 out:9\n collect_files CC=9 out:20\n excerpt CC=1 out:7\n main CC=6 out:21\n modifiers CC=3 out:4\n qualified CC=2 out:3\n slash CC=1 out:2\n type_item CC=1 out:8\n visit_expr_call CC=1 out:9\n src.extractors.ast [2 funcs]\n isExtractionResult CC=5 out:3\n isIntentRecords CC=2 out:1\n src.extractors.ast.external [3 funcs]\n execFileAsync CC=3 out:0\n result CC=2 out:1\n runExternalAstAdapter CC=9 out:6\n src.extractors.ast.records [7 funcs]\n adapterRecords CC=2 out:3\n boundedCapabilities CC=1 out:6\n capabilities CC=1 out:2\n end CC=1 out:2\n moduleRecords CC=6 out:14\n moduleTopicText CC=2 out:1\n start CC=1 out:2\n src.extractors.ast.typescript [20 funcs]\n addTypeScriptRecord CC=5 out:0\n callee CC=2 out:2\n context CC=1 out:4\n createTypeScriptExtractionContext CC=1 out:0\n declarationIsCallable CC=2 out:1\n extractModifiers CC=4 out:4\n extractSymbolName CC=2 out:0\n extractTypeScriptFile CC=1 out:7\n handleCallExpression CC=3 out:5\n handleExportDeclaration CC=4 out:3\n src.extractors.changelog [5 funcs]\n body CC=7 out:15\n changelogAction CC=11 out:3\n extractChangelog CC=10 out:19\n lines CC=7 out:15\n relative CC=7 out:15\n src.extractors.communication-file-helpers [10 funcs]\n appendA2aAgentWarnings CC=5 out:4\n appendIdentityWarnings CC=4 out:2\n appendRegistryAlignmentWarnings CC=7 out:2\n appendRoleAndParticipantWarnings CC=3 out:2\n appendTimestampWarnings CC=3 out:2\n buildLocalWarnings CC=3 out:5\n envelope CC=2 out:1\n hasExplicitEnvelopeMetadata CC=1 out:2\n inferred CC=2 out:1\n shouldSkipCommunicationFile CC=8 out:3\n src.extractors.communication-helpers [23 funcs]\n basename CC=1 out:0\n communicationSegments CC=14 out:12\n fileParts CC=5 out:2\n flush CC=5 out:5\n heading CC=2 out:1\n inferGovernanceIdentityFromFilename CC=7 out:3\n inferIdentity CC=2 out:5\n inferIdentityFromPathAndFilename CC=9 out:5\n isCommunicationNoise CC=3 out:2\n isCommunicationType CC=1 out:2\n src.extractors.configuration [23 funcs]\n MAX_ENTRIES_PER_FILE CC=4 out:10\n bounded CC=1 out:3\n configurationFormat CC=6 out:4\n configurationRecords CC=4 out:12\n dockerEntries CC=6 out:6\n entries CC=1 out:3\n entry CC=1 out:1\n extractConfigurationIntent CC=4 out:10\n fileAggregate CC=3 out:10\n files CC=4 out:5\n src.extractors.docs-chunks [15 funcs]\n chunkMarkdown CC=8 out:9\n chunkPriority CC=3 out:4\n flush CC=2 out:2\n index CC=1 out:3\n item CC=1 out:3\n mapConcurrent CC=3 out:7\n markdownSections CC=4 out:2\n needles CC=1 out:2\n prioritizeDocumentChunks CC=3 out:6\n sectionLines CC=2 out:3\n src.extractors.docs-deterministic [19 funcs]\n action CC=3 out:6\n codeBlockRecord CC=2 out:2\n convertDocument CC=4 out:4\n extractDocumentationBaseline CC=4 out:8\n handleDocumentationLine CC=5 out:4\n heading CC=1 out:1\n marker CC=4 out:2\n match CC=2 out:0\n parseBulletStatement CC=6 out:3\n parseFenceBlock CC=7 out:5\n src.extractors.docs-llm [8 funcs]\n errorMessage CC=2 out:1\n extractChunk CC=12 out:8\n extractDocumentationIntent CC=3 out:12\n files CC=3 out:7\n loadDocumentChunks CC=4 out:8\n readPrompt CC=2 out:6\n requireConfiguredClient CC=3 out:4\n selectWithinBudget CC=2 out:3\n src.extractors.docs-record [20 funcs]\n OBJECT_PLACEHOLDERS CC=14 out:13\n action CC=11 out:7\n allowedAction CC=1 out:1\n allowedLifecycle CC=1 out:1\n allowedModality CC=1 out:1\n anchorToSource CC=7 out:10\n clampLine CC=1 out:3\n fallback CC=2 out:1\n hasTarget CC=4 out:1\n isPlaceholder CC=3 out:3\n src.extractors.docs-schema [5 funcs]\n documentRecord CC=1 out:8\n documentResponseContract CC=1 out:2\n documentResponseSchema CC=1 out:1\n strings CC=1 out:2\n target CC=1 out:2\n src.extractors.git [25 funcs]\n count CC=2 out:2\n createDiscoveryState CC=1 out:0\n discoverGitRepositories CC=4 out:7\n execFileAsync CC=1 out:0\n extractChangedSymbols CC=9 out:3\n extractGitIntent CC=6 out:7\n extractRepositoryGitIntent CC=11 out:21\n filterDiscoveryChildren CC=5 out:6\n finishDiscovery CC=4 out:1\n gitMarkerState CC=5 out:5\n src.extractors.markdown-llm [3 funcs]\n client CC=2 out:2\n extractMarkdownIntentAudited CC=9 out:14\n fallbackOrThrow CC=2 out:5\n src.extractors.markdown-llm-helpers [9 funcs]\n emptyCoverage CC=2 out:1\n enrichBatchCovering CC=6 out:11\n enrichMarkdownBatchWithCorrection CC=1 out:0\n enrichMarkdownRecords CC=13 out:9\n enrichSplitBatch CC=2 out:7\n enrichment CC=1 out:6\n markdownResponseContract CC=1 out:7\n outcomes CC=4 out:2\n strings CC=1 out:5\n src.extractors.markdown-paths [14 funcs]\n addBasenameIndexMatch CC=3 out:4\n basenames CC=11 out:10\n buildBasenameIndex CC=7 out:7\n createBasenameIndexState CC=1 out:1\n createMarkdownPathResolver CC=12 out:12\n headingDirectories CC=11 out:9\n headingScopes CC=4 out:6\n index CC=6 out:4\n isNestedCheckout CC=2 out:1\n isRepositoryPath CC=5 out:3\n src.extractors.nl [12 funcs]\n absolute CC=2 out:14\n action CC=1 out:9\n assertNlExtractionOptions CC=9 out:2\n body CC=2 out:14\n classified CC=1 out:9\n confidence CC=1 out:9\n detectMissingFields CC=10 out:5\n extractNlIntent CC=5 out:20\n inferActor CC=5 out:2\n missing CC=1 out:9\n src.extractors.nl-llm [4 funcs]\n assertNlExtractionOptions CC=2 out:4\n client CC=2 out:2\n extractNlIntentAudited CC=10 out:22\n fallbackOrThrow CC=1 out:0\n src.extractors.nl-llm-helpers [18 funcs]\n NL_ACTION_SET CC=1 out:7\n NL_MODALITY_SET CC=1 out:7\n NL_RECORD_CONTRACT CC=1 out:7\n action CC=1 out:1\n allowedAction CC=1 out:1\n allowedModality CC=1 out:1\n clampLine CC=1 out:3\n isPlaceholder CC=2 out:3\n lines CC=1 out:1\n nlStrings CC=1 out:6\n src.extractors.runtime-cycle [17 funcs]\n MAX_PER_SECTION CC=8 out:12\n boundedArray CC=8 out:4\n driftRecord CC=5 out:5\n extractRuntimeCycleIntent CC=8 out:12\n factsMetadata CC=5 out:3\n jsonScalar CC=6 out:1\n label CC=2 out:1\n parseCycle CC=7 out:5\n probeRecord CC=9 out:8\n proposalAction CC=5 out:0\n src.extractors.todo [16 funcs]\n action CC=2 out:12\n block CC=2 out:12\n body CC=5 out:20\n checked CC=2 out:12\n classified CC=2 out:12\n extractExplicitId CC=5 out:3\n extractTodo CC=5 out:24\n heading CC=1 out:1\n inferOwner CC=4 out:1\n lines CC=5 out:20\n src.graph.diagnostics [24 funcs]\n buildAmbiguousRequirementDiagnostic CC=4 out:3\n buildChangelogWithoutImplementationDiagnostic CC=5 out:2\n buildDiagnosticContext CC=1 out:7\n buildImplementedWithoutPlanDiagnostic CC=4 out:3\n buildNeighbors CC=2 out:1\n buildPlannedNotImplementedDiagnostic CC=7 out:3\n buildUndocumentedImplementationDiagnostic CC=4 out:3\n collectContradictionDiagnostics CC=1 out:3\n collectMissingFields CC=2 out:2\n collectRecordDiagnostics CC=8 out:12\n src.graph.diff [26 funcs]\n afterGroups CC=7 out:6\n afterRecord CC=1 out:3\n assertGraph CC=3 out:3\n beforeGroups CC=7 out:6\n beforeRecord CC=1 out:3\n changedFieldPaths CC=6 out:6\n compareRelations CC=1 out:2\n diffIntentGraphs CC=11 out:19\n escapeXml CC=2 out:1\n groupRecords CC=4 out:6\n src.graph.linker [28 funcs]\n aliases CC=3 out:3\n byId CC=4 out:2\n candidatePairs CC=5 out:7\n deduplicateRecords CC=4 out:3\n expand CC=8 out:5\n indexResolvableBasenames CC=8 out:13\n intersectionSize CC=4 out:1\n intersects CC=1 out:3\n intersectsAliases CC=1 out:5\n isFileAggregateEvidencePair CC=3 out:1\n src.graph.linker-relations [4 funcs]\n determineRelation CC=7 out:1\n matchSourceRule CC=5 out:2\n orientRelation CC=2 out:0\n relationForSourceKinds CC=3 out:1\n src.graph.symbol-resolution [15 funcs]\n buildAstCandidate CC=2 out:1\n buildSymbolResolutionIndex CC=1 out:3\n byAlias CC=8 out:8\n byNlRecord CC=4 out:3\n collectAstCandidates CC=8 out:8\n collectNlResolutions CC=4 out:3\n hasResolvedNlAstSymbolPair CC=10 out:3\n isAstDeclaration CC=3 out:0\n pathSelects CC=3 out:5\n resolveSymbol CC=8 out:6\n\nEDGES:\n rust-ast.src.main.main → rust-ast.src.main.arguments\n rust-ast.src.main.main → rust-ast.src.main.collect_files\n rust-ast.src.main.main → rust-ast.src.main.slash\n rust-ast.src.main.collect_files → rust-ast.src.main.slash\n rust-ast.src.main.add → rust-ast.src.main.excerpt\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_mod → rust-ast.src.main.add\n rust-ast.src.main.visit_item_use → rust-ast.src.main.add\n rust-ast.src.main.visit_item_struct → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_enum → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_trait → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_type → rust-ast.src.main.type_item\n rust-ast.src.main.visit_item_const → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_const → rust-ast.src.main.add\n rust-ast.src.main.visit_item_const → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_static → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_static → rust-ast.src.main.add\n rust-ast.src.main.visit_item_static → rust-ast.src.main.modifiers\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.qualified\n rust-ast.src.main.visit_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_impl_item_fn → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_call → rust-ast.src.main.add\n rust-ast.src.main.visit_expr_method_call → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.qualified\n rust-ast.src.main.type_item → rust-ast.src.main.add\n rust-ast.src.main.type_item → rust-ast.src.main.modifiers\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleHealth\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleEventPublish\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.handleEventList\n examples.backend.src.request-handlers.MAX_BODY_BYTES → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleHealth\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleEventPublish\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.handleEventList\n examples.backend.src.request-handlers.handleRequest → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleHealth → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleHealth → examples.backend.src.request-handlers.size\n examples.backend.src.request-handlers.handleEventPublish → examples.backend.src.request-handlers.readBody\n examples.backend.src.request-handlers.handleEventPublish → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.validation → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.event → examples.backend.src.request-handlers.sendJson\n examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.parseOffset\n examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.parseLimit\n examples.backend.src.request-handlers.handleEventList → examples.backend.src.request-handlers.sendJson\n examples.backend.src.validation.ALLOWED_ACTIONS → examples.backend.src.validation.invalid\n examples.backend.src.validation.validateEventPayload → examples.backend.src.validation.invalid\n examples.backend.src.validation.record → examples.backend.src.validation.invalid\n examples.backend.src.validation.agent → examples.backend.src.validation.invalid\n examples.backend.src.validation.action → examples.backend.src.validation.invalid\n examples.backend.src.validation.object → examples.backend.src.validation.invalid\n examples.backend.src.server.createBackend → examples.backend.src.server.sendJson\n", "is_subdir": false}, {"name": "calls.yaml", "rel_path": "calls.yaml", "path": "calls.yaml", "size": "281.3KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "project: /home/tom/github/semcod/todo2code\ngenerated_from: code2llm call graph analysis\nstats:\n total_nodes: 442\n total_edges: 500\n modules_count: 35\nnodes:\n src.extractors.docs-record.fallback:\n name: fallback\n module: src.extractors.docs-record\n line: 81\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.backend.src.request-handlers.handleRequest:\n name: handleRequest\n module: examples.backend.src.request-handlers\n line: 7\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 0\n src.extractors.markdown-paths.buildBasenameIndex:\n name: buildBasenameIndex\n module: src.extractors.markdown-paths\n line: 90\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n src.extractors.docs-chunks.index:\n name: index\n module: src.extractors.docs-chunks\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.extractors.ast.typescript.context:\n name: context\n module: src.extractors.ast.typescript\n line: 12\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.nl.body:\n name: body\n module: src.extractors.nl\n line: 41\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.ast.external.result:\n name: result\n module: src.extractors.ast.external\n line: 32\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.docs-chunks.mapConcurrent:\n name: mapConcurrent\n module: src.extractors.docs-chunks\n line: 33\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.graph.linker.aliases:\n name: aliases\n module: src.graph.linker\n line: 122\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_static:\n name: visit_item_static\n module: rust-ast.src.main\n line: 250\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.graph.linker-relations.matchSourceRule:\n name: matchSourceRule\n module: src.graph.linker-relations\n line: 61\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 1\n src.graph.linker.expand:\n name: expand\n module: src.graph.linker\n line: 119\n cyclomatic_complexity: 8\n calls_out: 5\n calls_in: 1\n src.graph.diagnostics.buildImplementedWithoutPlanDiagnostic:\n name: buildImplementedWithoutPlanDiagnostic\n module: src.graph.diagnostics\n line: 154\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.ast.typescript.handleCallExpression:\n name: handleCallExpression\n module: src.extractors.ast.typescript\n line: 127\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.extractors.ast.typescript.createTypeScriptExtractionContext:\n name: createTypeScriptExtractionContext\n module: src.extractors.ast.typescript\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.todo.raw:\n name: raw\n module: src.extractors.todo\n line: 35\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.ast.typescript.callee:\n name: callee\n module: src.extractors.ast.typescript\n line: 129\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.graph.linker.scoreSharedTickets:\n name: scoreSharedTickets\n module: src.graph.linker\n line: 163\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.todo.resolvedPaths:\n name: resolvedPaths\n module: src.extractors.todo\n line: 51\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.bounded:\n name: bounded\n module: src.extractors.configuration\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n rust-ast.src.main.visit_item_type:\n name: visit_item_type\n module: rust-ast.src.main\n line: 238\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.todo.classified:\n name: classified\n module: src.extractors.todo\n line: 49\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.graph.diagnostics.collectMissingFields:\n name: collectMissingFields\n module: src.graph.diagnostics\n line: 108\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.normalize:\n name: normalize\n module: src.extractors.communication-helpers\n line: 282\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.markdown-paths.createMarkdownPathResolver:\n name: createMarkdownPathResolver\n module: src.extractors.markdown-paths\n line: 39\n cyclomatic_complexity: 12\n calls_out: 12\n calls_in: 0\n src.extractors.markdown-paths.addBasenameIndexMatch:\n name: addBasenameIndexMatch\n module: src.extractors.markdown-paths\n line: 148\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.uniqueEntries:\n name: uniqueEntries\n module: src.extractors.configuration\n line: 195\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.todo.extractTodo:\n name: extractTodo\n module: src.extractors.todo\n line: 19\n cyclomatic_complexity: 5\n calls_out: 24\n calls_in: 0\n src.graph.linker.intersectsAliases:\n name: intersectsAliases\n module: src.graph.linker\n line: 274\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.graph.diff.escapeXml:\n name: escapeXml\n module: src.graph.diff\n line: 227\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 6\n java.JavaAstExtract.JavaAstExtract.map:\n name: map\n module: java.JavaAstExtract\n line: 207\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 3\n src.extractors.runtime-cycle.MAX_PER_SECTION:\n name: MAX_PER_SECTION\n module: src.extractors.runtime-cycle\n line: 15\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.extractors.nl.extractNlIntent:\n name: extractNlIntent\n module: src.extractors.nl\n line: 38\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.graph.diff.beforeRecord:\n name: beforeRecord\n module: src.graph.diff\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n examples.backend.src.server.createBackend:\n name: createBackend\n module: examples.backend.src.server\n line: 16\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 1\n src.extractors.nl.missing:\n name: missing\n module: src.extractors.nl\n line: 52\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.NL_ACTION_SET:\n name: NL_ACTION_SET\n module: src.extractors.nl-llm-helpers\n line: 234\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.graph.linker.keywordIndex:\n name: keywordIndex\n module: src.graph.linker\n line: 36\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.ast.typescript.extractSymbolName:\n name: extractSymbolName\n module: src.extractors.ast.typescript\n line: 161\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 1\n examples.backend.src.validation.validateEventPayload:\n name: validateEventPayload\n module: examples.backend.src.validation\n line: 13\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.docs-record\n line: 75\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.graph.diff.truncate:\n name: truncate\n module: src.graph.diff\n line: 233\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 5\n src.extractors.docs-deterministic.match:\n name: match\n module: src.extractors.docs-deterministic\n line: 160\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 4\n src.extractors.communication-helpers.item:\n name: item\n module: src.extractors.communication-helpers\n line: 197\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.docs-chunks.prioritizeDocumentChunks:\n name: prioritizeDocumentChunks\n module: src.extractors.docs-chunks\n line: 3\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n examples.backend.src.request-handlers.parseOffset:\n name: parseOffset\n module: examples.backend.src.request-handlers\n line: 59\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.runtime-cycle.probeRecord:\n name: probeRecord\n module: src.extractors.runtime-cycle\n line: 134\n cyclomatic_complexity: 9\n calls_out: 8\n calls_in: 3\n src.extractors.docs-record.action:\n name: action\n module: src.extractors.docs-record\n line: 36\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n examples.backend.src.request-handlers.handleEventPublish:\n name: handleEventPublish\n module: examples.backend.src.request-handlers\n line: 29\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 2\n src.extractors.changelog.relative:\n name: relative\n module: src.extractors.changelog\n line: 28\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.graph.diff.height:\n name: height\n module: src.graph.diff\n line: 120\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.ast.typescript.scriptKind:\n name: scriptKind\n module: src.extractors.ast.typescript\n line: 255\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.docs-deterministic.action:\n name: action\n module: src.extractors.docs-deterministic\n line: 296\n cyclomatic_complexity: 3\n calls_out: 6\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.client:\n name: client\n module: src.extractors.nl-llm\n line: 61\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.git.state:\n name: state\n module: src.extractors.git\n line: 172\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.graph.diff.groups:\n name: groups\n module: src.graph.diff\n line: 164\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.graph.symbol-resolution.resolveSymbol:\n name: resolveSymbol\n module: src.graph.symbol-resolution\n line: 101\n cyclomatic_complexity: 8\n calls_out: 6\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.NL_RECORD_CONTRACT:\n name: NL_RECORD_CONTRACT\n module: src.extractors.nl-llm-helpers\n line: 242\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.communication-helpers.sameStrings:\n name: sameStrings\n module: src.extractors.communication-helpers\n line: 281\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n src.extractors.git.mapWithConcurrency:\n name: mapWithConcurrency\n module: src.extractors.git\n line: 306\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.graph.symbol-resolution.selected:\n name: selected\n module: src.graph.symbol-resolution\n line: 119\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.graph.diagnostics.diagnoseGraph:\n name: diagnoseGraph\n module: src.graph.diagnostics\n line: 16\n cyclomatic_complexity: 6\n calls_out: 15\n calls_in: 0\n src.extractors.markdown-paths.headingScopes:\n name: headingScopes\n module: src.extractors.markdown-paths\n line: 83\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n rust-ast.src.main.arguments:\n name: arguments\n module: rust-ast.src.main\n line: 82\n cyclomatic_complexity: 5\n calls_out: 9\n calls_in: 1\n src.extractors.docs-deterministic.extractDocumentationBaseline:\n name: extractDocumentationBaseline\n module: src.extractors.docs-deterministic\n line: 56\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 0\n src.extractors.git.filterDiscoveryChildren:\n name: filterDiscoveryChildren\n module: src.extractors.git\n line: 221\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 2\n src.extractors.communication-helpers.flush:\n name: flush\n module: src.extractors.communication-helpers\n line: 195\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.graph.diff.values:\n name: values\n module: src.graph.diff\n line: 167\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.todo.inferOwner:\n name: inferOwner\n module: src.extractors.todo\n line: 86\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 11\n src.graph.diff.beforeGroups:\n name: beforeGroups\n module: src.graph.diff\n line: 38\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 0\n src.extractors.todo.extractExplicitId:\n name: extractExplicitId\n module: src.extractors.todo\n line: 91\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 11\n src.extractors.git.extractGitIntent:\n name: extractGitIntent\n module: src.extractors.git\n line: 40\n cyclomatic_complexity: 6\n calls_out: 7\n calls_in: 0\n src.extractors.communication-file-helpers.appendRoleAndParticipantWarnings:\n name: appendRoleAndParticipantWarnings\n module: src.extractors.communication-file-helpers\n line: 273\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.runtime-cycle.factsMetadata:\n name: factsMetadata\n module: src.extractors.runtime-cycle\n line: 293\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n src.graph.linker.resolvableBasenames:\n name: resolvableBasenames\n module: src.graph.linker\n line: 39\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.configuration.fileAggregate:\n name: fileAggregate\n module: src.extractors.configuration\n line: 82\n cyclomatic_complexity: 3\n calls_out: 10\n calls_in: 3\n src.extractors.configuration.MAX_ENTRIES_PER_FILE:\n name: MAX_ENTRIES_PER_FILE\n module: src.extractors.configuration\n line: 8\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n src.extractors.docs-record.OBJECT_PLACEHOLDERS:\n name: OBJECT_PLACEHOLDERS\n module: src.extractors.docs-record\n line: 21\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n src.extractors.docs-record.hasTarget:\n name: hasTarget\n module: src.extractors.docs-record\n line: 152\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n rust-ast.src.main.visit_expr_call:\n name: visit_expr_call\n module: rust-ast.src.main\n line: 288\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.request-handlers.parseLimit:\n name: parseLimit\n module: examples.backend.src.request-handlers\n line: 64\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.docs-deterministic.statementRecord:\n name: statementRecord\n module: src.extractors.docs-deterministic\n line: 288\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.nl.object:\n name: object\n module: src.extractors.nl\n line: 51\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-chunks.splitLongSection:\n name: splitLongSection\n module: src.extractors.docs-chunks\n line: 107\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.ast.typescript.recordModuleFact:\n name: recordModuleFact\n module: src.extractors.ast.typescript\n line: 229\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.configuration.parsed:\n name: parsed\n module: src.extractors.configuration\n line: 132\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-chunks.chunkPriority:\n name: chunkPriority\n module: src.extractors.docs-chunks\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 2\n src.graph.diagnostics.collectRelatedRecords:\n name: collectRelatedRecords\n module: src.graph.diagnostics\n line: 102\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.isPlaceholder:\n name: isPlaceholder\n module: src.extractors.nl-llm-helpers\n line: 192\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.docs-schema.documentResponseSchema:\n name: documentResponseSchema\n module: src.extractors.docs-schema\n line: 41\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-record.resolveTarget:\n name: resolveTarget\n module: src.extractors.docs-record\n line: 128\n cyclomatic_complexity: 12\n calls_out: 7\n calls_in: 2\n examples.backend.src.validation.invalid:\n name: invalid\n module: examples.backend.src.validation\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.configuration.jsonEntries:\n name: jsonEntries\n module: src.extractors.configuration\n line: 131\n cyclomatic_complexity: 7\n calls_out: 7\n calls_in: 1\n examples.frontend.src.render.renderTable:\n name: renderTable\n module: examples.frontend.src.render\n line: 23\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.graph.linker.symbolResolutionIndex:\n name: symbolResolutionIndex\n module: src.graph.linker\n line: 37\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.git.finishDiscovery:\n name: finishDiscovery\n module: src.extractors.git\n line: 268\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.graph.linker.scoreSharedPath:\n name: scoreSharedPath\n module: src.graph.linker\n line: 182\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 1\n src.extractors.configuration.pair:\n name: pair\n module: src.extractors.configuration\n line: 156\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.declarationIsCallable:\n name: declarationIsCallable\n module: src.extractors.ast.typescript\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n examples.frontend.src.app.refresh:\n name: refresh\n module: examples.frontend.src.app\n line: 18\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 3\n src.graph.diagnostics.buildDiagnosticContext:\n name: buildDiagnosticContext\n module: src.graph.diagnostics\n line: 58\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.collect:\n name: collect\n module: java.JavaAstExtract\n line: 58\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 1\n src.extractors.communication-helpers.isCommunicationNoise:\n name: isCommunicationNoise\n module: src.extractors.communication-helpers\n line: 286\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 3\n src.graph.diff.metricCard:\n name: metricCard\n module: src.graph.diff\n line: 223\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.nl.confidence:\n name: confidence\n module: src.extractors.nl\n line: 53\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n examples.backend.src.validation.agent:\n name: agent\n module: examples.backend.src.validation\n line: 22\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.files:\n name: files\n module: src.extractors.docs-llm\n line: 110\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 0\n src.graph.linker-relations.orientRelation:\n name: orientRelation\n module: src.graph.linker-relations\n line: 75\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.line:\n name: line\n module: src.extractors.configuration\n line: 149\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.graph.diff.y:\n name: y\n module: src.graph.diff\n line: 121\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.runtime-cycle.label:\n name: label\n module: src.extractors.runtime-cycle\n line: 111\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.todo.body:\n name: body\n module: src.extractors.todo\n line: 28\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.nlStrings:\n name: nlStrings\n module: src.extractors.nl-llm-helpers\n line: 241\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 3\n src.extractors.git.gitMarkerState:\n name: gitMarkerState\n module: src.extractors.git\n line: 277\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 1\n src.extractors.nl-llm.NlLlmRequiredError.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl-llm\n line: 38\n cyclomatic_complexity: 2\n calls_out: 4\n calls_in: 1\n src.extractors.markdown-paths.scanDirectoryForBasenames:\n name: scanDirectoryForBasenames\n module: src.extractors.markdown-paths\n line: 125\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 3\n examples.backend.src.server.server:\n name: server\n module: examples.backend.src.server\n line: 18\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.graph.diff.renderGraphDiffSvg:\n name: renderGraphDiffSvg\n module: src.graph.diff\n line: 110\n cyclomatic_complexity: 7\n calls_out: 12\n calls_in: 0\n src.extractors.docs-deterministic.convertDocument:\n name: convertDocument\n module: src.extractors.docs-deterministic\n line: 100\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 3\n src.extractors.docs-chunks.takeLineBatch:\n name: takeLineBatch\n module: src.extractors.docs-chunks\n line: 128\n cyclomatic_complexity: 8\n calls_out: 2\n calls_in: 1\n src.extractors.ast.external.execFileAsync:\n name: execFileAsync\n module: src.extractors.ast.external\n line: 8\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichBatchCovering:\n name: enrichBatchCovering\n module: src.extractors.markdown-llm-helpers\n line: 112\n cyclomatic_complexity: 6\n calls_out: 11\n calls_in: 3\n src.extractors.markdown-paths.createBasenameIndexState:\n name: createBasenameIndexState\n module: src.extractors.markdown-paths\n line: 105\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-schema.documentRecord:\n name: documentRecord\n module: src.extractors.docs-schema\n line: 15\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.communication-helpers.nestedRole:\n name: nestedRole\n module: src.extractors.communication-helpers\n line: 156\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.runtime-cycle.text:\n name: text\n module: src.extractors.runtime-cycle\n line: 115\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.graph.diagnostics.makeDiagnostic:\n name: makeDiagnostic\n module: src.graph.diagnostics\n line: 437\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 9\n src.extractors.runtime-cycle.extractRuntimeCycleIntent:\n name: extractRuntimeCycleIntent\n module: src.extractors.runtime-cycle\n line: 29\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 0\n src.graph.diagnostics.buildNeighbors:\n name: buildNeighbors\n module: src.graph.diagnostics\n line: 340\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.diff.compareRelations:\n name: compareRelations\n module: src.graph.diff\n line: 210\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n examples.frontend.src.app.createState:\n name: createState\n module: examples.frontend.src.app\n line: 14\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.graph.diagnostics.indexGroundedImplementationEvidence:\n name: indexGroundedImplementationEvidence\n module: src.graph.diagnostics\n line: 259\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.git.isGitWorkTree:\n name: isGitWorkTree\n module: src.extractors.git\n line: 287\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 4\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichment:\n name: enrichment\n module: src.extractors.markdown-llm-helpers\n line: 371\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 0\n rust-ast.src.main.visit_item_mod:\n name: visit_item_mod\n module: rust-ast.src.main\n line: 206\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 0\n src.graph.diagnostics.hasDocumentedTarget:\n name: hasDocumentedTarget\n module: src.graph.diagnostics\n line: 394\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.graph.diff.relationKey:\n name: relationKey\n module: src.graph.diff\n line: 202\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-file-helpers.appendA2aAgentWarnings:\n name: appendA2aAgentWarnings\n module: src.extractors.communication-file-helpers\n line: 314\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.graph.symbol-resolution.pathSelects:\n name: pathSelects\n module: src.graph.symbol-resolution\n line: 130\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.extractors.configuration.match:\n name: match\n module: src.extractors.configuration\n line: 175\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.runtime-cycle.proposalRecord:\n name: proposalRecord\n module: src.extractors.runtime-cycle\n line: 250\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 2\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.markdownResponseContract:\n name: markdownResponseContract\n module: src.extractors.markdown-llm-helpers\n line: 369\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.docs-deterministic.parseSectionHeading:\n name: parseSectionHeading\n module: src.extractors.docs-deterministic\n line: 173\n cyclomatic_complexity: 9\n calls_out: 4\n calls_in: 1\n src.graph.linker.scoreSourceKindPenalty:\n name: scoreSourceKindPenalty\n module: src.graph.linker\n line: 240\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 1\n src.extractors.configuration.heading:\n name: heading\n module: src.extractors.configuration\n line: 150\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.loadDocumentChunks:\n name: loadDocumentChunks\n module: src.extractors.docs-llm\n line: 104\n cyclomatic_complexity: 4\n calls_out: 8\n calls_in: 1\n src.graph.diff.isObject:\n name: isObject\n module: src.graph.diff\n line: 198\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.visit_impl_item_fn:\n name: visit_impl_item_fn\n module: rust-ast.src.main\n line: 275\n cyclomatic_complexity: 2\n calls_out: 10\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.readPrompt:\n name: readPrompt\n module: src.extractors.docs-llm\n line: 261\n cyclomatic_complexity: 2\n calls_out: 6\n calls_in: 1\n src.graph.linker.linkIntentRecords:\n name: linkIntentRecords\n module: src.graph.linker\n line: 32\n cyclomatic_complexity: 5\n calls_out: 22\n calls_in: 0\n src.graph.diff.changedFieldPaths:\n name: changedFieldPaths\n module: src.graph.diff\n line: 189\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 8\n rust-ast.src.main.visit_item_struct:\n name: visit_item_struct\n module: rust-ast.src.main\n line: 223\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.handleExportDeclaration:\n name: handleExportDeclaration\n module: src.extractors.ast.typescript\n line: 74\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.basenames:\n name: basenames\n module: src.extractors.markdown-paths\n line: 42\n cyclomatic_complexity: 11\n calls_out: 10\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.nonEmptyText:\n name: nonEmptyText\n module: src.extractors.nl-llm-helpers\n line: 188\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 3\n src.extractors.ast.typescript.symbolModifiers:\n name: symbolModifiers\n module: src.extractors.ast.typescript\n line: 91\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.isTopLevel:\n name: isTopLevel\n module: src.extractors.ast.typescript\n line: 245\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 1\n rust-ast.src.main.visit_item_trait:\n name: visit_item_trait\n module: rust-ast.src.main\n line: 233\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n rust-ast.src.main.qualified:\n name: qualified\n module: rust-ast.src.main\n line: 154\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 5\n src.graph.symbol-resolution.uniquePaths:\n name: uniquePaths\n module: src.graph.symbol-resolution\n line: 138\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.communication-file-helpers.appendTimestampWarnings:\n name: appendTimestampWarnings\n module: src.extractors.communication-file-helpers\n line: 328\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.graph.linker.scorePair:\n name: scorePair\n module: src.graph.linker\n line: 138\n cyclomatic_complexity: 1\n calls_out: 11\n calls_in: 6\n src.extractors.docs-deterministic.resolver:\n name: resolver\n module: src.extractors.docs-deterministic\n line: 63\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.graph.symbol-resolution.byAlias:\n name: byAlias\n module: src.graph.symbol-resolution\n line: 29\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 0\n src.graph.diagnostics.map:\n name: map\n module: src.graph.diagnostics\n line: 341\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 5\n src.extractors.nl.absolute:\n name: absolute\n module: src.extractors.nl\n line: 40\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.git.discoverGitRepositories:\n name: discoverGitRepositories\n module: src.extractors.git\n line: 171\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 1\n src.extractors.ast.records.boundedCapabilities:\n name: boundedCapabilities\n module: src.extractors.ast.records\n line: 86\n cyclomatic_complexity: 1\n calls_out: 6\n calls_in: 1\n src.extractors.docs-deterministic.parseBulletStatement:\n name: parseBulletStatement\n module: src.extractors.docs-deterministic\n line: 191\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.tomlEntries:\n name: tomlEntries\n module: src.extractors.configuration\n line: 145\n cyclomatic_complexity: 3\n calls_out: 7\n calls_in: 1\n src.extractors.todo.lines:\n name: lines\n module: src.extractors.todo\n line: 32\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.todo.heading:\n name: heading\n module: src.extractors.todo\n line: 36\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.todo.text:\n name: text\n module: src.extractors.todo\n line: 48\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.graph.linker.isFileAggregateEvidencePair:\n name: isFileAggregateEvidencePair\n module: src.graph.linker\n line: 258\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 1\n src.extractors.ast.external.runExternalAstAdapter:\n name: runExternalAstAdapter\n module: src.extractors.ast.external\n line: 23\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 0\n src.graph.diagnostics.context:\n name: context\n module: src.graph.diagnostics\n line: 18\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.findKeyLine:\n name: findKeyLine\n module: src.extractors.configuration\n line: 204\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 3\n src.graph.linker-relations.determineRelation:\n name: determineRelation\n module: src.graph.linker-relations\n line: 34\n cyclomatic_complexity: 7\n calls_out: 1\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.add:\n name: add\n module: java.JavaAstExtract\n line: 206\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.docs-llm.DocumentationLlmRequiredError.errorMessage:\n name: errorMessage\n module: src.extractors.docs-llm\n line: 267\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.graph.symbol-resolution.values:\n name: values\n module: src.graph.symbol-resolution\n line: 35\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.communication-file-helpers.appendRegistryAlignmentWarnings:\n name: appendRegistryAlignmentWarnings\n module: src.extractors.communication-file-helpers\n line: 299\n cyclomatic_complexity: 7\n calls_out: 2\n calls_in: 1\n src.extractors.docs-record.anchorToSource:\n name: anchorToSource\n module: src.extractors.docs-record\n line: 93\n cyclomatic_complexity: 7\n calls_out: 10\n calls_in: 2\n src.extractors.docs-deterministic.heading:\n name: heading\n module: src.extractors.docs-deterministic\n line: 180\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-record.allowedLifecycle:\n name: allowedLifecycle\n module: src.extractors.docs-record\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.docs-deterministic.primePathMapper:\n name: primePathMapper\n module: src.extractors.docs-deterministic\n line: 87\n cyclomatic_complexity: 5\n calls_out: 6\n calls_in: 3\n src.extractors.docs-llm.DocumentationLlmRequiredError.requireConfiguredClient:\n name: requireConfiguredClient\n module: src.extractors.docs-llm\n line: 85\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 1\n src.graph.diff.left:\n name: left\n module: src.graph.diff\n line: 46\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n rust-ast.src.main.collect_files:\n name: collect_files\n module: rust-ast.src.main\n line: 101\n cyclomatic_complexity: 9\n calls_out: 20\n calls_in: 1\n src.graph.diff.normalizeRecord:\n name: normalizeRecord\n module: src.graph.diff\n line: 185\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n examples.backend.src.request-handlers.sendJson:\n name: sendJson\n module: examples.backend.src.request-handlers\n line: 81\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 7\n src.graph.linker.scoreSharedTopics:\n name: scoreSharedTopics\n module: src.graph.linker\n line: 223\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.graph.symbol-resolution.collectAstCandidates:\n name: collectAstCandidates\n module: src.graph.symbol-resolution\n line: 28\n cyclomatic_complexity: 8\n calls_out: 8\n calls_in: 1\n src.extractors.configuration.files:\n name: files\n module: src.extractors.configuration\n line: 15\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.todo.match:\n name: match\n module: src.extractors.todo\n line: 87\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 8\n src.extractors.communication-helpers.raw:\n name: raw\n module: src.extractors.communication-helpers\n line: 206\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.git.count:\n name: count\n module: src.extractors.git\n line: 42\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.capabilities:\n name: capabilities\n module: src.extractors.ast.records\n line: 49\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.communication-file-helpers.hasExplicitEnvelopeMetadata:\n name: hasExplicitEnvelopeMetadata\n module: src.extractors.communication-file-helpers\n line: 116\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.statementText:\n name: statementText\n module: src.extractors.nl-llm-helpers\n line: 91\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.containsIgnored:\n name: containsIgnored\n module: java.JavaAstExtract\n line: 70\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.communication-file-helpers.appendIdentityWarnings:\n name: appendIdentityWarnings\n module: src.extractors.communication-file-helpers\n line: 282\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.excerpt:\n name: excerpt\n module: rust-ast.src.main\n line: 186\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.configuration.entry:\n name: entry\n module: src.extractors.configuration\n line: 191\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.graph.symbol-resolution.buildAstCandidate:\n name: buildAstCandidate\n module: src.graph.symbol-resolution\n line: 44\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.extractors.docs-record.allowedModality:\n name: allowedModality\n module: src.extractors.docs-record\n line: 187\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.docs-deterministic.parseParagraphStatement:\n name: parseParagraphStatement\n module: src.extractors.docs-deterministic\n line: 212\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.isTicketEvidenceFile:\n name: isTicketEvidenceFile\n module: src.extractors.communication-helpers\n line: 167\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.ast.isExtractionResult:\n name: isExtractionResult\n module: src.extractors.ast\n line: 162\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 0\n src.extractors.git.readDiscoveryEntries:\n name: readDiscoveryEntries\n module: src.extractors.git\n line: 209\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.todo.task:\n name: task\n module: src.extractors.todo\n line: 43\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.try:\n name: try\n module: java.JavaAstExtract\n line: 84\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.changelog.lines:\n name: lines\n module: src.extractors.changelog\n line: 30\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n rust-ast.src.main.add:\n name: add\n module: rust-ast.src.main\n line: 158\n cyclomatic_complexity: 1\n calls_out: 10\n calls_in: 9\n src.extractors.docs-deterministic.marker:\n name: marker\n module: src.extractors.docs-deterministic\n line: 162\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.graph.diagnostics.indexImplementedPaths:\n name: indexImplementedPaths\n module: src.graph.diagnostics\n line: 365\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 3\n src.extractors.communication-helpers.inferIdentityFromPathAndFilename:\n name: inferIdentityFromPathAndFilename\n module: src.extractors.communication-helpers\n line: 153\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 1\n src.graph.linker-relations.relationForSourceKinds:\n name: relationForSourceKinds\n module: src.graph.linker-relations\n line: 53\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 1\n src.graph.linker.intersectionSize:\n name: intersectionSize\n module: src.graph.linker\n line: 244\n cyclomatic_complexity: 4\n calls_out: 1\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractChunk:\n name: extractChunk\n module: src.extractors.docs-llm\n line: 161\n cyclomatic_complexity: 12\n calls_out: 8\n calls_in: 1\n src.extractors.communication-helpers.unquote:\n name: unquote\n module: src.extractors.communication-helpers\n line: 318\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.graph.diagnostics.indexDocumentedPaths:\n name: indexDocumentedPaths\n module: src.graph.diagnostics\n line: 380\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.toIntentRecord:\n name: toIntentRecord\n module: src.extractors.nl-llm-helpers\n line: 85\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n src.extractors.docs-chunks.worker:\n name: worker\n module: src.extractors.docs-chunks\n line: 41\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 4\n src.extractors.communication-helpers.fileParts:\n name: fileParts\n module: src.extractors.communication-helpers\n line: 154\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.extractConfigurationIntent:\n name: extractConfigurationIntent\n module: src.extractors.configuration\n line: 11\n cyclomatic_complexity: 4\n calls_out: 10\n calls_in: 0\n src.extractors.ast.typescript.extractTypeScriptFile:\n name: extractTypeScriptFile\n module: src.extractors.ast.typescript\n line: 11\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.graph.linker.scoreObjectSimilarity:\n name: scoreObjectSimilarity\n module: src.graph.linker\n line: 205\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 1\n examples.frontend.src.app.reload:\n name: reload\n module: examples.frontend.src.app\n line: 38\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.git.readChangedFiles:\n name: readChangedFiles\n module: src.extractors.git\n line: 352\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.sectionText:\n name: sectionText\n module: src.extractors.docs-chunks\n line: 76\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.graph.diagnostics.recordsById:\n name: recordsById\n module: src.graph.diagnostics\n line: 60\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.extractors.nl.sourcePath:\n name: sourcePath\n module: src.extractors.nl\n line: 42\n cyclomatic_complexity: 2\n calls_out: 14\n calls_in: 0\n src.extractors.configuration.dockerEntries:\n name: dockerEntries\n module: src.extractors.configuration\n line: 173\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.extractors.git.result:\n name: result\n module: src.extractors.git\n line: 326\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.frontend.src.render.headerRow:\n name: headerRow\n module: examples.frontend.src.render\n line: 55\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.extractors.docs-record.statementText:\n name: statementText\n module: src.extractors.docs-record\n line: 32\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.linker.candidatePairs:\n name: candidatePairs\n module: src.graph.linker\n line: 38\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownRecords:\n name: enrichMarkdownRecords\n module: src.extractors.markdown-llm-helpers\n line: 57\n cyclomatic_complexity: 13\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.type_item:\n name: type_item\n module: rust-ast.src.main\n line: 306\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 4\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichMarkdownBatchWithCorrection:\n name: enrichMarkdownBatchWithCorrection\n module: src.extractors.markdown-llm-helpers\n line: 187\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.graph.diagnostics.buildChangelogWithoutImplementationDiagnostic:\n name: buildChangelogWithoutImplementationDiagnostic\n module: src.graph.diagnostics\n line: 186\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 1\n src.graph.linker.pathsIntersect:\n name: pathsIntersect\n module: src.graph.linker\n line: 118\n cyclomatic_complexity: 8\n calls_out: 7\n calls_in: 1\n src.extractors.ast.isIntentRecords:\n name: isIntentRecords\n module: src.extractors.ast\n line: 153\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n examples.backend.src.server.store:\n name: store\n module: examples.backend.src.server\n line: 17\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.graph.diagnostics.buildAmbiguousRequirementDiagnostic:\n name: buildAmbiguousRequirementDiagnostic\n module: src.graph.diagnostics\n line: 201\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.graph.linker.records:\n name: records\n module: src.graph.linker\n line: 34\n cyclomatic_complexity: 5\n calls_out: 7\n calls_in: 0\n src.graph.linker.indexResolvableBasenames:\n name: indexResolvableBasenames\n module: src.graph.linker\n line: 94\n cyclomatic_complexity: 8\n calls_out: 13\n calls_in: 1\n rust-ast.src.main.visit_item_fn:\n name: visit_item_fn\n module: rust-ast.src.main\n line: 257\n cyclomatic_complexity: 1\n calls_out: 13\n calls_in: 0\n src.extractors.docs-record.clampLine:\n name: clampLine\n module: src.extractors.docs-record\n line: 179\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.action:\n name: action\n module: src.extractors.nl-llm-helpers\n line: 88\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.git.execFileAsync:\n name: execFileAsync\n module: src.extractors.git\n line: 12\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.graph.diff.afterRecord:\n name: afterRecord\n module: src.graph.diff\n line: 51\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.graph.diagnostics.isRecordEvidenced:\n name: isRecordEvidenced\n module: src.graph.diagnostics\n line: 119\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.docs-record.linesFromChunk:\n name: linesFromChunk\n module: src.extractors.docs-record\n line: 172\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 5\n rust-ast.src.main.main:\n name: main\n module: rust-ast.src.main\n line: 36\n cyclomatic_complexity: 6\n calls_out: 21\n calls_in: 0\n src.extractors.markdown-paths.readBasenameDirectoryEntries:\n name: readBasenameDirectoryEntries\n module: src.extractors.markdown-paths\n line: 113\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.git.hasMoreDiscoveryWork:\n name: hasMoreDiscoveryWork\n module: src.extractors.git\n line: 195\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.lines:\n name: lines\n module: src.extractors.nl-llm-helpers\n line: 86\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.graph.linker.owners:\n name: owners\n module: src.graph.linker\n line: 95\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.extractors.docs-record.resolveObject:\n name: resolveObject\n module: src.extractors.docs-record\n line: 79\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 3\n src.extractors.docs-record.toDocumentIntentRecord:\n name: toDocumentIntentRecord\n module: src.extractors.docs-record\n line: 25\n cyclomatic_complexity: 14\n calls_out: 13\n calls_in: 0\n examples.frontend.src.render.toRows:\n name: toRows\n module: examples.frontend.src.render\n line: 19\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.communication-helpers.listValue:\n name: listValue\n module: src.extractors.communication-helpers\n line: 259\n cyclomatic_complexity: 2\n calls_out: 8\n calls_in: 0\n rust-ast.src.main.visit_item_use:\n name: visit_item_use\n module: rust-ast.src.main\n line: 216\n cyclomatic_complexity: 1\n calls_out: 8\n calls_in: 0\n src.extractors.communication-helpers.inferIdentity:\n name: inferIdentity\n module: src.extractors.communication-helpers\n line: 132\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 0\n src.extractors.git.takeNextDiscoveryDirectory:\n name: takeNextDiscoveryDirectory\n module: src.extractors.git\n line: 201\n cyclomatic_complexity: 2\n calls_out: 0\n calls_in: 2\n java.JavaAstExtract.JavaAstExtract.escape:\n name: escape\n module: java.JavaAstExtract\n line: 265\n cyclomatic_complexity: 9\n calls_out: 6\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.NL_MODALITY_SET:\n name: NL_MODALITY_SET\n module: src.extractors.nl-llm-helpers\n line: 236\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.ast.typescript.handleNode:\n name: handleNode\n module: src.extractors.ast.typescript\n line: 52\n cyclomatic_complexity: 6\n calls_out: 5\n calls_in: 1\n src.extractors.docs-chunks.sectionLines:\n name: sectionLines\n module: src.extractors.docs-chunks\n line: 75\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.changelog.extractChangelog:\n name: extractChangelog\n module: src.extractors.changelog\n line: 18\n cyclomatic_complexity: 10\n calls_out: 19\n calls_in: 0\n src.extractors.docs-chunks.flush:\n name: flush\n module: src.extractors.docs-chunks\n line: 63\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 3\n rust-ast.src.main.visit_expr_method_call:\n name: visit_expr_method_call\n module: rust-ast.src.main\n line: 296\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.outcomes:\n name: outcomes\n module: src.extractors.markdown-llm-helpers\n line: 71\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.codeBlockRecord:\n name: codeBlockRecord\n module: src.extractors.docs-deterministic\n line: 325\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.nl-llm-helpers.NlAttemptError.sourceExcerpt:\n name: sourceExcerpt\n module: src.extractors.nl-llm-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 2\n src.graph.diff.paired:\n name: paired\n module: src.graph.diff\n line: 48\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n examples.backend.src.request-handlers.event:\n name: event\n module: examples.backend.src.request-handlers\n line: 46\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.docs-schema.target:\n name: target\n module: src.extractors.docs-schema\n line: 13\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n rust-ast.src.main.modifiers:\n name: modifiers\n module: rust-ast.src.main\n line: 193\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 4\n src.extractors.ast.records.moduleTopicText:\n name: moduleTopicText\n module: src.extractors.ast.records\n line: 93\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 4\n examples.backend.src.validation.record:\n name: record\n module: examples.backend.src.validation\n line: 21\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n examples.backend.src.request-handlers.handleEventList:\n name: handleEventList\n module: examples.backend.src.request-handlers\n line: 50\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.graph.linker.deduplicateRecords:\n name: deduplicateRecords\n module: src.graph.linker\n line: 75\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n examples.backend.src.request-handlers.MAX_BODY_BYTES:\n name: MAX_BODY_BYTES\n module: examples.backend.src.request-handlers\n line: 5\n cyclomatic_complexity: 9\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.allowedModality:\n name: allowedModality\n module: src.extractors.nl-llm-helpers\n line: 226\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.git.extractChangedSymbols:\n name: extractChangedSymbols\n module: src.extractors.git\n line: 376\n cyclomatic_complexity: 9\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.normalizedText:\n name: normalizedText\n module: src.extractors.nl-llm-helpers\n line: 89\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n examples.backend.src.validation.ALLOWED_ACTIONS:\n name: ALLOWED_ACTIONS\n module: examples.backend.src.validation\n line: 11\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.nl-llm\n line: 116\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.extractors.markdown-llm.MarkdownLlmRequiredError.fallbackOrThrow:\n name: fallbackOrThrow\n module: src.extractors.markdown-llm\n line: 135\n cyclomatic_complexity: 2\n calls_out: 5\n calls_in: 2\n src.graph.linker.isModuleTopicEvidencePair:\n name: isModuleTopicEvidencePair\n module: src.graph.linker\n line: 264\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 1\n src.extractors.ast.typescript.addTypeScriptRecord:\n name: addTypeScriptRecord\n module: src.extractors.ast.typescript\n line: 174\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 9\n examples.src.runtime.executeContract:\n name: executeContract\n module: examples.src.runtime\n line: 10\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 0\n src.extractors.markdown-paths.headingDirectories:\n name: headingDirectories\n module: src.extractors.markdown-paths\n line: 46\n cyclomatic_complexity: 11\n calls_out: 9\n calls_in: 0\n rust-ast.src.main.slash:\n name: slash\n module: rust-ast.src.main\n line: 320\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.runtime-cycle.jsonScalar:\n name: jsonScalar\n module: src.extractors.runtime-cycle\n line: 302\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 3\n examples.frontend.src.app.mountPanel:\n name: mountPanel\n module: examples.frontend.src.app\n line: 36\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n src.graph.symbol-resolution.sortCandidates:\n name: sortCandidates\n module: src.graph.symbol-resolution\n line: 59\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.parseEnvelope:\n name: parseEnvelope\n module: src.extractors.communication-helpers\n line: 118\n cyclomatic_complexity: 5\n calls_out: 8\n calls_in: 0\n src.graph.diff.recordIdentity:\n name: recordIdentity\n module: src.graph.diff\n line: 175\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.nestedRoleIndex:\n name: nestedRoleIndex\n module: src.extractors.communication-helpers\n line: 155\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.graph.diagnostics.collectSymbolIssues:\n name: collectSymbolIssues\n module: src.graph.diagnostics\n line: 114\n cyclomatic_complexity: 3\n calls_out: 2\n calls_in: 1\n src.extractors.ast.typescript.isTypeScriptSymbolDeclaration:\n name: isTypeScriptSymbolDeclaration\n module: src.extractors.ast.typescript\n line: 142\n cyclomatic_complexity: 6\n calls_out: 6\n calls_in: 1\n src.graph.linker.byId:\n name: byId\n module: src.graph.linker\n line: 76\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.nl.assertNlExtractionOptions:\n name: assertNlExtractionOptions\n module: src.extractors.nl\n line: 25\n cyclomatic_complexity: 9\n calls_out: 2\n calls_in: 1\n src.extractors.communication-helpers.heading:\n name: heading\n module: src.extractors.communication-helpers\n line: 207\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.configuration.isConfigurationPath:\n name: isConfigurationPath\n module: src.extractors.configuration\n line: 30\n cyclomatic_complexity: 10\n calls_out: 6\n calls_in: 2\n src.graph.diff.assertGraph:\n name: assertGraph\n module: src.graph.diff\n line: 155\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.todo.checked:\n name: checked\n module: src.extractors.todo\n line: 45\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.communication-helpers.isCommunicationType:\n name: isCommunicationType\n module: src.extractors.communication-helpers\n line: 251\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 6\n examples.src.runtime.validateContract:\n name: validateContract\n module: examples.src.runtime\n line: 6\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.linker.set:\n name: set\n module: src.graph.linker\n line: 275\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 6\n src.extractors.docs-chunks.chunkMarkdown:\n name: chunkMarkdown\n module: src.extractors.docs-chunks\n line: 55\n cyclomatic_complexity: 8\n calls_out: 9\n calls_in: 0\n src.extractors.changelog.body:\n name: body\n module: src.extractors.changelog\n line: 27\n cyclomatic_complexity: 7\n calls_out: 15\n calls_in: 0\n src.extractors.todo.block:\n name: block\n module: src.extractors.todo\n line: 46\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.configuration.yamlOrAssignmentEntries:\n name: yamlOrAssignmentEntries\n module: src.extractors.configuration\n line: 162\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 1\n src.extractors.docs-chunks.needles:\n name: needles\n module: src.extractors.docs-chunks\n line: 7\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.configuration.lines:\n name: lines\n module: src.extractors.configuration\n line: 134\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-record.modality:\n name: modality\n module: src.extractors.docs-record\n line: 37\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.strings:\n name: strings\n module: src.extractors.markdown-llm-helpers\n line: 370\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 2\n src.extractors.ast.records.start:\n name: start\n module: src.extractors.ast.records\n line: 47\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.scanCompilationUnits:\n name: scanCompilationUnits\n module: java.JavaAstExtract\n line: 86\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.docs-chunks.item:\n name: item\n module: src.extractors.docs-chunks\n line: 45\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.graph.diff.width:\n name: width\n module: src.graph.diff\n line: 119\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.graph.diagnostics.collectContradictionDiagnostics:\n name: collectContradictionDiagnostics\n module: src.graph.diagnostics\n line: 242\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.graph.linker.jaccard:\n name: jaccard\n module: src.graph.linker\n line: 21\n cyclomatic_complexity: 6\n calls_out: 1\n calls_in: 1\n src.extractors.ast.records.adapterRecords:\n name: adapterRecords\n module: src.extractors.ast.records\n line: 5\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.configuration.configurationRecords:\n name: configurationRecords\n module: src.extractors.configuration\n line: 41\n cyclomatic_complexity: 4\n calls_out: 12\n calls_in: 4\n examples.backend.src.validation.object:\n name: object\n module: examples.backend.src.validation\n line: 24\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.proposalAction:\n name: proposalAction\n module: src.extractors.runtime-cycle\n line: 285\n cyclomatic_complexity: 5\n calls_out: 0\n calls_in: 1\n examples.backend.src.request-handlers.handleHealth:\n name: handleHealth\n module: examples.backend.src.request-handlers\n line: 25\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n src.extractors.markdown-llm.MarkdownLlmRequiredError.client:\n name: client\n module: src.extractors.markdown-llm\n line: 78\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-deterministic.qualifyingStatement:\n name: qualifyingStatement\n module: src.extractors.docs-deterministic\n line: 270\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n src.graph.diagnostics.buildUndocumentedImplementationDiagnostic:\n name: buildUndocumentedImplementationDiagnostic\n module: src.graph.diagnostics\n line: 169\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n src.extractors.docs-record.resolveModality:\n name: resolveModality\n module: src.extractors.docs-record\n line: 164\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.extractors.runtime-cycle.violationRecord:\n name: violationRecord\n module: src.extractors.runtime-cycle\n line: 173\n cyclomatic_complexity: 4\n calls_out: 7\n calls_in: 3\n src.extractors.configuration.entries:\n name: entries\n module: src.extractors.configuration\n line: 43\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 2\n src.extractors.communication-file-helpers.envelope:\n name: envelope\n module: src.extractors.communication-file-helpers\n line: 51\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.graph.diff.afterGroups:\n name: afterGroups\n module: src.graph.diff\n line: 39\n cyclomatic_complexity: 7\n calls_out: 6\n calls_in: 0\n src.extractors.nl.action:\n name: action\n module: src.extractors.nl\n line: 50\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-record.keywordOverlap:\n name: keywordOverlap\n module: src.extractors.docs-record\n line: 119\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.git.registerDiscoveredRepository:\n name: registerDiscoveredRepository\n module: src.extractors.git\n line: 252\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 1\n src.graph.symbol-resolution.uniqueSymbols:\n name: uniqueSymbols\n module: src.graph.symbol-resolution\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n src.extractors.communication-helpers.basename:\n name: basename\n module: src.extractors.communication-helpers\n line: 168\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 2\n rust-ast.src.main.visit_item_const:\n name: visit_item_const\n module: rust-ast.src.main\n line: 243\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.docs-deterministic.parseFenceBlock:\n name: parseFenceBlock\n module: src.extractors.docs-deterministic\n line: 154\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 1\n src.extractors.ast.typescript.handleSymbolDeclaration:\n name: handleSymbolDeclaration\n module: src.extractors.ast.typescript\n line: 87\n cyclomatic_complexity: 4\n calls_out: 9\n calls_in: 1\n examples.backend.src.request-handlers.readBody:\n name: readBody\n module: examples.backend.src.request-handlers\n line: 69\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 1\n src.graph.symbol-resolution.buildSymbolResolutionIndex:\n name: buildSymbolResolutionIndex\n module: src.graph.symbol-resolution\n line: 22\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n examples.backend.src.server.sendJson:\n name: sendJson\n module: examples.backend.src.server\n line: 26\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 3\n src.graph.symbol-resolution.hasResolvedNlAstSymbolPair:\n name: hasResolvedNlAstSymbolPair\n module: src.graph.symbol-resolution\n line: 87\n cyclomatic_complexity: 10\n calls_out: 3\n calls_in: 0\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.emptyCoverage:\n name: emptyCoverage\n module: src.extractors.markdown-llm-helpers\n line: 179\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.graph.diagnostics.buildPlannedNotImplementedDiagnostic:\n name: buildPlannedNotImplementedDiagnostic\n module: src.graph.diagnostics\n line: 130\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n src.extractors.communication-helpers.nestedParticipant:\n name: nestedParticipant\n module: src.extractors.communication-helpers\n line: 157\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 0\n src.graph.diff.right:\n name: right\n module: src.graph.diff\n line: 47\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.watched:\n name: watched\n module: src.extractors.runtime-cycle\n line: 129\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 2\n src.extractors.git.runGit:\n name: runGit\n module: src.extractors.git\n line: 325\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 5\n src.extractors.todo.relative:\n name: relative\n module: src.extractors.todo\n line: 29\n cyclomatic_complexity: 5\n calls_out: 20\n calls_in: 0\n src.extractors.ast.typescript.handleImportDeclaration:\n name: handleImportDeclaration\n module: src.extractors.ast.typescript\n line: 61\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.json:\n name: json\n module: java.JavaAstExtract\n line: 262\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-llm.MarkdownLlmRequiredError.extractMarkdownIntentAudited:\n name: extractMarkdownIntentAudited\n module: src.extractors.markdown-llm\n line: 34\n cyclomatic_complexity: 9\n calls_out: 14\n calls_in: 0\n src.extractors.docs-deterministic.targetsOf:\n name: targetsOf\n module: src.extractors.docs-deterministic\n line: 359\n cyclomatic_complexity: 1\n calls_out: 5\n calls_in: 1\n src.graph.symbol-resolution.byNlRecord:\n name: byNlRecord\n module: src.graph.symbol-resolution\n line: 71\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 0\n src.extractors.runtime-cycle.driftRecord:\n name: driftRecord\n module: src.extractors.runtime-cycle\n line: 211\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.graph.diagnostics.collectRecordDiagnostics:\n name: collectRecordDiagnostics\n module: src.graph.diagnostics\n line: 71\n cyclomatic_complexity: 8\n calls_out: 12\n calls_in: 2\n src.graph.diagnostics.hasImplementedTarget:\n name: hasImplementedTarget\n module: src.graph.diagnostics\n line: 390\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.markdown-paths.isNestedCheckout:\n name: isNestedCheckout\n module: src.extractors.markdown-paths\n line: 121\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 3\n src.extractors.docs-record.target:\n name: target\n module: src.extractors.docs-record\n line: 35\n cyclomatic_complexity: 11\n calls_out: 7\n calls_in: 0\n src.graph.linker.scoreSharedSymbol:\n name: scoreSharedSymbol\n module: src.graph.linker\n line: 169\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n examples.frontend.src.render.classifyEvent:\n name: classifyEvent\n module: examples.frontend.src.render\n line: 13\n cyclomatic_complexity: 4\n calls_out: 0\n calls_in: 1\n src.extractors.runtime-cycle.tags:\n name: tags\n module: src.extractors.runtime-cycle\n line: 119\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 3\n src.extractors.nl-llm-helpers.NlAttemptError.resolveModality:\n name: resolveModality\n module: src.extractors.nl-llm-helpers\n line: 171\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 2\n examples.backend.src.validation.action:\n name: action\n module: examples.backend.src.validation\n line: 23\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 0\n src.extractors.todo.action:\n name: action\n module: src.extractors.todo\n line: 50\n cyclomatic_complexity: 2\n calls_out: 12\n calls_in: 0\n src.extractors.communication-helpers.inferGovernanceIdentityFromFilename:\n name: inferGovernanceIdentityFromFilename\n module: src.extractors.communication-helpers\n line: 141\n cyclomatic_complexity: 7\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.allowedAction:\n name: allowedAction\n module: src.extractors.nl-llm-helpers\n line: 222\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.runtime-cycle.parseCycle:\n name: parseCycle\n module: src.extractors.runtime-cycle\n line: 68\n cyclomatic_complexity: 7\n calls_out: 5\n calls_in: 2\n src.extractors.git.resolveDiscoveryPrefix:\n name: resolveDiscoveryPrefix\n module: src.extractors.git\n line: 264\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.index:\n name: index\n module: src.extractors.markdown-paths\n line: 91\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.graph.diff.diffIntentGraphs:\n name: diffIntentGraphs\n module: src.graph.diff\n line: 16\n cyclomatic_complexity: 11\n calls_out: 19\n calls_in: 0\n examples.frontend.src.app.state:\n name: state\n module: examples.frontend.src.app\n line: 37\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-llm-helpers.MarkdownAttemptError.enrichSplitBatch:\n name: enrichSplitBatch\n module: src.extractors.markdown-llm-helpers\n line: 153\n cyclomatic_complexity: 2\n calls_out: 7\n calls_in: 1\n rust-ast.src.main.visit_item_enum:\n name: visit_item_enum\n module: rust-ast.src.main\n line: 228\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.ast.records.moduleRecords:\n name: moduleRecords\n module: src.extractors.ast.records\n line: 34\n cyclomatic_complexity: 6\n calls_out: 14\n calls_in: 1\n src.extractors.ast.records.end:\n name: end\n module: src.extractors.ast.records\n line: 48\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 0\n src.extractors.communication-file-helpers.inferred:\n name: inferred\n module: src.extractors.communication-file-helpers\n line: 52\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 0\n src.extractors.runtime-cycle.sourcePathFor:\n name: sourcePathFor\n module: src.extractors.runtime-cycle\n line: 89\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 2\n src.extractors.docs-schema.strings:\n name: strings\n module: src.extractors.docs-schema\n line: 12\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 2\n examples.backend.src.request-handlers.validation:\n name: validation\n module: examples.backend.src.request-handlers\n line: 39\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.resolveAction:\n name: resolveAction\n module: src.extractors.nl-llm-helpers\n line: 167\n cyclomatic_complexity: 2\n calls_out: 1\n calls_in: 1\n examples.backend.src.request-handlers.size:\n name: size\n module: examples.backend.src.request-handlers\n line: 71\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 1\n src.extractors.nl.inferActor:\n name: inferActor\n module: src.extractors.nl\n line: 87\n cyclomatic_complexity: 5\n calls_out: 2\n calls_in: 9\n java.JavaAstExtract.JavaAstExtract.collectFileDiagnostics:\n name: collectFileDiagnostics\n module: java.JavaAstExtract\n line: 119\n cyclomatic_complexity: 4\n calls_out: 5\n calls_in: 0\n src.extractors.docs-record.allowedAction:\n name: allowedAction\n module: src.extractors.docs-record\n line: 183\n cyclomatic_complexity: 1\n calls_out: 1\n calls_in: 1\n src.extractors.communication-helpers.match:\n name: match\n module: src.extractors.communication-helpers\n line: 125\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 5\n src.extractors.docs-chunks.markdownSections:\n name: markdownSections\n module: src.extractors.docs-chunks\n line: 94\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 1\n src.extractors.ast.typescript.extractModifiers:\n name: extractModifiers\n module: src.extractors.ast.typescript\n line: 169\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 1\n src.graph.symbol-resolution.isAstDeclaration:\n name: isAstDeclaration\n module: src.graph.symbol-resolution\n line: 142\n cyclomatic_complexity: 3\n calls_out: 0\n calls_in: 3\n src.extractors.ast.typescript.visitTypeScriptNode:\n name: visitTypeScriptNode\n module: src.extractors.ast.typescript\n line: 46\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 2\n src.extractors.nl.detectMissingFields:\n name: detectMissingFields\n module: src.extractors.nl\n line: 95\n cyclomatic_complexity: 10\n calls_out: 5\n calls_in: 4\n src.extractors.git.readCommits:\n name: readCommits\n module: src.extractors.git\n line: 334\n cyclomatic_complexity: 1\n calls_out: 7\n calls_in: 1\n src.extractors.docs-llm.DocumentationLlmRequiredError.extractDocumentationIntent:\n name: extractDocumentationIntent\n module: src.extractors.docs-llm\n line: 45\n cyclomatic_complexity: 3\n calls_out: 12\n calls_in: 0\n src.extractors.git.processDiscoveryDirectory:\n name: processDiscoveryDirectory\n module: src.extractors.git\n line: 228\n cyclomatic_complexity: 5\n calls_out: 5\n calls_in: 2\n src.extractors.docs-chunks.workerCount:\n name: workerCount\n module: src.extractors.docs-chunks\n line: 50\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 0\n src.graph.diff.groupRecords:\n name: groupRecords\n module: src.graph.diff\n line: 163\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 1\n src.extractors.communication-helpers.normalizeType:\n name: normalizeType\n module: src.extractors.communication-helpers\n line: 246\n cyclomatic_complexity: 4\n calls_out: 2\n calls_in: 0\n src.extractors.ast.typescript.handleVariableDeclaration:\n name: handleVariableDeclaration\n module: src.extractors.ast.typescript\n line: 111\n cyclomatic_complexity: 8\n calls_out: 7\n calls_in: 1\n src.extractors.nl.classified:\n name: classified\n module: src.extractors.nl\n line: 49\n cyclomatic_complexity: 1\n calls_out: 9\n calls_in: 0\n src.extractors.markdown-paths.repositoryRoot:\n name: repositoryRoot\n module: src.extractors.markdown-paths\n line: 40\n cyclomatic_complexity: 11\n calls_out: 11\n calls_in: 0\n examples.backend.src.server.startBackend:\n name: startBackend\n module: examples.backend.src.server\n line: 35\n cyclomatic_complexity: 3\n calls_out: 3\n calls_in: 0\n src.extractors.git.root:\n name: root\n module: src.extractors.git\n line: 41\n cyclomatic_complexity: 2\n calls_out: 2\n calls_in: 0\n src.extractors.docs-llm.DocumentationLlmRequiredError.selectWithinBudget:\n name: selectWithinBudget\n module: src.extractors.docs-llm\n line: 147\n cyclomatic_complexity: 2\n calls_out: 3\n calls_in: 1\n src.extractors.configuration.configurationFormat:\n name: configurationFormat\n module: src.extractors.configuration\n line: 113\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.extractors.docs-deterministic.handleDocumentationLine:\n name: handleDocumentationLine\n module: src.extractors.docs-deterministic\n line: 132\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 1\n src.extractors.runtime-cycle.boundedArray:\n name: boundedArray\n module: src.extractors.runtime-cycle\n line: 94\n cyclomatic_complexity: 8\n calls_out: 4\n calls_in: 3\n src.extractors.docs-record.resolveAction:\n name: resolveAction\n module: src.extractors.docs-record\n line: 156\n cyclomatic_complexity: 5\n calls_out: 4\n calls_in: 2\n src.graph.linker.scoreSameAction:\n name: scoreSameAction\n module: src.graph.linker\n line: 199\n cyclomatic_complexity: 3\n calls_out: 1\n calls_in: 1\n src.extractors.markdown-paths.isRepositoryPath:\n name: isRepositoryPath\n module: src.extractors.markdown-paths\n line: 76\n cyclomatic_complexity: 5\n calls_out: 3\n calls_in: 4\n src.extractors.git.createDiscoveryState:\n name: createDiscoveryState\n module: src.extractors.git\n line: 184\n cyclomatic_complexity: 1\n calls_out: 0\n calls_in: 1\n src.extractors.communication-helpers.communicationSegments:\n name: communicationSegments\n module: src.extractors.communication-helpers\n line: 181\n cyclomatic_complexity: 14\n calls_out: 12\n calls_in: 0\n src.extractors.docs-schema.documentResponseContract:\n name: documentResponseContract\n module: src.extractors.docs-schema\n line: 31\n cyclomatic_complexity: 1\n calls_out: 2\n calls_in: 1\n src.extractors.markdown-paths.state:\n name: state\n module: src.extractors.markdown-paths\n line: 92\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 0\n src.extractors.communication-file-helpers.buildLocalWarnings:\n name: buildLocalWarnings\n module: src.extractors.communication-file-helpers\n line: 254\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited:\n name: extractNlIntentAudited\n module: src.extractors.nl-llm\n line: 33\n cyclomatic_complexity: 10\n calls_out: 22\n calls_in: 0\n src.graph.diff.visibleRows:\n name: visibleRows\n module: src.graph.diff\n line: 118\n cyclomatic_complexity: 4\n calls_out: 4\n calls_in: 0\n src.extractors.changelog.changelogAction:\n name: changelogAction\n module: src.extractors.changelog\n line: 87\n cyclomatic_complexity: 11\n calls_out: 3\n calls_in: 4\n src.extractors.git.readStats:\n name: readStats\n module: src.extractors.git\n line: 364\n cyclomatic_complexity: 6\n calls_out: 4\n calls_in: 1\n src.graph.linker.intersects:\n name: intersects\n module: src.graph.linker\n line: 269\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.runtime-cycle.results:\n name: results\n module: src.extractors.runtime-cycle\n line: 46\n cyclomatic_complexity: 3\n calls_out: 5\n calls_in: 0\n src.graph.diagnostics.neighbors:\n name: neighbors\n module: src.graph.diagnostics\n line: 59\n cyclomatic_complexity: 1\n calls_out: 4\n calls_in: 0\n java.JavaAstExtract.JavaAstExtract.main:\n name: main\n module: java.JavaAstExtract\n line: 21\n cyclomatic_complexity: 10\n calls_out: 16\n calls_in: 0\n src.extractors.communication-file-helpers.shouldSkipCommunicationFile:\n name: shouldSkipCommunicationFile\n module: src.extractors.communication-file-helpers\n line: 102\n cyclomatic_complexity: 8\n calls_out: 3\n calls_in: 2\n src.extractors.configuration.relative:\n name: relative\n module: src.extractors.configuration\n line: 19\n cyclomatic_complexity: 3\n calls_out: 4\n calls_in: 0\n src.extractors.docs-deterministic.readParagraph:\n name: readParagraph\n module: src.extractors.docs-deterministic\n line: 235\n cyclomatic_complexity: 11\n calls_out: 5\n calls_in: 1\n src.extractors.git.extractRepositoryGitIntent:\n name: extractRepositoryGitIntent\n module: src.extractors.git\n line: 74\n cyclomatic_complexity: 11\n calls_out: 21\n calls_in: 3\n src.graph.symbol-resolution.collectNlResolutions:\n name: collectNlResolutions\n module: src.graph.symbol-resolution\n line: 67\n cyclomatic_complexity: 4\n calls_out: 3\n calls_in: 1\n java.JavaAstExtract.JavaAstExtract.emit:\n name: emit\n module: java.JavaAstExtract\n line: 244\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.docs-deterministic.root:\n name: root\n module: src.extractors.docs-deterministic\n line: 60\n cyclomatic_complexity: 4\n calls_out: 6\n calls_in: 0\n src.extractors.nl-llm-helpers.NlAttemptError.clampLine:\n name: clampLine\n module: src.extractors.nl-llm-helpers\n line: 218\n cyclomatic_complexity: 1\n calls_out: 3\n calls_in: 1\n src.extractors.nl-llm-helpers.NlAttemptError.resolveObject:\n name: resolveObject\n module: src.extractors.nl-llm-helpers\n line: 197\n cyclomatic_complexity: 6\n calls_out: 3\n calls_in: 3\nedges:\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.arguments\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.collect_files\n call_type: resolved\n- caller: rust-ast.src.main.main\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.collect_files\n callee: rust-ast.src.main.slash\n call_type: resolved\n- caller: rust-ast.src.main.add\n callee: rust-ast.src.main.excerpt\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_mod\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_use\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_struct\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_enum\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_trait\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_type\n callee: rust-ast.src.main.type_item\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_const\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_static\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.visit_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_impl_item_fn\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.visit_expr_method_call\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.qualified\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.add\n call_type: resolved\n- caller: rust-ast.src.main.type_item\n callee: rust-ast.src.main.modifiers\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.handleHealth\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.handleEventPublish\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.handleEventList\n call_type: resolved\n- caller: examples.backend.src.request-handlers.MAX_BODY_BYTES\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.handleHealth\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.handleEventPublish\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.handleEventList\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleRequest\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleHealth\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleHealth\n callee: examples.backend.src.request-handlers.size\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventPublish\n callee: examples.backend.src.request-handlers.readBody\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventPublish\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.validation\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.event\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventList\n callee: examples.backend.src.request-handlers.parseOffset\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventList\n callee: examples.backend.src.request-handlers.parseLimit\n call_type: resolved\n- caller: examples.backend.src.request-handlers.handleEventList\n callee: examples.backend.src.request-handlers.sendJson\n call_type: resolved\n- caller: examples.backend.src.validation.ALLOWED_ACTIONS\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.validateEventPayload\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.record\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.agent\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.action\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.validation.object\n callee: examples.backend.src.validation.invalid\n call_type: resolved\n- caller: examples.backend.src.server.createBackend\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.store\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.server\n callee: examples.backend.src.server.sendJson\n call_type: resolved\n- caller: examples.backend.src.server.startBackend\n callee: examples.backend.src.server.createBackend\n call_type: resolved\n- caller: examples.frontend.src.render.toRows\n callee: examples.frontend.src.render.classifyEvent\n call_type: resolved\n- caller: examples.frontend.src.render.renderTable\n callee: examples.frontend.src.render.headerRow\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.createState\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.reload\n call_type: resolved\n- caller: examples.frontend.src.app.mountPanel\n callee: examples.frontend.src.app.state\n call_type: resolved\n- caller: examples.frontend.src.app.state\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.frontend.src.app.reload\n callee: examples.frontend.src.app.refresh\n call_type: resolved\n- caller: examples.src.runtime.executeContract\n callee: examples.src.runtime.validateContract\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.emit\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.main\n callee: java.JavaAstExtract.JavaAstExtract.collect\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.json\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.emit\n callee: java.JavaAstExtract.JavaAstExtract.map\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.try\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collect\n callee: java.JavaAstExtract.JavaAstExtract.containsIgnored\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.try\n callee: java.JavaAstExtract.JavaAstExtract.scanCompilationUnits\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.collectFileDiagnostics\n callee: java.JavaAstExtract.JavaAstExtract.add\n call_type: resolved\n- caller: java.JavaAstExtract.JavaAstExtract.json\n callee: java.JavaAstExtract.JavaAstExtract.escape\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.assertNlExtractionOptions\n call_type: resolved\n- caller: src.extractors.nl.extractNlIntent\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.absolute\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.body\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.detectMissingFields\n call_type: resolved\n- caller: src.extractors.nl.sourcePath\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.classified\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.action\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.object\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.missing\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.nl.confidence\n callee: src.extractors.nl.inferActor\n call_type: resolved\n- caller: src.extractors.ast.isExtractionResult\n callee: src.extractors.ast.isIntentRecords\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.MAX_PER_SECTION\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.parseCycle\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.sourcePathFor\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.extractRuntimeCycleIntent\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.probeRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.boundedArray\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.results\n callee: src.extractors.runtime-cycle.violationRecord\n call_type: resolved\n- caller: src.extractors.runtime-cycle.label\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.probeRecord\n callee: src.extractors.runtime-cycle.factsMetadata\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.label\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.watched\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.violationRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.tags\n call_type: resolved\n- caller: src.extractors.runtime-cycle.driftRecord\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.text\n call_type: resolved\n- caller: src.extractors.runtime-cycle.proposalRecord\n callee: src.extractors.runtime-cycle.proposalAction\n call_type: resolved\n- caller: src.extractors.runtime-cycle.factsMetadata\n callee: src.extractors.runtime-cycle.jsonScalar\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.MAX_ENTRIES_PER_FILE\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.isConfigurationPath\n call_type: resolved\n- caller: src.extractors.configuration.extractConfigurationIntent\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.files\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.relative\n callee: src.extractors.configuration.configurationRecords\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.dockerEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.jsonEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.tomlEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.yamlOrAssignmentEntries\n call_type: resolved\n- caller: src.extractors.configuration.configurationRecords\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.entries\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.bounded\n callee: src.extractors.configuration.fileAggregate\n call_type: resolved\n- caller: src.extractors.configuration.fileAggregate\n callee: src.extractors.configuration.configurationFormat\n call_type: resolved\n- caller: src.extractors.configuration.jsonEntries\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.parsed\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.lines\n callee: src.extractors.configuration.findKeyLine\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.tomlEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.line\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.heading\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.pair\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entries\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.entry\n call_type: resolved\n- caller: src.extractors.configuration.yamlOrAssignmentEntries\n callee: src.extractors.configuration.uniqueEntries\n call_type: resolved\n- caller: src.extractors.configuration.dockerEntries\n callee: src.extractors.configuration.match\n call_type: resolved\n- caller: src.extractors.docs-schema.target\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.strings\n call_type: resolved\n- caller: src.extractors.docs-schema.documentRecord\n callee: src.extractors.docs-schema.target\n call_type: resolved\n- caller: src.extractors.docs-schema.documentResponseSchema\n callee: src.extractors.docs-schema.documentResponseContract\n call_type: resolved\n- caller: src.extractors.nl-llm.NlLlmRequiredError.extractNlIntentAudited\n callee: src.extractors.nl-llm.NlLlmRequiredErro\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "duplication.toon.yaml", "rel_path": "duplication.toon.yaml", "path": "duplication.toon.yaml", "size": "9.8KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# redup/duplication | 17 groups | 172f 30805L | 2026-08-01\n\nSUMMARY:\n files_scanned: 172\n total_lines: 30805\n dup_groups: 17\n actionable: 17\n review: 0\n generated: 0\n actionable_L: 120\n review_L: 0\n generated_L: 0\n dup_fragments: 44\n saved_lines: 120\n scan_ms: 1116\n\nHOTSPOTS[7] (files with most duplication):\n src/extractors/markdown-llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/communication/llm.ts dup=27L groups=5 frags=5 (0.1%)\n src/extractors/nl-llm.ts dup=22L groups=6 frags=6 (0.1%)\n src/synthesis/tasks-llm.ts dup=13L groups=3 frags=3 (0.0%)\n src/extractors/docs-llm.ts dup=12L groups=3 frags=3 (0.0%)\n src/live/contract-check.ts dup=12L groups=2 frags=2 (0.0%)\n src/live/model-comparison.ts dup=12L groups=2 frags=2 (0.0%)\n\nDUPLICATES[17] (ranked by impact):\n [ff0b7d1fb897f5eb] EXAC readPrompt L=5 N=5 saved=20 sim=1.00\n src/extractors/docs-llm.ts:261-265 (readPrompt)\n src/extractors/markdown-llm.ts:431-435 (readPrompt)\n src/extractors/nl-llm.ts:283-287 (readPrompt)\n src/summary/summarizer.ts:329-333 (readPrompt)\n src/synthesis/tasks-llm.ts:262-266 (readPrompt)\n [09873fe5d7f53db8] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:80-83 (constructor)\n src/extractors/docs-llm.ts:39-42 (constructor)\n src/extractors/markdown-llm.ts:49-52 (constructor)\n src/extractors/nl-llm.ts:47-50 (constructor)\n src/synthesis/tasks-llm.ts:49-52 (constructor)\n [bd6578d73c14c374] STRU constructor L=4 N=5 saved=16 sim=1.00\n src/communication/llm.ts:162-165 (constructor)\n src/extractors/markdown-llm.ts:146-149 (constructor)\n src/extractors/nl-llm.ts:109-112 (constructor)\n src/summary/summarizer.ts:154-157 (constructor)\n src/synthesis/tasks-llm.ts:56-59 (constructor)\n [8f9cb44a5788fdd0] EXAC collect L=9 N=2 saved=9 sim=1.00\n scripts/verify-env-contract.mjs:95-103 (collect)\n scripts/verify-module-boundaries.mjs:59-67 (collect)\n [6363b0c657dbde27] EXAC sumUsage L=9 N=2 saved=9 sim=1.00\n src/live/contract-check.ts:148-156 (sumUsage)\n src/live/model-comparison.ts:206-214 (sumUsage)\n [040774ed1317816e] EXAC markDeterministic L=8 N=2 saved=8 sim=1.00\n src/communication/llm.ts:417-424 (markDeterministic)\n src/extractors/markdown-llm.ts:402-409 (markDeterministic)\n [a81abf06a2409abf] EXAC arrow_function L=6 N=2 saved=6 sim=1.00\n src/communication/llm.ts:418-423 (arrow_function)\n src/extractors/markdown-llm.ts:403-408 (arrow_function)\n [2e20d0fc42b5b689] EXAC errorMessage L=3 N=3 saved=6 sim=1.00\n src/extractors/docs-llm.ts:267-269 (errorMessage)\n src/interfaces/a2a-task-store.ts:511-513 (errorMessage)\n src/interfaces/a2a.ts:310-312 (errorMessage)\n [13e54260c09235cb] EXAC roleOf L=5 N=2 saved=5 sim=1.00\n src/communication/analyzer.ts:464-468 (roleOf)\n src/communication/llm.ts:476-480 (roleOf)\n [5a74faa98e248ba6] EXAC objectValue L=4 N=2 saved=4 sim=1.00\n src/core/schema.ts:771-774 (objectValue)\n src/operations/validation.ts:18-21 (objectValue)\n [6108e7bc94eb85d0] EXAC readJson L=3 N=2 saved=3 sim=1.00\n scripts/research/audit-changelog-sample.mjs:205-207 (readJson)\n scripts/research/rerank-embedding-shortlist.mjs:160-162 (readJson)\n [cf429410d135f725] EXAC clampLine L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:179-181 (clampLine)\n src/extractors/nl-llm.ts:271-273 (clampLine)\n [85958beabc80c768] EXAC allowedAction L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:183-185 (allowedAction)\n src/extractors/nl-llm.ts:275-277 (allowedAction)\n [9b7097c5386e9cfa] EXAC allowedModality L=3 N=2 saved=3 sim=1.00\n src/extractors/docs-record.ts:187-189 (allowedModality)\n src/extractors/nl-llm.ts:279-281 (allowedModality)\n [b31b50027fdfb178] EXAC round L=3 N=2 saved=3 sim=1.00\n src/live/contract-check.ts:315-317 (round)\n src/live/model-comparison.ts:216-218 (round)\n [dabffb80a2fd2146] EXAC nonBlank L=3 N=2 saved=3 sim=1.00\n src/operations/validation.ts:31-33 (nonBlank)\n src/synthesis/todo-patch.ts:346-348 (nonBlank)\n [21ba1336248390a4] EXAC renderIds L=3 N=2 saved=3 sim=1.00\n src/synthesis/code-change-plan.ts:680-682 (renderIds)\n src/synthesis/todo-patch.ts:317-319 (renderIds)\n\nREFACTOR[17] (ranked by priority):\n [1] ○ extract_function → src/utils/readPrompt.py\n WHY: 5 occurrences of 5-line block across 5 files — saves 20 lines\n FILES: src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [2] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/docs-llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/synthesis/tasks-llm.ts\n [3] ○ extract_function → src/utils/constructor.py\n WHY: 5 occurrences of 4-line block across 5 files — saves 16 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts, src/extractors/nl-llm.ts, src/summary/summarizer.ts, src/synthesis/tasks-llm.ts\n [4] ○ extract_function → scripts/utils/collect.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: scripts/verify-env-contract.mjs, scripts/verify-module-boundaries.mjs\n [5] ○ extract_function → src/live/utils/sumUsage.py\n WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [6] ○ extract_function → src/utils/markDeterministic.py\n WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [7] ○ extract_function → src/utils/arrow_function.py\n WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines\n FILES: src/communication/llm.ts, src/extractors/markdown-llm.ts\n [8] ○ extract_function → src/utils/errorMessage.py\n WHY: 3 occurrences of 3-line block across 3 files — saves 6 lines\n FILES: src/extractors/docs-llm.ts, src/interfaces/a2a-task-store.ts, src/interfaces/a2a.ts\n [9] ○ extract_function → src/communication/utils/roleOf.py\n WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines\n FILES: src/communication/analyzer.ts, src/communication/llm.ts\n [10] ○ extract_function → src/utils/objectValue.py\n WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines\n FILES: src/core/schema.ts, src/operations/validation.ts\n [11] ○ extract_function → scripts/research/utils/readJson.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: scripts/research/audit-changelog-sample.mjs, scripts/research/rerank-embedding-shortlist.mjs\n [12] ○ extract_function → src/extractors/utils/clampLine.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [13] ○ extract_function → src/extractors/utils/allowedAction.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [14] ○ extract_function → src/extractors/utils/allowedModality.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/extractors/docs-record.ts, src/extractors/nl-llm.ts\n [15] ○ extract_function → src/live/utils/round.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/live/contract-check.ts, src/live/model-comparison.ts\n [16] ○ extract_function → src/utils/nonBlank.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/operations/validation.ts, src/synthesis/todo-patch.ts\n [17] ○ extract_function → src/synthesis/utils/renderIds.py\n WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines\n FILES: src/synthesis/code-change-plan.ts, src/synthesis/todo-patch.ts\n\nQUICK_WINS[8] (low risk, high savings — do first):\n [1] extract_function saved=20L → src/utils/readPrompt.py\n FILES: docs-llm.ts, markdown-llm.ts, nl-llm.ts +2\n [2] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, docs-llm.ts, markdown-llm.ts +2\n [3] extract_function saved=16L → src/utils/constructor.py\n FILES: llm.ts, markdown-llm.ts, nl-llm.ts +2\n [4] extract_function saved=9L → scripts/utils/collect.py\n FILES: verify-env-contract.mjs, verify-module-boundaries.mjs\n [5] extract_function saved=9L → src/live/utils/sumUsage.py\n FILES: contract-check.ts, model-comparison.ts\n [6] extract_function saved=8L → src/utils/markDeterministic.py\n FILES: llm.ts, markdown-llm.ts\n [7] extract_function saved=6L → src/utils/arrow_function.py\n FILES: llm.ts, markdown-llm.ts\n [8] extract_function saved=6L → src/utils/errorMessage.py\n FILES: docs-llm.ts, a2a-task-store.ts, a2a.ts\n\nEFFORT_ESTIMATE (total ≈ 4.0h):\n medium readPrompt saved=20L ~40min\n medium constructor saved=16L ~32min\n medium constructor saved=16L ~32min\n easy collect saved=9L ~18min\n easy sumUsage saved=9L ~18min\n easy markDeterministic saved=8L ~16min\n easy arrow_function saved=6L ~12min\n easy errorMessage saved=6L ~12min\n easy roleOf saved=5L ~10min\n easy objectValue saved=4L ~8min\n ... +7 more (~42min)\n\nMETRICS-TARGET:\n dup_groups: 17 → 0\n saved_lines: 120 lines recoverable\n", "is_subdir": false}, {"name": "evolution.toon.yaml", "rel_path": "evolution.toon.yaml", "path": "evolution.toon.yaml", "size": "2.0KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# code2llm/evolution | 3890 func | 174f | 2026-08-04\n# generated in 0.01s\n\nNEXT[4] (ranked by impact):\n [1] !! SPLIT src/cli.ts\n WHY: 985L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 12805\n\n [2] !! SPLIT src/services/actions.ts\n WHY: 806L, 1 classes, max CC=13\n EFFORT: ~4h IMPACT: 10478\n\n [3] !! SPLIT-FUNC parseFile CC=38 fan=19\n WHY: CC=38 exceeds 15\n EFFORT: ~1h IMPACT: 722\n\n [4] !! SPLIT evaluation/gold/v2/dataset.json\n WHY: 2410L, 0 classes, max CC=0\n EFFORT: ~4h IMPACT: 0\n\n\nRISKS[3]:\n ⚠ Splitting evaluation/gold/v2/dataset.json may break 0 import paths\n ⚠ Splitting src/cli.ts may break 133 import paths\n ⚠ Splitting src/services/actions.ts may break 106 import paths\n\nMETRICS-TARGET:\n CC̄: 3.0 → ≤2.1\n max-CC: 38 → ≤19\n god-modules: 9 → 0\n high-CC(≥15): 2 → ≤1\n hub-types: 0 → ≤0\n\nPATTERNS (language parser shared logic):\n _extract_declarations() in base.py — unified extraction for:\n - TypeScript: interfaces, types, classes, functions, arrow funcs\n - PHP: namespaces, traits, classes, functions, includes\n - Ruby: modules, classes, methods, requires\n - C++: classes, structs, functions, #includes\n - C#: classes, interfaces, methods, usings\n - Java: classes, interfaces, methods, imports\n - Go: packages, functions, structs\n - Rust: modules, functions, traits, use statements\n\n Shared regex patterns per language:\n - import: language-specific import/require/using patterns\n - class: class/struct/trait declarations with inheritance\n - function: function/method signatures with visibility\n - brace_tracking: for C-family languages ({ })\n - end_keyword_tracking: for Ruby (module/class/def...end)\n\n Benefits:\n - Consistent extraction logic across all languages\n - Reduced code duplication (~70% reduction in parser LOC)\n - Easier maintenance: fix once, apply everywhere\n - Standardized FunctionInfo/ClassInfo models\n\nHISTORY:\n prev CC̄=3.0 → now CC̄=3.0\n", "is_subdir": false}, {"name": "map.toon.yaml", "rel_path": "map.toon.yaml", "path": "map.toon.yaml", "size": "187.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 294f 44016L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:187,python:15,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04\n# generated in 0.04s\n# producer: code2llm | artifact: map.toon.yaml | schema: 1\n# stats: 4218 func | 0 cls | 294 mod | CC̄=3.0 | critical:10 | cycles:0\n# alerts[5]: fan-out compareWorkspaceIntent=40; CC parseFile=38; fan-out run=33; fan-out main=31; fan-out Client.validate_http_status_body=28\n# hotspots[5]: compareWorkspaceIntent fan=40; run fan=33; main fan=31; Client.validate_http_status_body fan=28; executePipeline fan=26\n# evolution: CC̄ 3.0→3.0 (flat 0.0)\n# Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods\nM[294]:\n Dockerfile,45\n Makefile,132\n adapters/tensorflow/package.json,14\n compose.e2e.yml,27\n docker-compose.yml,18\n evaluation/gold/v1/dataset.json,761\n evaluation/gold/v2/dataset.json,2410\n examples/backend/src/request-handlers.ts,88\n examples/backend/src/server.ts,43\n examples/backend/src/store.ts,48\n examples/backend/src/validation.ts,31\n examples/backend/tsconfig.json,14\n examples/frontend/src/api.ts,50\n examples/frontend/src/app.ts,43\n examples/frontend/src/render.ts,64\n examples/frontend/tsconfig.json,15\n examples/project/participants.json,37\n examples/sdk/python.py,23\n examples/sdk/typescript.mjs,16\n examples/src/helper.py,9\n examples/src/runtime.ts,13\n goal.yaml,530\n golang/ast_extract.go,376\n java/JavaAstExtract.java,285\n nlp2uri.yaml,8\n package.json,52\n php/ast_extract.php,233\n project.sh,124\n project2.sh,79\n python/requirements.txt,1\n rust-ast/Cargo.toml,12\n rust-ast/src/main.rs,322\n schemas/code-change-acceptance.schema.json,53\n schemas/code-change-close-result.schema.json,26\n schemas/code-change-plan-set.schema.json,22\n schemas/code-change-plan.schema.json,98\n schemas/code-change-review.schema.json,27\n schemas/code-change-source-apply-receipt.schema.json,31\n schemas/code-change-source-patch-set.schema.json,18\n schemas/code-change-source-patch.schema.json,63\n schemas/conclusion.schema.json,51\n schemas/document-extraction-response.schema.json,186\n schemas/gold-dataset.schema.json,585\n schemas/intent-graph-diff.schema.json,80\n schemas/intent-graph.schema.json,40\n schemas/intent-record.schema.json,132\n schemas/operation-plan.schema.json,94\n schemas/participant-registry.schema.json,27\n schemas/participant-synthesis.schema.json,39\n schemas/semantic-candidate-set.schema.json,54\n schemas/semantic-rerank.schema.json,113\n schemas/todo-patch.schema.json,59\n schemas/todo-proposal.schema.json,61\n schemas/variable-contract.schema.json,38\n scripts/a2a-request.sh,23\n scripts/assert-demollm-run.mjs,45\n scripts/docker-smoke.sh,36\n scripts/e2e.sh,109\n scripts/examples-check.sh,210\n scripts/generate-response-schemas.mjs,27\n scripts/live-contract-check.mjs,200\n scripts/live-model-comparison.mjs,125\n scripts/mcp-request.sh,11\n scripts/normalize-generated-analysis-roots.mjs,38\n scripts/package.py,25\n scripts/research/audit-changelog-sample.mjs,226\n scripts/research/evaluate-embedding-pairs.py,101\n scripts/research/rank-intent-graph-embeddings.py,174\n scripts/research/rerank-embedding-shortlist.mjs,191\n scripts/smoke.sh,57\n scripts/sync-generated-readme-metadata.mjs,66\n scripts/vallm-compatible.py,25\n scripts/verify-env-contract.mjs,139\n scripts/verify-generated-analysis.mjs,88\n scripts/verify-module-boundaries.mjs,87\n scripts/verify-no-llm-imports.mjs,99\n scripts/verify-structured-responses.mjs,35\n scripts/verify-workflow-yaml.mjs,43\n sdk/__init__.py,1\n sdk/go/actions.go,136\n sdk/go/client.go,197\n sdk/go/examples/basic/main.go,163\n sdk/go/todo2code.go,30\n sdk/go/types.go,215\n sdk/php/composer.json,18\n sdk/php/examples/basic.php,112\n sdk/php/src/Client.php,401\n sdk/php/src/Error.php,25\n sdk/python/__init__.py,13\n sdk/python/examples/basic.py,95\n sdk/python/examples/local_runtime.py,36\n sdk/python/pyproject.toml,17\n sdk/python/todo2code/__init__.py,33\n sdk/python/todo2code/client.py,469\n sdk/python/todo2code/runtime.py,225\n sdk/python/todo2code_sdk.py,171\n sdk/rust/Cargo.toml,17\n sdk/rust/examples/basic.rs,108\n sdk/rust/src/lib.rs,49\n sdk/rust/src/actions.rs,100\n sdk/rust/src/client.rs,243\n sdk/rust/src/error.rs,37\n sdk/rust/src/types.rs,140\n sdk/typescript/examples/basic.ts,84\n sdk/typescript/package.json,32\n sdk/typescript/src/index.ts,420\n sdk/typescript/tsconfig.json,20\n src/index.ts,53\n src/cli.ts,985\n src/communication/analyzer.ts,619\n src/communication/identity.ts,216\n src/communication/intake-contract.ts,334\n src/communication/intake-protobuf.ts,158\n src/communication/intake-service.ts,291\n src/communication/intake-store.ts,161\n src/communication/llm.ts,1\n src/communication/llm/implementation.ts,208\n src/communication/llm/implementation-helpers.ts,357\n src/comparison/workspace.ts,342\n src/config/env.ts,231\n src/core/content-cache.ts,139\n src/core/grounding.ts,24\n src/core/id.ts,167\n src/core/ignore.ts,200\n src/core/io.ts,211\n src/core/record.ts,158\n src/core/record-metadata.ts,27\n src/core/schema/index.ts,4\n src/core/schema/code-change.ts,322\n src/core/schema/conclusions.ts,210\n src/core/schema/constants.ts,31\n src/core/schema/intent.ts,309\n src/core/schema/utils.ts,259\n src/core/security.ts,55\n src/core/target.ts,57\n src/core/text.ts,530\n src/core/types/index.ts,4\n src/core/types/code-change.ts,250\n src/core/types/diagnostics.ts,45\n src/core/types/intent.ts,212\n src/core/types/pipeline.ts,173\n src/core/version.ts,2\n src/diff/git.ts,208\n src/diff/git-binary.ts,10\n src/diff/reality.ts,223\n src/diff/reality-build.ts,346\n src/diff/reality-totals.ts,66\n src/diff/svg.ts,104\n src/diff/text.ts,153\n src/diff/text-myers.ts,152\n src/diff/text-render.ts,251\n src/diff/text-types.ts,39\n src/evaluation/gold.ts,329\n src/evaluation/gold-cases.ts,489\n src/evaluation/gold-cli.ts,65\n src/evaluation/gold-extraction.ts,127\n src/evaluation/gold-metrics.ts,50\n src/evaluation/gold-reranker-validation.ts,39\n src/evaluation/gold-types.ts,382\n src/extractors/ast.ts,167\n src/extractors/ast/external.ts,48\n src/extractors/ast/go.ts,20\n src/extractors/ast/java.ts,20\n src/extractors/ast/php.ts,34\n src/extractors/ast/python.ts,39\n src/extractors/ast/records.ts,97\n src/extractors/ast/rust.ts,20\n src/extractors/ast/types.ts,20\n src/extractors/ast/typescript.ts,266\n src/extractors/ast/unsupported.ts,30\n src/extractors/changelog.ts,99\n src/extractors/communication.ts,63\n src/extractors/communication-file-helpers.ts,342\n src/extractors/communication-helpers.ts,320\n src/extractors/configuration.ts,208\n src/extractors/docs-chunks.ts,147\n src/extractors/docs-deterministic.ts,369\n src/extractors/docs-llm.ts,269\n src/extractors/docs-record.ts,193\n src/extractors/docs-schema.ts,43\n src/extractors/docs-types.ts,68\n src/extractors/git.ts,397\n src/extractors/markdown.ts,35\n src/extractors/markdown-block.ts,67\n src/extractors/markdown-llm.ts,178\n src/extractors/markdown-llm-helpers.ts,383\n src/extractors/markdown-paths.ts,158\n src/extractors/nl.ts,107\n src/extractors/nl-llm.ts,163\n src/extractors/nl-llm-helpers.ts,261\n src/extractors/runtime-cycle.ts,306\n src/extractors/todo.ts,93\n src/graph/capability-evidence.ts,62\n src/graph/changelog-signal.ts,89\n src/graph/diagnostics.ts,459\n src/graph/diff.ts,235\n src/graph/linker.ts,286\n src/graph/linker-candidates.ts,163\n src/graph/linker-relations.ts,83\n src/graph/symbol-resolution.ts,146\n src/interfaces/a2a.ts,332\n src/interfaces/a2a-card.ts,181\n src/interfaces/a2a-history.ts,96\n src/interfaces/a2a-message.ts,125\n src/interfaces/a2a-message-command.ts,141\n src/interfaces/a2a-run-list-item.ts,171\n src/interfaces/a2a-task-store.ts,560\n src/interfaces/a2a-types.ts,164\n src/interfaces/command-input.ts,3\n src/interfaces/governed-intake.proto,78\n src/interfaces/intake-actions.ts,38\n src/interfaces/intake-schemas/command-v1.schema.json,17\n src/interfaces/intake-schemas/diagnostic-v1.schema.json,11\n src/interfaces/intake-schemas/envelope-v1.schema.json,20\n src/interfaces/intake-schemas/event-v1.schema.json,20\n src/interfaces/intake-schemas/participant-registry-v2.schema.json,36\n src/interfaces/intake-schemas/query-v1.schema.json,11\n src/interfaces/intake-schemas/result-v1.schema.json,9\n src/interfaces/intake_cli.py,156\n src/interfaces/mcp.ts,261\n src/interfaces/mcp-errors.ts,10\n src/interfaces/mcp-resources.ts,88\n src/interfaces/mcp-tools.ts,323\n src/live/contract-check.ts,317\n src/live/model-comparison.ts,218\n src/llm/audit.ts,19\n src/llm/failure.ts,25\n src/llm/openrouter.ts,240\n src/llm/openrouter-request.ts,242\n src/llm/structured-schema.ts,218\n src/operations/artifact.ts,66\n src/operations/compile-cli.ts,55\n src/operations/contract.ts,84\n src/operations/generation-validation.ts,101\n src/operations/operation-step-validation.ts,178\n src/operations/subactor.ts,122\n src/operations/types.ts,155\n src/operations/validation.ts,338\n src/pipeline/persist-optional-artifacts.ts,128\n src/pipeline/run.ts,66\n src/pipeline/run-documentation.ts,80\n src/pipeline/run-execution.ts,189\n src/pipeline/run-failed.ts,167\n src/pipeline/run-helpers.ts,177\n src/pipeline/run-persistence.ts,236\n src/pipeline/run-summary.ts,58\n src/pipeline/run-types.ts,89\n src/sdk/typescript.ts,172\n src/semantic/reranker/index.ts,8\n src/semantic/reranker-llm.ts,291\n src/semantic/reranker-response.ts,42\n src/semantic/reranker/candidate.ts,250\n src/semantic/reranker/result.ts,311\n src/semantic/reranker/types.ts,106\n src/semantic/reranker/validation.ts,111\n src/services/actions.ts,806\n src/summary/generation-metadata.ts,61\n src/summary/payload.ts,65\n src/summary/render.ts,61\n src/summary/summarizer.ts,304\n src/synthesis/code-change-path.ts,232\n src/synthesis/code-change-plan/index.ts,1\n src/synthesis/code-change-plan/implementation.ts,1\n src/synthesis/code-change-plan/implementation-diagnostics.ts,17\n src/synthesis/code-change-plan/implementation-helpers.ts,39\n src/synthesis/code-change-plan/implementation-helpers-acceptance.ts,141\n src/synthesis/code-change-plan/implementation-helpers-close.ts,75\n src/synthesis/code-change-plan/implementation-helpers-plans.ts,269\n src/synthesis/code-change-plan/implementation-helpers-shared.ts,29\n src/synthesis/code-change-plan/implementation-indexing.ts,25\n src/synthesis/code-change-plan/implementation-review.ts,274\n src/synthesis/code-change-plan/implementation-semantic.ts,125\n src/synthesis/code-change-plan/implementation-source-patch.ts,9\n src/synthesis/code-change-plan/implementation-source-patch-apply.ts,8\n src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts,434\n src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts,233\n src/synthesis/code-change-plan/implementation-source-patch-assert.ts,397\n src/synthesis/code-change-plan/implementation-source-patch-create.ts,235\n src/synthesis/code-change-plan/implementation-source-patch-diff.ts,74\n src/synthesis/code-change-plan/implementation-targets.ts,61\n src/synthesis/task-synthesis-contract.ts,66\n src/synthesis/task-synthesis-materialize.ts,172\n src/synthesis/task-synthesis-metadata.ts,28\n src/synthesis/task-synthesis-payload.ts,70\n src/synthesis/tasks-llm.ts,243\n src/synthesis/todo-patch.ts,372\n src/synthesis/validation.ts,113\n src/tf/classifier.ts,135\n src/version.ts,2\n src/watch/watcher.ts,292\n src/web/diff-ui.ts,152\n src/web/diff-ui-compare.ts,105\n src/web/diff-ui-script.ts,19\n tsconfig.json,23\nD:\n php/ast_extract.php:\n e: argumentValue,normalizedToken,significant,qualifiedName,sourceExcerpt,addFact,parseFile\n argumentValue()\n normalizedToken()\n significant()\n qualifiedName()\n sourceExcerpt()\n addFact()\n parseFile()\n scripts/research/rank-intent-graph-embeddings.py:\n e: parse_args,projection_text,main\n parse_args()\n projection_text(record;prefix)\n main()\n sdk/go/examples/basic/main.go:\n e: main,run,envOr,truncate,joinedIDs\n main()\n run()\n envOr()\n truncate()\n joinedIDs()\n scripts/verify-env-contract.mjs:\n i: node:fs,node:path\n e: root,examplePath,example,declared,expected,local,parseDeclaredEnv,declared,lines,match,collectExpectedVariables,expected,body,body,collectConfigKeys,body,collectEnvReferences,collectMakefileReferences,collectDockerReferences,hasContractProblems,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute\n root()\n examplePath()\n example()\n declared()\n expected()\n local()\n parseDeclaredEnv()\n declared()\n lines()\n match()\n collectExpectedVariables()\n expected()\n body()\n body()\n collectConfigKeys()\n body()\n collectEnvReferences()\n collectMakefileReferences()\n collectDockerReferences()\n hasContractProblems()\n auditLocalKeys()\n body()\n keys()\n collectExisting()\n absolute()\n collect()\n absolute()\n sdk/rust/examples/basic.rs:\n i: serde_json::json,std::env,todo2code::Client\n e: main,run,joined_ids\n main()\n run()\n joined_ids()\n src/core/record-metadata.ts:\n i: ./types.js,./version.js\n e: generationMetadata,generationIdentity,separator\n generationMetadata()\n generationIdentity()\n separator()\n sdk/typescript/examples/basic.ts:\n i: ../src/index.js\n e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison\n baseUrl()\n token()\n root()\n main()\n client()\n health()\n card()\n nl()\n ast()\n markdown()\n graph()\n diagnostics()\n synthesis()\n validation()\n rendered()\n artifact()\n reality()\n gitDiff()\n comparison()\n src/extractors/docs-record.ts:\n i: ../core/record.js,../version.js,./docs-types.js\n e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle\n OBJECT_PLACEHOLDERS()\n toDocumentIntentRecord()\n statementText()\n target()\n action()\n modality()\n isPlaceholder()\n resolveObject()\n fallback()\n anchorToSource()\n claimedStart()\n claimedEnd()\n wanted()\n lines()\n scores()\n claimedScore()\n bestScore()\n bestIndex()\n anchored()\n keywordOverlap()\n present()\n shared()\n resolveTarget()\n hasTarget()\n resolveAction()\n derived()\n resolveModality()\n derived()\n linesFromChunk()\n lines()\n relativeStart()\n relativeEnd()\n clampLine()\n allowedAction()\n allowedModality()\n allowedLifecycle()\n src/extractors/markdown-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,node:fs,node:path,node:url\n e: MarkdownEnrichment,MarkdownResponse,CoveredBatch,MarkdownAttemptError,StageAuditInput,MARKDOWN_LLM_BATCH_RECORDS\n MarkdownEnrichment:\n MarkdownResponse:\n CoveredBatch:\n MarkdownAttemptError: super(-1),enrichMarkdownRecords(-1),enrichments(-1),responseByRecord(-1),outcomes(-1),corrected(-1),failed(-1),enrichment(-1),metadata(-1),enrichBatchCovering(-1),metadataByRecord(-1),uncovered(-1),enrichSplitBatch(-1),half(-1),emptyCoverage(-1),enrichMarkdownBatchWithCorrection(-1),completion(-1),promptRecord(-1),validateEnrichments(-1),expected(-1),output(-1),enrichRecord(-1),markDeterministic(-1),marked(-1),stageAudit(-1),readPrompt(-1),promptPath(-1),markdownResponseContract(-1),strings(-1),enrichment(-1)\n StageAuditInput:\n MARKDOWN_LLM_BATCH_RECORDS()\n src/extractors/communication-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path\n e: CommunicationEnvelope,InferredCommunicationIdentity,CommunicationSegment,buildCommunicationRecords,segmentType,semantics,classified,action,line,parseEnvelope,lines,end,match,inferIdentity,parts,basename,governanceIdentity,inferGovernanceIdentityFromFilename,governance,inferIdentityFromPathAndFilename,fileParts,nestedRoleIndex,nestedRole,nestedParticipant,isTicketEvidenceFile,basename,communicationSegments,lines,flush,item,raw,heading,cleaned,looksLikeTicket,normalizeRole,normalizeType,normalized,isCommunicationType,first,listValue,stripped,validTimestamp,parsed,resolveIdentity,sameStrings,normalize,isCommunicationNoise,normalized,governanceSectionType,normalized,semanticsFor,unquote\n CommunicationEnvelope:\n InferredCommunicationIdentity:\n CommunicationSegment:\n buildCommunicationRecords()\n segmentType()\n semantics()\n classified()\n action()\n line()\n parseEnvelope()\n lines()\n end()\n match()\n inferIdentity()\n parts()\n basename()\n governanceIdentity()\n inferGovernanceIdentityFromFilename()\n governance()\n inferIdentityFromPathAndFilename()\n fileParts()\n nestedRoleIndex()\n nestedRole()\n nestedParticipant()\n isTicketEvidenceFile()\n basename()\n communicationSegments()\n lines()\n flush()\n item()\n raw()\n heading()\n cleaned()\n looksLikeTicket()\n normalizeRole()\n normalizeType()\n normalized()\n isCommunicationType()\n first()\n listValue()\n stripped()\n validTimestamp()\n parsed()\n resolveIdentity()\n sameStrings()\n normalize()\n isCommunicationNoise()\n normalized()\n governanceSectionType()\n normalized()\n semanticsFor()\n unquote()\n src/extractors/communication-file-helpers.ts:\n i: ../communication/identity.js,../config/env.js,../core/io.js,../core/types.js,./communication-helpers.js,node:path\n e: CommunicationFileOutcome,CommunicationMetadata,extractCommunicationFile,scope,readResult,envelope,inferred,extracted,localWarnings,segmentResult,records,shouldSkipCommunicationFile,explicitEnvelope,hasExplicitEnvelopeMetadata,buildCommunicationSegments,inferredRole,segments,resolveFileScope,relativeToProject,segments,pathTicket,readCommunicationBody,collectCommunicationMetadata,declaredParticipant,declaredRole,declaredParticipantId,identity,participant,role,displayName,explicitMessageType,messageType,ticket,recipient,rawTimestamp,timestamp,declaredGitAuthors,gitAuthors,explicitPaths,explicitSymbols,buildLocalWarnings,appendRoleAndParticipantWarnings,appendIdentityWarnings,appendRegistryAlignmentWarnings,appendA2aAgentWarnings,declaredA2aAgentId,hasRegistryEntry,appendTimestampWarnings,rawTimestamp\n CommunicationFileOutcome:\n CommunicationMetadata:\n extractCommunicationFile()\n scope()\n readResult()\n envelope()\n inferred()\n extracted()\n localWarnings()\n segmentResult()\n records()\n shouldSkipCommunicationFile()\n explicitEnvelope()\n hasExplicitEnvelopeMetadata()\n buildCommunicationSegments()\n inferredRole()\n segments()\n resolveFileScope()\n relativeToProject()\n segments()\n pathTicket()\n readCommunicationBody()\n collectCommunicationMetadata()\n declaredParticipant()\n declaredRole()\n declaredParticipantId()\n identity()\n participant()\n role()\n displayName()\n explicitMessageType()\n messageType()\n ticket()\n recipient()\n rawTimestamp()\n timestamp()\n declaredGitAuthors()\n gitAuthors()\n explicitPaths()\n explicitSymbols()\n buildLocalWarnings()\n appendRoleAndParticipantWarnings()\n appendIdentityWarnings()\n appendRegistryAlignmentWarnings()\n appendA2aAgentWarnings()\n declaredA2aAgentId()\n hasRegistryEntry()\n appendTimestampWarnings()\n rawTimestamp()\n src/core/text.ts:\n i: ./types.js\n e: STOP_WORDS,buildStopWords,classifyActionHeuristically,conventionalAction,prose,searchable,matchedByPattern,extractConventionalAction,conventional,findActionInText,removeInlineCode,detectModality,prose,searchable,matches,detectPolarity,prose,stripped,normalized,normalizeToken,keywords,GENERIC_TOPICS,topicKeywords,separated,foldTopicToken,aliased,singular,similarity,left,right,intersection,extractBacktickValues,value,extractPaths,FILE_EXTENSIONS,hasFileExtension,last,dot,PATH_ROOTS,isPathLike,segments,HOST_TLDS,isHostname,parts,tld,extractSymbols,repositoryPaths,backticks,camel,ticketPrefixes,extractTickets,values,extractVersions,inferObject,normalized,withoutAction,result,normalizeForObject,removeObjectAction,stripObjectConnector,splitIntentLines,lines,raw,cleaned,pieces,value\n STOP_WORDS()\n buildStopWords()\n classifyActionHeuristically()\n conventionalAction()\n prose()\n searchable()\n matchedByPattern()\n extractConventionalAction()\n conventional()\n findActionInText()\n removeInlineCode()\n detectModality()\n prose()\n searchable()\n matches()\n detectPolarity()\n prose()\n stripped()\n normalized()\n normalizeToken()\n keywords()\n GENERIC_TOPICS()\n topicKeywords()\n separated()\n foldTopicToken()\n aliased()\n singular()\n similarity()\n left()\n right()\n intersection()\n extractBacktickValues()\n value()\n extractPaths()\n FILE_EXTENSIONS()\n hasFileExtension()\n last()\n dot()\n PATH_ROOTS()\n isPathLike()\n segments()\n HOST_TLDS()\n isHostname()\n parts()\n tld()\n extractSymbols()\n repositoryPaths()\n backticks()\n camel()\n ticketPrefixes()\n extractTickets()\n values()\n extractVersions()\n inferObject()\n normalized()\n withoutAction()\n result()\n normalizeForObject()\n removeObjectAction()\n stripObjectConnector()\n splitIntentLines()\n lines()\n raw()\n cleaned()\n pieces()\n value()\n src/diff/reality-build.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./reality-totals.js\n e: RealityRow,IntentRealityView,buildRealityView,components,diagnosticsByRecord,rows,buildRealityRows,rows,buildRealityRow,codes,status,compareRealityRows,bySeverity,alignment,bySize,documentedCoverageLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,summarizeLaneTotals,declared,observed,changelog,topicLabel,separator,raw,value,declared,object\n RealityRow:\n IntentRealityView:\n buildRealityView()\n components()\n diagnosticsByRecord()\n rows()\n buildRealityRows()\n rows()\n buildRealityRow()\n codes()\n status()\n compareRealityRows()\n bySeverity()\n alignment()\n bySize()\n documentedCoverageLabel()\n groupIntoTopics()\n symbolPaths()\n anchors()\n groups()\n key()\n bucket()\n indexModuleAnchors()\n modulePaths()\n targetless()\n candidates()\n path()\n values()\n resolvesToFile()\n resolved()\n indexUnambiguousSymbolPaths()\n candidates()\n paths()\n values()\n primaryTargetKey()\n anchor()\n indexDiagnostics()\n index()\n bucket()\n resolveEvidence()\n resolveStatus()\n summarizeLaneTotals()\n declared()\n observed()\n changelog()\n topicLabel()\n separator()\n raw()\n value()\n declared()\n object()\n src/evaluation/gold.ts:\n i: ../core/id.js,./gold-extraction.js,node:fs\n e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result\n EvaluationCore:\n EvaluationRun:\n EvaluationResult:\n loadGoldDataset()\n parsed()\n evaluateGoldDataset()\n first()\n second()\n stable()\n goldReportIsPerfect()\n renderGoldReportMarkdown()\n percent()\n support()\n rows()\n value()\n evaluateOnce()\n extraction()\n linking()\n dsl2todo()\n diagnostics()\n evaluateExtraction()\n byChannel()\n actual()\n overall()\n evaluateDiagnostics()\n counts()\n forbiddenViolations()\n snapshots()\n result()\n evaluateLinking()\n counts()\n byClass()\n forbiddenViolations()\n snapshots()\n result()\n reranking()\n evaluateDsl2Todo()\n duplicateCounts()\n snapshots()\n result()\n src/live/contract-check.ts:\n i: ../core/types.js\n e: LiveBudget,LiveStageMeasurement,LiveHistoryRecord,LiveHistoryStageSummary,LiveHistorySummary,LiveContractAudit,LIVE_HISTORY_LIMIT,liveRequestTimeoutMs,measureLiveStages,missingLiveStages,measureStage,responses,overLatency,sumUsage,values,buildLiveAudit,stages,missingStages,totalLatencyMs,costs,totalCostUsd,overCost,overTotalLatency,buildRecordedLiveAudit,initial,history,toLiveHistoryRecord,appendLiveHistory,kept,summarizeLiveHistory,runs,byStage,entries,redactLiveMessage,renderLiveReport,lines,status,cost,detail,total,median,middle,value,ratio,round\n LiveBudget:\n LiveStageMeasurement:\n LiveHistoryRecord:\n LiveHistoryStageSummary:\n LiveHistorySummary:\n LiveContractAudit:\n LIVE_HISTORY_LIMIT()\n liveRequestTimeoutMs()\n measureLiveStages()\n missingLiveStages()\n measureStage()\n responses()\n overLatency()\n sumUsage()\n values()\n buildLiveAudit()\n stages()\n missingStages()\n totalLatencyMs()\n costs()\n totalCostUsd()\n overCost()\n overTotalLatency()\n buildRecordedLiveAudit()\n initial()\n history()\n toLiveHistoryRecord()\n appendLiveHistory()\n kept()\n summarizeLiveHistory()\n runs()\n byStage()\n entries()\n redactLiveMessage()\n renderLiveReport()\n lines()\n status()\n cost()\n detail()\n total()\n median()\n middle()\n value()\n ratio()\n round()\n src/communication/intake-contract.ts:\n i: node:crypto\n e: VerifiedPrincipal,ParticipantV2,ParticipantRegistryV2,IntakeEnvelope,IntakeDiagnostic,IntakeResult,IntakeError\n VerifiedPrincipal:\n ParticipantV2:\n ParticipantRegistryV2:\n IntakeEnvelope:\n IntakeDiagnostic:\n IntakeResult:\n IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),validateIntakeEnvelopeHeader(-1),validateIntakeEnvelopeTimestamp(-1),assertCommand(-1),assertQuery(-1),invalid(-1),validateIntakeEnvelopeHeader(-1),invalid(-1),invalid(-1),validateIntakeEnvelopeTimestamp(-1),invalid(-1),assertCommand(-1),base(-1),validateCommandPayload(-1),validateCommandPayload(-1),assertParticipant(-1),participantId(-1),assertPrincipal(-1),participantId(-1),role(-1),stringArray(-1),capabilities(-1),participantId(-1),role(-1),ticketId(-1),invalid(-1),invalid(-1),participantId(-1),ticketId(-1),invalid(-1),assertQuery(-1),base(-1),validateQueryPayload(-1),validateQueryPayload(-1),nonBlank(-1),participantId(-1),ticketId(-1),nonBlank(-1),participantId(-1),ticketId(-1),invalid(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1)\n src/communication/analyzer.ts:\n i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js\n e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,humanRequests,agentMessages,uniqueIssues,participantRows,collectParticipantsAndIdentityIssues,participants,participant,values,collectConflictIssues,left,right,leftRole,rightRole,code,responseRequiredFrom,resolveConflictCode,collectRequestResponseIssues,response,collectAgentActionIssues,type,issueItem,classifyAgentActionIssue,participantGit,linked,matchedRequest,isActionableMessage,isWorkTrackingMessage,deduplicateCommunicationIssues,buildParticipantRows,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex\n CommunicationIssue:\n ParticipantCommunicationAnalysis:\n CommunicationAnalysis:\n analyzeCommunication()\n communication()\n evidenceByRecord()\n humanRequests()\n agentMessages()\n uniqueIssues()\n participantRows()\n collectParticipantsAndIdentityIssues()\n participants()\n participant()\n values()\n collectConflictIssues()\n left()\n right()\n leftRole()\n rightRole()\n code()\n responseRequiredFrom()\n resolveConflictCode()\n collectRequestResponseIssues()\n response()\n collectAgentActionIssues()\n type()\n issueItem()\n classifyAgentActionIssue()\n participantGit()\n linked()\n matchedRequest()\n isActionableMessage()\n isWorkTrackingMessage()\n deduplicateCommunicationIssues()\n buildParticipantRows()\n aliases()\n matchedGit()\n evidence()\n validateSyntheses()\n byId()\n ids()\n record()\n renderCommunicationMarkdown()\n addCommunicationIssuesToDiagnostics()\n hasSerious()\n communicationIssueTitle()\n evidenceNeighbors()\n records()\n output()\n left()\n right()\n isEvidenceRecord()\n matchedGitRecords()\n aliases()\n semanticMatch()\n conflictSemanticMatch()\n leftHasExplicitTarget()\n rightHasExplicitTarget()\n agentResponseCoversRequest()\n candidates()\n bySource()\n values()\n aggregateTopicMatch()\n requested()\n response()\n shared()\n agentWorkCoveredByHumanScope()\n requests()\n sourceRecords()\n plans()\n agentSourceRecords()\n isBroadRequest()\n isActionableAgentWork()\n isPositiveImplementationClaim()\n isHumanDecisionClaim()\n hasImplementationVerb()\n withoutTickets()\n value()\n intersects()\n values()\n participantOf()\n participantsForRole()\n roleOf()\n typeOf()\n ticketOf()\n gitAliases()\n normalizeIdentity()\n append()\n values()\n issue()\n sortedRespondents()\n explicitResponseRoute()\n severityRank()\n escapeCell()\n escapeRegex()\n golang/ast_extract.go:\n e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,collectPackageFact,collectImportFacts,collectDeclarationFacts,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash\n Fact:\n output:\n factCollector:\n main()\n emit()\n collectGoFiles()\n parseFile()\n collectPackageFact()\n collectImportFacts()\n collectDeclarationFacts()\n position()\n excerpt()\n add()\n visitDecl()\n visitFunc()\n visitGenDecl()\n visitCalls()\n typeName()\n declaredTypeKind()\n strPtr()\n toSlash()\n scripts/research/rerank-embedding-shortlist.mjs:\n i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path\n e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top\n options()\n records()\n selectedRows()\n declaration()\n module()\n candidateSet()\n config()\n rerank()\n augmentedGraph()\n originalRelationIds()\n originallyRelatedPairs()\n candidateById()\n accepted()\n candidate()\n relation()\n verdictCounts()\n resolveDeclaration()\n exact()\n matches()\n resolveModule()\n exact()\n matches()\n readJson()\n parseArgs()\n values()\n key()\n value()\n required()\n value()\n top()\n sdk/rust/src/client.rs:\n i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super::\n e: Client\n Client:\n src/services/actions.ts:\n i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path\n e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest\n CommunicationGraphFilter:\n executeAction()\n root()\n handler()\n executeExtractNlAction()\n file()\n text()\n executeExtractGitAction()\n executeExtractAstAction()\n executeExtractConfigAction()\n executeExtractMarkdownAction()\n executeExtractDocsAction()\n executeExtractCommunicationAction()\n executeAnalyzeCommunicationAction()\n analysis()\n executeLinkAction()\n records()\n executeDiagnoseAction()\n graph()\n executeSummarizeAction()\n graph()\n diagnostics()\n executeProposeTodoAction()\n graph()\n diagnostics()\n result()\n output()\n executeRenderTodoAction()\n graph()\n diagnostics()\n synthesis()\n todoPath()\n patchPath()\n auditPath()\n todoContent()\n rendered()\n executeApplyTodoAction()\n todoPath()\n patchPath()\n auditPath()\n receiptPath()\n result()\n executeProposeCodeChangeAction()\n graph()\n diagnostics()\n conclusions()\n proposals()\n result()\n output()\n executeRenderCodeChangeAction()\n planSet()\n review()\n patchPath()\n auditPath()\n executeProposeSourcePatchAction()\n plan()\n unifiedDiffs()\n patch()\n output()\n planSet()\n result()\n output()\n executeApplySourcePatchAction()\n patch()\n receiptPath()\n result()\n executeEvaluateCodeChangeAction()\n plan()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n result()\n output()\n executeCloseCodeChangeAction()\n beforeGraph()\n beforeDiagnostics()\n afterGraph()\n afterDiagnostics()\n value()\n planSet()\n result()\n output()\n executeDiffAction()\n beforeInput()\n afterInput()\n before()\n after()\n diff()\n svg()\n executeDiffFilesAction()\n beforePath()\n afterPath()\n diff()\n executeDiffGitAction()\n result()\n executeRealityAction()\n graph()\n diagnostics()\n view()\n executeCompareWorkspaceAction()\n executePipelineAction()\n filterCommunicationGraph()\n filter()\n records()\n parseCommunicationGraphFilter()\n participant()\n role()\n ticket()\n communicationOnly()\n matchesCommunicationFilter()\n matchesParticipant()\n matchesRole()\n matchesTicket()\n nlModeValue()\n llmModeValue()\n taskSynthesisMode()\n summaryModeValue()\n pipelineTaskMode()\n withTextDiffViews()\n title()\n readGraphInput()\n safePath()\n readActionObject()\n safePath()\n resolveRoot()\n requested()\n scopedPath()\n selected()\n nullableScopedPath()\n selected()\n readRecords()\n files()\n safeFile()\n stringValue()\n nullableString()\n stringList()\n numberValue()\n number()\n hasInputValue()\n objectMapOfStrings()\n booleanValue()\n objectValue()\n registerRunArtifacts()\n manifestPath()\n manifest()\n src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:\n i: ../../core/io.js,../../core/schema.js,../../core/security.js,../../version.js,./implementation-diagnostics.js,./implementation-source-patch-apply-diff.js,./implementation-source-patch-assert.js,node:crypto,node:fs,node:path\n e: ApplyCodeChangeSourcePatchOptions,ApplyCodeChangeSourcePatchResult,NormalizedApplyCodeChangeSourcePatchRequest,SourcePatchApplyLock,SourcePatchEditTarget,PreparedSourceEdit,applyCodeChangeSourcePatch,request,root,receiptPath,lock,idempotentResult,prepared,now,receipt,readExistingReceipt,existing,assertPatchApplicationRequest,patch,assertPatchApprovalActor,assertPatchApprovalHash,assertPatchEditsContainDiffs,acquireApplyLock,lock,prepareSourceEdits,target,before,after,prepareSourceEditTarget,relative,absolute,existed,assertSourcePatchTargetNotSymlink,assertDeleteEditClearsAll,validatePatchTargetForEdit,applyPreparedEdits,receipt,rollbackErrors,writePreparedEdits,buildPatchApplyReceipt,fileHashesAfter,rollbackPreparedEdits,assertExistingSourceReceipt,relative,absolute,exists,current,assertSourceApplyReceipt,validateSourceApplyReceiptShape,validateSourceApplyReceiptIdentity,validateSourceApplyReceiptTimestamps,validateSourceApplyReceiptPathHashes,expectedPaths,hashPaths,validateSourceApplyReceiptGeneration,atomicWriteRaw,exactSourcePatchKeys,actual,exactSourcePatchSet,deterministicGeneration\n ApplyCodeChangeSourcePatchOptions:\n ApplyCodeChangeSourcePatchResult:\n NormalizedApplyCodeChangeSourcePatchRequest:\n SourcePatchApplyLock:\n SourcePatchEditTarget:\n PreparedSourceEdit:\n applyCodeChangeSourcePatch()\n request()\n root()\n receiptPath()\n lock()\n idempotentResult()\n prepared()\n now()\n receipt()\n readExistingReceipt()\n existing()\n assertPatchApplicationRequest()\n patch()\n assertPatchApprovalActor()\n assertPatchApprovalHash()\n assertPatchEditsContainDiffs()\n acquireApplyLock()\n lock()\n prepareSourceEdits()\n target()\n before()\n after()\n prepareSourceEditTarget()\n relative()\n absolute()\n existed()\n assertSourcePatchTargetNotSymlink()\n assertDeleteEditClearsAll()\n validatePatchTargetForEdit()\n applyPreparedEdits()\n receipt()\n rollbackErrors()\n writePreparedEdits()\n buildPatchApplyReceipt()\n fileHashesAfter()\n rollbackPreparedEdits()\n assertExistingSourceReceipt()\n relative()\n absolute()\n exists()\n current()\n assertSourceApplyReceipt()\n validateSourceApplyReceiptShape()\n validateSourceApplyReceiptIdentity()\n validateSourceApplyReceiptTimestamps()\n validateSourceApplyReceiptPathHashes()\n expectedPaths()\n hashPaths()\n validateSourceApplyReceiptGeneration()\n atomicWriteRaw()\n exactSourcePatchKeys()\n actual()\n exactSourcePatchSet()\n deterministicGeneration()\n src/llm/openrouter.ts:\n i: ../config/env.js,../core/types.js,./structured-schema.js\n e: ChatMessage,OpenRouterResult,OpenRouterModelsResponse,OpenRouterModelError,OpenRouterClient\n ChatMessage:\n OpenRouterResult:\n OpenRouterModelsResponse:\n OpenRouterModelError: super(-1)\n OpenRouterClient: isConfigured(-1),listAvailableModels(-1),controller(-1),timeout(-1),response(-1),text(-1),clearTimeout(-1),chatText(-1),chatTextWithMetadata(-1),response(-1),content(-1),chatJson(-1),result(-1),chatJsonWithMetadata(-1),response(-1),fallback(-1),request(-1),responseMetadata(-1),usage(-1),stringOrNull(-1),finiteOrNull(-1),createModelError(-1),formatInvalidModelError(-1),extractContent(-1),content(-1),parseJsonContent(-1),trimmed(-1),start(-1),end(-1),parseJsonResponse(-1),metadata(-1),message(-1),shouldRetryWithoutJsonSchema(-1)\n src/config/env.ts:\n i: ../core/io.js,../core/types.js,../version.js,node:fs,node:path\n e: T2CConfig,loadEnvFile,explicit,candidates,content,trimmed,separator,key,value,envString,value,envOptional,value,envNumber,raw,value,envBoolean,raw,envList,raw,envLlmMode,value,getConfig,model,root,configForDisplay,hasOpenRouter\n T2CConfig:\n loadEnvFile()\n explicit()\n candidates()\n content()\n trimmed()\n separator()\n key()\n value()\n envString()\n value()\n envOptional()\n value()\n envNumber()\n raw()\n value()\n envBoolean()\n raw()\n envList()\n raw()\n envLlmMode()\n value()\n getConfig()\n model()\n root()\n configForDisplay()\n hasOpenRouter()\n src/interfaces/a2a-history.ts:\n i: ../config/env.js,../core/security.js,node:fs,node:path\n e: RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,matchesRunFilters,participant,role,ticket,severity,normalized,safeRunPath\n RunHistoryFilters:\n listIntentRuns()\n runsDirectory()\n entries()\n items()\n readRunEntries()\n readRun()\n runDirectory()\n graphPath()\n manifestPath()\n manifest()\n matchesRunFilters()\n participant()\n role()\n ticket()\n severity()\n normalized()\n safeRunPath()\n src/diff/text-render.ts:\n i: ./text-types.js\n e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number\n TextDiffSvgOptions:\n SideBySideRow:\n renderUnifiedDiff()\n marker()\n toSideBySideRows()\n index()\n line()\n pairs()\n renderTextDiffSvg()\n theme()\n maxRows()\n maxColumns()\n title()\n charWidth()\n rowHeight()\n gutterWidth()\n columnWidth()\n width()\n totals()\n y()\n rendered()\n skipped()\n summarizeDiffs()\n diffHeading()\n svgBody()\n sideBySideRowMarkup()\n changed()\n number()\n renderTextDiffHtml()\n title()\n sections()\n renderHtmlSection()\n hunks()\n rows()\n htmlCell()\n cssClass()\n number()\n src/operations/subactor.ts:\n i: ../core/types.js,./validation.js\n e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding\n CompileSubactorEnvelopeOptions:\n valueMatchesType()\n assertBinding()\n ageSeconds()\n compileSubactorProcessEnvelope()\n variableById()\n referenced()\n variable()\n binding()\n humanApproval()\n binding()\n src/communication/intake-protobuf.ts:\n i: ./intake-contract.js\n e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,parsed,values,unknownFields,payload,envelope,encodeIntakeResult,decodeIntakeResult,parsed,strings,numbers,decodeDelimitedFields,values,strings,numbers,offset,fieldStart,field,wire,raw,value,parsePayloadJson,parseOptionalJson,buildIntakeEnvelope,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte\n encodeIntakeEnvelope()\n operation()\n decodeIntakeEnvelope()\n parsed()\n values()\n unknownFields()\n payload()\n envelope()\n encodeIntakeResult()\n decodeIntakeResult()\n parsed()\n strings()\n numbers()\n decodeDelimitedFields()\n values()\n strings()\n numbers()\n offset()\n fieldStart()\n field()\n wire()\n raw()\n value()\n parsePayloadJson()\n parseOptionalJson()\n buildIntakeEnvelope()\n bytesField()\n data()\n varintField()\n writeVarint()\n remaining()\n readVarint()\n value()\n byte()\n src/communication/intake-service.ts:\n i: ./intake-store.js,node:crypto,node:fs,node:path\n e: IntakeState,GovernedIntakeService\n IntakeState:\n GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1)\n scripts/live-model-comparison.mjs:\n i: node:fs,node:path,node:url\n e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile\n REPO_ROOT()\n main()\n probe()\n timeoutMs()\n models()\n root()\n config()\n result()\n comparison()\n rendered()\n jsonTarget()\n markdownTarget()\n failedAudit()\n message()\n writeFile()\n src/cli.ts:\n i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util\n e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,shouldShowGlobalHelp,shouldShowGlobalVersion,resolveRequestedCommand,isHelpRequest,resolveCommandHandler,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,isLongOption,isShortOption,parseLongOption,next,parseShortOption,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath\n ParsedArgs:\n execFileAsync()\n main()\n parsed()\n command()\n config()\n handler()\n shouldShowGlobalHelp()\n shouldShowGlobalVersion()\n resolveRequestedCommand()\n isHelpRequest()\n resolveCommandHandler()\n handler()\n commandHandlers()\n resolveMainCommand()\n handleLink()\n files()\n records()\n graph()\n handleDiagnose()\n graphFile()\n graph()\n handleSummarize()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n result()\n out()\n handleProposeTodo()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderTodo()\n synthesisPath()\n graphPath()\n diagnosticsPath()\n patch()\n audit()\n result()\n handleApplyTodo()\n patch()\n audit()\n receipt()\n actor()\n approvalHash()\n result()\n handleProposeCodeChange()\n graphPath()\n diagnosticsPath()\n output()\n result()\n handleRenderCodeChange()\n plansPath()\n patch()\n audit()\n result()\n handleProposeSourcePatch()\n inputPath()\n output()\n isPlanSet()\n result()\n handleApplySourcePatch()\n patchPath()\n actor()\n approvalHash()\n receipt()\n result()\n handleEvaluateCodeChange()\n planPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCloseCodeChange()\n inputPath()\n beforeGraphPath()\n afterGraphPath()\n output()\n result()\n handleCompareWorkspace()\n root()\n result()\n handlePipeline()\n root()\n options()\n result()\n handleWatch()\n root()\n taskFile()\n pipeline()\n controller()\n stop()\n resolvePipelineRoot()\n buildPipelineOptions()\n buildCommonPipelineOptions()\n resolveWatchTaskFile()\n buildWorkspaceComparisonOptions()\n formatWatchEvent()\n stamp()\n handleDiff()\n mode()\n out()\n svg()\n html()\n maxRows()\n parseDiffMode()\n mode()\n handleGraphDiff()\n beforeFile()\n afterFile()\n diff()\n out()\n svg()\n buildDiffPayload()\n buildFileDiff()\n beforeFile()\n afterFile()\n context()\n buildGitDiff()\n context()\n root()\n result()\n handleReality()\n graphFile()\n graph()\n diagnosticsPath()\n diagnostics()\n view()\n out()\n svg()\n markdown()\n handleExtract()\n extractor()\n root()\n out()\n handler()\n handleExtractNl()\n file()\n inline()\n result()\n handleExtractGit()\n result()\n handleExtractAst()\n result()\n handleExtractConfig()\n result()\n handleExtractRuntime()\n cycle()\n result()\n handleExtractMarkdown()\n result()\n handleExtractDocs()\n result()\n handleExtractCommunication()\n result()\n handleCommunication()\n root()\n graph()\n analysis()\n out()\n markdown()\n graphOut()\n emitExtraction()\n emitJson()\n handleIntake()\n operation()\n inputPath()\n absolute()\n result()\n intakeExitCode()\n initProject()\n moduleRoot()\n sourceEnv()\n targetEnv()\n task()\n sourceIgnore()\n targetIgnore()\n doctor()\n result()\n parseArgs()\n options()\n value()\n isLongOption()\n isShortOption()\n parseLongOption()\n next()\n parseShortOption()\n name()\n next()\n optionString()\n value()\n optionNullableString()\n value()\n optionBoolean()\n value()\n optionNumber()\n value()\n number()\n optionList()\n value()\n optionNlMode()\n optionLlmMode()\n value()\n optionTaskMode()\n value()\n optionSummaryMode()\n optionPipelineTaskMode()\n value()\n reportPipelineDegradation()\n printHelp()\n invokedPath()\n src/extractors/ast.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path\n e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result\n AstExtractionOptions:\n ExternalCacheAdapter:\n extractAstIntent()\n root()\n cache()\n matcher()\n files()\n body()\n relative()\n extracted()\n adapterFiles()\n manifest()\n result()\n unsupported()\n sourceManifest()\n body()\n isIntentRecords()\n isExtractionResult()\n result()\n src/extractors/docs-llm.ts:\n i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./docs-chunks.js,./docs-record.js,./docs-schema.js,node:fs,node:path,node:url\n e: DocumentationLlmRequiredError\n DocumentationLlmRequiredError: super(-1),extractDocumentationIntent(-1),startedAt(-1),client(-1),requireConfiguredClient(-1),cache(-1),chunks(-1),selectedChunks(-1),systemPrompt(-1),results(-1),requireConfiguredClient(-1),loadDocumentChunks(-1),files(-1),body(-1),relative(-1),fileChunks(-1),isDocumentChunks(-1),candidate(-1),selectWithinBudget(-1),prioritized(-1),selected(-1),extractChunk(-1),contract(-1),records(-1),buildAudit(-1),status(-1),readPrompt(-1),promptPath(-1),errorMessage(-1)\n src/extractors/markdown-paths.ts:\n i: ../core/io.js,node:fs,node:fs,node:path\n e: MarkdownPathResolver,BasenameIndexState,PATH_SEARCH_EXCLUDES,MAX_INDEXED_FILES,createMarkdownPathResolver,repositoryRoot,basenames,headingDirectories,normalized,candidate,matches,isRepositoryPath,absolute,headingScopes,buildBasenameIndex,index,state,directory,entries,createBasenameIndexState,readBasenameDirectoryEntries,isNestedCheckout,scanDirectoryForBasenames,absolute,addBasenameIndexMatch,matches\n MarkdownPathResolver:\n BasenameIndexState:\n PATH_SEARCH_EXCLUDES()\n MAX_INDEXED_FILES()\n createMarkdownPathResolver()\n repositoryRoot()\n basenames()\n headingDirectories()\n normalized()\n candidate()\n matches()\n isRepositoryPath()\n absolute()\n headingScopes()\n buildBasenameIndex()\n index()\n state()\n directory()\n entries()\n createBasenameIndexState()\n readBasenameDirectoryEntries()\n isNestedCheckout()\n scanDirectoryForBasenames()\n absolute()\n addBasenameIndexMatch()\n matches()\n src/core/schema/intent.ts:\n i: ../id.js\n e: GroundedValidationContext,TodoProposalValidationContext,CodeChangePlanValidationContext,CodeChangeAcceptanceValidationContext,assertIntentRecord,record,recordId,statement,lifecycle,source,epistemic,metadata,assertIntentStatement,statement,assertIntentTarget,target,assertIntentLifecycle,lifecycle,assertIntentSource,source,lines,assertIntentEpistemic,epistemic,assertIntentMetadata,typedMetadata,generation,assertGenerationMatchesExtractor,generation,separator,expectedGenerator,assertIntentGenerationMetadata,generation,assertIntentRecords,assertIntentGraph,graph,recordIds,relationIds,stats,records,expectedFingerprint,assertIntentGraphDiff,diff,records,change,relations,summary,assertRelation,relation\n GroundedValidationContext:\n TodoProposalValidationContext:\n CodeChangePlanValidationContext:\n CodeChangeAcceptanceValidationContext:\n assertIntentRecord()\n record()\n recordId()\n statement()\n lifecycle()\n source()\n epistemic()\n metadata()\n assertIntentStatement()\n statement()\n assertIntentTarget()\n target()\n assertIntentLifecycle()\n lifecycle()\n assertIntentSource()\n source()\n lines()\n assertIntentEpistemic()\n epistemic()\n assertIntentMetadata()\n typedMetadata()\n generation()\n assertGenerationMatchesExtractor()\n generation()\n separator()\n expectedGenerator()\n assertIntentGenerationMetadata()\n generation()\n assertIntentRecords()\n assertIntentGraph()\n graph()\n recordIds()\n relationIds()\n stats()\n records()\n expectedFingerprint()\n assertIntentGraphDiff()\n diff()\n records()\n change()\n relations()\n summary()\n assertRelation()\n relation()\n src/web/diff-ui-script.ts:\n i: ./diff-ui-compare.js\n e: byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns\n byId()\n requestHeaders()\n formatBytes()\n selectedRun()\n updateMeta()\n fillSelect()\n loadRuns()\n src/synthesis/todo-patch.ts:\n i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path\n e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings\n CreateTodoPatchOptions:\n CreatedTodoPatch:\n WriteTodoPatchOptions:\n WrittenTodoPatch:\n ApplyTodoPatchOptions:\n diagnosticReportFingerprint()\n createTodoPatch()\n expectedValidation()\n proposalById()\n selected()\n proposal()\n orderedSelected()\n markdown()\n renderTodoPatchMarkdown()\n writeTodoPatchArtifacts()\n created()\n patchPath()\n auditPath()\n applyTodoPatch()\n current()\n receipt()\n now()\n currentHash()\n result()\n applied()\n recovered()\n assertTodoPatchArtifact()\n artifact()\n sourceTodo()\n selected()\n duplicates()\n classified()\n duplicate()\n assertApproval()\n assertReceipt()\n atomicWrite()\n temporary()\n existing()\n handle()\n appendPatch()\n separator()\n wasAlreadyAppended()\n renderTargets()\n rendered()\n renderIds()\n inline()\n normalizePath()\n sameArray()\n object()\n exactKeys()\n expected()\n missing()\n extra()\n nonBlank()\n hash()\n isoDate()\n uniqueIds()\n uniqueStrings()\n src/comparison/workspace.ts:\n i: ../config/env.js,../core/id.js,../core/io.js,../core/security.js,../core/types.js,../diff/reality.js,../graph/diff.js,../pipeline/run.js,node:child_process,node:fs,node:os,node:path,node:util\n e: WorkspaceComparisonOptions,CoverageSnapshot,WorkspaceComparison,execFileAsync,compareWorkspaceIntent,root,repositoryRoot,relativeAnalysisRoot,outputDir,baseRef,baseCommit,headCommit,status,changedFiles,temporaryParent,baseWorktree,baseRoot,pipelineOptions,baseOptions,currentOptions,baseRun,currentRun,baseReality,currentReality,diff,baseCoverage,currentCoverage,alignmentRateDelta,implementationCoverageDelta,plannedCodeCoverageDelta,documentedCodeCoverageDelta,gapsDelta,diagnosticsDelta,comparisonId,comparisonDirectory,artifacts,scopedOutputDirectory,absolute,relative,commonPipelineOptions,optionsForRoot,existingFile,relative,coverage,diagnosticDelta,classifyWorkspaceTrend,severeDelta,improved,regressed,parseAheadBehind,defaultBaseRef,rounded,artifactPaths,relative,renderTrendMarkdown,percent,documentationLine,git,result\n WorkspaceComparisonOptions:\n CoverageSnapshot:\n WorkspaceComparison:\n execFileAsync()\n compareWorkspaceIntent()\n root()\n repositoryRoot()\n relativeAnalysisRoot()\n outputDir()\n baseRef()\n baseCommit()\n headCommit()\n status()\n changedFiles()\n temporaryParent()\n baseWorktree()\n baseRoot()\n pipelineOptions()\n baseOptions()\n currentOptions()\n baseRun()\n currentRun()\n baseReality()\n currentReality()\n diff()\n baseCoverage()\n currentCoverage()\n alignmentRateDelta()\n implementationCoverageDelta()\n plannedCodeCoverageDelta()\n documentedCodeCoverageDelta()\n gapsDelta()\n diagnosticsDelta()\n comparisonId()\n comparisonDirectory()\n artifacts()\n scopedOutputDirectory()\n absolute()\n relative()\n commonPipelineOptions()\n optionsForRoot()\n existingFile()\n relative()\n coverage()\n diagnosticDelta()\n classifyWorkspaceTrend()\n severeDelta()\n improved()\n regressed()\n parseAheadBehind()\n defaultBaseRef()\n rounded()\n artifactPaths()\n relative()\n renderTrendMarkdown()\n percent()\n documentationLine()\n git()\n result()\n src/interfaces/a2a-message.ts:\n e: parseSendConfiguration,validateOutputModes,supported,parseMessage,messageId,contextId,taskId,referenceTaskIds,extensions,metadata,parsePart,output,parsePartContent,content,qualifier,ensureSupportedMessageContent,supported,cloneMessage,clonePart,normalizeUserMessage\n parseSendConfiguration()\n validateOutputModes()\n supported()\n parseMessage()\n messageId()\n contextId()\n taskId()\n referenceTaskIds()\n extensions()\n metadata()\n parsePart()\n output()\n parsePartContent()\n content()\n qualifier()\n ensureSupportedMessageContent()\n supported()\n cloneMessage()\n clonePart()\n normalizeUserMessage()\n src/summary/payload.ts:\n i: ../core/types.js\n e: compactSummaryPayload,referenced,nonAst,moduleAst,relevantAst,ids,selectedRelations,compactRecord\n compactSummaryPayload()\n referenced()\n nonAst()\n moduleAst()\n relevantAst()\n ids()\n selectedRelations()\n compactRecord()\n src/pipeline/run-execution.ts:\n i: ../communication/analyzer.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../extractors/ast.js,../extractors/configuration.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,./run-documentation.js,./run-failed.js,./run-summary.js,./run-types.js,node:path\n e: initializePipelineContext,root,runId,baseOutput,runDirectory,executePipeline,deterministicDocumentFiles,naturalLanguageAudit,result,git,ast,markdown,markdownAudit,documentationResult,documentationAudit,configurationExtraction,runtime,communicationInput,communicationAudit,communicationSyntheses,allRecords,generatedAt,graph,diagnostics,communicationAnalysis,taskSynthesis\n initializePipelineContext()\n root()\n runId()\n baseOutput()\n runDirectory()\n executePipeline()\n deterministicDocumentFiles()\n naturalLanguageAudit()\n result()\n git()\n ast()\n markdown()\n markdownAudit()\n documentationResult()\n documentationAudit()\n configurationExtraction()\n runtime()\n communicationInput()\n communicationAudit()\n communicationSyntheses()\n allRecords()\n generatedAt()\n graph()\n diagnostics()\n communicationAnalysis()\n taskSynthesis()\n src/evaluation/gold-types.ts:\n i: ./gold-reranker-validation.js\n e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,assertGoldLinkingCohort,assertRerankerFixture,assertRerankerModelIdentity,assertRerankerDecisions,decisions,recordLabels,seenModules\n GoldRecordProjection:\n GoldDocumentModelRecord:\n GoldExtractionCase:\n GoldFixtureRecord:\n GoldExpectedRelation:\n GoldRerankerDecisionFixture:\n GoldRerankerFixture:\n GoldLinkingCase:\n GoldProposalFixture:\n GoldDsl2TodoCase:\n GoldExpectedDiagnostic:\n GoldDiagnosticsCase:\n GoldDataset:\n BinaryMetric:\n GoldEvaluationReport:\n assertGoldDataset()\n dataset()\n assertDatasetObject()\n assertDatasetMetadata()\n assertDatasetCollections()\n assertUniqueCaseIds()\n assertExtractionCoverage()\n channels()\n assertLinkingCohorts()\n assertGoldLinkingCohort()\n assertRerankerFixture()\n assertRerankerModelIdentity()\n assertRerankerDecisions()\n decisions()\n recordLabels()\n seenModules()\n src/live/model-comparison.ts:\n i: ../core/types.js,./contract-check.js\n e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round\n LiveModelRun:\n LiveModelMeasurement:\n LiveModelAgreement:\n LiveModelComparison:\n measureLiveModelRun()\n responses()\n records()\n enrichedRecords()\n costUsd()\n isLlmEnriched()\n sourceKey()\n lines()\n compareLiveModelOutputs()\n rightBySource()\n pairs()\n agreeing()\n buildLiveModelComparison()\n models()\n passing()\n pick()\n measured()\n renderLiveModelComparison()\n sumUsage()\n values()\n round()\n src/watch/watcher.ts:\n i: ../config/env.js,../core/ignore.js,../core/types.js,../pipeline/run.js,node:fs,node:path\n e: SnapshotDelta,ScanOptions,ReportResult,WatchOptions,WatchConfiguration,WatchRuntime,scanTree,maxFiles,absoluteRoot,visit,absolute,relative,stat,diffSnapshots,previous,describeDelta,shown,rest,DEFAULT_MIN_INTERVAL_MS,DEFAULT_SCAN_INTERVAL_MS,watchRepository,configuration,runtime,defaultSleep,timer,onAbort,finish,createWatchConfiguration,root,minIntervalMs,scanIntervalMs,emit,now,sleep,matcher,runReport,result,createWatchRuntime,initialSnapshot,scanTreeCurrent,evaluateChangeCycle,current,delta,handleDelta,maybeGenerateReport,waitMs,generateReportForReason,startedAt,result\n SnapshotDelta:\n ScanOptions:\n ReportResult:\n WatchOptions:\n WatchConfiguration:\n WatchRuntime:\n scanTree()\n maxFiles()\n absoluteRoot()\n visit()\n absolute()\n relative()\n stat()\n diffSnapshots()\n previous()\n describeDelta()\n shown()\n rest()\n DEFAULT_MIN_INTERVAL_MS()\n DEFAULT_SCAN_INTERVAL_MS()\n watchRepository()\n configuration()\n runtime()\n defaultSleep()\n timer()\n onAbort()\n finish()\n createWatchConfiguration()\n root()\n minIntervalMs()\n scanIntervalMs()\n emit()\n now()\n sleep()\n matcher()\n runReport()\n result()\n createWatchRuntime()\n initialSnapshot()\n scanTreeCurrent()\n evaluateChangeCycle()\n current()\n delta()\n handleDelta()\n maybeGenerateReport()\n waitMs()\n generateReportForReason()\n startedAt()\n result()\n src/communication/identity.ts:\n i: ../core/io.js,../core/security.js,./intake-contract.js,node:path\n e: ParticipantIdentityEntry,ParticipantIdentityRegistry,LoadedParticipantIdentityRegistry,loadParticipantIdentityRegistry,v2Path,v1Path,registryPath,normalized,normalizeParticipantIdentityRegistry,registry,participants,ids,principals,key,normalizeV2Entry,principals,kind,assertParticipantIdentityRegistry,registry,ids,external,participants,validateRegistryShape,assertParticipantIdentityEntry,entry,participantId,role,values,assertParticipantIdentityId,assertParticipantIdentityRole,assertDisplayName,assertDuplicateId,assertParticipantIdentityField,values,assertParticipantIdentityFieldUnique,owner,assertRoleCompatibility,exactKeys,allowed,missing,extra\n ParticipantIdentityEntry:\n ParticipantIdentityRegistry:\n LoadedParticipantIdentityRegistry:\n loadParticipantIdentityRegistry()\n v2Path()\n v1Path()\n registryPath()\n normalized()\n normalizeParticipantIdentityRegistry()\n registry()\n participants()\n ids()\n principals()\n key()\n normalizeV2Entry()\n principals()\n kind()\n assertParticipantIdentityRegistry()\n registry()\n ids()\n external()\n participants()\n validateRegistryShape()\n assertParticipantIdentityEntry()\n entry()\n participantId()\n role()\n values()\n assertParticipantIdentityId()\n assertParticipantIdentityRole()\n assertDisplayName()\n assertDuplicateId()\n assertParticipantIdentityField()\n values()\n assertParticipantIdentityFieldUnique()\n owner()\n assertRoleCompatibility()\n exactKeys()\n allowed()\n missing()\n extra()\n src/communication/llm/implementation.ts:\n i: ../../config/env.js,../../llm/failure.js,../../llm/openrouter.js,../../llm/structured-schema.js\n e: ParticipantCommunicationSynthesis,AuditedCommunicationExtractionResult,CommunicationLlmRequiredError,CommunicationAttemptError\n ParticipantCommunicationSynthesis:\n AuditedCommunicationExtractionResult:\n CommunicationLlmRequiredError: super(-1),extractCommunicationIntentAudited(-1),startedAt(-1),deterministic(-1),records(-1),client(-1),groups(-1),response(-1),enrichments(-1),enrichedByOriginal(-1),generation(-1),participants(-1),failure(-1),responses(-1),classifyLlmFailure(-1)\n CommunicationAttemptError: super(-1),enrichWithCorrection(-1),completion(-1),fallbackOrThrow(-1),failed(-1),marked(-1)\n src/extractors/changelog.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: extractChangelog,absolute,body,relative,lines,raw,versionHeading,categoryHeading,bullet,block,text,action,resolvedPaths,changelogAction,normalized,lower\n extractChangelog()\n absolute()\n body()\n relative()\n lines()\n raw()\n versionHeading()\n categoryHeading()\n bullet()\n block()\n text()\n action()\n resolvedPaths()\n changelogAction()\n normalized()\n lower()\n src/extractors/docs-deterministic.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,./markdown-block.js,./markdown-paths.js,node:path\n e: DeterministicDocumentationOptions,DocumentationContext,LineResult,MAX_HEADING_LEVEL,MIN_STATEMENT_CHARS,extractDocumentationBaseline,root,resolver,body,primePathMapper,resolved,mapped,convertDocument,relative,lines,raw,lineResult,handleDocumentationLine,headingRecord,sectionHeading,bulletRecord,paragraphResult,parseFenceBlock,match,marker,language,record,parseSectionHeading,heading,level,title,record,parseBulletStatement,bullet,block,record,parseParagraphStatement,paragraph,record,readParagraph,cursor,line,qualifyingStatement,target,hasCodeSpanIdentifier,statementRecord,action,codeBlockRecord,targetsOf\n DeterministicDocumentationOptions:\n DocumentationContext:\n LineResult:\n MAX_HEADING_LEVEL()\n MIN_STATEMENT_CHARS()\n extractDocumentationBaseline()\n root()\n resolver()\n body()\n primePathMapper()\n resolved()\n mapped()\n convertDocument()\n relative()\n lines()\n raw()\n lineResult()\n handleDocumentationLine()\n headingRecord()\n sectionHeading()\n bulletRecord()\n paragraphResult()\n parseFenceBlock()\n match()\n marker()\n language()\n record()\n parseSectionHeading()\n heading()\n level()\n title()\n record()\n parseBulletStatement()\n bullet()\n block()\n record()\n parseParagraphStatement()\n paragraph()\n record()\n readParagraph()\n cursor()\n line()\n qualifyingStatement()\n target()\n hasCodeSpanIdentifier()\n statementRecord()\n action()\n codeBlockRecord()\n targetsOf()\n src/extractors/git.ts:\n i: ../config/env.js,../core/record.js,../core/text.js,../core/types.js,../tf/classifier.js,node:child_process,node:fs,node:fs,node:path,node:util\n e: GitCommit,ChangedFile,GitExtractionOptions,DiscoveredRepository,RepositoryDiscoveryResult,DiscoveryState,execFileAsync,MAX_DISCOVERED_REPOSITORIES,MAX_DISCOVERY_DIRECTORIES,REPOSITORY_READ_CONCURRENCY,DISCOVERY_EXCLUDED_DIRECTORIES,extractGitIntent,root,count,discovery,results,message,extractRepositoryGitIntent,message,commit,changedFiles,stats,diff,classified,inferredSymbols,scopedFiles,docOnly,discoverGitRepositories,state,current,entries,createDiscoveryState,hasMoreDiscoveryWork,takeNextDiscoveryDirectory,current,readDiscoveryEntries,filterDiscoveryChildren,processDiscoveryDirectory,child,prefix,marker,registerDiscoveredRepository,resolveDiscoveryPrefix,finishDiscovery,gitMarkerState,marker,isGitWorkTree,scopeChangedFile,mapWithConcurrency,results,cursor,workers,index,value,runGit,result,readCommits,output,readChangedFiles,output,parts,status,readStats,output,additions,deletions,extractChangedSymbols,output,symbol,isDocumentationPath\n GitCommit:\n ChangedFile:\n GitExtractionOptions:\n DiscoveredRepository:\n RepositoryDiscoveryResult:\n DiscoveryState:\n execFileAsync()\n MAX_DISCOVERED_REPOSITORIES()\n MAX_DISCOVERY_DIRECTORIES()\n REPOSITORY_READ_CONCURRENCY()\n DISCOVERY_EXCLUDED_DIRECTORIES()\n extractGitIntent()\n root()\n count()\n discovery()\n results()\n message()\n extractRepositoryGitIntent()\n message()\n commit()\n changedFiles()\n stats()\n diff()\n classified()\n inferredSymbols()\n scopedFiles()\n docOnly()\n discoverGitRepositories()\n state()\n current()\n entries()\n createDiscoveryState()\n hasMoreDiscoveryWork()\n takeNextDiscoveryDirectory()\n current()\n readDiscoveryEntries()\n filterDiscoveryChildren()\n processDiscoveryDirectory()\n child()\n prefix()\n marker()\n registerDiscoveredRepository()\n resolveDiscoveryPrefix()\n finishDiscovery()\n gitMarkerState()\n marker()\n isGitWorkTree()\n scopeChangedFile()\n mapWithConcurrency()\n results()\n cursor()\n workers()\n index()\n value()\n runGit()\n result()\n readCommits()\n output()\n readChangedFiles()\n output()\n parts()\n status()\n readStats()\n output()\n additions()\n deletions()\n extractChangedSymbols()\n output()\n symbol()\n isDocumentationPath()\n src/extractors/nl-llm-helpers.ts:\n i: ../config/env.js,../core/io.js,../core/record.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,node:fs,node:path,node:url\n e: RawNlRecord,NlResponse,NlAttemptError\n RawNlRecord:\n NlResponse:\n NlAttemptError: super(-1),extractNlWithCorrection(-1),completion(-1),markDeterministicNlRecords(-1),toIntentRecord(-1),lines(-1),action(-1),normalizedText(-1),statementText(-1),nlStageAudit(-1),readPrompt(-1),promptPath(-1),sourceExcerpt(-1),start(-1),end(-1),resolveAction(-1),resolveModality(-1),OBJECT_PLACEHOLDERS(-1),nonEmptyText(-1),isPlaceholder(-1),text(-1),resolveObject(-1),fallback(-1),clampLine(-1),allowedAction(-1),allowedModality(-1),NL_ACTION_SET(-1),NL_MODALITY_SET(-1),nlStrings(-1),NL_RECORD_CONTRACT(-1),NL_RESPONSE_CONTRACT(-1)\n src/graph/diff.ts:\n i: ../core/id.js,../core/schema.js\n e: DiffSvgOptions,diffIntentGraphs,beforeById,afterById,unchangedRecords,beforeGroups,afterGroups,left,right,paired,beforeRecord,afterRecord,beforeRelations,afterRelations,fingerprint,renderGraphDiffSvg,maxItems,title,visibleRows,width,height,y,assertGraph,groupRecords,groups,identity,values,recordIdentity,normalizeRecord,changedFieldPaths,isObject,relationKey,compareRecords,compareRelations,recordLabel,changeLabel,metricCard,escapeXml,truncate\n DiffSvgOptions:\n diffIntentGraphs()\n beforeById()\n afterById()\n unchangedRecords()\n beforeGroups()\n afterGroups()\n left()\n right()\n paired()\n beforeRecord()\n afterRecord()\n beforeRelations()\n afterRelations()\n fingerprint()\n renderGraphDiffSvg()\n maxItems()\n title()\n visibleRows()\n width()\n height()\n y()\n assertGraph()\n groupRecords()\n groups()\n identity()\n values()\n recordIdentity()\n normalizeRecord()\n changedFieldPaths()\n isObject()\n relationKey()\n compareRecords()\n compareRelations()\n recordLabel()\n changeLabel()\n metricCard()\n escapeXml()\n truncate()\n src/graph/diagnostics.ts:\n i: ../core/id.js,../core/schema.js,../core/target.js,./capability-evidence.js,./changelog-signal.js,./symbol-resolution.js\n e: DiagnosticContext,diagnoseGraph,context,buildDiagnosticContext,neighbors,recordsById,collectRecordDiagnostics,related,missingFields,symbolIssues,isEvidence,planned,notPlanned,notDocumented,changelog,ambiguous,lowConfidence,unlinked,collectRelatedRecords,collectMissingFields,collectSymbolIssues,isRecordEvidenced,hasDocumentedTargetEvidence,buildPlannedNotImplementedDiagnostic,hasLocationOnlyEvidence,buildImplementedWithoutPlanDiagnostic,buildUndocumentedImplementationDiagnostic,buildChangelogWithoutImplementationDiagnostic,buildAmbiguousRequirementDiagnostic,detail,buildLowConfidenceDiagnostic,buildUnlinkedRecordDiagnostic,collectContradictionDiagnostics,indexGroundedImplementationEvidence,grounded,left,right,relationSupportsImplementation,basis,score,ambiguityDetail,paths,ambiguityAction,actions,buildNeighbors,map,appendNeighbor,values,indexImplementedPaths,paths,indexDocumentedPaths,paths,hasImplementedTarget,hasDocumentedTarget,isPlan,isImplementationEvidence,isPublicImplementation,symbol,isReleaseCandidate,isImportantRecord,makeDiagnostic,severityRank\n DiagnosticContext:\n diagnoseGraph()\n context()\n buildDiagnosticContext()\n neighbors()\n recordsById()\n collectRecordDiagnostics()\n related()\n missingFields()\n symbolIssues()\n isEvidence()\n planned()\n notPlanned()\n notDocumented()\n changelog()\n ambiguous()\n lowConfidence()\n unlinked()\n collectRelatedRecords()\n collectMissingFields()\n collectSymbolIssues()\n isRecordEvidenced()\n hasDocumentedTargetEvidence()\n buildPlannedNotImplementedDiagnostic()\n hasLocationOnlyEvidence()\n buildImplementedWithoutPlanDiagnostic()\n buildUndocumentedImplementationDiagnostic()\n buildChangelogWithoutImplementationDiagnostic()\n buildAmbiguousRequirementDiagnostic()\n detail()\n buildLowConfidenceDiagnostic()\n buildUnlinkedRecordDiagnostic()\n collectContradictionDiagnostics()\n indexGroundedImplementationEvidence()\n grounded()\n left()\n right()\n relationSupportsImplementation()\n basis()\n score()\n ambiguityDetail()\n paths()\n ambiguityAction()\n actions()\n buildNeighbors()\n map()\n appendNeighbor()\n values()\n indexImplementedPaths()\n paths()\n indexDocumentedPaths()\n paths()\n hasImplementedTarget()\n hasDocumentedTarget()\n isPlan()\n isImplementationEvidence()\n isPublicImplementation()\n symbol()\n isReleaseCandidate()\n isImportantRecord()\n makeDiagnostic()\n severityRank()\n src/core/io.ts:\n i: ./types.js,node:fs,node:path\n e: WalkOptions,WalkState,DEFAULT_IGNORED_DIRS,ensureDir,readText,stat,pathExists,writeJson,writeText,writeJsonl,readJsonl,body,readJson,walkFiles,state,createWalkState,walkDirectory,entries,walkEntry,absolute,relative,isTargetFile,escapeRegex,globToRegExp,normalized,char,next,after,matchesAnyGlob,normalized,resolveGlobs,files,absolute,relative,relative,relativePosix\n WalkOptions:\n WalkState:\n DEFAULT_IGNORED_DIRS()\n ensureDir()\n readText()\n stat()\n pathExists()\n writeJson()\n writeText()\n writeJsonl()\n readJsonl()\n body()\n readJson()\n walkFiles()\n state()\n createWalkState()\n walkDirectory()\n entries()\n walkEntry()\n absolute()\n relative()\n isTargetFile()\n escapeRegex()\n globToRegExp()\n normalized()\n char()\n next()\n after()\n matchesAnyGlob()\n normalized()\n resolveGlobs()\n files()\n absolute()\n relative()\n relative()\n relativePosix()\n src/core/schema/code-change.ts:\n i: ../id.js,../types.js\n e: assertCodeChangePlan,known,assertCodeChangePlans,known,ids,id,assertCodeChangePlansForReview,ids,plan,evidence,id,assertCodeChangePlanForAcceptance,known,plan,evidence,assertCodeChangeAcceptance,beforeKnown,afterKnown,acceptance,expectedCleared,expectedRemaining,expectedBlocking,expectedAccepted,assertPlanGraphFingerprint,assertCodeChangePlanValue,plan,target,targetPaths,changePaths,change,normalizedPath,risk,evidence,semantic,expectedHash,expectedId,validateCodeChangePlanContext,known,conclusions,proposals,referencedConclusionIds,proposal,proposalIds,assertStringSetMatch\n assertCodeChangePlan()\n known()\n assertCodeChangePlans()\n known()\n ids()\n id()\n assertCodeChangePlansForReview()\n ids()\n plan()\n evidence()\n id()\n assertCodeChangePlanForAcceptance()\n known()\n plan()\n evidence()\n assertCodeChangeAcceptance()\n beforeKnown()\n afterKnown()\n acceptance()\n expectedCleared()\n expectedRemaining()\n expectedBlocking()\n expectedAccepted()\n assertPlanGraphFingerprint()\n assertCodeChangePlanValue()\n plan()\n target()\n targetPaths()\n changePaths()\n change()\n normalizedPath()\n risk()\n evidence()\n semantic()\n expectedHash()\n expectedId()\n validateCodeChangePlanContext()\n known()\n conclusions()\n proposals()\n referencedConclusionIds()\n proposal()\n proposalIds()\n assertStringSetMatch()\n src/synthesis/code-change-path.ts:\n e: NON_SOURCE_DIR_SEGMENTS,BINARY_EXTENSIONS,GENERATED_ANALYSIS_BASENAMES,T2C_ARTIFACT_BASENAMES,EXTENSIONLESS_SOURCE_BASENAMES,isUsefulCodeChangePath,isPlannablePath,normalized,segments,lowerSegments,basename,normalizePlannablePath,isCandidatePathSyntax,splitPathSegments,isInvalidSegmentShape,isConcretePath,hasShellPattern,isDisallowedSegment,isPlannableBasename,lowerBasename,dot,ext,isGeneratedArtifactPath\n NON_SOURCE_DIR_SEGMENTS()\n BINARY_EXTENSIONS()\n GENERATED_ANALYSIS_BASENAMES()\n T2C_ARTIFACT_BASENAMES()\n EXTENSIONLESS_SOURCE_BASENAMES()\n isUsefulCodeChangePath()\n isPlannablePath()\n normalized()\n segments()\n lowerSegments()\n basename()\n normalizePlannablePath()\n isCandidatePathSyntax()\n splitPathSegments()\n isInvalidSegmentShape()\n isConcretePath()\n hasShellPattern()\n isDisallowedSegment()\n isPlannableBasename()\n lowerBasename()\n dot()\n ext()\n isGeneratedArtifactPath()\n src/synthesis/validation.ts:\n i: ../core/schema.js,../core/types.js\n e: TodoProposalDuplicate,TodoProposalValidationResult,validateAndClassifyTodoProposals,existing,duplicates,orderedProposalIds,duplicateProposalIds,duplicateIds,duplicateEvidence,proposalWords,target,sharedTicket,sharedSymbol,sharedPath,similarity,dependencyFirstPriorityOrder,byId,remainingDependencies,dependents,values,compare,left,right,ready,id,remaining,words,jaccard,common,intersects,values\n TodoProposalDuplicate:\n TodoProposalValidationResult:\n validateAndClassifyTodoProposals()\n existing()\n duplicates()\n orderedProposalIds()\n duplicateProposalIds()\n duplicateIds()\n duplicateEvidence()\n proposalWords()\n target()\n sharedTicket()\n sharedSymbol()\n sharedPath()\n similarity()\n dependencyFirstPriorityOrder()\n byId()\n remainingDependencies()\n dependents()\n values()\n compare()\n left()\n right()\n ready()\n id()\n remaining()\n words()\n jaccard()\n common()\n intersects()\n values()\n src/synthesis/tasks-llm.ts:\n i: ../config/env.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-metadata.js,./task-synthesis-payload.js,node:fs,node:path,node:url\n e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError\n RawDiagnosticAction:\n AuditedTaskSynthesisResult:\n TaskSynthesisRequiredError: super(-1)\n TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1)\n src/synthesis/code-change-plan/implementation-source-patch-assert.ts:\n i: ../../core/schema.js,./implementation-source-patch-diff.js\n e: SourcePatchEditValidationContext,SourcePatchSetValidationContext,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,marker,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet\n SourcePatchEditValidationContext:\n SourcePatchSetValidationContext:\n assertCodeChangeSourcePatch()\n patch()\n editPaths()\n assertCodeChangeSourcePatchObject()\n patch()\n validateSourcePatchSchema()\n validateSourcePatchIdentifiers()\n validateSourcePatchEdits()\n collectSourcePatchEditPathActions()\n paths()\n editContext()\n validateSourcePatchEdit()\n normalizedEdit()\n normalizedPath()\n assertSourcePatchEditObject()\n validateSourcePatchEditBody()\n validateSourcePatchEditDiff()\n assertUniqueSourcePatchEditPathAction()\n normalizeSourcePatchEditPath()\n normalizedPath()\n ensureSourcePatchEditAction()\n ensureSourcePatchEditInstruction()\n validateSourcePatchHashAndId()\n expectedHash()\n validateSourcePatchGeneration()\n validateSourcePatchAgainstPlan()\n expectedChanges()\n assertSourcePatchPlanBinding()\n collectExpectedPlanChanges()\n validateSourcePatchEditsAgainstPlan()\n allowed()\n editPath()\n validateSourcePatchEvidence()\n marker()\n assertCodeChangeSourcePatchSet()\n set()\n context()\n createSourcePatchSetValidationContext()\n expectedPlanIds()\n assertSourcePatchSetObject()\n set()\n validateSourcePatchSetSchema()\n validateSourcePatchSetPatches()\n patchIds()\n validateSetPatchAndTrackDuplicates()\n expectedPlan()\n validateSetPatchGraphFingerprint()\n assertUniqueSetPatchId()\n validateSetPatchesPlanCoverage()\n validateSourcePatchSetGeneration()\n exactSourcePatchKeys()\n actual()\n assertSourcePatchIds()\n assertSourcePatchStrings()\n exactSourcePatchSet()\n src/synthesis/code-change-plan/implementation-source-patch-apply-diff.ts:\n i: ./implementation-source-patch-diff.js\n e: ParsedUnifiedDiffHunk,UnifiedDiffParsingContext,UnifiedDiffCursor,applyUnifiedDiffToText,baseLines,hunks,output,joinAppliedText,parseUnifiedDiffIntoHunks,normalizedDiff,context,createEmptyUnifiedDiffContext,parseUnifiedDiffLines,finalizeUnifiedDiffContext,applyUnifiedDiffLineToContext,header,parseUnifiedDiffHeader,buildParsedUnifiedDiffHunk,applyUnifiedDiffHunks,applyUnifiedDiffHunk,oldIndex,copyBaseLinesToCursor,appendRemainingBaseLines,validateHunkCounts,oldCount,newCount,applyUnifiedDiffLine,mark,body,applyUnifiedDiffContextLine,applyUnifiedDiffDeletionLine,applyUnifiedDiffAdditionLine,splitKeep,lines\n ParsedUnifiedDiffHunk:\n UnifiedDiffParsingContext:\n UnifiedDiffCursor:\n applyUnifiedDiffToText()\n baseLines()\n hunks()\n output()\n joinAppliedText()\n parseUnifiedDiffIntoHunks()\n normalizedDiff()\n context()\n createEmptyUnifiedDiffContext()\n parseUnifiedDiffLines()\n finalizeUnifiedDiffContext()\n applyUnifiedDiffLineToContext()\n header()\n parseUnifiedDiffHeader()\n buildParsedUnifiedDiffHunk()\n applyUnifiedDiffHunks()\n applyUnifiedDiffHunk()\n oldIndex()\n copyBaseLinesToCursor()\n appendRemainingBaseLines()\n validateHunkCounts()\n oldCount()\n newCount()\n applyUnifiedDiffLine()\n mark()\n body()\n applyUnifiedDiffContextLine()\n applyUnifiedDiffDeletionLine()\n applyUnifiedDiffAdditionLine()\n splitKeep()\n lines()\n src/interfaces/a2a-task-store.ts:\n i: ../config/env.js,../core/security.js,../services/actions.js,./intake-actions.js,node:crypto,node:fs,node:path,node:timers/promises\n e: PreparedTask,ListCursor,TaskStoreSnapshot,tasks,messageTaskIndex,clearA2aTaskStoreForTests,handleA2aRpc,handleRpcInTaskStore,params,sendMessage,message,sendConfiguration,prepared,getTask,task,historyLength,cancelTask,task,fullTaskView,scheduleTaskExecution,task,withTaskStore,storePath,release,result,configuredTaskStorePath,acquireTaskStoreLock,deadline,removeLock,removeStaleLock,stat,loadTaskStore,content,snapshot,restored,readTaskStore,stat,restoreTask,assertStoredTask,saveTaskStore,removeTemporaryFile,prepareTask,key,indexedTask,taskForMessage,indexedTaskId,task,continueTask,existing,continuationError,message,createTask,taskId,contextId,executeMessage,command,result,domainResult,rejectTask,protobuf,diagnostic,message,currentTaskState,completeTask,protobuf,message,protobufResult,intakeDomainResult,record,failTask,message,agentMessage,listTasks,contextId,status,pageSize,historyLength,includeArtifacts,statusTimestampAfter,filter,filtered,pageCursor,start,page,last,filteredTasks,compareTasksByUpdate,timestampOrder,indexAfterCursor,exact,cursorTime,next,taskTime,encodeCursor,decodeCursor,decoded,taskView,effectiveHistoryLength,history,cloneArtifact,ownedTask,task,messageKey,errorMessage\n PreparedTask:\n ListCursor:\n TaskStoreSnapshot:\n tasks()\n messageTaskIndex()\n clearA2aTaskStoreForTests()\n handleA2aRpc()\n handleRpcInTaskStore()\n params()\n sendMessage()\n message()\n sendConfiguration()\n prepared()\n getTask()\n task()\n historyLength()\n cancelTask()\n task()\n fullTaskView()\n scheduleTaskExecution()\n task()\n withTaskStore()\n storePath()\n release()\n result()\n configuredTaskStorePath()\n acquireTaskStoreLock()\n deadline()\n removeLock()\n removeStaleLock()\n stat()\n loadTaskStore()\n content()\n snapshot()\n restored()\n readTaskStore()\n stat()\n restoreTask()\n assertStoredTask()\n saveTaskStore()\n removeTemporaryFile()\n prepareTask()\n key()\n indexedTask()\n taskForMessage()\n indexedTaskId()\n task()\n continueTask()\n existing()\n continuationError()\n message()\n createTask()\n taskId()\n contextId()\n executeMessage()\n command()\n result()\n domainResult()\n rejectTask()\n protobuf()\n diagnostic()\n message()\n currentTaskState()\n completeTask()\n protobuf()\n message()\n protobufResult()\n intakeDomainResult()\n record()\n failTask()\n message()\n agentMessage()\n listTasks()\n contextId()\n status()\n pageSize()\n historyLength()\n includeArtifacts()\n statusTimestampAfter()\n filter()\n filtered()\n pageCursor()\n start()\n page()\n last()\n filteredTasks()\n compareTasksByUpdate()\n timestampOrder()\n indexAfterCursor()\n exact()\n cursorTime()\n next()\n taskTime()\n encodeCursor()\n decodeCursor()\n decoded()\n taskView()\n effectiveHistoryLength()\n history()\n cloneArtifact()\n ownedTask()\n task()\n messageKey()\n errorMessage()\n src/pipeline/run-helpers.ts:\n i: ../communication/llm.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../synthesis/code-change-plan.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,./run-failed.js,./run-types.js,node:path\n e: collectCommunicationAnalysis,includeCommunication,communicationStartedAt,missingDirectory,communication,foundMissingDirectory,collectTaskSynthesis,taskSynthesisMode,taskSynthesisAudit,todoContent,createCodeChangeArtifacts,codeChangePlans,codeChangeReview,codeChangeSourcePatches,collectTargetHints,values,appendLlmNotConfigured\n collectCommunicationAnalysis()\n includeCommunication()\n communicationStartedAt()\n missingDirectory()\n communication()\n foundMissingDirectory()\n collectTaskSynthesis()\n taskSynthesisMode()\n taskSynthesisAudit()\n todoContent()\n createCodeChangeArtifacts()\n codeChangePlans()\n codeChangeReview()\n codeChangeSourcePatches()\n collectTargetHints()\n values()\n appendLlmNotConfigured()\n src/operations/operation-step-validation.ts:\n i: ./types.js\n e: RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,uniqueStrings,parseOperationStep,step,validateStepIdentity,validateStepRuntime,validateOperationStepPolicy,parseStepParameters,parameters,reference,variable,validateOperationStepRollback,rollback,validateOperationStep,step,parameters,rollback\n RISK_CLASSES()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n uniqueStrings()\n parseOperationStep()\n step()\n validateStepIdentity()\n validateStepRuntime()\n validateOperationStepPolicy()\n parseStepParameters()\n parameters()\n reference()\n variable()\n validateOperationStepRollback()\n rollback()\n validateOperationStep()\n step()\n parameters()\n rollback()\n src/operations/validation.ts:\n i: ../core/id.js,../core/types.js,./generation-validation.js,./operation-step-validation.js,./types.js\n e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,expectedId,assertVariableContractShape,assertVariableContractCore,assertVariableSource,source,assertVariableAccess,access,assertVariableAuthoritativeness,assertVariableMutability,buildVariableContractId,assertAcyclic,ids,visiting,visited,byId,visit,isOperationStepCircularDependency,hasOperationStepBeenVisited,startOperationStepVisit,validateOperationStepDependency,completeOperationStepVisit,assertOperationPlan,plan,variables,variableById,validateOperationPlanShape,validateOperationPlanMetadata,validateOperationPlanEvidence,evidence,collectOperationPlanVariables,variables,validateOperationSteps,stepIds,steps,hasCommandStep,founderDecisionRequired,step,validateOperationExpectations,coveredSteps,expectationIds,expectation,verifiedBy,validateOperationDecision,decision,validateOperationVerification,verification,validateOperationPlanHash,castPlan,expectedHash\n VALUE_TYPES()\n CLASSIFICATIONS()\n SOURCE_KINDS()\n objectValue()\n exactKeys()\n actual()\n nonBlank()\n dateString()\n uniqueStrings()\n assertPrincipalList()\n principals()\n isJsonValue()\n assertVariableContract()\n contract()\n source()\n access()\n readers()\n writers()\n expectedId()\n assertVariableContractShape()\n assertVariableContractCore()\n assertVariableSource()\n source()\n assertVariableAccess()\n access()\n assertVariableAuthoritativeness()\n assertVariableMutability()\n buildVariableContractId()\n assertAcyclic()\n ids()\n visiting()\n visited()\n byId()\n visit()\n isOperationStepCircularDependency()\n hasOperationStepBeenVisited()\n startOperationStepVisit()\n validateOperationStepDependency()\n completeOperationStepVisit()\n assertOperationPlan()\n plan()\n variables()\n variableById()\n validateOperationPlanShape()\n validateOperationPlanMetadata()\n validateOperationPlanEvidence()\n evidence()\n collectOperationPlanVariables()\n variables()\n validateOperationSteps()\n stepIds()\n steps()\n hasCommandStep()\n founderDecisionRequired()\n step()\n validateOperationExpectations()\n coveredSteps()\n expectationIds()\n expectation()\n verifiedBy()\n validateOperationDecision()\n decision()\n validateOperationVerification()\n verification()\n validateOperationPlanHash()\n castPlan()\n expectedHash()\n src/communication/intake-store.ts:\n i: ../core/io.js,../core/security.js,node:crypto,node:fs,node:path\n e: IntakeEvent,StreamSnapshot,IntakeEventStore\n IntakeEvent:\n StreamSnapshot:\n IntakeEventStore: read(-1),names(-1),name(-1),eventPath(-1),stat(-1),event(-1),lockPath(-1),stream(-1),existing(-1),writeRegistry(-1),projectionPath(-1),slug(-1),atomicWrite(-1),safe(-1),temp(-1),assertSafe(-1),hashEvent(-1),broken(-1),unsafe(-1)\n scripts/verify-workflow-yaml.mjs:\n i: node:fs,node:path\n e: explicit,files,body,seen,match,key,previous,workflowFiles,directory\n explicit()\n files()\n body()\n seen()\n match()\n key()\n previous()\n workflowFiles()\n directory()\n scripts/research/audit-changelog-sample.mjs:\n i: node:child_process,node:fs,node:path\n e: options,entries,root,latest,runDirectory,diagnostics,graph,recordsById,findings,selected,trackedFiles,c\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "planfile-tickets.yaml", "rel_path": "planfile-tickets.yaml", "path": "planfile-tickets.yaml", "size": "142.1KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "source: code2llm\n# generated in 0.14s\nschema: code2llm.planfile_tickets.v1\nproject_root: /home/tom/github/semcod/todo2code\ntickets:\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: php.ast_extract.parseFile (CC=38)'\n description: 'code2llm reports `php.ast_extract.parseFile` at `php/ast_extract.php:77`\n with cyclomatic complexity 38 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - php/ast_extract.php\n dedupe_key: code2llm:cc:php/ast_extract.php:php.ast_extract.parseFile\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.research.rank-intent-graph-embeddings.main\n (CC=27)'\n description: 'code2llm reports `scripts.research.rank-intent-graph-embeddings.main`\n at `scripts/research/rank-intent-graph-embeddings.py:35` with cyclomatic complexity\n 27 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)'\n description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29`\n with cyclomatic complexity 26 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/go/examples/basic/main.go\n dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_envelope'\n description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`.\n\n\n Function ''decode_envelope'' is oversized: CC=10, fan-out=8, mutations=28.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:78:God Function:\n decode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/interfaces/intake_cli.py:122`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=18, mutations=22.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:122:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/research/evaluate-embedding-pairs.py:26`.\n\n\n Function ''main'' is oversized: CC=9, fan-out=21, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:26:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `sdk/python/examples/basic.py:22`.\n\n\n Function ''main'' is oversized: CC=11, fan-out=31, mutations=18.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/python/examples/basic.py\n dedupe_key: 'code2llm:smell:god_function:sdk/python/examples/basic.py:22:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Module: src.cli'\n description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`.\n\n\n Module ''src.cli'' is too large (212 functions, 1 classes). Consider splitting\n into sub-modules.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: high\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli'\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.collectDockerReferences\n (CC=20)'\n description: 'code2llm reports `scripts.verify-env-contract.collectDockerReferences`\n at `scripts/verify-env-contract.mjs:84` with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - scripts/verify-env-contract.mjs\n dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.collectDockerReferences\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)'\n description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27`\n with cyclomatic complexity 20 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/rust/examples/basic.rs\n dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.baseUrl\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.main (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.main` at `sdk/typescript/examples/basic.ts:17`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.main\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.root (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.root` at `sdk/typescript/examples/basic.ts:15`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.root\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.token (CC=17)'\n description: 'code2llm reports `sdk.typescript.examples.basic.token` at `sdk/typescript/examples/basic.ts:14`\n with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - sdk/typescript/examples/basic.ts\n dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token\n- signal: code2llm_cc\n title: 'Reduce cyclomatic complexity: src.core.record-metadata.generationMetadata\n (CC=17)'\n description: 'code2llm reports `src.core.record-metadata.generationMetadata` at\n `src/core/record-metadata.ts:4` with cyclomatic complexity 17 (limit 15).\n\n\n Extract smaller functions, flatten conditionals, or split strategy branches. Re-run\n code2llm after the change and keep tests green.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - complexity\n - refactor\n files:\n - src/core/record-metadata.ts\n dedupe_key: code2llm:cc:src/core/record-metadata.ts:src.core.record-metadata.generationMetadata\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: nl_mode, file, self, root'\n description: 'code2llm reports `Data Clump: nl_mode, file, self, root` in `sdk/python/todo2code/client.py:307`.\n\n\n Arguments (nl_mode, file, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump:\n nl_mode, file, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: nl_mode, file, self, root'\n description: 'code2llm reports `Data Clump: nl_mode, file, self, root` in `sdk/python/todo2code/client.py:312`.\n\n\n Arguments (nl_mode, file, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump:\n nl_mode, file, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: patterns, excludes, self, root'\n description: 'code2llm reports `Data Clump: patterns, excludes, self, root` in `sdk/python/todo2code/client.py:354`.\n\n\n Arguments (patterns, excludes, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump:\n patterns, excludes, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: patterns, excludes, self, root'\n description: 'code2llm reports `Data Clump: patterns, excludes, self, root` in `sdk/python/todo2code/client.py:362`.\n\n\n Arguments (patterns, excludes, self, root) are used together in multiple functions:\n sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump:\n patterns, excludes, self, root'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: payload, action, self'\n description: 'code2llm reports `Data Clump: payload, action, self` in `sdk/python/todo2code/client.py:249`.\n\n\n Arguments (payload, action, self) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump:\n payload, action, self'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: payload, action, self'\n description: 'code2llm reports `Data Clump: payload, action, self` in `sdk/python/todo2code/client.py:261`.\n\n\n Arguments (payload, action, self) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send,\n sdk.python.todo2code.client.T2CClient.call.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump:\n payload, action, self'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, todo, root, markdown_mode, changelog'\n description: 'code2llm reports `Data Clump: self, todo, root, markdown_mode, changelog`\n in `sdk/python/todo2code/client.py:332`.\n\n\n Arguments (self, todo, root, markdown_mode, changelog) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump:\n self, todo, root, markdown_mode, changelog'\n- signal: code2llm_smell_data_clump\n title: 'Address code smell: Data Clump: self, todo, root, markdown_mode, changelog'\n description: 'code2llm reports `Data Clump: self, todo, root, markdown_mode, changelog`\n in `sdk/python/todo2code/client.py:341`.\n\n\n Arguments (self, todo, root, markdown_mode, changelog) are used together in multiple\n functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - data-clump\n files:\n - sdk/python/todo2code/client.py\n dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump:\n self, todo, root, markdown_mode, changelog'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: MAX_PER_SECTION'\n description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`.\n\n\n Function ''MAX_PER_SECTION'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:15:God\n Function: MAX_PER_SECTION'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: OBJECT_PLACEHOLDERS'\n description: 'code2llm reports `God Function: OBJECT_PLACEHOLDERS` in `src/extractors/docs-record.ts:21`.\n\n\n Function ''OBJECT_PLACEHOLDERS'' is oversized: CC=14, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-record.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-record.ts:21:God Function:\n OBJECT_PLACEHOLDERS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: PATH_ROOTS'\n description: 'code2llm reports `God Function: PATH_ROOTS` in `src/core/text.ts:390`.\n\n\n Function ''PATH_ROOTS'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:390:God Function: PATH_ROOTS'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: RPC'\n description: 'code2llm reports `God Function: RPC` in `sdk/go/client.go:70`.\n\n\n Function ''RPC'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/go/client.go\n dedupe_key: 'code2llm:smell:god_function:sdk/go/client.go:70:God Function: RPC'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absolute'\n description: 'code2llm reports `God Function: absolute` in `src/extractors/nl.ts:40`.\n\n\n Function ''absolute'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:40:God Function: absolute'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: absoluteRoot'\n description: 'code2llm reports `God Function: absoluteRoot` in `src/watch/watcher.ts:40`.\n\n\n Function ''absoluteRoot'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:40:God Function: absoluteRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: action'\n description: 'code2llm reports `God Function: action` in `src/extractors/todo.ts:50`.\n\n\n Function ''action'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:50:God Function:\n action'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics'\n description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics`\n in `src/communication/analyzer.ts:328`.\n\n\n Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:328:God Function:\n addCommunicationIssuesToDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: analyzeCommunication'\n description: 'code2llm reports `God Function: analyzeCommunication` in `src/communication/analyzer.ts:56`.\n\n\n Function ''analyzeCommunication'' is oversized: CC=5, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:56:God Function:\n analyzeCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyAcceptedSemanticRelations'\n description: 'code2llm reports `God Function: applyAcceptedSemanticRelations` in\n `src/semantic/reranker/result.ts:226`.\n\n\n Function ''applyAcceptedSemanticRelations'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:226:God\n Function: applyAcceptedSemanticRelations'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyCodeChangeSourcePatch'\n description: 'code2llm reports `God Function: applyCodeChangeSourcePatch` in `src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:59`.\n\n\n Function ''applyCodeChangeSourcePatch'' is oversized: CC=4, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts:59:God\n Function: applyCodeChangeSourcePatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: applyTodoPatch'\n description: 'code2llm reports `God Function: applyTodoPatch` in `src/synthesis/todo-patch.ts:160`.\n\n\n Function ''applyTodoPatch'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function:\n applyTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclic'\n description: 'code2llm reports `God Function: assertAcyclic` in `src/operations/validation.ts:161`.\n\n\n Function ''assertAcyclic'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/validation.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:161:God Function:\n assertAcyclic'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertAcyclicProposalDependencies'\n description: 'code2llm reports `God Function: assertAcyclicProposalDependencies`\n in `src/core/schema/utils.ts:96`.\n\n\n Function ''assertAcyclicProposalDependencies'' is oversized: CC=7, fan-out=11,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:96:God Function:\n assertAcyclicProposalDependencies'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertCodeChangeAcceptance'\n description: 'code2llm reports `God Function: assertCodeChangeAcceptance` in `src/core/schema/code-change.ts:125`.\n\n\n Function ''assertCodeChangeAcceptance'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:125:God\n Function: assertCodeChangeAcceptance'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertConclusionValue'\n description: 'code2llm reports `God Function: assertConclusionValue` in `src/core/schema/conclusions.ts:89`.\n\n\n Function ''assertConclusionValue'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:89:God Function:\n assertConclusionValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertGroundedGenerationMetadata'\n description: 'code2llm reports `God Function: assertGroundedGenerationMetadata`\n in `src/core/schema/utils.ts:187`.\n\n\n Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/utils.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:187:God Function:\n assertGroundedGenerationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraph'\n description: 'code2llm reports `God Function: assertIntentGraph` in `src/core/schema/intent.ts:220`.\n\n\n Function ''assertIntentGraph'' is oversized: CC=7, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:220:God Function:\n assertIntentGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertIntentGraphDiff'\n description: 'code2llm reports `God Function: assertIntentGraphDiff` in `src/core/schema/intent.ts:249`.\n\n\n Function ''assertIntentGraphDiff'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/intent.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/intent.ts:249:God Function:\n assertIntentGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertOperationPlan'\n description: 'code2llm reports `God Function: assertOperationPlan` in `src/operations/validation.ts:208`.\n\n\n Function ''assertOperationPlan'' is oversized: CC=1, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/validation.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:208:God Function:\n assertOperationPlan'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipant'\n description: 'code2llm reports `God Function: assertParticipant` in `src/communication/intake-contract.ts:248`.\n\n\n Function ''assertParticipant'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-contract.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-contract.ts:248:God\n Function: assertParticipant'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertParticipantIdentityEntry'\n description: 'code2llm reports `God Function: assertParticipantIdentityEntry` in\n `src/communication/identity.ts:119`.\n\n\n Function ''assertParticipantIdentityEntry'' is oversized: CC=5, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/identity.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/identity.ts:119:God Function:\n assertParticipantIdentityEntry'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertProjectionWritable'\n description: 'code2llm reports `God Function: assertProjectionWritable` in `src/communication/intake-service.ts:158`.\n\n\n Function ''assertProjectionWritable'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-service.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:158:God\n Function: assertProjectionWritable'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoPatchArtifact'\n description: 'code2llm reports `God Function: assertTodoPatchArtifact` in `src/synthesis/todo-patch.ts:221`.\n\n\n Function ''assertTodoPatchArtifact'' is oversized: CC=11, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:221:God Function:\n assertTodoPatchArtifact'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: assertTodoProposalValue'\n description: 'code2llm reports `God Function: assertTodoProposalValue` in `src/core/schema/conclusions.ts:116`.\n\n\n Function ''assertTodoProposalValue'' is oversized: CC=9, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/conclusions.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/conclusions.ts:116:God\n Function: assertTodoProposalValue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: atomicWrite'\n description: 'code2llm reports `God Function: atomicWrite` in `src/synthesis/todo-patch.ts:274`.\n\n\n Function ''atomicWrite'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:274:God Function:\n atomicWrite'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: baseWorktree'\n description: 'code2llm reports `God Function: baseWorktree` in `src/comparison/workspace.ts:97`.\n\n\n Function ''baseWorktree'' is oversized: CC=3, fan-out=25, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:97:God Function:\n baseWorktree'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: block'\n description: 'code2llm reports `God Function: block` in `src/extractors/todo.ts:46`.\n\n\n Function ''block'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:46:God Function:\n block'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/nl.ts:41`.\n\n\n Function ''body'' is oversized: CC=2, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:41:God Function: body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/changelog.ts:27`.\n\n\n Function ''body'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:27:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: body'\n description: 'code2llm reports `God Function: body` in `src/extractors/todo.ts:28`.\n\n\n Function ''body'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:28:God Function:\n body'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildAcceptanceContext'\n description: 'code2llm reports `God Function: buildAcceptanceContext` in `src/synthesis/code-change-plan/implementation-helpers-acceptance.ts:65`.\n\n\n Function ''buildAcceptanceContext'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/code-change-plan/implementation-helpers-acceptance.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/code-change-plan/implementation-helpers-acceptance.ts:65:God\n Function: buildAcceptanceContext'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: buildParticipantRows'\n description: 'code2llm reports `God Function: buildParticipantRows` in `src/communication/analyzer.ts:248`.\n\n\n Function ''buildParticipantRows'' is oversized: CC=7, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:248:God Function:\n buildParticipantRows'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: byKey'\n description: 'code2llm reports `God Function: byKey` in `src/communication/llm/implementation-helpers.ts:146`.\n\n\n Function ''byKey'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:146:God\n Function: byKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: changePaths'\n description: 'code2llm reports `God Function: changePaths` in `src/core/schema/code-change.ts:226`.\n\n\n Function ''changePaths'' is oversized: CC=6, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/schema/code-change.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/schema/code-change.ts:226:God\n Function: changePaths'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: checked'\n description: 'code2llm reports `God Function: checked` in `src/extractors/todo.ts:45`.\n\n\n Function ''checked'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:45:God Function:\n checked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classified'\n description: 'code2llm reports `God Function: classified` in `src/extractors/todo.ts:49`.\n\n\n Function ''classified'' is oversized: CC=2, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function:\n classified'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: classifyAgentActionIssue'\n description: 'code2llm reports `God Function: classifyAgentActionIssue` in `src/communication/analyzer.ts:189`.\n\n\n Function ''classifyAgentActionIssue'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:189:God Function:\n classifyAgentActionIssue'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect'\n description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`.\n\n\n Function ''collect'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:58:God Function:\n collect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectCommunicationMetadata'\n description: 'code2llm reports `God Function: collectCommunicationMetadata` in `src/extractors/communication-file-helpers.ts:191`.\n\n\n Function ''collectCommunicationMetadata'' is oversized: CC=14, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-file-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-file-helpers.ts:191:God\n Function: collectCommunicationMetadata'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectConflictIssues'\n description: 'code2llm reports `God Function: collectConflictIssues` in `src/communication/analyzer.ts:111`.\n\n\n Function ''collectConflictIssues'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/analyzer.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:111:God Function:\n collectConflictIssues'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectDocumentationExtraction'\n description: 'code2llm reports `God Function: collectDocumentationExtraction` in\n `src/pipeline/run-documentation.ts:12`.\n\n\n Function ''collectDocumentationExtraction'' is oversized: CC=9, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/pipeline/run-documentation.ts\n dedupe_key: 'code2llm:smell:god_function:src/pipeline/run-documentation.ts:12:God\n Function: collectDocumentationExtraction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collectRecordDiagnostics'\n description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`.\n\n\n Function ''collectRecordDiagnostics'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:71:God Function:\n collectRecordDiagnostics'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: collect_files'\n description: 'code2llm reports `God Function: collect_files` in `rust-ast/src/main.rs:101`.\n\n\n Function ''collect_files'' is oversized: CC=9, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:101:God Function:\n collect_files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: communicationSegments'\n description: 'code2llm reports `God Function: communicationSegments` in `src/extractors/communication-helpers.ts:181`.\n\n\n Function ''communicationSegments'' is oversized: CC=14, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/communication-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/communication-helpers.ts:181:God\n Function: communicationSegments'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compareWorkspaceIntent'\n description: 'code2llm reports `God Function: compareWorkspaceIntent` in `src/comparison/workspace.ts:78`.\n\n\n Function ''compareWorkspaceIntent'' is oversized: CC=9, fan-out=40, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/comparison/workspace.ts\n dedupe_key: 'code2llm:smell:god_function:src/comparison/workspace.ts:78:God Function:\n compareWorkspaceIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: compileSubactorProcessEnvelope'\n description: 'code2llm reports `God Function: compileSubactorProcessEnvelope` in\n `src/operations/subactor.ts:41`.\n\n\n Function ''compileSubactorProcessEnvelope'' is oversized: CC=13, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/operations/subactor.ts\n dedupe_key: 'code2llm:smell:god_function:src/operations/subactor.ts:41:God Function:\n compileSubactorProcessEnvelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: configurationRecords'\n description: 'code2llm reports `God Function: configurationRecords` in `src/extractors/configuration.ts:41`.\n\n\n Function ''configurationRecords'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/configuration.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/configuration.ts:41:God\n Function: configurationRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: controller'\n description: 'code2llm reports `God Function: controller` in `src/llm/openrouter.ts:45`.\n\n\n Function ''controller'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/llm/openrouter.ts\n dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:45:God Function:\n controller'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createMarkdownPathResolver'\n description: 'code2llm reports `God Function: createMarkdownPathResolver` in `src/extractors/markdown-paths.ts:39`.\n\n\n Function ''createMarkdownPathResolver'' is oversized: CC=12, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:39:God\n Function: createMarkdownPathResolver'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticCandidateSet'\n description: 'code2llm reports `God Function: createSemanticCandidateSet` in `src/semantic/reranker/candidate.ts:16`.\n\n\n Function ''createSemanticCandidateSet'' is oversized: CC=8, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/candidate.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/candidate.ts:16:God\n Function: createSemanticCandidateSet'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createSemanticRerankResult'\n description: 'code2llm reports `God Function: createSemanticRerankResult` in `src/semantic/reranker/result.ts:23`.\n\n\n Function ''createSemanticRerankResult'' is oversized: CC=4, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/semantic/reranker/result.ts\n dedupe_key: 'code2llm:smell:god_function:src/semantic/reranker/result.ts:23:God\n Function: createSemanticRerankResult'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: createTodoPatch'\n description: 'code2llm reports `God Function: createTodoPatch` in `src/synthesis/todo-patch.ts:69`.\n\n\n Function ''createTodoPatch'' is oversized: CC=8, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/todo-patch.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:69:God Function:\n createTodoPatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decodeDelimitedFields'\n description: 'code2llm reports `God Function: decodeDelimitedFields` in `src/communication/intake-protobuf.ts:69`.\n\n\n Function ''decodeDelimitedFields'' is oversized: CC=13, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:69:God\n Function: decodeDelimitedFields'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: decode_chunked'\n description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:211`.\n\n\n Function ''decode_chunked'' is oversized: CC=7, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:211:God Function:\n decode_chunked'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diagnoseGraph'\n description: 'code2llm reports `God Function: diagnoseGraph` in `src/graph/diagnostics.ts:16`.\n\n\n Function ''diagnoseGraph'' is oversized: CC=6, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diagnostics.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diagnostics.ts:16:God Function:\n diagnoseGraph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: diffIntentGraphs'\n description: 'code2llm reports `God Function: diffIntentGraphs` in `src/graph/diff.ts:16`.\n\n\n Function ''diffIntentGraphs'' is oversized: CC=11, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diff.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diff.ts:16:God Function: diffIntentGraphs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: encode_envelope'\n description: 'code2llm reports `God Function: encode_envelope` in `src/interfaces/intake_cli.py:55`.\n\n\n Function ''encode_envelope'' is oversized: CC=6, fan-out=11, mutations=11.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/intake_cli.py\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/intake_cli.py:55:God Function:\n encode_envelope'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichBatchCovering'\n description: 'code2llm reports `God Function: enrichBatchCovering` in `src/extractors/markdown-llm-helpers.ts:112`.\n\n\n Function ''enrichBatchCovering'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:112:God\n Function: enrichBatchCovering'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichMarkdownRecords'\n description: 'code2llm reports `God Function: enrichMarkdownRecords` in `src/extractors/markdown-llm-helpers.ts:57`.\n\n\n Function ''enrichMarkdownRecords'' is oversized: CC=13, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:57:God\n Function: enrichMarkdownRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: enrichRecord'\n description: 'code2llm reports `God Function: enrichRecord` in `src/extractors/markdown-llm-helpers.ts:274`.\n\n\n Function ''enrichRecord'' is oversized: CC=14, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm-helpers.ts:274:God\n Function: enrichRecord'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDiagnosticsCase'\n description: 'code2llm reports `God Function: evaluateDiagnosticsCase` in `src/evaluation/gold-cases.ts:277`.\n\n\n Function ''evaluateDiagnosticsCase'' is oversized: CC=6, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:277:God Function:\n evaluateDiagnosticsCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateDsl2TodoCase'\n description: 'code2llm reports `God Function: evaluateDsl2TodoCase` in `src/evaluation/gold-cases.ts:305`.\n\n\n Function ''evaluateDsl2TodoCase'' is oversized: CC=5, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:305:God Function:\n evaluateDsl2TodoCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: evaluateRerankingCase'\n description: 'code2llm reports `God Function: evaluateRerankingCase` in `src/evaluation/gold-cases.ts:71`.\n\n\n Function ''evaluateRerankingCase'' is oversized: CC=1, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cases.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cases.ts:71:God Function:\n evaluateRerankingCase'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: exchange'\n description: 'code2llm reports `God Function: exchange` in `sdk/rust/src/client.rs:125`.\n\n\n Function ''exchange'' is oversized: CC=10, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:125:God Function:\n exchange'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeAnalyzeCommunicationAction'\n description: 'code2llm reports `God Function: executeAnalyzeCommunicationAction`\n in `src/services/actions.ts:158`.\n\n\n Function ''executeAnalyzeCommunicationAction'' is oversized: CC=4, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:158:God Function:\n executeAnalyzeCommunicationAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executeCloseCodeChangeAction'\n description: 'code2llm reports `God Function: executeCloseCodeChangeAction` in `src/services/actions.ts:413`.\n\n\n Function ''executeCloseCodeChangeAction'' is oversized: CC=13, fan-out=6, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:413:God Function:\n executeCloseCodeChangeAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executePipeline'\n description: 'code2llm reports `God Function: executePipeline` in `src/pipeline/run-execution.ts:58`.\n\n\n Function ''executePipeline'' is oversized: CC=12, fan-out=26, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/pipeline/run-execution.ts\n dedupe_key: 'code2llm:smell:god_function:src/pipeline/run-execution.ts:58:God Function:\n executePipeline'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: executePipelineAction'\n description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:556`.\n\n\n Function ''executePipelineAction'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:556:God Function:\n executePipelineAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractAstIntent'\n description: 'code2llm reports `God Function: extractAstIntent` in `src/extractors/ast.ts:23`.\n\n\n Function ''extractAstIntent'' is oversized: CC=12, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast.ts:23:God Function:\n extractAstIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractChangelog'\n description: 'code2llm reports `God Function: extractChangelog` in `src/extractors/changelog.ts:18`.\n\n\n Function ''extractChangelog'' is oversized: CC=10, fan-out=19, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:18:God Function:\n extractChangelog'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractCommunicationIntentAudited'\n description: 'code2llm reports `God Function: extractCommunicationIntentAudited`\n in `src/communication/llm/implementation.ts:63`.\n\n\n Function ''extractCommunicationIntentAudited'' is oversized: CC=12, fan-out=23,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation.ts:63:God\n Function: extractCommunicationIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractConventionalAction'\n description: 'code2llm reports `God Function: extractConventionalAction` in `src/core/text.ts:83`.\n\n\n Function ''extractConventionalAction'' is oversized: CC=14, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:83:God Function: extractConventionalAction'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractDocumentationIntent'\n description: 'code2llm reports `God Function: extractDocumentationIntent` in `src/extractors/docs-llm.ts:45`.\n\n\n Function ''extractDocumentationIntent'' is oversized: CC=3, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/docs-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/docs-llm.ts:45:God Function:\n extractDocumentationIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractMarkdownIntentAudited'\n description: 'code2llm reports `God Function: extractMarkdownIntentAudited` in `src/extractors/markdown-llm.ts:34`.\n\n\n Function ''extractMarkdownIntentAudited'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-llm.ts:34:God Function:\n extractMarkdownIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntent'\n description: 'code2llm reports `God Function: extractNlIntent` in `src/extractors/nl.ts:38`.\n\n\n Function ''extractNlIntent'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl.ts:38:God Function: extractNlIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractNlIntentAudited'\n description: 'code2llm reports `God Function: extractNlIntentAudited` in `src/extractors/nl-llm.ts:33`.\n\n\n Function ''extractNlIntentAudited'' is oversized: CC=10, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/nl-llm.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/nl-llm.ts:33:God Function:\n extractNlIntentAudited'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPhpAst'\n description: 'code2llm reports `God Function: extractPhpAst` in `src/extractors/ast/php.ts:11`.\n\n\n Function ''extractPhpAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/php.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/php.ts:11:God Function:\n extractPhpAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractPythonAst'\n description: 'code2llm reports `God Function: extractPythonAst` in `src/extractors/ast/python.ts:11`.\n\n\n Function ''extractPythonAst'' is oversized: CC=2, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/python.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/python.ts:11:God Function:\n extractPythonAst'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRepositoryGitIntent'\n description: 'code2llm reports `God Function: extractRepositoryGitIntent` in `src/extractors/git.ts:74`.\n\n\n Function ''extractRepositoryGitIntent'' is oversized: CC=11, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/git.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/git.ts:74:God Function:\n extractRepositoryGitIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractRuntimeCycleIntent'\n description: 'code2llm reports `God Function: extractRuntimeCycleIntent` in `src/extractors/runtime-cycle.ts:29`.\n\n\n Function ''extractRuntimeCycleIntent'' is oversized: CC=8, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/runtime-cycle.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/runtime-cycle.ts:29:God\n Function: extractRuntimeCycleIntent'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractSymbols'\n description: 'code2llm reports `God Function: extractSymbols` in `src/core/text.ts:459`.\n\n\n Function ''extractSymbols'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:459:God Function: extractSymbols'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: extractTodo'\n description: 'code2llm reports `God Function: extractTodo` in `src/extractors/todo.ts:19`.\n\n\n Function ''extractTodo'' is oversized: CC=5, fan-out=24, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:19:God Function:\n extractTodo'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `src/interfaces/a2a-run-list-item.ts:43`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-run-list-item.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-run-list-item.ts:43:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: files'\n description: 'code2llm reports `God Function: files` in `scripts/verify-module-boundaries.mjs:6`.\n\n\n Function ''files'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:6:God\n Function: files'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: goldReportIsPerfect'\n description: 'code2llm reports `God Function: goldReportIsPerfect` in `src/evaluation/gold.ts:100`.\n\n\n Function ''goldReportIsPerfect'' is oversized: CC=14, fan-out=0, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold.ts:100:God Function:\n goldReportIsPerfect'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: graph'\n description: 'code2llm reports `God Function: graph` in `scripts/verify-module-boundaries.mjs:7`.\n\n\n Function ''graph'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/verify-module-boundaries.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/verify-module-boundaries.mjs:7:God\n Function: graph'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleCommunication'\n description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:687`.\n\n\n Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:687:God Function: handleCommunication'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleDiff'\n description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:489`.\n\n\n Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:489:God Function: handleDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleGraphDiff'\n description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:515`.\n\n\n Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:515:God Function: handleGraphDiff'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleIntake'\n description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:727`.\n\n\n Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:727:God Function: handleIntake'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleReality'\n description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:572`.\n\n\n Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:572:God Function: handleReality'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: handleWatch'\n description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:367`.\n\n\n Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:367:God Function: handleWatch'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: index'\n description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`.\n\n\n Function ''index'' is oversized: CC=13, fan-out=2, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/text-render.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/text-render.ts:43:God Function:\n index'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: indexModuleAnchors'\n description: 'code2llm reports `God Function: indexModuleAnchors` in `src/diff/reality-build.ts:202`.\n\n\n Function ''indexModuleAnchors'' is oversized: CC=12, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/reality-build.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/reality-build.ts:202:God Function:\n indexModuleAnchors'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: indexResolvableBasenames'\n description: 'code2llm reports `God Function: indexResolvableBasenames` in `src/graph/linker.ts:94`.\n\n\n Function ''indexResolvableBasenames'' is oversized: CC=8, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/linker.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:94:God Function: indexResolvableBasenames'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: isPathLike'\n description: 'code2llm reports `God Function: isPathLike` in `src/core/text.ts:408`.\n\n\n Function ''isPathLike'' is oversized: CC=13, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/core/text.ts\n dedupe_key: 'code2llm:smell:god_function:src/core/text.ts:408:God Function: isPathLike'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: lines'\n description: 'code2llm reports `God Function: lines` in `src/extractors/changelog.ts:30`.\n\n\n Function ''lines'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:30:God Function:\n lines'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: lines'\n description: 'code2llm reports `God Function: lines` in `src/extractors/todo.ts:32`.\n\n\n Function ''lines'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:32:God Function:\n lines'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: linkIntentRecords'\n description: 'code2llm reports `God Function: linkIntentRecords` in `src/graph/linker.ts:32`.\n\n\n Function ''linkIntentRecords'' is oversized: CC=5, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/linker.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/linker.ts:32:God Function: linkIntentRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: listAvailableModels'\n description: 'code2llm reports `God Function: listAvailableModels` in `src/llm/openrouter.ts:44`.\n\n\n Function ''listAvailableModels'' is oversized: CC=13, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/llm/openrouter.ts\n dedupe_key: 'code2llm:smell:god_function:src/llm/openrouter.ts:44:God Function:\n listAvailableModels'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: listIntentRuns'\n description: 'code2llm reports `God Function: listIntentRuns` in `src/interfaces/a2a-history.ts:25`.\n\n\n Function ''listIntentRuns'' is oversized: CC=2, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:25:God Function:\n listIntentRuns'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: listTasks'\n description: 'code2llm reports `God Function: listTasks` in `src/interfaces/a2a-task-store.ts:444`.\n\n\n Function ''listTasks'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-task-store.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-task-store.ts:444:God\n Function: listTasks'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: loadEnvFile'\n description: 'code2llm reports `God Function: loadEnvFile` in `src/config/env.ts:76`.\n\n\n Function ''loadEnvFile'' is oversized: CC=13, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/config/env.ts\n dedupe_key: 'code2llm:smell:god_function:src/config/env.ts:76:God Function: loadEnvFile'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: loadRuns'\n description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui-script.ts:11`.\n\n\n Function ''loadRuns'' is oversized: CC=12, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/web/diff-ui-script.ts\n dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui-script.ts:11:God Function:\n loadRuns'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `rust-ast/src/main.rs:36`.\n\n\n Function ''main'' is oversized: CC=6, fan-out=21, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - rust-ast/src/main.rs\n dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:36:God Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `java/JavaAstExtract.java:21`.\n\n\n Function ''main'' is oversized: CC=10, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - java/JavaAstExtract.java\n dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:21:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/evaluation/gold-cli.ts:48`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/evaluation/gold-cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cli.ts:48:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `golang/ast_extract.go:53`.\n\n\n Function ''main'' is oversized: CC=14, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - golang/ast_extract.go\n dedupe_key: 'code2llm:smell:god_function:golang/ast_extract.go:53:God Function:\n main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/live-model-comparison.mjs:27`.\n\n\n Function ''main'' is oversized: CC=13, fan-out=22, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/live-model-comparison.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/live-model-comparison.mjs:27:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `scripts/live-contract-check.mjs:41`.\n\n\n Function ''main'' is oversized: CC=5, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/live-contract-check.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/live-contract-check.mjs:41:God\n Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: main'\n description: 'code2llm reports `God Function: main` in `src/cli.ts:61`.\n\n\n Function ''main'' is oversized: CC=4, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/cli.ts\n dedupe_key: 'code2llm:smell:god_function:src/cli.ts:61:God Function: main'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: matchesRunFilters'\n description: 'code2llm reports `God Function: matchesRunFilters` in `src/interfaces/a2a-history.ts:77`.\n\n\n Function ''matchesRunFilters'' is oversized: CC=13, fan-out=4, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-history.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-history.ts:77:God Function:\n matchesRunFilters'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: materializeSyntheses'\n description: 'code2llm reports `God Function: materializeSyntheses` in `src/communication/llm/implementation-helpers.ts:127`.\n\n\n Function ''materializeSyntheses'' is oversized: CC=9, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:127:God\n Function: materializeSyntheses'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: materializeTaskSynthesisResponse'\n description: 'code2llm reports `God Function: materializeTaskSynthesisResponse`\n in `src/synthesis/task-synthesis-materialize.ts:14`.\n\n\n Function ''materializeTaskSynthesisResponse'' is oversized: CC=2, fan-out=18,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/synthesis/task-synthesis-materialize.ts\n dedupe_key: 'code2llm:smell:god_function:src/synthesis/task-synthesis-materialize.ts:14:God\n Function: materializeTaskSynthesisResponse'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: maxFiles'\n description: 'code2llm reports `God Function: maxFiles` in `src/watch/watcher.ts:38`.\n\n\n Function ''maxFiles'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/watch/watcher.ts\n dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:38:God Function: maxFiles'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: measureStage'\n description: 'code2llm reports `God Function: measureStage` in `src/live/contract-check.ts:115`.\n\n\n Function ''measureStage'' is oversized: CC=14, fan-out=3, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/live/contract-check.ts\n dedupe_key: 'code2llm:smell:god_function:src/live/contract-check.ts:115:God Function:\n measureStage'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: moduleRecords'\n description: 'code2llm reports `God Function: moduleRecords` in `src/extractors/ast/records.ts:34`.\n\n\n Function ''moduleRecords'' is oversized: CC=6, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/ast/records.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/ast/records.ts:34:God Function:\n moduleRecords'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: normalizeParticipantIdentityRegistry'\n description: 'code2llm reports `God Function: normalizeParticipantIdentityRegistry`\n in `src/communication/identity.ts:53`.\n\n\n Function ''normalizeParticipantIdentityRegistry'' is oversized: CC=12, fan-out=12,\n mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/identity.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/identity.ts:53:God Function:\n normalizeParticipantIdentityRegistry'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: numbers'\n description: 'code2llm reports `God Function: numbers` in `src/communication/intake-protobuf.ts:77`.\n\n\n Function ''numbers'' is oversized: CC=13, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:77:God\n Function: numbers'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: object'\n description: 'code2llm reports `God Function: object` in `src/llm/structured-schema.ts:155`.\n\n\n Function ''object'' is oversized: CC=7, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/llm/structured-schema.ts\n dedupe_key: 'code2llm:smell:god_function:src/llm/structured-schema.ts:155:God Function:\n object'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: offset'\n description: 'code2llm reports `God Function: offset` in `src/communication/intake-protobuf.ts:79`.\n\n\n Function ''offset'' is oversized: CC=13, fan-out=7, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-protobuf.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:79:God\n Function: offset'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: output'\n description: 'code2llm reports `God Function: output` in `src/communication/llm/implementation-helpers.ts:148`.\n\n\n Function ''output'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:148:God\n Function: output'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parseArgs'\n description: 'code2llm reports `God Function: parseArgs` in `scripts/research/rerank-embedding-shortlist.mjs:164`.\n\n\n Function ''parseArgs'' is oversized: CC=14, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/rerank-embedding-shortlist.mjs\n dedupe_key: 'code2llm:smell:god_function:scripts/research/rerank-embedding-shortlist.mjs:164:God\n Function: parseArgs'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parse_args'\n description: 'code2llm reports `God Function: parse_args` in `scripts/research/evaluate-embedding-pairs.py:14`.\n\n\n Function ''parse_args'' is oversized: CC=1, fan-out=3, mutations=8.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/evaluate-embedding-pairs.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/evaluate-embedding-pairs.py:14:God\n Function: parse_args'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parse_args'\n description: 'code2llm reports `God Function: parse_args` in `scripts/research/rank-intent-graph-embeddings.py:15`.\n\n\n Function ''parse_args'' is oversized: CC=1, fan-out=3, mutations=8.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - scripts/research/rank-intent-graph-embeddings.py\n dedupe_key: 'code2llm:smell:god_function:scripts/research/rank-intent-graph-embeddings.py:15:God\n Function: parse_args'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: parse_base_url'\n description: 'code2llm reports `God Function: parse_base_url` in `sdk/rust/src/client.rs:194`.\n\n\n Function ''parse_base_url'' is oversized: CC=6, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/rust/src/client.rs\n dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:194:God Function:\n parse_base_url'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: participantGroups'\n description: 'code2llm reports `God Function: participantGroups` in `src/communication/llm/implementation-helpers.ts:72`.\n\n\n Function ''participantGroups'' is oversized: CC=10, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/llm/implementation-helpers.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:72:God\n Function: participantGroups'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: primaryTargetKey'\n description: 'code2llm reports `God Function: primaryTargetKey` in `src/diff/reality-build.ts:257`.\n\n\n Function ''primaryTargetKey'' is oversized: CC=14, fan-out=9, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/reality-build.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/reality-build.ts:257:God Function:\n primaryTargetKey'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: read'\n description: 'code2llm reports `God Function: read` in `src/communication/intake-store.ts:60`.\n\n\n Function ''read'' is oversized: CC=11, fan-out=17, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/communication/intake-store.ts\n dedupe_key: 'code2llm:smell:god_function:src/communication/intake-store.ts:60:God\n Function: read'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: readCommunicationSummary'\n description: 'code2llm reports `God Function: readCommunicationSummary` in `src/interfaces/a2a-run-list-item.ts:112`.\n\n\n Function ''readCommunicationSummary'' is oversized: CC=8, fan-out=13, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/interfaces/a2a-run-list-item.ts\n dedupe_key: 'code2llm:smell:god_function:src/interfaces/a2a-run-list-item.ts:112:God\n Function: readCommunicationSummary'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: registerRunArtifacts'\n description: 'code2llm reports `God Function: registerRunArtifacts` in `src/services/actions.ts:792`.\n\n\n Function ''registerRunArtifacts'' is oversized: CC=7, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/services/actions.ts\n dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:792:God Function:\n registerRunArtifacts'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: relative'\n description: 'code2llm reports `God Function: relative` in `src/extractors/changelog.ts:28`.\n\n\n Function ''relative'' is oversized: CC=7, fan-out=15, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/changelog.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/changelog.ts:28:God Function:\n relative'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: relative'\n description: 'code2llm reports `God Function: relative` in `src/extractors/todo.ts:29`.\n\n\n Function ''relative'' is oversized: CC=5, fan-out=20, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/todo.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:29:God Function:\n relative'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: renderGraphDiffSvg'\n description: 'code2llm reports `God Function: renderGraphDiffSvg` in `src/graph/diff.ts:110`.\n\n\n Function ''renderGraphDiffSvg'' is oversized: CC=7, fan-out=12, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/graph/diff.ts\n dedupe_key: 'code2llm:smell:god_function:src/graph/diff.ts:110:God Function: renderGraphDiffSvg'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: renderLiveReport'\n description: 'code2llm reports `God Function: renderLiveReport` in `src/live/contract-check.ts:277`.\n\n\n Function ''renderLiveReport'' is oversized: CC=14, fan-out=5, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/live/contract-check.ts\n dedupe_key: 'code2llm:smell:god_function:src/live/contract-check.ts:277:God Function:\n renderLiveReport'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: renderRealitySvg'\n description: 'code2llm reports `God Function: renderRealitySvg` in `src/diff/reality.ts:61`.\n\n\n Function ''renderRealitySvg'' is oversized: CC=9, fan-out=16, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/reality.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:61:God Function: renderRealitySvg'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: renderTextDiffSvg'\n description: 'code2llm reports `God Function: renderTextDiffSvg` in `src/diff/text-render.ts:70`.\n\n\n Function ''renderTextDiffSvg'' is oversized: CC=11, fan-out=14, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/diff/text-render.ts\n dedupe_key: 'code2llm:smell:god_function:src/diff/text-render.ts:70:God Function:\n renderTextDiffSvg'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: repositoryRoot'\n description: 'code2llm reports `God Function: repositoryRoot` in `src/extractors/markdown-paths.ts:40`.\n\n\n Function ''repositoryRoot'' is oversized: CC=11, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - src/extractors/markdown-paths.ts\n dedupe_key: 'code2llm:smell:god_function:src/extractors/markdown-paths.ts:40:God\n Function: repositoryRoot'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: request'\n description: 'code2llm reports `God Function: request` in `sdk/php/src/Client.php:331`.\n\n\n Function ''request'' is oversized: CC=10, fan-out=11, mutations=0.\n\n\n Make the smallest refactor that removes the smell and run local tests.'\n priority: normal\n labels:\n - llm-ready\n - code2llm\n - code-smell\n - god-function\n files:\n - sdk/php/src/Client.php\n dedupe_key: 'code2llm:smell:god_function:sdk/php/src/Client.php:331:God Function:\n request'\n- signal: code2llm_smell_god_function\n title: 'Address code smell: God Function: requestOpenRouter'\n description: 'code2llm reports `God Function: requestOpenRouter` in `src/llm/openrouter-request.ts:4\n\n... [truncated - file too large]", "is_subdir": false}, {"name": "project.toon.yaml", "rel_path": "project.toon.yaml", "path": "project.toon.yaml", "size": "2.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# todo2code | 4218 func | 209f | 44016L | typescript | 2026-08-04\n# generated in 0.00s\n\nHEALTH:\n CC̄=3.0 critical=170 (limit:10) dup=29 cycles=0\n\nALERTS[20]:\n !!! high_fan_out compareWorkspaceIntent = 40 (limit:10)\n !!! cc_exceeded parseFile = 38 (limit:15)\n !!! high_fan_out run = 33 (limit:10)\n !!! high_fan_out main = 31 (limit:10)\n !!! high_fan_out Client.validate_http_status_body = 28 (limit:10)\n !!! cc_exceeded main = 27 (limit:15)\n !!! cc_exceeded run = 26 (limit:15)\n !!! high_fan_out executePipeline = 26 (limit:10)\n !!! high_fan_out temporaryParent = 25 (limit:10)\n !!! high_fan_out baseWorktree = 25 (limit:10)\n\nMODULES[294] (top by size):\n M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json)\n M[src/cli.ts] 985L C:1 F:133 CC↑13 D:0 (typescript)\n M[src/services/actions.ts] 806L C:1 F:106 CC↑13 D:0 (typescript)\n M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json)\n M[src/communication/analyzer.ts] 619L C:3 F:85 CC↑14 D:0 (typescript)\n M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json)\n M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript)\n M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript)\n M[goal.yaml] 530L C:0 F:0 CC↑0 D:0 (yaml)\n M[src/evaluation/gold-cases.ts] 489L C:4 F:62 CC↑8 D:0 (typescript)\n M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python)\n M[src/graph/diagnostics.ts] 459L C:1 F:59 CC↑11 D:0 (typescript)\n M[src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts] 434L C:6 F:50 CC↑13 D:0 (typescript)\n M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript)\n M[sdk/php/src/Client.php] 401L C:1 F:27 CC↑11 D:0 (php)\n LANGS: typescript:187/json:40/python:15/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1\n\nHOTSPOTS[10]:\n ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls\n ★ run fan=33 // Orchestrates 33 calls\n ★ main fan=31 // Orchestrates 31 calls\n ★ Client.validate_http_status_body fan=28 // Orchestrates 28 calls\n ★ executePipeline fan=26 // Orchestrates 26 calls\n\nREFACTOR[15]:\n [1] H/L Split parseFile (CC=38)\n [2] H/L Split main (CC=27)\n [3] H/L Split run (CC=26)\n [4] H/H Split god module src/communication/analyzer.ts (619L, 3 classes)\n [5] H/H Split god module src/core/text.ts (530L, 0 classes)\n\nEVOLUTION:\n 2026-08-04 CC̄=3.0 crit=170 44016L // Automated analysis\n", "is_subdir": false}, {"name": "validation.toon.yaml", "rel_path": "validation.toon.yaml", "path": "validation.toon.yaml", "size": "6.4KB", "icon": "⚙️", "type": "yaml", "type_name": "YAML", "content": "# vallm batch | 474f | 227✓ 34⚠ 0✗ | 2026-08-01\n\nSUMMARY:\n scanned: 474 passed: 227 (47.9%) warnings: 34 errors: 0 unsupported: 0\n\nWARNINGS[34]{path,score}:\n src/operations/validation.ts,0.80\n issues[4]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertVariableContract: CC=19 exceeds limit 15,62\n complexity.lizard_cc,warning,assertGeneration: CC=16 exceeds limit 15,110\n complexity.lizard_cc,warning,assertOperationPlan: CC=82 exceeds limit 15,153\n complexity.lizard_length,warning,assertOperationPlan: 129 lines exceeds limit 100,153\n scripts/research/rank-intent-graph-embeddings.py,0.90\n issues[3]{rule,severity,message,line}:\n complexity.cyclomatic,warning,main has cyclomatic complexity 27 (max: 15),35\n complexity.lizard_cc,warning,main: CC=27 exceeds limit 15,35\n complexity.lizard_length,warning,main: 133 lines exceeds limit 100,35\n src/core/ignore.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,translateGlob: CC=29 exceeds limit 15,77\n complexity.lizard_length,warning,translateGlob: 107 lines exceeds limit 100,77\n src/core/schema.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertIntentRecord: CC=23 exceeds limit 15,74\n complexity.lizard_cc,warning,assertGroundedGenerationMetadata: CC=22 exceeds limit 15,533\n src/diff/text.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,myers: CC=21 exceeds limit 15,140\n complexity.lizard_cc,warning,backtrack: CC=25 exceeds limit 15,172\n src/extractors/communication.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,extractCommunicationIntent: CC=78 exceeds limit 15,54\n complexity.lizard_length,warning,extractCommunicationIntent: 151 lines exceeds limit 100,54\n src/interfaces/a2a-task-store.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,listTasks: CC=41 exceeds limit 15,397\n complexity.lizard_length,warning,listTasks: 107 lines exceeds limit 100,397\n src/pipeline/run.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,runPipeline: CC=63 exceeds limit 15,55\n complexity.lizard_length,warning,runPipeline: 358 lines exceeds limit 100,55\n src/semantic/reranker.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertSemanticCandidateSet: CC=22 exceeds limit 15,184\n complexity.lizard_cc,warning,assertSemanticRerankResult: CC=18 exceeds limit 15,311\n src/services/actions.ts,0.90\n issues[2]{rule,severity,message,line}:\n complexity.lizard_cc,warning,executeAction: CC=82 exceeds limit 15,72\n complexity.lizard_length,warning,executeAction: 434 lines exceeds limit 100,72\n examples/backend/src/server.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleRequest: CC=18 exceeds limit 15,28\n php/ast_extract.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,parseFile: CC=40 exceeds limit 15,77\n python/ast_extract.py,0.95\n issues[2]{rule,severity,message,line}:\n complexity.cyclomatic,warning,iter_python_files has cyclomatic complexity 16 (max: 15),168\n complexity.lizard_cc,warning,iter_python_files: CC=16 exceeds limit 15,168\n sdk/go/examples/basic/main.go,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=19 exceeds limit 15,29\n sdk/php/src/Client.php,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,Client::call: CC=21 exceeds limit 15,106\n sdk/rust/examples/basic.rs,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,run: CC=20 exceeds limit 15,27\n src/cli.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,handleExtract: CC=20 exceeds limit 15,518\n src/communication/identity.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertParticipantIdentityRegistry: CC=29 exceeds limit 15,51\n src/comparison/workspace.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,commonPipelineOptions: CC=19 exceeds limit 15,192\n src/core/record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,buildRecord: CC=33 exceeds limit 15,57\n src/core/text.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,inferObject: CC=31 exceeds limit 15,440\n src/evaluation/gold-types.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,assertLinkingCohorts: CC=25 exceeds limit 15,341\n src/extractors/ast/typescript.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,visit: CC=26 exceeds limit 15,77\n src/extractors/docs-record.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toDocumentIntentRecord: CC=19 exceeds limit 15,25\n src/extractors/nl-llm.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,toIntentRecord: CC=24 exceeds limit 15,175\n src/graph/linker.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,scorePair: CC=18 exceeds limit 15,342\n src/interfaces/a2a-card.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,skills: 103 lines exceeds limit 100,55\n src/interfaces/a2a-message.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_length,warning,parseKeyValues: 119 lines exceeds limit 100,67\n src/live/contract-check.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,measureStage: CC=17 exceeds limit 15,115\n src/llm/openrouter.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,request: CC=26 exceeds limit 15,171\n src/synthesis/code-change-path.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,isPlannablePath: CC=40 exceeds limit 15,138\n src/synthesis/code-change-plan.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,proposeCodeChangePlans: CC=22 exceeds limit 15,109\n src/tf/classifier.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,classifyAction: CC=18 exceeds limit 15,69\n src/watch/watcher.ts,0.95\n issues[1]{rule,severity,message,line}:\n complexity.lizard_cc,warning,watchRepository: CC=21 exceeds limit 15,147\n\n", "is_subdir": false}, {"name": "baseline.json", "rel_path": "ticket-002/baseline.json", "path": "ticket-002 / baseline.json", "size": "7.4KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark/v1",\n "runtime": {\n "name": "todo2code",\n "version": "0.5.0",\n "commit": "5f5ae5938ab77dcce474ba7abbd23686072776ec"\n },\n "policy": {\n "checkout": "detached tracked-only worktree",\n "task": "tracked TASK.md when present; otherwise disabled",\n "todo": "tracked TODO.md when present; otherwise disabled",\n "changelog": "tracked CHANGELOG.md when present; otherwise disabled",\n "documents": [\n "README.md",\n "docs/**/*.md"\n ],\n "nlMode": "deterministic",\n "markdownMode": "deterministic",\n "communication": "disabled",\n "summaryLlm": false,\n "taskSynthesis": "disabled"\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "status": "succeeded",\n "runId": "20260731T065730Z-ca7a9a28",\n "elapsedSeconds": 18,\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "records": 16899,\n "relations": 41747,\n "topics": 628,\n "alignedTopics": 107,\n "declaredRecords": 752,\n "observedRecords": 14017,\n "implementationCoveragePercent": 59.4,\n "plannedCodePercent": 43.7,\n "documentedCodePercent": 31.4,\n "warnings": 9,\n "diagnostics": {\n "total": 4700,\n "info": 912,\n "warning": 2377,\n "review_required": 1411,\n "blocking": 0,\n "byCode": {\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 1411,\n "UNLINKED_RECORD": 1332,\n "IMPLEMENTED_NOT_PLANNED": 1044,\n "IMPLEMENTED_NOT_DOCUMENTED": 912,\n "PLANNED_NOT_IMPLEMENTED": 1\n }\n }\n },\n {\n "repository": "semcod/domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "status": "succeeded",\n "runId": "20260731T065753Z-a3fde5a3",\n "elapsedSeconds": 5,\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "records": 10611,\n "relations": 7470,\n "topics": 241,\n "alignedTopics": 9,\n "declaredRecords": 588,\n "observedRecords": 9914,\n "implementationCoveragePercent": 11.8,\n "plannedCodePercent": 5.4,\n "documentedCodePercent": 5.4,\n "warnings": 0,\n "diagnostics": {\n "total": 2109,\n "info": 616,\n "warning": 1388,\n "review_required": 105,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 779,\n "IMPLEMENTED_NOT_DOCUMENTED": 616,\n "IMPLEMENTED_NOT_PLANNED": 609,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 105\n }\n }\n },\n {\n "repository": "semcod/pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "status": "succeeded",\n "runId": "20260731T065802Z-48dc0b12",\n "elapsedSeconds": 5,\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "topics": 153,\n "alignedTopics": 2,\n "declaredRecords": 118,\n "observedRecords": 4992,\n "implementationCoveragePercent": 5.0,\n "plannedCodePercent": 1.8,\n "documentedCodePercent": 1.8,\n "warnings": 5,\n "diagnostics": {\n "total": 664,\n "info": 197,\n "warning": 419,\n "review_required": 48,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 217,\n "IMPLEMENTED_NOT_DOCUMENTED": 197,\n "IMPLEMENTED_NOT_PLANNED": 190,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 48,\n "PLANNED_NOT_IMPLEMENTED": 12\n }\n }\n },\n {\n "repository": "semcod/code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "status": "succeeded",\n "runId": "20260731T065808Z-a52c2716",\n "elapsedSeconds": 12,\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "records": 21423,\n "relations": 16927,\n "topics": 359,\n "alignedTopics": 27,\n "declaredRecords": 864,\n "observedRecords": 20413,\n "implementationCoveragePercent": 17.7,\n "plannedCodePercent": 14.1,\n "documentedCodePercent": 14.1,\n "warnings": 3,\n "diagnostics": {\n "total": 4680,\n "info": 1474,\n "warning": 3081,\n "review_required": 121,\n "blocking": 4,\n "byCode": {\n "IMPLEMENTED_NOT_PLANNED": 1574,\n "UNLINKED_RECORD": 1504,\n "IMPLEMENTED_NOT_DOCUMENTED": 1474,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 121,\n "CONFLICTING_INTENT": 4,\n "PLANNED_NOT_IMPLEMENTED": 3\n }\n }\n },\n {\n "repository": "semcod/code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "status": "succeeded",\n "runId": "20260731T065827Z-9f042652",\n "elapsedSeconds": 9,\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "records": 6717,\n "relations": 35447,\n "topics": 265,\n "alignedTopics": 57,\n "declaredRecords": 1487,\n "observedRecords": 4556,\n "implementationCoveragePercent": 47.1,\n "plannedCodePercent": 77.0,\n "documentedCodePercent": 47.3,\n "warnings": 0,\n "diagnostics": {\n "total": 1555,\n "info": 283,\n "warning": 876,\n "review_required": 396,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 463,\n "IMPLEMENTED_NOT_PLANNED": 413,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 396,\n "IMPLEMENTED_NOT_DOCUMENTED": 283\n }\n }\n },\n {\n "repository": "semcod/redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "status": "succeeded",\n "runId": "20260731T065840Z-61c33c16",\n "elapsedSeconds": 6,\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "records": 7204,\n "relations": 19173,\n "topics": 277,\n "alignedTopics": 62,\n "declaredRecords": 563,\n "observedRecords": 5820,\n "implementationCoveragePercent": 49.2,\n "plannedCodePercent": 55.9,\n "documentedCodePercent": 10.8,\n "warnings": 0,\n "diagnostics": {\n "total": 2384,\n "info": 476,\n "warning": 1205,\n "review_required": 703,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 708,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 703,\n "IMPLEMENTED_NOT_PLANNED": 493,\n "IMPLEMENTED_NOT_DOCUMENTED": 476,\n "PLANNED_NOT_IMPLEMENTED": 4\n }\n }\n },\n {\n "repository": "subactor/platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "status": "succeeded",\n "runId": "20260731T065848Z-3863e97d",\n "elapsedSeconds": 6,\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "records": 10628,\n "relations": 11002,\n "topics": 688,\n "alignedTopics": 25,\n "declaredRecords": 1177,\n "observedRecords": 9309,\n "implementationCoveragePercent": 5.9,\n "plannedCodePercent": 9.3,\n "documentedCodePercent": 8.9,\n "warnings": 1,\n "diagnostics": {\n "total": 1271,\n "info": 185,\n "warning": 993,\n "review_required": 93,\n "blocking": 0,\n "byCode": {\n "UNLINKED_RECORD": 780,\n "IMPLEMENTED_NOT_DOCUMENTED": 185,\n "IMPLEMENTED_NOT_PLANNED": 177,\n "CHANGELOG_WITHOUT_IMPLEMENTATION": 93,\n "PLANNED_NOT_IMPLEMENTED": 36\n }\n }\n }\n ]\n}\n", "is_subdir": true}, {"name": "benchmark.json", "rel_path": "ticket-004/benchmark.json", "path": "ticket-004 / benchmark.json", "size": "3.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.cross-language-benchmark/v1",\n "description": "Cross-language intent-to-module pairs outside the current hand-written Polish topic dictionary.",\n "pairs": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-prefixed-results.json", "rel_path": "ticket-004/e5-prefixed-results.json", "path": "ticket-004 / e5-prefixed-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "loadSeconds": 4.041,\n "totalSeconds": 4.228,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.759374\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.752184\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.837574\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.8046\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.86764\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.824159\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.830392\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.815187\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.779611\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.768394\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.847803\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.835202\n }\n ]\n}\n", "is_subdir": true}, {"name": "e5-results.json", "rel_path": "ticket-004/e5-results.json", "path": "ticket-004 / e5-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.774453,\n "maximumNegative": 0.847799,\n "separation": -0.07334600000000002,\n "loadSeconds": 53.587,\n "totalSeconds": 53.817,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.774453\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.772987\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.854882\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.827473\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.885202\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.837666\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.840172\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.828043\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.785471\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.781325\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.867364\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.847799\n }\n ]\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-019/intent.json", "path": "ticket-019 / intent.json", "size": "547B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-019",\n "summary": "Publish the Python SDK as the root todo2code package",\n "workstream": "sdk",\n "allowedPaths": [\n "pyproject.toml",\n "goal.yaml",\n "sdk/python/pyproject.toml",\n "sdk/python/README.md",\n "Makefile",\n "project/ticket-019/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": ["project/ticket-*/user-*.md"],\n "stacks": ["node", "python"],\n "dependsOn": ["ticket-018"],\n "conflictsWith": ["ticket-018"],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-018/intent.json", "path": "ticket-018 / intent.json", "size": "769B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-018",\n "summary": "Adopt deterministic governance policy-as-code with concurrent workstreams and an attested Koru code-review gate",\n "workstream": "governance",\n "allowedPaths": [\n ".governance/**",\n ".github/workflows/**",\n "AGENTS.md",\n "Makefile",\n "README.md",\n "TODO.md",\n "project.sh",\n "project.bat",\n "project/TICKETS.md",\n "project/governance-check.sh",\n "project/governance-check.bat",\n "project/new-ticket.sh",\n "project/readme.sh",\n "project/ticket-018/**"\n ],\n "forbiddenPaths": [\n "project/ticket-*/user-*.md"\n ],\n "stacks": [\n "node",\n "python",\n "docker"\n ],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-022/intent.json", "path": "ticket-022 / intent.json", "size": "543B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-022",\n "summary": "Git evidence for umbrella workspaces",\n "workstream": "extractors",\n "allowedPaths": [\n "src/extractors/git.ts",\n "test/diff-git-umbrella.test.ts",\n "project/ticket-022/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "intent.json", "rel_path": "ticket-020/intent.json", "path": "ticket-020 / intent.json", "size": "690B", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schema": "new-project.intent/v2",\n "ticket": "ticket-020",\n "summary": "Role-bound trusted intake with CQRS ES Protobuf MCP and A2A",\n "workstream": "interfaces",\n "allowedPaths": [\n "src/communication/**",\n "src/interfaces/**",\n "src/cli.ts",\n "test/communication*.test.ts",\n "test/cli*.test.ts",\n "test/mcp*.test.ts",\n "test/a2a*.test.ts",\n "project/ticket-020/**",\n "TODO.md",\n "project/TICKETS.md"\n ],\n "forbiddenPaths": [\n "project/ticket-*/manager-*.md",\n "project/ticket-*/user-*.md",\n "project/ticket-*/dev-*.md"\n ],\n "stacks": ["node", "python", "docker"],\n "dependsOn": [],\n "conflictsWith": [],\n "integrationTicket": null\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-004/iteration-01.json", "path": "ticket-004 / iteration-01.json", "size": "1.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.language-matching-iteration/v1",\n "iteration": 1,\n "decision": "reject-production-matcher-retain-benchmark",\n "synthetic": {\n "languages": [\n "pl",\n "de",\n "es",\n "fr"\n ],\n "positivePairs": 6,\n "negativePairs": 6,\n "models": {\n "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2@86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d": {\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.059279,\n "pairwiseCorrect": 5\n },\n "intfloat/multilingual-e5-small@f470c6a1a906014160ece1968c484b275f0396de": {\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumPositive": 0.759374,\n "maximumNegative": 0.835202,\n "separation": -0.075828,\n "pairwiseCorrect": 6,\n "minimumPairwiseMargin": 0.00719\n }\n }\n },\n "platform": {\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "moduleAggregates": 133,\n "actionableTargetlessDeclarations": 66,\n "forwardThreshold": {\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "selected": 6,\n "newCandidates": 2,\n "acceptedNewCandidates": 0\n },\n "reciprocalThreshold": {\n "minimumScore": 0.75,\n "minimumForwardMargin": 0.01,\n "minimumReverseMargin": 0.01,\n "selected": 1,\n "newCandidates": 0\n }\n },\n "goldV2": {\n "crossLanguageCases": 7,\n "expectedRelations": 6,\n "satisfiedRelations": 0,\n "forbiddenPairs": 6,\n "forbiddenViolations": 0,\n "gatedPrecision": 1,\n "gatedRecall": 1\n }\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-002/iteration-01.json", "path": "ticket-002 / iteration-01.json", "size": "4.1KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "non-actionable changelog mechanics",\n "changedFiles": [\n "src/graph/changelog-signal.ts",\n "src/graph/diagnostics.ts",\n "test/graph.test.ts"\n ],\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 17363,\n "afterDiagnostics": 16300,\n "removedDiagnostics": 1063,\n "beforeChangelogWithoutImplementation": 2877,\n "afterChangelogWithoutImplementation": 1853,\n "removedChangelogWithoutImplementation": 1024,\n "beforeUnlinkedRecord": 5783,\n "afterUnlinkedRecord": 5744,\n "removedUnlinkedRecord": 39\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "runId": "20260731T070702Z-9c821450",\n "graphFingerprint": "2e57056bf75fc5ef5dead16dd990f56082a6e184f86ed4995f5607a48bd9e732",\n "beforeDiagnostics": 4700,\n "afterDiagnostics": 4225,\n "beforeReviewRequired": 1411,\n "afterReviewRequired": 955,\n "beforeChangelogWithoutImplementation": 1411,\n "afterChangelogWithoutImplementation": 955,\n "beforeUnlinkedRecord": 1332,\n "afterUnlinkedRecord": 1313\n },\n {\n "repository": "semcod/domd",\n "runId": "20260731T070725Z-26c1f092",\n "graphFingerprint": "9df7e187f82b4ce8028c22938642bf2746ba0fe123ddc26386efa1a6916e6f68",\n "beforeDiagnostics": 2109,\n "afterDiagnostics": 2097,\n "beforeReviewRequired": 105,\n "afterReviewRequired": 99,\n "beforeChangelogWithoutImplementation": 105,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 779,\n "afterUnlinkedRecord": 773\n },\n {\n "repository": "semcod/pactfix",\n "runId": "20260731T070731Z-ab868903",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeReviewRequired": 48,\n "afterReviewRequired": 48,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "runId": "20260731T070714Z-9a108669",\n "graphFingerprint": "722f90e806be667f271eb393b523f771cae18cc61912416c5f4d88c9125f01e7",\n "beforeDiagnostics": 4680,\n "afterDiagnostics": 4678,\n "beforeReviewRequired": 121,\n "afterReviewRequired": 120,\n "beforeChangelogWithoutImplementation": 121,\n "afterChangelogWithoutImplementation": 120,\n "beforeUnlinkedRecord": 1504,\n "afterUnlinkedRecord": 1503\n },\n {\n "repository": "semcod/code2docs",\n "runId": "20260731T070652Z-c9867ada",\n "graphFingerprint": "4598fbe9eec85d61f1290a4db5c672bc3923df29d7e9db80923671b7fb3fb36f",\n "beforeDiagnostics": 1555,\n "afterDiagnostics": 1420,\n "beforeReviewRequired": 396,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 396,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 463,\n "afterUnlinkedRecord": 455\n },\n {\n "repository": "semcod/redup",\n "runId": "20260731T070735Z-58dcf97a",\n "graphFingerprint": "ed0359f98ed4e18f103a3751543f3e08a4accecc1be730633446fc63f4db3087",\n "beforeDiagnostics": 2384,\n "afterDiagnostics": 1945,\n "beforeReviewRequired": 703,\n "afterReviewRequired": 269,\n "beforeChangelogWithoutImplementation": 703,\n "afterChangelogWithoutImplementation": 269,\n "beforeUnlinkedRecord": 708,\n "afterUnlinkedRecord": 703\n },\n {\n "repository": "subactor/platform",\n "runId": "20260731T070740Z-e130d916",\n "graphFingerprint": "1c4166dd1b7b7789d06693a224b5d816963c4bdee5b026a5e1145861c60f786d",\n "beforeDiagnostics": 1271,\n "afterDiagnostics": 1271,\n "beforeReviewRequired": 93,\n "afterReviewRequired": 93,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 93,\n "beforeUnlinkedRecord": 780,\n "afterUnlinkedRecord": 780\n }\n ]\n}\n", "is_subdir": true}, {"name": "iteration-01.json", "rel_path": "ticket-003/iteration-01.json", "path": "ticket-003 / iteration-01.json", "size": "4.0KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.external-benchmark-iteration/v1",\n "iteration": 1,\n "target": "exact Update <file> changelog bookkeeping",\n "runtimeBaseCommit": "18cc21b",\n "invariants": {\n "graphFingerprintsUnchanged": true,\n "goldV2Precision": 1,\n "goldV2Recall": 1,\n "goldV2ForbiddenViolations": 0\n },\n "totals": {\n "beforeDiagnostics": 16280,\n "afterDiagnostics": 15545,\n "removedDiagnostics": 735,\n "beforeChangelogWithoutImplementation": 1853,\n "afterChangelogWithoutImplementation": 1306,\n "removedChangelogWithoutImplementation": 547,\n "beforeUnlinkedRecord": 5728,\n "afterUnlinkedRecord": 5540,\n "removedUnlinkedRecord": 188\n },\n "repositories": [\n {\n "repository": "semcod/code2llm",\n "beforeRunId": "20260731T072152Z-fb1ab530",\n "afterRunId": "20260731T072927Z-898d6edc",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "beforeDiagnostics": 4224,\n "afterDiagnostics": 3826,\n "beforeChangelogWithoutImplementation": 955,\n "afterChangelogWithoutImplementation": 650,\n "beforeUnlinkedRecord": 1312,\n "afterUnlinkedRecord": 1219\n },\n {\n "repository": "semcod/domd",\n "beforeRunId": "20260731T072221Z-f577ffe7",\n "afterRunId": "20260731T072950Z-828d57a8",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "beforeDiagnostics": 2096,\n "afterDiagnostics": 2096,\n "beforeChangelogWithoutImplementation": 99,\n "afterChangelogWithoutImplementation": 99,\n "beforeUnlinkedRecord": 772,\n "afterUnlinkedRecord": 772\n },\n {\n "repository": "semcod/pactfix",\n "beforeRunId": "20260731T072226Z-0fb2f8b8",\n "afterRunId": "20260731T072955Z-557f34ae",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "beforeDiagnostics": 664,\n "afterDiagnostics": 664,\n "beforeChangelogWithoutImplementation": 48,\n "afterChangelogWithoutImplementation": 48,\n "beforeUnlinkedRecord": 217,\n "afterUnlinkedRecord": 217\n },\n {\n "repository": "semcod/code2logic",\n "beforeRunId": "20260731T072209Z-30215e36",\n "afterRunId": "20260731T072939Z-9b5cf1f2",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "beforeDiagnostics": 4678,\n "afterDiagnostics": 4656,\n "beforeChangelogWithoutImplementation": 120,\n "afterChangelogWithoutImplementation": 109,\n "beforeUnlinkedRecord": 1503,\n "afterUnlinkedRecord": 1492\n },\n {\n "repository": "semcod/code2docs",\n "beforeRunId": "20260731T072143Z-a3208b84",\n "afterRunId": "20260731T072918Z-da0094d2",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "beforeDiagnostics": 1420,\n "afterDiagnostics": 1241,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 127,\n "beforeUnlinkedRecord": 455,\n "afterUnlinkedRecord": 418\n },\n {\n "repository": "semcod/redup",\n "beforeRunId": "20260731T072230Z-6a2d832d",\n "afterRunId": "20260731T073000Z-92d5870f",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "beforeDiagnostics": 1945,\n "afterDiagnostics": 1818,\n "beforeChangelogWithoutImplementation": 269,\n "afterChangelogWithoutImplementation": 184,\n "beforeUnlinkedRecord": 703,\n "afterUnlinkedRecord": 661\n },\n {\n "repository": "subactor/platform",\n "beforeRunId": "20260731T072237Z-6cab0835",\n "afterRunId": "20260731T073006Z-1a2ec448",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "beforeDiagnostics": 1253,\n "afterDiagnostics": 1244,\n "beforeChangelogWithoutImplementation": 93,\n "afterChangelogWithoutImplementation": 89,\n "beforeUnlinkedRecord": 766,\n "afterUnlinkedRecord": 761\n }\n ]\n}\n", "is_subdir": true}, {"name": "minilm-results.json", "rel_path": "ticket-004/minilm-results.json", "path": "ticket-004 / minilm-results.json", "size": "3.8KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-experiment/v1",\n "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",\n "revision": "86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d",\n "dimensions": 384,\n "pairCount": 12,\n "positiveCount": 6,\n "negativeCount": 6,\n "minimumPositive": 0.673289,\n "maximumNegative": 0.732568,\n "separation": -0.05927899999999997,\n "loadSeconds": 76.031,\n "totalSeconds": 76.38,\n "results": [\n {\n "id": "pl-queue-retry-backoff-positive",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-retry-backoff.ts",\n "expected": true,\n "score": 0.824391\n },\n {\n "id": "pl-queue-priority-hard-negative",\n "language": "pl",\n "intent": "Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem",\n "module": "declare src/queue/task-priority-sort.ts",\n "expected": false,\n "score": 0.732568\n },\n {\n "id": "de-auth-token-expiry-positive",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/auth-token-expiry-validator.ts",\n "expected": true,\n "score": 0.673289\n },\n {\n "id": "de-auth-role-hard-negative",\n "language": "de",\n "intent": "Abgelaufene Authentifizierungs-Token müssen vor dem Zugriff abgelehnt werden",\n "module": "declare src/security/user-role-permission-registry.ts",\n "expected": false,\n "score": 0.595357\n },\n {\n "id": "es-document-cache-hash-positive",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/document-content-hash-cache.ts",\n "expected": true,\n "score": 0.675315\n },\n {\n "id": "es-ast-cache-hard-negative",\n "language": "es",\n "intent": "La caché de documentos debe invalidarse cuando cambia el hash del contenido",\n "module": "declare src/cache/ast-symbol-cache.ts",\n "expected": false,\n "score": 0.687232\n },\n {\n "id": "fr-participant-identity-positive",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/participant-identity-registry.ts",\n "expected": true,\n "score": 0.674234\n },\n {\n "id": "fr-ticket-status-hard-negative",\n "language": "fr",\n "intent": "Le registre doit vérifier l'identité de chaque participant avant l'enregistrement",\n "module": "declare src/communication/ticket-status-registry.ts",\n "expected": false,\n "score": 0.640753\n },\n {\n "id": "pl-job-timeout-positive",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-timeout-cancellation.ts",\n "expected": true,\n "score": 0.744144\n },\n {\n "id": "pl-job-order-hard-negative",\n "language": "pl",\n "intent": "Harmonogram powinien przerywać zadania po przekroczeniu limitu czasu",\n "module": "declare src/scheduler/job-order-planner.ts",\n "expected": false,\n "score": 0.656533\n },\n {\n "id": "es-secret-redaction-positive",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/secret-redaction.ts",\n "expected": true,\n "score": 0.757345\n },\n {\n "id": "es-audit-export-hard-negative",\n "language": "es",\n "intent": "Los secretos deben eliminarse del registro de auditoría antes de guardarlo",\n "module": "declare src/audit/report-export.ts",\n "expected": false,\n "score": 0.601622\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-ranking.json", "rel_path": "ticket-004/platform-e5-ranking.json", "path": "ticket-004 / platform-e5-ranking.json", "size": "75.5KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 6,\n "newCandidateCount": 2,\n "elapsedSeconds": 5.271,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "selected": true,\n "addsNewCandidate": true\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "platform-e5-reciprocal-ranking.json", "rel_path": "ticket-004/platform-e5-reciprocal-ranking.json", "path": "ticket-004 / platform-e5-reciprocal-ranking.json", "size": "79.7KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.embedding-ranking-experiment/v1",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "graphSha256": "a83609ffc91d13278b1bd9936e915d50b9dc349373e73c61d0c0a90315d9084a",\n "model": "intfloat/multilingual-e5-small",\n "revision": "f470c6a1a906014160ece1968c484b275f0396de",\n "queryPrefix": "query: ",\n "passagePrefix": "passage: ",\n "minimumScore": 0.75,\n "minimumMargin": 0.01,\n "moduleCount": 133,\n "declarationCount": 66,\n "selectedCount": 1,\n "newCandidateCount": 0,\n "elapsedSeconds": 4.453,\n "rankings": [\n {\n "recordId": "INT-DOC-008eb31efc8f4dfca38b",\n "sourceKind": "document",\n "sourcePath": "docs/API_ORG_CORE.md",\n "modality": "required",\n "text": "Każde wywołanie wymaga `idempotency_key`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.84097\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.83026\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.828326\n }\n ],\n "margin": 0.01071,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-019b1be685d528779c3f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "`communication.founder.reply` wiąże źródłowy `PLF-NNN`, status i correlation z autoryzowanym wątkiem. Odbiorca musi być równy `FOUNDER_EMAIL`; próba podmiany kończy się `founder_reply_recipient_mismatch` przed wysyłką. `In-Reply-To` i `References` pochodzą wyłącznie z zachowanej korelacji, a nagłówki są czyszczone ze znaków sterujących.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.841888\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841289\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840961\n }\n ],\n "margin": 0.000599,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-025e3568780cbedcfa6d",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Principal maszyny musi wcześniej istnieć w rejestrze dostępu z kontraktem `aql:contract/v1`. Rejestr i kompilator AQL obsługują `machine`, `service` oraz `provider`; token może być wydany dopiero dla aktywnego, zarejestrowanego principal. Pozwala to rotować lub unieważniać credential niezależnie od authority zapisanej w ticketach.",\n "currentModuleIds": [\n "INT-AST-932d9e7b7fc499ee5051"\n ],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.833554\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.832712\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83265\n }\n ],\n "margin": 0.000842,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-13c1c72b5787468a471c",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECTS_AND_IMPORTS.md",\n "modality": "required",\n "text": "Katalog musi znajdować się wewnątrz `PROJECT_IMPORT_ROOT`. Importer stosuje:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.840472\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.839076\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.838046\n }\n ],\n "margin": 0.001396,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fd58d53d2745e829d14",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "3. Link pilnej decyzji wymaga HTTPS, hosta `SUBACTOR_PUBLIC_HOST`, dokładnej ścieżki `/founder/action`, portu domyślnego oraz braku query/hash przed dodaniem jednorazowego tokenu.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.861952\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.853653\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.85238\n }\n ],\n "margin": 0.008299,\n "reciprocalTopOne": true,\n "reverseMargin": 0.007306,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-1fe25da1a7826ae30433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`resume` automatycznie deleguje ticket do aktora zapisanego w kontrakcie i ustawia stan `ready`. `defer` zachowuje `waiting_input`. `cancel` zamyka ticket jako `canceled`, bez tworzenia fałszywego completion receipt. Każda opcja musi mieć dokładnie jeden skutek; wartości formularza i tabela skutków są walidowane jako zbiory równoważne.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-22f285d9ae741064ff39",\n "path": "scripts/normalize-active-ticket-routes.mjs",\n "score": 0.82912\n },\n {\n "recordId": "INT-AST-b8788dcd3e0b418d0ac5",\n "path": "scripts/audit-ticket-definition-of-done.mjs",\n "score": 0.828759\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.828404\n }\n ],\n "margin": 0.000361,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006642,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-21bec78de30ca0dfa826",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Wynik LLM zawsze zaczyna jako `proposed`. Model nie może sam podnieść go do `accepted`, `ready`, `verified` ani `done`. Awaria, timeout, brak modelu lub niepoprawny JSON nie uruchamia deterministycznego parsera NL. Powstaje jawny stan `waiting_input`/`llm_interpretation_unavailable`, bez decyzji i bez mutacji.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.843129\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.840151\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.838721\n }\n ],\n "margin": 0.002978,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-25eabc74e38b81737c1f",\n "sourceKind": "document",\n "sourcePath": "docs/TESTQL_PROJECT_GATES.md",\n "modality": "required",\n "text": "Wersja developerska przechowuje podstawowe rekordy `evidence`, `test_suites`, `test_runs`, `outcomes` i hash OQL. W produkcji należy dodać podpisy, trwałą bazę i retencję.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.833963\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.826495\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.826081\n }\n ],\n "margin": 0.007468,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2994619a281ce0c038fe",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_OBSERVABILITY.md",\n "modality": "required",\n "text": "Endpoint tworzenia klucza jest konfigurowany przez `PLESK_API_KEY_CREATE_PATH`. Jeżeli dana wersja Pleska wymaga MFA, CAPTCHA albo jednorazowej zgody, browser agent utworzy ticket `waiting_input`; mechanizmy bezpieczeństwa nie są obchodzone.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.860015\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.859964\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.856131\n }\n ],\n "margin": 5.1e-05,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002844,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2ca381a36c715ea44bac",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "System nie może wywnioskować tych danych z nazwy `Subactor` ani domeny Foundera. Są to decyzje biznesowe/prawne. Adres i marka `prototypowanie.pl` mogą być użyte jako kontekst, ale nie zastępują prawnej nazwy strony umowy.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.829453\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.827468\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.826652\n }\n ],\n "margin": 0.001985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-2dbfe16e760f4d35c9e0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder jest korzeniem odpowiedzialności. Kontrakt bez pola `principal` należy do `human:founder`, a praca bez pokrycia trafia do kolejki foundera i jest notyfikowana na `founder@localhost`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.851962\n },\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.851016\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.848556\n }\n ],\n "margin": 0.000946,\n "reciprocalTopOne": true,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-326545ec5f8d681ae88a",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Ticket publikacji z blockerem `mutation_gate_disabled` albo `founder_publish_approval_required` nie może przerzucać na Foundera technicznego polecenia „wykonaj dry-run i oceń plan_hash”. Przed utworzeniem e-maila Control wybiera wyłącznie zadeklarowany proces URI o identyfikatorze `dry-run`, `human_approval=false` i `payload.apply=false`, wykonuje go jako `project-operator-bot` i zapisuje ograniczony receipt:",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.848469\n },\n {\n "recordId": "INT-AST-6df68049deb2ff430a49",\n "path": "scripts/create-inbound-email-secret-link.mjs",\n "score": 0.846583\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.843954\n }\n ],\n "margin": 0.001886,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-35c3fec8a2fa4ed7790b",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "| Docker BuildKit nie może kopiować plików przez symlink wychodzący poza kontekst buildu | obrazy po spłaszczeniu nie budowałyby się mimo poprawnych ścieżek na hoście | Compose używa kanonicznych repozytoriów jako kontekstów oraz jawnych `additional_contexts`; Dockerfile assembly należą do `platform/docker` |",\n "currentModuleIds": [\n "INT-AST-07bc79de0391fa296e7a",\n "INT-AST-1c6bb4bfd86ba09512b5",\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-29de31f162b50811f891",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-bf0bfd7598586ad009c9",\n "INT-AST-c9ad46e56a172df67338",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-f2588e9e2e79005e6e0e",\n "INT-AST-f40c7cca2b0be0281cb8",\n "INT-AST-f7460573b485ef9218bf",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.85972\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.845449\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.844077\n }\n ],\n "margin": 0.014271,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-36a129beb520f95c6b3a",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontroler nie przechowuje sekretów, nie zmienia DNS/TLS i nie włącza mutation gates. Produkcyjny apply nadal wymaga podpisanego grantu związanego z dry-run `plan_hash` i jawnej operacji Foundera.",\n "currentModuleIds": [\n "INT-AST-271f3ac4314857a8b631",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-ad4c73e93b22f06e0fc4"\n ],\n "top": [\n {\n "recordId": "INT-AST-ad4c73e93b22f06e0fc4",\n "path": "packages/founder-cli/src/apply-grant.mjs",\n "score": 0.856689\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.842309\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.8423\n }\n ],\n "margin": 0.01438,\n "reciprocalTopOne": true,\n "reverseMargin": 0.008705,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3a0e329ea4f412cd49f1",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "3. Utwórz indywidualne konto Basic Auth. Plik haseł musi znajdować się poza `httpdocs`:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.842441\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.841794\n },\n {\n "recordId": "INT-AST-e3cff82dc01d34518b78",\n "path": "scripts/lib/audit-log-window.mjs",\n "score": 0.837173\n }\n ],\n "margin": 0.000647,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-3b67ff4d3d16f1c25ea7",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "recommended",\n "text": "`hr-bridge` nadal ma lokalne implementacje `plesk.*`, `email.send`, `slack.send`, `teams.send`, `calendar.ics.create` i `task.create`. Migracja powinna przebiegać następująco:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.847169\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.846942\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.845283\n }\n ],\n "margin": 0.000227,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003968,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-48df7879b921b8bcf5e4",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_TEST_PLAN.md",\n "modality": "required",\n "text": "rzeczywisty apply wymaga osobnego ticketu URI Process i grantu związanego z `plan_hash`.",\n "currentModuleIds": [\n "INT-AST-22f285d9ae741064ff39",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-d67629284ccbd55accc2"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.854757\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.853594\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.853075\n }\n ],\n "margin": 0.001163,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4c3be8c6dc220976cc53",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`domain` musi być pełną publiczną nazwą DNS, nie `localhost` ani adresem IP;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.839013\n },\n {\n "recordId": "INT-AST-c51776bea8cc5bf2583c",\n "path": "test/deploy-public-pages.test.mjs",\n "score": 0.836738\n },\n {\n "recordId": "INT-AST-bdaf4f7c21b3a3912ef3",\n "path": "scripts/find-free-network.mjs",\n "score": 0.834026\n }\n ],\n "margin": 0.002275,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-4f9db52d56bd0026823b",\n "sourceKind": "document",\n "sourcePath": "docs/performance-gui-connectors-audit-2026-07-16.md",\n "modality": "required",\n "text": "`urirun-connector-subactor` udostępnia obecnie wiele schematów przez ogólny `process/command/dispatch`. Najpierw należy rozdzielić go wewnętrznie na pakiety `organization`, `contractor/recruitment`, `site-generator` i `testql`. Osobne publiczne repozytorium ma sens dopiero wtedy, gdy moduł ma własny kontrakt URI, schematy wejścia/wyjścia, testy, wersjonowanie i może być wdrażany niezależnie.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-792da796f1b4b26b12da",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.849456\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.846713\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.840765\n }\n ],\n "margin": 0.002743,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5149d3861e55a958b08e",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "`run_preflight` — musi wskazywać konkretny `process_id`; wykonawca nadal weryfikuje, że jest to niezmieniający produkcji proces `dry-run`,",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.855529\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.852303\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.846205\n }\n ],\n "margin": 0.003226,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5224f52434cd4e13e790",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_EMAIL_ONE_CLICK_ACTIONS.md",\n "modality": "required",\n "text": "Powiadomienie `email_action_required` nie wymaga już ręcznego kopiowania numeru ticketu. Każdy e-mail zawiera:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.851227\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.847184\n },\n {\n "recordId": "INT-AST-2f146f1cc195dd96c6f4",\n "path": "scripts/audit-ticket-governance.mjs",\n "score": 0.842789\n }\n ],\n "margin": 0.004043,\n "reciprocalTopOne": false,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-598734e7c12787b3e6ad",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "`FOUNDER_ACCESS_SCOPES` musi zawierać `vault:reveal`",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.860331\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.845534\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.84493\n }\n ],\n "margin": 0.014797,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003874,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-5bfd8fc288d0e3e3e3d9",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_COMMUNICATION_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Rejestr wybiera najnowszą zgodną wersję `process.vN`; nie należy kodować wersji w kontrolerze domenowym. Każda ścieżka najpierw tworzy dedykowany ticket Planfile z AQL/EQL/OQL/URI. Dopiero później wykonuje `email.send`.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-12cf897f5148c62cb27c",\n "INT-AST-1b24f96cd4dbff614cc0",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-b8788dcd3e0b418d0ac5"\n ],\n "top": [\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.861178\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.850183\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.850166\n }\n ],\n "margin": 0.010995,\n "reciprocalTopOne": true,\n "reverseMargin": 0.004768,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-6f640680ab497d1d553f",\n "sourceKind": "document",\n "sourcePath": "docs/INTEGRATION_ADAPTERS.md",\n "modality": "required",\n "text": "Nie trzeba zmieniać istniejących modeli AQL, jeśli korzystają z ogólnego `notification.send`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.826191\n },\n {\n "recordId": "INT-AST-12cf897f5148c62cb27c",\n "path": "test/intent-packs.test.mjs",\n "score": 0.824924\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.823401\n }\n ],\n "margin": 0.001267,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-718b7f44fe9f4539da66",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Interpretacji NL, wyboru intencji, klasyfikacji decyzji ani uzupełniania brakujących pól nie wolno realizować regexami, tablicą słów kluczowych, punktacją lub inną heurystyką. Jeżeli LLM nie zwróci poprawnego structured output, system zatrzymuje operację jako `llm_interpretation_unavailable`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.83227\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.830631\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.828476\n }\n ],\n "margin": 0.001639,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003979,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73621239e97df9af3e7a",\n "sourceKind": "document",\n "sourcePath": "docs/CONNECTOR_LAN_ARCHITECTURE.md",\n "modality": "required",\n "text": "Domyślny executor ma tylko dedykowany wolumen `/workspace`; nie montuje `/`, `/var/run/docker.sock` ani trybu `privileged`. Konektory wymagające sprzętu należy włączać osobno:",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.844471\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.843603\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.843361\n }\n ],\n "margin": 0.000868,\n "reciprocalTopOne": true,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-73a881368c3a9fe2b0f4",\n "sourceKind": "document",\n "sourcePath": "docs/SESSION_RECOVERY_AND_MODULARIZATION_2026-07-21.md",\n "modality": "required",\n "text": "2. `platform/components/*` są osobnymi checkoutami tych samych repozytoriów, lecz katalog nadrzędny je ignoruje. Zwykły `git status` w `platform` ukrywa ich zmiany. Publikacja musi traktować checkout uruchomieniowy jako kanoniczny, rebase'ować go na `origin/main`, a dopiero potem synchronizować dodatkowe klony.",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912",\n "INT-AST-429740c646b555806b8b",\n "INT-AST-8ed40f8ed8b18102cb3d",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-a03fbcaf0d05b6cb3367",\n "INT-AST-f7460573b485ef9218bf"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.859558\n },\n {\n "recordId": "INT-AST-28ecc726b3af01b6d912",\n "path": "scripts/link-flat-workspace.mjs",\n "score": 0.851344\n },\n {\n "recordId": "INT-AST-f7460573b485ef9218bf",\n "path": "scripts/check-component-drift.mjs",\n "score": 0.848807\n }\n ],\n "margin": 0.008214,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-767dd0d952dd7f6c09c1",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "certyfikat `founder.subactor.com` musi odpowiadać domenie, zanim można użyć go jako bezpiecznego wejścia. Odczyt z 2026-07-21 pokazuje CNAME `founder.subactor.com -> subactor.github.io` oraz certyfikat GitHub `*.github.io`, który nie obejmuje nazwy Foundera. Dlatego sama zmiana certyfikatu nr 311 w Plesk nie naprawi obecnego ruchu: najpierw trzeba wybrać docelowy hosting. Dla Pleska należy zmienić DNS na jego serwer, utworzyć host/subdomenę i wydać lub przypisać certyfikat obejmujący `founder.subactor.com`. Dla GitHub Pages należy skonfigurować tę nazwę jako custom domain i poczekać na właściwy certyfikat. Dopiero potem wykonuje się niezależną weryfikację strict TLS.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.846098\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.838802\n },\n {\n "recordId": "INT-AST-34dd3d4f9ce437b8da87",\n "path": "packages/capability-preflight/src/preflight.mjs",\n "score": 0.838685\n }\n ],\n "margin": 0.007296,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7da4ea8c34d708aa977d",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "recommended",\n "text": "Ręczny cykl kontrolera wykonał dwa gotowe tickety, ale etap `queue_execution` trwał około 70 s. Niezależne kroki jednego ticketu są nadal wykonywane sekwencyjnie. Bezpieczna równoległość powinna być wyliczana z DAG `depends_on` i ograniczana budżetem connectora.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-1c6bb4bfd86ba09512b5",\n "path": "test/control-safe-start.test.mjs",\n "score": 0.83197\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.827962\n },\n {\n "recordId": "INT-AST-0ae86359bdbeb34a808c",\n "path": "test/control-execute-once.test.mjs",\n "score": 0.826695\n }\n ],\n "margin": 0.004008,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001157,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-7e6497c757ff8d20f249",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Dla pytań typu `ticket.decision` e-mail umieszcza po każdej odpowiedzi osobny link `#token=…&answer=…`. Fragment nie jest wysyłany w żądaniu HTTP ani zapisywany w logach serwera. Link wybiera wyłącznie wartość istniejącą w zamkniętym katalogu formularza i zmienia etykietę przycisku na „Potwierdź tę decyzję”. Wymagane pozostaje świadome potwierdzenie na stronie: zwykły skaner linków pocztowych nie może zużyć tokenu ani zmienić lifecycle ticketu przez GET.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.848592\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.846701\n },\n {\n "recordId": "INT-AST-0e3f72c26d8f6ea35f80",\n "path": "scripts/backfill-ticket-definition-of-done.mjs",\n "score": 0.845006\n }\n ],\n "margin": 0.001891,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-814fd7b2a90e4fd7f349",\n "sourceKind": "document",\n "sourcePath": "docs/SUBACTOR_MULTI_REPO_MIGRATION.md",\n "modality": "required",\n "text": "After component repositories are published, `platform` records them as external source checkouts. Verification must include:",\n "currentModuleIds": [\n "INT-AST-28ecc726b3af01b6d912"\n ],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.87058\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.86265\n },\n {\n "recordId": "INT-AST-f54cfcb46e60ea2daf22",\n "path": "test/platform.test.js",\n "score": 0.861889\n }\n ],\n "margin": 0.00793,\n "reciprocalTopOne": true,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-81f213d607d4a9e6d773",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "Founder może delegować bez kontraktu nadrzędnego. Inna osoba może tworzyć dalsze delegacje tylko wtedy, gdy poda `parent_contract_id`, jest podmiotem aktywnego kontraktu nadrzędnego, a ten kontrakt dopuszcza operację `autonomy.contract.delegate`. Bot nie może sam rozszerzać swoich uprawnień.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.82498\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.820146\n },\n {\n "recordId": "INT-AST-9c6e38ddf867cc10a0c0",\n "path": "packages/founder-cli/tests/founder.test.mjs",\n "score": 0.818133\n }\n ],\n "margin": 0.004834,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-874b23309a57fba88bb0",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_BROWSER_VAULT.md",\n "modality": "required",\n "text": "API wymaga `Authorization: Bearer ...`. Domyślnie tokenem wewnętrznym jest `BRIDGE_INTROSPECTION_SECRET`; można ustawić osobny `BROWSER_AGENT_SERVICE_TOKEN`. Klucz szyfrowania domyślnie korzysta z `INTEGRATION_SECRET_KEY`; produkcyjnie zalecany jest osobny `BROWSER_AGENT_VAULT_KEY` przechowywany poza repozytorium.",\n "currentModuleIds": [\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.837148\n },\n {\n "recordId": "INT-AST-0a117640892c43195f42",\n "path": "scripts/init-secrets.mjs",\n "score": 0.835999\n },\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.835911\n }\n ],\n "margin": 0.001149,\n "reciprocalTopOne": false,\n "reverseMargin": 0.013658,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88df94ec3f62b969e433",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_VAULT_REVEAL.md",\n "modality": "required",\n "text": "To nie jest przeglądarka całego sejfu. Ticket musi z góry wskazywać wpis, origin i pole (`password`, `username` albo `api_key`). Ani sekret, ani token linku nie są zapisywane w tickecie, audycie Control lub wyniku CLI.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-a4a1c7ea87551da3dc42",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.856613\n },\n {\n "recordId": "INT-AST-9e7b169cb0dcf86f226a",\n "path": "scripts/create-cloudflare-secret-link.mjs",\n "score": 0.855406\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.850217\n }\n ],\n "margin": 0.001207,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-88ebbac4e76e7fa6acc6",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`id` musi być unikalnym identyfikatorem kebab-case;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.835302\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.834452\n },\n {\n "recordId": "INT-AST-bf0bfd7598586ad009c9",\n "path": "test/production-compose.test.mjs",\n "score": 0.833188\n }\n ],\n "margin": 0.00085,\n "reciprocalTopOne": false,\n "reverseMargin": 0.000352,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b209aa7dc2e722b4dd7",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_DAILY_DIGEST.md",\n "modality": "recommended",\n "text": "Awaria nie uruchamia lokalnego fallbacku SMTP. Ponowienie następuje po `FOUNDER_DAILY_DIGEST_RETRY_MS` i używa tego samego ticketa oraz klucza idempotencji, więc nie powinno wysłać drugiej wiadomości po częściowej awarii.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.834571\n },\n {\n "recordId": "INT-AST-002e0c686cfeb6968b5e",\n "path": "scripts/create-system-email-secret-link.mjs",\n "score": 0.829515\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829102\n }\n ],\n "margin": 0.005056,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8b7042e2696ff6f23051",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Token wymaga `plans:approve`. Control nie przyjmuje principal w body — odczytuje go z uwierzytelnionej tożsamości, a następnie sprawdza osobne przypisanie authority w tickecie. Dzięki temu scope tokenu nie staje się globalnym prawem zatwierdzania. Dozwolone decyzje to `approve`, `defer` i `reject`; każda jest zapisywana w audycie wraz z principal i metodą uwierzytelnienia.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.834053\n },\n {\n "recordId": "INT-AST-d79aa26ea931af33f0d6",\n "path": "scripts/configure-remediation-planner.mjs",\n "score": 0.832855\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.829247\n }\n ],\n "margin": 0.001198,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-8d7022906b9a1e65b9ec",\n "sourceKind": "document",\n "sourcePath": "docs/DEVELOPMENT_OPENROUTER.md",\n "modality": "required",\n "text": "Gateway jest domyślnie publikowany tylko na `127.0.0.1` i wymaga lokalnego `LLM_GATEWAY_SERVICE_TOKEN`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.840702\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.839761\n },\n {\n "recordId": "INT-AST-ebdfa3628e9c4e8432e6",\n "path": "scripts/llm-status.mjs",\n "score": 0.839585\n }\n ],\n "margin": 0.000941,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-958ddb1db2512381cc5f",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "recommended",\n "text": "Founder nie powinien znać stanów kolejki, wybierać `reassign` ani wpisywać komend lifecycle. Planfile pozostaje wewnętrznym źródłem stanu i dowodów, a interakcję człowieka obsługuje deklaratywny kontrakt `subactor.interactive-form.v1` lub jego zgodne rozszerzenie `subactor.interactive-form.v2`. Control interpretuje skutek odpowiedzi, a bezstanowe repozytorium `views/` renderuje wyłącznie projekcję HTML.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.852536\n },\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.849854\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.848442\n }\n ],\n "margin": 0.002682,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-9c3fc3cb3825c7092c7f",\n "sourceKind": "document",\n "sourcePath": "docs/PLESK_LIVE.md",\n "modality": "required",\n "text": "Mock Plesk implementuje endpoint publikacji bez dodatkowych zmian. W trybie live ścieżka `PLESK_SITE_PUBLISH_PATH` musi wskazywać endpoint udostępniony przez konkretną instalację Plesk, rozszerzenie panelu albo kontrolowany adapter CLI. Nie należy zakładać, że niestandardowa ścieżka `/api/v2/sites/publish` istnieje w każdej instalacji.",\n "currentModuleIds": [\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-f2c14a1e840818e82b47"\n ],\n "top": [\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.846759\n },\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.844142\n },\n {\n "recordId": "INT-AST-501c17e4bf9663cd6131",\n "path": "scripts/run-local-e2e.mjs",\n "score": 0.839924\n }\n ],\n "margin": 0.002617,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005475,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-acc70bcd3285163c8a83",\n "sourceKind": "document",\n "sourcePath": "docs/WORKER_CONTRACT_PORTAL.md",\n "modality": "required",\n "text": "Nazwa użytkownika musi być identyczna z `worker.http_basic_user` w JSON. Runtime odrzuca również poprawnie uwierzytelnione konto przypisane do innego pracownika.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.841455\n },\n {\n "recordId": "INT-AST-cbabaecd2615f3b68a2c",\n "path": "test/recruitment-workflow.test.mjs",\n "score": 0.837079\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.836195\n }\n ],\n "margin": 0.004376,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-b966966b4a3a222cdab4",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_OPERATIONAL_DSL_LAYERS.md",\n "modality": "required",\n "text": "Control ponownie waliduje wynik, sprawdza scope, wykonuje wskazane odczyty i przekazuje do drugiej fazy LLM wyłącznie krótkie, zatwierdzone fakty. Odpowiedź ma kontrakt `subactor.founder-grounded-answer/v1` i musi wskazać `fact_refs`. Model nie otrzymuje authority, dowolnego filtra, URI ani surowych obiektów.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2847b0cb1f6a2d4045ae",\n "INT-AST-33ed799f815097a2ebcb",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-27cef449f964a294ffcd",\n "path": "scripts/lib/json-schema-subset.mjs",\n "score": 0.83752\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.837417\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837069\n }\n ],\n "margin": 0.000103,\n "reciprocalTopOne": false,\n "reverseMargin": 0.00486,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ba509d6ee6ec15b626b8",\n "sourceKind": "document",\n "sourcePath": "docs/ORGANIZATION_OS_ARCHITECTURE.md",\n "modality": "required",\n "text": "Claim jest ponownie walidowany przed zmianą stanu. Zakończenie wymaga receiptów kroków i completion receipt z `verified_by`; sam HTTP 2xx nie wystarcza.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.863786\n },\n {\n "recordId": "INT-AST-22e72147fec8b9d55ff1",\n "path": "scripts/verify-layered-system.mjs",\n "score": 0.863029\n },\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.85533\n }\n ],\n "margin": 0.000757,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003148,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c0464135791a8ed38c66",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Ścieżka hosta jest montowana do kontenera tylko do odczytu. Zmiana `SUBACTOR_PROJECTS_PATH` wymaga zgodności wartości w `.env` z bind-mountem Compose.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-1564314c4c5c8b304c27",\n "INT-AST-170732522e9a08fc4777",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2e5029d3b3ab1ba50c91",\n "INT-AST-48dfdd4791e461e90b73",\n "INT-AST-501c17e4bf9663cd6131",\n "INT-AST-6669cdeb59d2dd1b01e0",\n "INT-AST-6bee94aa65ae666378c2",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-76fb17f792a499e351d3",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-b7fda5399edec3c1acb1",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-ebdfa3628e9c4e8432e6"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.872004\n },\n {\n "recordId": "INT-AST-76fb17f792a499e351d3",\n "path": "scripts/init-env.mjs",\n "score": 0.867679\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.862333\n }\n ],\n "margin": 0.004325,\n "reciprocalTopOne": true,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c515505dcb1f9e834ef1",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "**Dopasowanie reguł to AND, nie OR.** `ruleMatchesTicket` wymaga spełnienia **wszystkich** wypełnionych kryteriów. Dodanie `uri_prefixes_any` do reguły, która ma już `labels_any`, **zawęża** ją — ticket musi mieć etykietę *oraz* URI. Reguły URI muszą być osobnymi wpisami z pustymi pozostałymi kryteriami.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.856836\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.854146\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.853856\n }\n ],\n "margin": 0.00269,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-c72a940082e5281fdd16",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_EMAIL.md",\n "modality": "required",\n "text": "`REAL_SYSTEM_EMAIL` określa prawdziwą skrzynkę systemu, a `DEMO_SYSTEM_EMAIL` nadawcę używanego wyłącznie przez Mailpit i testy. `SYSTEM_EMAIL` wskazuje aktywną tożsamość foundera, administratora i supervisora. `EMAIL_IDENTITY_MODE=real` wymaga zgodności `SYSTEM_EMAIL` z `REAL_SYSTEM_EMAIL`; tryb `demo` przełącza ją na `DEMO_SYSTEM_EMAIL`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-224e8700618a854f6bc0",\n "path": "scripts/lib/layered-system-readiness.mjs",\n "score": 0.843144\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.840485\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.838475\n }\n ],\n "margin": 0.002659,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006823,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ce10b816225eeeea1aef",\n "sourceKind": "document",\n "sourcePath": "docs/FLAT_WORKSPACE_AND_LINKEDIN_INTERNSHIP_2026-07-21.md",\n "modality": "required",\n "text": "Jeżeli node wymaga auth, `lenovo.token_file` ma wskazywać lokalny plik zawierający token; token nie jest wersjonowany ani zapisywany w artefakcie. Automat wykonuje readiness i otwiera formularz tylko na istniejącej, uwierzytelnionej powierzchni browser/CDP. Founder weryfikuje pola i publikuje.",\n "currentModuleIds": [\n "INT-AST-1af39de912ce9b7c9440",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-ad4c73e93b22f06e0fc4",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dd4ad46cd453fe2ef337",\n "INT-AST-e4fca5fce4f74af1b8ec",\n "INT-AST-fd47cb1953b5ccae0760"\n ],\n "top": [\n {\n "recordId": "INT-AST-1af39de912ce9b7c9440",\n "path": "packages/founder-cli/src/config.mjs",\n "score": 0.843646\n },\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.842754\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.842372\n }\n ],\n "margin": 0.000892,\n "reciprocalTopOne": false,\n "reverseMargin": 0.003483,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-cf53c018b86f82f3967f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMY_CONTRACTS.md",\n "modality": "required",\n "text": "`principal` wskazuje osobę albo bota, np. `{\\"kind\\":\\"bot\\",\\"id\\":\\"it-provisioner-bot\\"}`. Ticket utworzony w ramach takiego kontraktu otrzymuje tego samego wykonawcę i kolejkę. Sam routing nie udaje wykonania: bot musi mieć rzeczywisty adapter lub proces URIrun, który odbierze ticket i zapisze dowód rezultatu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.85194\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.847934\n }\n ],\n "margin": 0.000246,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d0f2d64cdf114aecb081",\n "sourceKind": "document",\n "sourcePath": "docs/RELCom_INTEGRATION.md",\n "modality": "required",\n "text": "Nie kopiuj tokenów, danych testowych ani mock Pleska. Produkcyjny `plan-registry` powinien pozostać źródłem prawdy i wymagać `SUBACTOR_ADMIN_TOKEN`.",\n "currentModuleIds": [\n "INT-AST-7fa98cd51c5167b57fa2"\n ],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.852756\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.85208\n },\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.848715\n }\n ],\n "margin": 0.000676,\n "reciprocalTopOne": false,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d8cc038eab8108dffbd7",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "Kontrola dokumentów prawnych jest jakościowa, nie tylko nazwowa. Akceptowane są pliki `.md`, `.html`, `.htm`, `.txt` i `.pdf`. Każdy wymagany dokument musi mieć co najmniej 200 bajtów/znaków, a pliki tekstowe zawierające `TODO`, `do uzupełnienia` albo `placeholder` są traktowane jako niekompletne. Wymagane kategorie to: polityka prywatności, cookies, dane administratora, zasady formularza kontaktowego i informacja o statusie pilotażu.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-5aacf092cd20dfecaeac",\n "path": "test/documentation-plan-audit.test.mjs",\n "score": 0.827941\n },\n {\n "recordId": "INT-AST-167bbd84e4e4afe736e9",\n "path": "test/capability-preflight.test.mjs",\n "score": 0.823662\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.822936\n }\n ],\n "margin": 0.004279,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006114,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-d9088f27e0bd7ac5d51b",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_LINKS_AUDIT_AND_REFACTOR_2026-07-21.md",\n "modality": "required",\n "text": "Jaki publiczny adres IP lub nazwa hosta ingressu ma obsługiwać `founder.subactor.com`? Bez tej informacji nie należy zmieniać rekordu DNS ani deklarować, że publiczny link działa. Po uzyskaniu odpowiedzi trzeba również potwierdzić, czy kolejka Planfile ma być publikowana na tej samej domenie, czy pod osobnym, uwierzytelnionym adresem.",\n "currentModuleIds": [\n "INT-AST-3b7d8bf9b45b36aeae19",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.844263\n },\n {\n "recordId": "INT-AST-7fa98cd51c5167b57fa2",\n "path": "scripts/send-founder-magic-link.mjs",\n "score": 0.837775\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.832502\n }\n ],\n "margin": 0.006488,\n "reciprocalTopOne": false,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-dce58b4c336ad1c53826",\n "sourceKind": "document",\n "sourcePath": "docs/DIGITAL_TWIN_ROUTER_ORCHESTRATOR.md",\n "modality": "required",\n "text": "W rejestrze lifecycle `digital_twin_profile` ma status `partial` i `autonomy.enabled=false`. Portret może być używany do decyzji routingowej, ale nie może autonomicznie migrować siebie ani modyfikować praw, dopóki luki taksonomii specjalizacji i jakości wyników nie zostaną domknięte.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-e78d096476327aa23b1e",\n "path": "scripts/build-urirun-registry.py",\n "score": 0.8306\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.825245\n },\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.821944\n }\n ],\n "margin": 0.005355,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002985,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e5d909b9cb997225241b",\n "sourceKind": "document",\n "sourcePath": "docs/PROJECT_RECONCILIATION_CONTROLLER.md",\n "modality": "required",\n "text": "`schema` musi mieć wartość `subactor.projects/v1`;",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9a4f2ce56264112037c7",\n "path": "packages/founder-cli/bin/subactor.mjs",\n "score": 0.865702\n },\n {\n "recordId": "INT-AST-3b7d8bf9b45b36aeae19",\n "path": "scripts/deploy-public-pages.mjs",\n "score": 0.861173\n },\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.856483\n }\n ],\n "margin": 0.004529,\n "reciprocalTopOne": true,\n "reverseMargin": 0.011471,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-e907e7c7a7d55704ca51",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_QUEUE_CONTROLLER.md",\n "modality": "required",\n "text": "Każdy cykl ponownie bada ticket, jeżeli ma Process Envelope v2, należy do włączonego bota i trafił do `waiting_input` z błędem `readiness_preflight:*`. Kontroler nie promuje ticketów ludzkich, legacy, z aktywnym `blocked-by:*` ani z zadeklarowanym blockerem. Kandydat przechodzi ponownie przez aktualne rejestry aktorów i exact URI. Dopiero zielony wynik zmienia stan na `ready`.",\n "currentModuleIds": [\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-f40c7cca2b0be0281cb8",\n "path": "scripts/audit-active-ticket-routes.mjs",\n "score": 0.834894\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.834087\n },\n {\n "recordId": "INT-AST-87d5a6d7c8c4dfef9468",\n "path": "scripts/lib/process-ticket.mjs",\n "score": 0.832743\n }\n ],\n "margin": 0.000807,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001362,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-ef47ae9fb56681714214",\n "sourceKind": "document",\n "sourcePath": "docs/FOUNDER_URGENT_ACTIONS.md",\n "modality": "required",\n "text": "Odpowiedź e-mail może zawierać wyłącznie `TAK`, `NIE`, `ODROCZ` lub `PÓŹNIEJ`, jeżeli temat zachowuje znacznik `[URGENT:PLF-N]` wygenerowany przez system. Nadal akceptowane są jawne formy `APPROVE PLF-N`, `REJECT PLF-N` i `DEFER PLF-N`. Nadawca przechodzi istniejącą autoryzację kontaktu i kontraktu AQL. Klasa principal nie nadaje globalnego wyjątku: również `human:founder` musi być związany z ticketem przez `assigned_to`, etykietę `authority:`, `approver:`, `principal:` albo jawną capability decyzyjną AQL.",\n "currentModuleIds": [\n "INT-AST-002e0c686cfeb6968b5e",\n "INT-AST-0fad4a78463ccc53e942",\n "INT-AST-265fdb5b302eb0e66e36",\n "INT-AST-2ad0a72220a446c0fe88",\n "INT-AST-2f146f1cc195dd96c6f4",\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-6df68049deb2ff430a49",\n "INT-AST-7fa98cd51c5167b57fa2",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-94306c69b189da79195a",\n "INT-AST-9e7b169cb0dcf86f226a",\n "INT-AST-ac2e2bd1273cfb5ac662",\n "INT-AST-c633e264e7f6b083e783",\n "INT-AST-dc1dcce0faf40419b64e",\n "INT-AST-dd4ad46cd453fe2ef337"\n ],\n "top": [\n {\n "recordId": "INT-AST-e8add6c9c5592524640f",\n "path": "packages/founder-cli/src/lifecycle.mjs",\n "score": 0.836239\n },\n {\n "recordId": "INT-AST-2ad0a72220a446c0fe88",\n "path": "packages/founder-cli/src/ask.mjs",\n "score": 0.836008\n },\n {\n "recordId": "INT-AST-4ad37ba491a05a6daa0b",\n "path": "scripts/sync-intent-pack-derived.mjs",\n "score": 0.834528\n }\n ],\n "margin": 0.000231,\n "reciprocalTopOne": false,\n "reverseMargin": 0.002108,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-efe140f5619e37a96d82",\n "sourceKind": "document",\n "sourcePath": "docs/SECRET_INTAKE_PROCESS_PACKS.md",\n "modality": "required",\n "text": "Każdy ticket zawiera komplet AQL/EQL/OQL/URI. LLM może wybrać proces i wypełnić ograniczony slot `provider`, ale nie może wybrać transportu, wpisu sejfu ani wygenerować URI.",\n "currentModuleIds": [\n "INT-AST-5d19be2a9b2f6eb9c00c"\n ],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.840829\n },\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.839737\n },\n {\n "recordId": "INT-AST-75ecc71e18412a3f8214",\n "path": "test/ticket-llm-context.test.mjs",\n "score": 0.839105\n }\n ],\n "margin": 0.001092,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-f48ad72c3cd1e900e80f",\n "sourceKind": "document",\n "sourcePath": "docs/AUTONOMOUS_CONTROLLER_CONTINUATION_PLAN.md",\n "modality": "required",\n "text": "Kontroler nie może promować, wykonywać ani zamykać ticketu bez wspieranej wersji kontraktu, kompletnego envelope v2, aktywnego aktora, live exact URI, uprawnień AQL, oczekiwań EQL i braku aktualnego blockera. Brak bezpiecznej ścieżki pozostaje widocznym `waiting_input`; przypomnienie nie nadaje authority i nie odnawia tokenu częściej niż pozwala lifecycle artefaktu.",\n "currentModuleIds": [\n "INT-AST-34dd3d4f9ce437b8da87",\n "INT-AST-932d9e7b7fc499ee5051",\n "INT-AST-f2588e9e2e79005e6e0e"\n ],\n "top": [\n {\n "recordId": "INT-AST-a3826288f0454d74eaa7",\n "path": "scripts/audit-documentation-plans.mjs",\n "score": 0.833423\n },\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.830379\n },\n {\n "recordId": "INT-AST-271f3ac4314857a8b631",\n "path": "scripts/run-controller-cycle.mjs",\n "score": 0.830257\n }\n ],\n "margin": 0.003044,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001135,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fb082dd22afc2a7434e5",\n "sourceKind": "document",\n "sourcePath": "docs/SYSTEM_STATE_2026-07-24.md",\n "modality": "required",\n "text": "Powód jest strukturalny, nie awaryjny: kolejka autonomiczna wykonuje wyłącznie tickety w stanie wykonywalnym, a praktycznie cały backlog stoi na `waiting_input`. Licznik `executable` opisuje tę kolejkę, a nie ścieżkę delegowania — dlatego oba wskaźniki mogą się rozjeżdżać i **nie należy czytać `executable: 0` jako awarii kontrolera**.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-9e4b0f271e9279c9d60e",\n "path": "scripts/lib/ticket-lifecycle.mjs",\n "score": 0.857835\n },\n {\n "recordId": "INT-AST-c74d93ff12a626f5e8df",\n "path": "test/ticket-auditor-audit-window.test.mjs",\n "score": 0.849431\n },\n {\n "recordId": "INT-AST-419698c412dc2105ea07",\n "path": "test/ticket-auditor-selection.test.mjs",\n "score": 0.845601\n }\n ],\n "margin": 0.008404,\n "reciprocalTopOne": true,\n "reverseMargin": 0.005594,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fdb89ea01f0b0eaa5628",\n "sourceKind": "document",\n "sourcePath": "docs/ENV_CONFIGURATION.md",\n "modality": "required",\n "text": "4. Kod serwisów nie może używać bezpośrednio `process.env.VAR`.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.854812\n },\n {\n "recordId": "INT-AST-0ccec610937016ed5ee4",\n "path": "scripts/migrate-env.mjs",\n "score": 0.851694\n },\n {\n "recordId": "INT-AST-5d0ae2203807472c3612",\n "path": "scripts/run-controller-once.mjs",\n "score": 0.851052\n }\n ],\n "margin": 0.003118,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-DOC-fea4537ba7aa1ca8a381",\n "sourceKind": "document",\n "sourcePath": "docs/INBOUND_EMAIL_AUTHORIZATION.md",\n "modality": "required",\n "text": "The default authentication policy is `strict`. `contract-only` exists solely for isolated local tests and must not be used for a real mailbox.",\n "currentModuleIds": [\n "INT-AST-167bbd84e4e4afe736e9",\n "INT-AST-576fc1c342f93d1fcef2",\n "INT-AST-6e8a1d4ad536d4cc9567",\n "INT-AST-bcd8179169d840bc205e"\n ],\n "top": [\n {\n "recordId": "INT-AST-ce3060272624f87da997",\n "path": "test/process-ticket.test.mjs",\n "score": 0.83973\n },\n {\n "recordId": "INT-AST-42da0c70f37348edd281",\n "path": "test/active-ticket-route-normalization.test.mjs",\n "score": 0.837595\n },\n {\n "recordId": "INT-AST-59742984dd7ae51fd03b",\n "path": "test/active-ticket-route-audit.test.mjs",\n "score": 0.836975\n }\n ],\n "margin": 0.002135,\n "reciprocalTopOne": false,\n "reverseMargin": 0.005786,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-180a8388572a6ea7a824",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Resolve Plesk `subscription_domain_limit_unknown`, DNS and TLS before production apply.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-265fdb5b302eb0e66e36",\n "path": "scripts/create-plesk-secret-link.mjs",\n "score": 0.869481\n },\n {\n "recordId": "INT-AST-c0a9741500d2830c1f34",\n "path": "scripts/lib/production-environment.mjs",\n "score": 0.859953\n },\n {\n "recordId": "INT-AST-1564314c4c5c8b304c27",\n "path": "scripts/bootstrap-plesk-api-key.mjs",\n "score": 0.859809\n }\n ],\n "margin": 0.009528,\n "reciprocalTopOne": true,\n "reverseMargin": 0.009517,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-5c003c3825645e675e46",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision `urirun-connector-twilio-voice`: vault credentials, caller number, destination/consent policy and signed status callback.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-a00b21088f556fc59477",\n "path": "scripts/validate-urirun-connectors-audit.mjs",\n "score": 0.878721\n },\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.873161\n },\n {\n "recordId": "INT-AST-170732522e9a08fc4777",\n "path": "scripts/configure-system-email-vault.mjs",\n "score": 0.858164\n }\n ],\n "margin": 0.00556,\n "reciprocalTopOne": true,\n "reverseMargin": 0.018359,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-9b79f780a672f6add271",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Deploy one authenticated portal for `contracts.subactor.com` and `chat.subactor.com`.",\n "currentModuleIds": [\n "INT-AST-94306c69b189da79195a"\n ],\n "top": [\n {\n "recordId": "INT-AST-9868e7332a3017885a0f",\n "path": "config/connector-capabilities/preflight.mjs",\n "score": 0.866502\n },\n {\n "recordId": "INT-AST-e5bd0b88590a365b8624",\n "path": "config/intent-packs/registry.mjs",\n "score": 0.864586\n },\n {\n "recordId": "INT-AST-6bee94aa65ae666378c2",\n "path": "scripts/configure-plesk-admin-vault.mjs",\n "score": 0.86286\n }\n ],\n "margin": 0.001916,\n "reciprocalTopOne": true,\n "reverseMargin": 0.015824,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-b7058854b8ae3d810e17",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Rotate the scoped autonomy-chat control token before 2026-08-18.",\n "currentModuleIds": [\n "INT-AST-edc170e805da7985926b"\n ],\n "top": [\n {\n "recordId": "INT-AST-edc170e805da7985926b",\n "path": "scripts/configure-autonomy-chat.mjs",\n "score": 0.866802\n },\n {\n "recordId": "INT-AST-3fc6d08576a55c11d9e1",\n "path": "test/rotate-platform-secrets.test.mjs",\n "score": 0.84412\n },\n {\n "recordId": "INT-AST-fd47cb1953b5ccae0760",\n "path": "scripts/rotate-platform-secrets.mjs",\n "score": 0.843419\n }\n ],\n "margin": 0.022682,\n "reciprocalTopOne": true,\n "reverseMargin": 0.013658,\n "selected": true,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-d00584ed9e9dbbb233b5",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Remove duplicate urirun connector discovery and repair optional connector dependencies.",\n "currentModuleIds": [],\n "top": [\n {\n "recordId": "INT-AST-792da796f1b4b26b12da",\n "path": "scripts/audit-urirun-connectors.mjs",\n "score": 0.871638\n },\n {\n "recordId": "INT-AST-1b24f96cd4dbff614cc0",\n "path": "test/build-urirun-registry.test.mjs",\n "score": 0.86949\n },\n {\n "recordId": "INT-AST-e346dd734bf80bf3ee67",\n "path": "scripts/run-post-deploy-project-check.mjs",\n "score": 0.867432\n }\n ],\n "margin": 0.002148,\n "reciprocalTopOne": false,\n "reverseMargin": 0.001523,\n "selected": false,\n "addsNewCandidate": false\n },\n {\n "recordId": "INT-TODO-db792516a8944c2e7692",\n "sourceKind": "todo",\n "sourcePath": "TODO.md",\n "modality": "required",\n "text": "Provision live SMTP/IMAP vault entries and verify founder e-mail round trip.",\n "currentModuleIds": [\n "INT-AST-c633e264e7f6b083e783"\n ],\n "top": [\n {\n "recordId": "INT-AST-94306c69b189da79195a",\n "path": "scripts/validate-env.mjs",\n "score": 0.86519\n },\n {\n "recordId": "INT-AST-c633e264e7f6b083e783",\n "path": "scripts/create-founder-vault-reveal-link.mjs",\n "score": 0.864205\n },\n {\n "recordId": "INT-AST-6669cdeb59d2dd1b01e0",\n "path": "scripts/configure-inbound-email-vault.mjs",\n "score": 0.861663\n }\n ],\n "margin": 0.000985,\n "reciprocalTopOne": false,\n "reverseMargin": 0.006814,\n "selected": false,\n "addsNewCandidate": false\n }\n ]\n}\n", "is_subdir": true}, {"name": "sample.json", "rel_path": "ticket-003/sample.json", "path": "ticket-003 / sample.json", "size": "144.3KB", "icon": "📋", "type": "json", "type_name": "JSON", "content": "{\n "schemaVersion": "t2c.changelog-audit/v1",\n "generatedAt": "2026-07-31T00:00:00.000Z",\n "selectionPolicy": {\n "description": "Round-robin over lexical target-class:action strata, then stable record ID.",\n "perRepositoryLimit": 24,\n "targetClassPrecedence": [\n "ticket",\n "path",\n "symbol",\n "none"\n ]\n },\n "classificationPolicy": {\n "version": 1,\n "labels": {\n "non_actionable_file_update": "Exact Update <file> bookkeeping with no behavioral statement.",\n "non_actionable_file_summary": "Opaque chore summary naming only a file count.",\n "roadmap_not_release": "Unchecked Markdown task embedded in a changelog.",\n "substantive_or_unverified": "Behavioral, compatibility, test or documentation claim that still needs evidence."\n }\n },\n "repositories": [\n {\n "repository": "semcod__code2docs",\n "commit": "c738aff7bd51670104e144ae19b657fd3915565d",\n "runId": "20260731T072143Z-a3208b84",\n "graphFingerprint": "83dcfa7a5b21ca7714b9546bef4baead7ef197e936a0b61088bde2cb1c275643",\n "records": 6717,\n "relations": 35468,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 142,\n "substantive_or_unverified": 127\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2llm",\n "commit": "b297d600ae7d923ce22730bc90c6cd330ec7e243",\n "runId": "20260731T072152Z-fb1ab530",\n "graphFingerprint": "bd57f05a14c3abca5ebcbb95a6ad9b3fbb47ff40f656846c5b4857fd5ecde407",\n "records": 16899,\n "relations": 41758,\n "residualFindings": 955,\n "residualLabelCounts": {\n "non_actionable_file_update": 305,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 635\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__code2logic",\n "commit": "ba93489b56f51af31206671a1f55ab860bb725c2",\n "runId": "20260731T072209Z-30215e36",\n "graphFingerprint": "c6e9f7a0671dc9b4e0c0f3fad5c5dcf1319ba674ba55bbafcc22b0caa908e6af",\n "records": 21423,\n "relations": 16933,\n "residualFindings": 120,\n "residualLabelCounts": {\n "non_actionable_file_update": 11,\n "roadmap_not_release": 15,\n "substantive_or_unverified": 94\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__domd",\n "commit": "b6c5ad24f2f2da386a2e3e5bad05433184f54c58",\n "runId": "20260731T072221Z-f577ffe7",\n "graphFingerprint": "a9d2d5eb1287b7cb69ce7cdd3aa1a77078c6e7860e96be2a602a1c0858d6e0bd",\n "records": 10611,\n "relations": 7484,\n "residualFindings": 99,\n "residualLabelCounts": {\n "substantive_or_unverified": 99\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__pactfix",\n "commit": "daf301a9e23d65cd341ffa2d6c0a6cfe728e651d",\n "runId": "20260731T072226Z-0fb2f8b8",\n "graphFingerprint": "9c2d15fc76b8585f8ae68dbd7b9f518c6cf819fce841b5178c9797e5d7d25b69",\n "records": 5161,\n "relations": 3917,\n "residualFindings": 48,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "substantive_or_unverified": 47\n },\n "sampledFindings": 24\n },\n {\n "repository": "semcod__redup",\n "commit": "a175fb0a80b54fcda4bf5cd34c8b087fe9472608",\n "runId": "20260731T072230Z-6a2d832d",\n "graphFingerprint": "b3a582ffa178ee307157461e348b51757f4e726eadd809cbfa3dc8e8b143442f",\n "records": 7204,\n "relations": 19259,\n "residualFindings": 269,\n "residualLabelCounts": {\n "non_actionable_file_update": 85,\n "substantive_or_unverified": 184\n },\n "sampledFindings": 24\n },\n {\n "repository": "subactor__platform",\n "commit": "3e96573d587cb664741849ceba205bf303b9f418",\n "runId": "20260731T072237Z-6cab0835",\n "graphFingerprint": "ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d",\n "records": 10628,\n "relations": 11424,\n "residualFindings": 93,\n "residualLabelCounts": {\n "non_actionable_file_update": 4,\n "substantive_or_unverified": 89\n },\n "sampledFindings": 24\n }\n ],\n "summary": {\n "residualFindings": 1853,\n "residualLabelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 547,\n "roadmap_not_release": 30,\n "substantive_or_unverified": 1275\n },\n "residualLabelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2llm",\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n },\n "sampledFindings": 168,\n "labelCounts": {\n "non_actionable_file_summary": 1,\n "non_actionable_file_update": 28,\n "roadmap_not_release": 6,\n "substantive_or_unverified": 133\n },\n "labelRepositories": {\n "non_actionable_file_summary": [\n "semcod__pactfix"\n ],\n "non_actionable_file_update": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__redup",\n "subactor__platform"\n ],\n "roadmap_not_release": [\n "semcod__code2logic"\n ],\n "substantive_or_unverified": [\n "semcod__code2docs",\n "semcod__code2llm",\n "semcod__code2logic",\n "semcod__domd",\n "semcod__pactfix",\n "semcod__redup",\n "subactor__platform"\n ]\n }\n },\n "sample": [\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-007a432c09e33ae77b31",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(tests): add tests for code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-041d83cf1bb5dc3b899d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-cdf62d0c)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 152,\n "end": 152\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-07b36978a72254ca951c",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.pyqual/pipeline.db); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .pyqual/pipeline.db",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".pyqual/pipeline.db"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 312,\n "end": 312\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-00590852c29ac35cfe4e",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/dashboard.html",\n "target": {\n "paths": [\n "code2docs/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 372,\n "end": 372\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-023fcbd1900e940d5196",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/analysis.json); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/analysis.json",\n "target": {\n "paths": [\n "tests/project/analysis.json"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/analysis.json"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 678,\n "end": 678\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-32b6196132311a07042d",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Update TICKET",\n "target": {\n "paths": [],\n "symbols": [\n "TICKET"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 915,\n "end": 915\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0480b5421d7c5547f189",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix ai-boilerplate issues (ticket-7de2f0bc)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-7"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-18b8460f056f069bcc61",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "fix: repair syntax errors and module-level definitions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1517319ed93be089166f",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix wildcard-imports issues (ticket-c9e8e515)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 126,\n "end": 126\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-122bda82ce2140c4257f",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.30"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 76,\n "end": 76\n }\n },\n "metadata": {\n "version": "3.0.30",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-047a98d95499e06a933b",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (project/project.yaml); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update project/project.yaml",\n "target": {\n "paths": [\n "project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 538,\n "end": 538\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-037289616a91154777a0",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/project.yaml); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/project.yaml",\n "target": {\n "paths": [\n "tests/project/project.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/project.yaml"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 411,\n "end": 411\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-3f10ab6e2d79275e2202",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (TODO.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update TODO.md",\n "target": {\n "paths": [],\n "symbols": [\n "TODO"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "TODO.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 305,\n "end": 305\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0c50ef140dfdcaec5137",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix llm-generated-code issues (ticket-3dd60300)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-3"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 244,\n "end": 244\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-aa77ec5c1a453d43e224",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs: regenerate documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 8,\n "end": 8\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-153a9eedc9a3badc2543",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-b5156dbd)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 143,\n "end": 143\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-12327418fe16f96aa3e8",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.gitignore); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .gitignore",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n ".gitignore"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 808,\n "end": 808\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0683d30858be70c27880",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/project/context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/project/context.md",\n "target": {\n "paths": [\n "code2docs/project/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "code2docs/project/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 586,\n "end": 586\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-0398d74e08f68b09acfe",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (tests/project/dashboard.html); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update tests/project/dashboard.html",\n "target": {\n "paths": [\n "tests/project/dashboard.html"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "tests/project/dashboard.html"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 430,\n "end": 430\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-913277007c6044bb88bf",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (CHANGELOG.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update CHANGELOG.md",\n "target": {\n "paths": [],\n "symbols": [\n "CHANGELOG"\n ],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [\n "CHANGELOG.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 303,\n "end": 303\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1356c7ab3e3a12a78f1d",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-80fa29e7)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-80"\n ],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 145,\n "end": 145\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-dd5e1cd15a4dea921111",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "docs(docs): add markdown output",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 6,\n "end": 6\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-1907d230d65dd07b5ba5",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-e0f2ff98)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.28"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 148,\n "end": 148\n }\n },\n "metadata": {\n "version": "3.0.28",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2docs",\n "recordId": "INT-CHANGELOG-14ec3463be6026cb6c61",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (code2docs/templates/readme.md.j2); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update code2docs/templates/readme.md.j2",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "3.0.31"\n ]\n },\n "trackedPathOwners": [\n "code2docs/templates/readme.md.j2"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 64,\n "end": 64\n }\n },\n "metadata": {\n "version": "3.0.31",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0d270ce5476cbd971d60",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Initial project structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3334,\n "end": 3334\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0738cc3774b9ec8ddfb6",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Setup**: Updated setup.py and pyproject.toml with new name",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2935,\n "end": 2935\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04f9cc09cd33d1d0811e",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix relative-imports issues (ticket-f36da736)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1376,\n "end": 1376\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-033e144a42ed113b5de4",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___563e1960e3f8fe02.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3223,\n "end": 3223\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-25c546008701d419870f",\n "stratum": "none:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`optimization/`** (1590L dead code) — 4 files, zero external imports",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2915,\n "end": 2915\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0362f0aa535e6aa4d408",\n "stratum": "none:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_prompt/root/analysis.toon); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_prompt/root/analysis.toon",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_prompt/root/analysis.toon"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2342,\n "end": 2342\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1326ad7579fd87e571b4",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/litellm/` — code2llm + LiteLLM Python automation",\n "target": {\n "paths": [\n "examples/litellm"\n ],\n "symbols": [\n "LiteLLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2863,\n "end": 2863\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-5a7c0208748441b0ed4b",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "LLMPromptExporter now outputs `context.md` by default",\n "target": {\n "paths": [\n "context.md"\n ],\n "symbols": [\n "context.md",\n "LLMPromptExporter"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3071,\n "end": 3071\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-69fccb36d67f6aa41e3d",\n "stratum": "path:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "`_SKIP_DIR_NAMES` blanket-excluded any directory named exactly `lib`, `lib64`, `include`, `bin`, or `share` from analysis, regardless of location. These are common legitimate source directory names (Ruby gems keep all source in `lib/`, PlatformIO/Arduino firmware projects keep custom libraries in `lib/`, C/C++ projects keep headers in `include/`, Node packages ship CLI entrypoints in `bin/`), so real code was silently dropped from the analysis. The entries were also redundant: virtualenv directories are already fully pruned via the `venv`/`.venv`/`env`/`.env` entries, and `site-packages` remains excluded directly.",\n "target": {\n "paths": [\n "bin",\n "lib"\n ],\n "symbols": [\n "_SKIP_DIR_NAMES",\n "bin",\n "CLI",\n "env",\n "include",\n "lib",\n "lib64",\n "PlatformIO",\n "share",\n "venv"\n ],\n "tickets": [],\n "versions": [\n "0.5.170"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 110\n }\n },\n "metadata": {\n "version": "0.5.170",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0190963b4ae7a6521047",\n "stratum": "path:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (.planfile/.koru/nfo-events.jsonl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update .planfile/.koru/nfo-events.jsonl",\n "target": {\n "paths": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.154"\n ]\n },\n "trackedPathOwners": [\n ".planfile/.koru/nfo-events.jsonl"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 324,\n "end": 324\n }\n },\n "metadata": {\n "version": "0.5.154",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1b64c0434baadae69464",\n "stratum": "path:test",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (test_dynamic/root/context.md); it makes no behavioral implementation claim.",\n "action": "test",\n "text": "Update test_dynamic/root/context.md",\n "target": {\n "paths": [\n "test_dynamic/root/context.md"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "test_dynamic/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2319,\n "end": 2319\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-04b8e5da810f6edf8f04",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`--format context` — generate context.md (LLM narrative)",\n "target": {\n "paths": [],\n "symbols": [\n "LLM"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3065,\n "end": 3065\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-2271f83cd10dedcdb834",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Structural Refactoring** — 9 high-CC functions split into focused helpers:",\n "target": {\n "paths": [],\n "symbols": [\n "CC"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2846,\n "end": 2846\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0e20ed711e7a07b20012",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Human-readable node IDs (e.g. `core__ProjectAnalyzer_analyze`) instead of hashes",\n "target": {\n "paths": [],\n "symbols": [\n "core__ProjectAnalyzer_analyze",\n "IDs"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2887,\n "end": 2887\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-004e32ce7a04dd631cc0",\n "stratum": "symbol:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (SUMR.json); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update SUMR.json",\n "target": {\n "paths": [],\n "symbols": [\n "SUMR"\n ],\n "tickets": [],\n "versions": [\n "0.5.121"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 998,\n "end": 998\n }\n },\n "metadata": {\n "version": "0.5.121",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-80fca22b9324bf837b62",\n "stratum": "symbol:remove",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "remove",\n "text": "**`visualizers/`** (150L dead code) — never imported from CLI or other modules",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2916,\n "end": 2916\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Removed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-018dece31f6435cdc31f",\n "stratum": "ticket:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix unused-imports issues (ticket-660b3f81)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [\n "TICKET-660"\n ],\n "versions": [\n "0.1.10"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 578,\n "end": 578\n }\n },\n "metadata": {\n "version": "0.1.10",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0f4c94d2db19355291f2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Modules, imports, signatures, type information",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3050,\n "end": 3050\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-18617cda6e84a813b11f",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Purpose: \\"understand the system to rebuild it\\"",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3072,\n "end": 3072\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-052def3dac8407406f1d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fix string-concat issues (ticket-e62394c5)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 1450,\n "end": 1450\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-03809423828c9bd21d76",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (context.md); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "Update context.md",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [\n "calls_output/context.md",\n "context.md",\n "project/batch_1/context.md",\n "project/context.md",\n "project/root/context.md",\n "project/test_python_only_examples/context.md",\n "project_calls_test/context.md",\n "test_dynamic/batch_1/context.md",\n "test_dynamic/context.md",\n "test_dynamic/root/context.md",\n "test_dynamic2/batch_1/context.md",\n "test_dynamic2/context.md",\n "test_dynamic2/root/context.md",\n "test_metrics/batch_1/context.md",\n "test_metrics/context.md",\n "test_metrics/root/context.md",\n "test_prompt/batch_1/context.md",\n "test_prompt/context.md",\n "test_prompt/root/context.md"\n ],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2242,\n "end": 2242\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Docs"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-0fa67f02b2b3bc99ea0c",\n "stratum": "none:test",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "test",\n "text": "all tests passing (17/17)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3122,\n "end": 3122\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Test"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-1cdb3440bf24066341af",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "`examples/shell-llm/` — code2llm + aider / llm / sgpt integration",\n "target": {\n "paths": [\n "examples/shell-llm"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 2862,\n "end": 2862\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2llm",\n "recordId": "INT-CHANGELOG-6bc960ae574072f22679",\n "stratum": "path:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "**Renamed `llm_prompt.md` → `context.md`** — LLM narrative context",\n "target": {\n "paths": [\n "context.md",\n "llm_prompt.md"\n ],\n "symbols": [\n "context.md",\n "LLM",\n "llm_prompt.md"\n ],\n "tickets": [],\n "versions": [\n "0.5.105"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 3070,\n "end": 3070\n }\n },\n "metadata": {\n "version": "0.5.105",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-040ee3f3a2db29a5ebac",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Keyword matching with weighted scoring",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 122,\n "end": 122\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-002748ad2ef518479544",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): code analysis engine",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 13,\n "end": 13\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-9b3f62f06c9e4d937f81",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Parallel processing pickle compatibility issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 189,\n "end": 189\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d8aef8cc675a876443d",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Integration with Git for diff analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 217,\n "end": 217\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-04fd361ca057623214db",\n "stratum": "symbol:add",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "add",\n "text": "[ ] Support for additional languages (JavaScript, TypeScript)",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript",\n "TypeScript"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 213,\n "end": 213\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-08f42da84f60807ed95c",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "refactor(goal): CLI interface improvements",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 14,\n "end": 14\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-234fb71d07ff9a0ef1a0",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Import errors in CLI module",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 187,\n "end": 187\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-061661c552d47775aa89",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Custom pattern definition via YAML",\n "target": {\n "paths": [],\n "symbols": [\n "YAML"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 218,\n "end": 218\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.4.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-06bbe4e218e0fc383199",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Configurable include/exclude patterns",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 104,\n "end": 104\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-079941d830c0897d4138",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(goal): deep code analysis engine with 7 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 5,\n "end": 5\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-fe53dd76398239df8c40",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Attribute mismatches between models and exporters",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 188,\n "end": 188\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1823c8f942da75202a99",\n "stratum": "none:release",\n "label": "non_actionable_file_update",\n "rationale": "Names only the updated file (debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl); it makes no behavioral implementation claim.",\n "action": "release",\n "text": "update debug/.code2flow_cache/__init___092c164e1ea3ed2a.pkl",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.1"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.2.1",\n "category": "Other"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1acd7ec0e5b03bd166f3",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Complete API documentation",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 174,\n "end": 174\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-11b35738afd546050d83",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced type hints for better IDE support",\n "target": {\n "paths": [],\n "symbols": [\n "IDE"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 183,\n "end": 183\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-402ce8711ede42fa1de2",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "FlowEdge attribute access (condition -> conditions)",\n "target": {\n "paths": [],\n "symbols": [\n "FlowEdge"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 190,\n "end": 190\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-198fdb6a3f363a257f3b",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] VS Code extension",\n "target": {\n "paths": [],\n "symbols": [\n "VS"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0ba858ac3aa35d64a4df",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**Pipeline Integration (4a-4e)**",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 133,\n "end": 133\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-1b2f48d6897f60cd0567",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored monolithic flow.py into modular package structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 181,\n "end": 181\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-259a2416825cfdf8df5a",\n "stratum": "none:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Advanced pattern detection (factory, singleton, observer)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 210,\n "end": 210\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 0.3.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-218b12b8bfb2e02d90a4",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Automatic PNG generation from Mermaid files",\n "target": {\n "paths": [],\n "symbols": [\n "PNG"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 154,\n "end": 154\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-45ba4613581ef189a617",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated setup.py for PyPI publication readiness",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 184,\n "end": 184\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-436b19b2fdc1c36f80e4",\n "stratum": "symbol:release",\n "label": "roadmap_not_release",\n "rationale": "Unchecked Markdown denotes planned work, not a released implementation claim.",\n "action": "release",\n "text": "[ ] Performance optimizations for 100k+ LOC projects",\n "target": {\n "paths": [],\n "symbols": [\n "LOC"\n ],\n "tickets": [],\n "versions": [\n "Future"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Future",\n "category": "Planned for 1.0.0"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-0d784351fc177548b285",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Cross-language fuzzy matching",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.2.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 141,\n "end": 141\n }\n },\n "metadata": {\n "version": "0.2.0",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__code2logic",\n "recordId": "INT-CHANGELOG-2b6233f63df1c1d90ce8",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "feat(config): deep code analysis engine with 6 supporting modules",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 4,\n "end": 4\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-03c6c12104e1588e73c9",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Pattern-based file inclusion/exclusion",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 82,\n "end": 82\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-006c4c43eb21d009b3f5",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Improved error handling in command detection",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-1f28ff4213e6819e9c67",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Resolved build issues with package versioning",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-06ea63574a858804df0a",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**Bundler**: Ruby gem management",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 120,\n "end": 120\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-dcdf05e948c6d085ad37",\n "stratum": "path:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for JavaScript/Node.js projects (package.json, npm scripts)",\n "target": {\n "paths": [\n "JavaScript/Node.js"\n ],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 70,\n "end": 70\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-56dbf101a0a6cd4eede1",\n "stratum": "path:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Configuration file support (`.domd.yaml`)",\n "target": {\n "paths": [\n ".domd.yaml"\n ],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 209,\n "end": 209\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22e184819c81a9506b1e",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Comprehensive CLI interface with dry-run mode",\n "target": {\n "paths": [],\n "symbols": [\n "CLI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 80,\n "end": 80\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9ca67cc23d78bc49f158",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated version to 2.2.41 for PyPI publication",\n "target": {\n "paths": [],\n "symbols": [\n "PyPI"\n ],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 54,\n "end": 54\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-346e0c2677e96bb808a5",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "**JavaScript**: package.json scripts, npm/yarn/pnpm installations",\n "target": {\n "paths": [],\n "symbols": [\n "JavaScript"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 112,\n "end": 112\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Supported Parsers"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-083e44ba3563c8ccdd84",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for Docker (Dockerfile, docker-compose.yml)",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 73,\n "end": 73\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-7d67b9be120a51f35315",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Enhanced documentation structure and readability",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "2.2.41",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-22fe6e6bf391de6da44d",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Interactive fix mode",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 212,\n "end": 212\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Upcoming Features (v0.2.0)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-087c77659da9ca4f8510",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Discussions: https://github.com/wronai/domd/discussions",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Support"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 243,\n "end": 243\n }\n },\n "metadata": {\n "version": "Support",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-303bf9b297fc5636d210",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for build systems (Makefile, CMakeLists.txt, Gradle, Maven)",\n "target": {\n "paths": [],\n "symbols": [\n "CMakeLists"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 72,\n "end": 72\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-9702895f07211c45762c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Stable API",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Roadmap"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 226,\n "end": 226\n }\n },\n "metadata": {\n "version": "Roadmap",\n "category": "Long-term Goals (v1.0.0+)"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-2d3bb5683e287b5653b2",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**0.0.1** - Project setup and structure",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.0.1",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 159,\n "end": 159\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-24715491b42e23c0333b",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Suggested fix actions for common issues",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 128,\n "end": 128\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Output Features"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-157440dc7139fcbb686d",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Type hints throughout codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 95,\n "end": 95\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Technical Details"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-39c81dc2ec39b325b244",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Support for other languages (PHP, Ruby, Rust, Go)",\n "target": {\n "paths": [],\n "symbols": [\n "PHP"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 75,\n "end": 75\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-bac803460974b381a72c",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "`domd --format json` - JSON output",\n "target": {\n "paths": [],\n "symbols": [\n "JSON"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 106,\n "end": 106\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Example Commands"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-419965defb31b2acbbd5",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "**2.2.41** - Web interface and documentation improvements",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.41",\n "Version"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 157,\n "end": 157\n }\n },\n "metadata": {\n "version": "Version",\n "category": "Added in 0.0.1"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-4b2d992b057d695b58be",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Fixed version inconsistency across the codebase",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "2.2.50"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 41,\n "end": 41\n }\n },\n "metadata": {\n "version": "2.2.50",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-23bc61d3c447b474697e",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Code formatting with Black",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 138,\n "end": 138\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Quality Assurance"\n }\n },\n {\n "repository": "semcod__domd",\n "recordId": "INT-CHANGELOG-45f150ec71926e19fc4b",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "CI/CD pipeline configuration",\n "target": {\n "paths": [],\n "symbols": [\n "CD",\n "CI"\n ],\n "tickets": [],\n "versions": [\n "0.1.0"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 86,\n "end": 86\n }\n },\n "metadata": {\n "version": "0.1.0",\n "category": "Features Added in 0.1.0"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06b81bb57751459895c4",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Multi-language support for 20+ formats",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 50,\n "end": 50\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-138ace557665dca1b887",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated git commit helper",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 62,\n "end": 62\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d452579f528cb0ab62a",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Missing fix comments for bash analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 31,\n "end": 31\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-03b4de2c7477f55e32f4",\n "stratum": "none:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "Docker sandbox testing documentation",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 42,\n "end": 42\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1d0f0c2527f1fa778a7d",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Share via URL feature",\n "target": {\n "paths": [],\n "symbols": [\n "URL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 48,\n "end": 48\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-4fecb38757995b6a40c3",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated PYPI.md documentation",\n "target": {\n "paths": [],\n "symbols": [\n "PYPI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 12,\n "end": 12\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-72529c9f2e1377fcbaac",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "E2E test stability improvements",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 33,\n "end": 33\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-6d99ee5393b0a775d452",\n "stratum": "symbol:release",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "release",\n "text": "API documentation with all endpoints (`/api/analyze`, `/api/health`, `/api/snippet`)",\n "target": {\n "paths": [],\n "symbols": [\n "API"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 39,\n "end": 39\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Improved"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-06bfbedc79c4aa6604e8",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "History tracking for all fixes",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 46,\n "end": 46\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-1953c1c87e68cf630253",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Refactored Docker Compose and Kubernetes analyzers",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 11,\n "end": 11\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-35808c1e9b8eb40dc3d3",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Basic syntax highlighting",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 56,\n "end": 56\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0f187af78faebbbbf9b9",\n "stratum": "none:release",\n "label": "non_actionable_file_summary",\n "rationale": "Opaque file-count bookkeeping provides no behavior to ground.",\n "action": "release",\n "text": "chore: update 6 files",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 93,\n "end": 93\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-53b2e841c946a1b0148c",\n "stratum": "symbol:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "refactor: introduce new DSL (refactoring with new DSL)",\n "target": {\n "paths": [],\n "symbols": [\n "DSL"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 90,\n "end": 90\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "From Source"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-f4076a9818a0c35fb0fe",\n "stratum": "symbol:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated Playwright E2E test configuration",\n "target": {\n "paths": [],\n "symbols": [\n "E2E"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 17,\n "end": 17\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-a6ab4708788d7fc9c56b",\n "stratum": "symbol:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Initial UI responsiveness issues",\n "target": {\n "paths": [],\n "symbols": [\n "UI"\n ],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 55,\n "end": 55\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Fixed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-0d1456c0762fb6678aae",\n "stratum": "none:add",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "add",\n "text": "Jenkinsfile support for pipeline analysis",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 21,\n "end": 21\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Added"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-2a5ac33f3fed647982db",\n "stratum": "none:change",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "change",\n "text": "Updated sandbox test scripts",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unreleased"\n ]\n },\n "trackedPathOwners": [],\n "source": {\n "path": "CHANGELOG.md",\n "lines": {\n "start": 61,\n "end": 61\n }\n },\n "metadata": {\n "version": "Unreleased",\n "category": "Changed"\n }\n },\n {\n "repository": "semcod__pactfix",\n "recordId": "INT-CHANGELOG-477dbb5b08683c4e4342",\n "stratum": "none:fix",\n "label": "substantive_or_unverified",\n "rationale": "Contains a behavior, compatibility, quality or documentation claim that still requires evidence review.",\n "action": "fix",\n "text": "Clear input functionality",\n "target": {\n "paths": [],\n "symbols": [],\n "tickets": [],\n "versions": [\n "Unr\n\n... [truncated - file too large]", "is_subdir": true}, {"name": "AI-Codex.md", "rel_path": "ticket-001/AI-Codex.md", "path": "ticket-001 / AI-Codex.md", "size": "797B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI Agent)\n\n- **Ticket**: ticket-001\n- **Status**: DONE\n\n## Assigned Instructions\n\nPrzygotować repozytorium w organizacji `semcod`, tworząc wyłącznie obowiązkowy bootstrap z `wellmanifest/new-project` oraz katalog `docs/`.\n\n## Implementation Plan\n\n1. Zweryfikować zasady i wymagane pliki.\n2. Utworzyć minimalny bootstrap w repozytorium docelowym.\n3. Zweryfikować strukturę, stan GitHub i Docker.\n4. Zatrzymać pracę przed tworzeniem kodu i oczekiwać na akceptację użytkownika.\n\n## Actual Changes Made\n\n- Utworzono wymagane dokumenty projektu i ticketu.\n- Dodano wymagane pliki Docker, skrypty projektowe i szablony.\n- Utworzono pusty katalog `docs/`.\n\n## Blockers & Open Items\n\n- Silnik Docker musi zostać uruchomiony przed walidacją konfiguracji kontenerowej.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-006/README.md", "path": "ticket-006 / README.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006: Canonical structured-output conformance\n\n- **ID**: ticket-006\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nMake structured LLM responses fail with precise, auditable contract diagnostics\nand remove drift between the response schema sent to a provider, the published\nJSON Schema and runtime validation. Start with the experimental semantic\nreranker because ticket-005 measured three different provider violations on a\ntracked repository.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand optional live reproducers in `scripts/research/`. This ticket directory is\nlimited to governance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: One canonical structural definition supplies or verifies the\n provider response schema, published JSON Schema and TypeScript-facing shape.\n- [x] AC-02: Runtime validation reports the exact failing property and response\n identity without persisting source payloads or secrets.\n- [x] AC-03: Wrong envelope names, missing decisions, string/percent confidence,\n unknown fields and invalid verdict/reason combinations fail closed.\n- [x] AC-04: No implicit coercion and no fallback to raw retrieval; any\n corrective retry is bounded, audited and retains both response identities.\n- [x] AC-05: Offline tests cover conforming and non-conforming providers without\n network access.\n- [x] AC-06: A clean tracked-repository live check compares at least two\n explicitly identified provider/model routes before any production retention.\n- [x] AC-07: The deterministic linker, CLI, MCP and A2A remain unchanged unless\n the quality and privacy gates pass.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit\n and smoke gates pass.\n- [x] AC-09: No executable source is stored under `project/ticket-006`.\n\n## Non-goals\n\n- Accepting provider output by renaming fields or coercing values.\n- Lowering evidence or citation requirements.\n- Enabling semantic reranking by default.\n- Editing a human-owned participant file from the agent process.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n- [`../ticket-005/audit.md`](../ticket-005/audit.md)\n\n## Approval\n\n- **Decision**: approved to investigate and continue subsequent todo2code\n tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent deliberately does not materialize that decision as a human-authored\nparticipant file. A human or trusted intake boundary must do so.\n\n## Conclusion\n\nThe conformance hardening is retained; semantic production enablement remains\nrejected. The provider schema, runtime validator and TypeScript shape now share\none internal definition, while full verification checks it against the\npublished result schema. Diagnostics identify the exact property plus provider,\nresolved model and response ID without retaining the raw response.\n\nNeither tested route met the contract. `qwen/qwen3.7-plus` produced three\ndifferent envelope/type violations in ticket-005.\n`qwen/qwen3.7-flash` added the forbidden property\n`response.decisions[0].decision`. Both failed before graph mutation. No\nreranker was exported or enabled.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-019/README.md", "path": "ticket-019 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 019: Publish the Python SDK as the root todo2code package\n\n- **ID**: ticket-019\n- **Owner**: unresolved:human\n- **Status**: PLAN\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nPublish the dependency-free Python SDK from the repository root as the PyPI\ndistribution `todo2code`. The root `pyproject.toml` becomes the single Python\npackage manifest, while `sdk/python/pyproject.toml` is removed. The distribution\ncontains only the existing `todo2code` package and `todo2code_sdk` compatibility\nmodule; it does not embed the TypeScript runtime or the rest of the repository.\n\nThe user selected the root distribution name `todo2code`, removal of the nested\nmanifest and an SDK-only package. Python artifacts will coexist with the\nTypeScript build under `dist/`: `python -m build` does not clean that directory,\nand the Goal publish command remains restricted to\n`dist/todo2code-{version}*`.\n\n`goal.yaml` must declare the Python project type and version the root manifest.\nThe existing `make python-wheel` target must build from the root after removal\nof the nested manifest. That Makefile path overlaps active ticket-018, so\nimplementation must wait until ticket-018 releases the path or an approved\nintegration route resolves the conflict.\n\n## Planned changed paths\n\n- `pyproject.toml`: root PEP 517/PEP 621 package metadata and setuptools mapping\n to `sdk/python`.\n- `goal.yaml`: add the Python strategy to the project and move versioning from\n the nested manifest to `pyproject.toml`.\n- `sdk/python/pyproject.toml`: remove the superseded nested manifest.\n- `sdk/python/README.md`: update root installation/build examples and artifact\n names.\n- `Makefile`: make `python-wheel` build the root distribution.\n- `TODO.md`, `project/TICKETS.md` and `project/ticket-019/**`: governance and\n acceptance evidence only.\n\n## Acceptance criteria\n\n- [ ] AC-01: A human owner approves this exact scope before build metadata is\n changed.\n- [ ] AC-02: `python -m build` at the repository root produces\n `todo2code-.tar.gz` and `todo2code--py3-none-any.whl`\n without deleting the TypeScript contents already present in `dist/`.\n- [ ] AC-03: The wheel contains only the `todo2code` package, the\n `todo2code_sdk` compatibility module and required distribution metadata;\n it does not contain repository application sources or generated TS files.\n- [ ] AC-04: `sdk/python/pyproject.toml` is removed and root/local installation\n instructions use the root `pyproject.toml` without breaking\n `make python-wheel`.\n- [ ] AC-05: `goal info` detects both Node.js and Python, version synchronization\n targets the root manifest, and `goal --dry-run -a` selects the bounded\n `twine upload dist/todo2code-{version}*` publication command.\n- [ ] AC-06: `twine check` passes for both artifacts and a clean virtual\n environment can import `todo2code` and `todo2code_sdk` with the expected\n version and no third-party runtime dependencies.\n- [ ] AC-07: Existing application verification and SDK examples remain green;\n no unrelated ticket-018 or local worktree changes are modified or\n attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `PLAN / WAIT_FOR_APPROVAL`.\n- Required response from: `unresolved:human`.\n- Chat approval authorizes implementation for this session but is not trusted\n merge evidence; the repository still requires its external governance gate.\n- Even after approval, the `Makefile` overlap with active ticket-018 must be\n released or explicitly routed before implementation begins.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-013/README.md", "path": "ticket-013 / README.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013: Compare qualified Live LLM models\n\n- **ID**: ticket-013\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nRun the same six-stage `require-llm` contract check against benchmark-qualified\nOpenRouter models and determine whether any is a better todo2code default than\nthe measured `google/gemini-3.6-flash` baseline.\n\nThis directory contains governance and redacted evidence only. Runtime code\nbelongs under `src/` and operational scripts under `scripts/` if a measured\nfailure requires an implementation change.\n\n## Acceptance criteria\n\n- [x] AC-01: Every candidate is currently available and advertises\n `structured_outputs`.\n- [x] AC-02: Gemini 3 Flash Preview receives a complete six-stage live attempt.\n- [x] AC-03: Codestral 2508 receives a complete six-stage live attempt.\n- [x] AC-04: DeepSeek V4 Pro receives a bounded live attempt; crossing the\n 900-second run budget is recorded as a failed candidate, not retried away.\n- [x] AC-05: Results compare stage success, fallback/degradation, latency,\n tokens and cost against Gemini 3.6 Flash.\n- [x] AC-06: The selected default or retained baseline is justified by measured\n evidence; no model is promoted from catalog metadata alone.\n- [x] AC-07: Documentation and validation gates pass before push to `main`.\n- [x] AC-08: Unrelated `nlp2uri.yaml` remains uncommitted.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-005/README.md", "path": "ticket-005 / README.md", "size": "4.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005: Audited cross-language reranking\n\n- **ID**: ticket-005\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEvaluate a two-stage cross-language linking path: semantic retrieval may create\nonly a bounded candidate list, while a separate structured reranker must cite\nrepository-owned evidence and may abstain. Retain a production change only when\nit closes the six current cross-language gold gaps, preserves every forbidden\npair and improves coverage on an additional tracked repository.\n\nExecutable implementation belongs in `src/` and regression coverage in\n`test/`. Optional experiment reproducers belong in `scripts/research/`.\nThis ticket directory is limited to governance, inputs, captured outputs,\ndecisions and logs.\n\nThe approved continuation adds a prerequisite communication audit: verify that\nthe governance-standard `user-*` and `ai-*` files are converted into distinct\nhuman/agent Intent DSL records, compare their intent, and identify the\nparticipant who must respond when scope, polarity or coverage diverges.\n\n## Acceptance criteria\n\n- [x] AC-01: Define a versioned candidate and reranker contract with explicit\n model/provider identity, score, cited record IDs and abstention reason.\n- [x] AC-02: Keep network/model calls outside the synchronous deterministic\n `linkIntentRecords` boundary and preserve the current offline default.\n- [x] AC-03: Candidate generation is bounded and cannot create a relation by\n itself.\n- [x] AC-04: The reranker accepts a candidate only with repository-owned\n evidence; unsupported, ambiguous and multi-module statements abstain.\n- [x] AC-05: Gold v2 cross-language recall rises from 0/6 to 6/6 while all six\n cross-language forbidden pairs and all existing hard negatives remain clean.\n- [ ] AC-06: A tracked repository outside the ticket-004 primary pair shows\n improved implementation coverage without a manually rejected new relation.\n- [ ] AC-07: Any dependency or provider is pinned, licensed, security-reviewed,\n cacheable and optional; no private or untracked source is transmitted.\n- [x] AC-08: Full verification, both gold versions, examples, dependency audit,\n CLI/MCP/A2A smoke and Docker validation pass.\n- [x] AC-09: If the quality boundary is not met, reject the candidate without a\n production semantic rule and preserve the measured failure.\n- [x] AC-10: No executable source is stored under `project/ticket-005`.\n- [x] AC-11: Governance-standard `user-*` and `ai-*` files are recognized\n without front matter, while ticket specifications and generated evidence are\n not misclassified as participant communication.\n- [x] AC-12: Communication analysis reports an explicit response owner for\n missing response, human-agent conflict and agent work outside the human\n request.\n\n## Non-goals\n\n- Growing the hand-written Polish dictionary.\n- Lowering the three-topic lexical floor.\n- Treating embedding similarity as implementation evidence.\n- Enabling provider-dependent behavior by default.\n- Choosing one module for a genuinely multi-module requirement.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user instruction to handle the next todo2code tickets and audit\n `user-*`/`ai-*` Intent DSL divergence\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe communication prerequisite is retained. Governance `user-*` and `ai-*`\nsections become distinct human/agent Intent DSL records, and each detected\ndivergence names the role and participant who must respond.\n\nThe semantic production candidate is rejected. Captured gold decisions satisfy\n6/6 expected cross-language pairs with zero forbidden pairs, but three live\nOpenRouter attempts on the clean tracked `subactor/platform` snapshot failed\nthe structured contract before any relation could be materialized. The\nprovider first omitted `decisions`, then returned `judgments`, and finally\nreturned an invalid non-numeric confidence. Consequently AC-06 and AC-07 were\nnot demonstrated. The deterministic linker remains unchanged, and the\nexperimental reranker is not exported from the package, CLI, MCP or A2A.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-018/README.md", "path": "ticket-018 / README.md", "size": "14.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 018: Enforce new-project governance as policy-as-code\n\n- **ID**: ticket-018\n- **Owner**: unresolved:human\n- **Status**: IN_PROGRESS\n- **Workflow state**: WAIT_FOR_APPROVAL\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nTurn `wellmanifest/new-project` from documentation-only guidance into a\ndeterministic policy-as-code standard, then adopt that standard in `todo2code`.\nThe gate must make intent visible before implementation: after a completed\nticket, a new multi-step code change requires a new plan-only ticket and a\nseparate human approval before source, test, build or CI implementation files\nmay be changed.\n\nThis ticket covers two coordinated repositories:\n\n- `wellmanifest/new-project`: machine-readable governance contract, validator,\n stable `GOV-*` diagnostics, reusable GitHub Actions workflow, stack profiles,\n tests and documentation. No ticket, task file or execution log will be\n created in the read-only Governance Hub.\n- `semcod/todo2code`: pinned adoption metadata, persistent `AGENTS.md`, local\n wrappers/hooks where appropriate, required governance CI job and\n deterministic semantic validation. Existing unrelated/concurrent worktree\n changes remain outside this ticket.\n\nThe implementation will not treat an agent-edited Markdown field as trusted\nhuman approval. GitHub PR review/CODEOWNERS is the merge-time trust boundary;\nlocal validation reports approval as unverified when no trusted CI context is\navailable.\n\nThe evolved scope also supports safe parallel work by several humans or agents\nwithout splitting the repository prematurely. `todo2code` remains one modular\nrepository, but tickets are assigned to declared workstreams such as\n`core-dsl`, `extractors`, `llm`, `runtime`, `interfaces`, `sdk`, `governance`\nand `integration`. At most one active implementation ticket is allowed per\nworkstream, and active tickets may not claim overlapping write paths. Explicit\ndependency and conflict edges replace implicit coordination; cross-workstream\ncontract changes require an integration ticket instead of silently widening an\nexisting ticket.\n\n## Planned changed paths\n\n- Governance Hub: manifest/schema, validator and tests, reusable workflow,\n stack profiles, templates/scripts, policy documentation and version notes.\n- `todo2code`: `.governance/**`, `AGENTS.md`, governance workflow integration,\n package/Make targets only where required, and ticket-018-owned governance\n records.\n- Application source changes are excluded unless a focused test proves they\n are necessary for the deterministic `todo2code` governance command.\n\n## Planned multi-agent contract\n\n- Extend the manifest with named workstreams, owned path patterns and a policy\n for active-ticket limits, overlap rejection and integration work.\n- Version the ticket intent contract with `workstream`, `dependsOn`,\n `conflictsWith` and optional `integrationTicket`, while retaining an explicit\n migration path for existing v1 tickets.\n- Validate unknown workstreams, overlapping active scopes, dependency cycles,\n unfinished prerequisites, incompatible tickets and missing integration\n routing through stable `GOV-*` diagnostics.\n- Keep branch/worktree isolation and a merge queue as CI/repository controls;\n do not infer that a local filesystem lock is a trusted distributed lock.\n- Preserve deterministic enforcement. LLM analysis may explain a divergence,\n but cannot classify it away or approve a scope expansion.\n\n## Planned Koru code-review extension\n\nThe user requested automated code review through Koru. The implementation will\nadd a read-only GitHub check named `koru / code-review`, run for pull requests\nand explicit historical-review dispatches. It will pin Koru 0.1.444 and Vallm\n0.1.94, select only changed supported source files, and let Koru execute one\nbounded Vallm review round. The review combines deterministic syntax,\ncomplexity and security checks with an OpenRouter semantic judge supplied by\nthe existing organization-level `OPENROUTER_API_KEY` secret.\n\nThe workflow will never use `pull_request_target`, check out untrusted code\nwith a write-capable token, modify source, auto-fix, commit, push or submit a\nGitHub `APPROVE` review. A missing secret or semantic-provider failure is an\nexplicit non-passing outcome rather than a silent deterministic fallback.\nForked pull requests therefore require a trusted maintainer rerun in a safe\ncontext instead of receiving organization secrets.\n\nThe machine-readable report will be bound to repository, base SHA, head SHA,\ntool versions and verdict, uploaded as a CI artifact and covered by a GitHub\nartifact attestation. A repository ruleset will require both the existing\ngovernance check and `koru / code-review`; the Koru attestation is independent\nread-only review evidence, not evidence that the implementation author or this\nagent self-approved.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and execution checklist before\n any implementation file is changed.\n- [x] AC-02: A versioned machine-readable manifest and schema define ticket,\n approval, ownership, scope, Docker, evidence and stack requirements.\n- [x] AC-03: A dependency-light deterministic validator emits documented stable\n `GOV-*` codes with message, affected paths/evidence and remediation, plus\n machine-readable JSON/SARIF output where applicable.\n- [x] AC-04: The validator rejects code changes without a preceding active and\n approved ticket, multiple active tickets, malformed tickets, out-of-scope\n paths, agent edits of `user-*.md`, executable files in ticket directories,\n manifest drift, missing Docker declarations and forbidden secrets/paths.\n- [x] AC-05: Approval provenance is checked against a trusted GitHub review\n boundary in CI; local or Markdown-only approval is never presented as a\n cryptographically trusted fact.\n- [ ] AC-06: A centrally maintained reusable GitHub workflow is pinned by\n immutable revision and documented together with the required repository\n ruleset/CODEOWNERS settings.\n- [x] AC-07: Stack profiles provide appropriate gates for Node, Python, Go,\n Rust, Java, Docker, frontend E2E and infrastructure repositories without\n silently claiming unavailable tools.\n- [x] AC-08: `todo2code` adopts the manifest lock, persistent agent instructions\n and a governance CI gate; its existing offline application and Docker E2E\n checks remain operational.\n- [x] AC-09: Central validator fixture tests demonstrate both allowed and denied\n state transitions, including the exact ticket-017 DONE -> ticket-018 PLAN\n sequence used here.\n- [x] AC-10: Relevant checks run in Docker where required, raw evidence is\n recorded, diffs are reviewed and no commit or push occurs unless requested.\n- [x] AC-11: The manifest defines named workstreams, their path ownership,\n per-workstream active-ticket limits and a fail-closed overlap policy.\n- [x] AC-12: The versioned intent schema represents workstream, dependencies,\n conflicts and integration routing without invalidating archived v1\n tickets or silently upgrading their meaning.\n- [x] AC-13: Stable diagnostics reject unknown workstreams, two active tickets\n in one workstream, overlapping active write scopes, dependency cycles,\n unfinished prerequisites and unresolved cross-workstream changes.\n- [x] AC-14: Fixture tests cover safe parallel tickets and every rejection\n above, including path patterns whose apparent non-overlap still resolves\n to a shared concrete file.\n- [x] AC-15: CI validates every active intent together, emits JSON/SARIF\n evidence and documents worktree/branch isolation, CODEOWNERS and merge\n queue requirements without treating those local declarations as trusted\n server configuration.\n- [x] AC-16: `todo2code` adopts the workstream map and demonstrates at least\n two parallel non-overlapping intents plus one rejected overlap in Docker.\n- [ ] AC-17: Existing application and Docker E2E checks still pass; unrelated\n concurrent changes in `.env.example`, `src/`, `test/` and\n `tests/fixtures/` are neither modified nor attributed to this ticket.\n- [x] AC-18: A human approves the Koru review design, bounded scope and\n AC-18..AC-25 before the workflow or repository rules are changed.\n- [x] AC-19: A pinned pull-request/workflow-dispatch job exposes the stable\n required-check name `koru / code-review` and resolves exact base/head\n SHAs without evaluating a merge-ambiguous working tree.\n- [x] AC-20: Koru 0.1.444 runs exactly one read-only Vallm 0.1.94 review round\n over changed supported source files; auto-fix, commit, push and mutable\n dependency versions are absent.\n- [x] AC-21: Deterministic syntax/complexity/security checks and semantic\n LLM-as-judge review fail closed on findings, missing credentials,\n malformed output or provider failure, with no secret value in logs.\n- [x] AC-22: The structured report records repository, base/head SHA, selected\n files, tool/model versions and verdict, is uploaded with fixed retention,\n and receives GitHub artifact provenance attestation.\n- [x] AC-23: The workflow uses least-privilege read permissions, never uses\n `pull_request_target`, and treats fork PRs without secrets as requiring a\n trusted rerun rather than exposing organization credentials.\n- [x] AC-24: A repository ruleset requires `governance / enforce` and\n `koru / code-review`, blocks direct updates to `main`, dismisses stale\n evidence after new commits and cannot be bypassed by the implementation\n agent.\n- [x] AC-25: Workflow syntax, local Koru/Vallm probes, negative failure paths,\n `npm run verify`, governance and relevant Docker checks pass; the\n pre-existing ticket-019 findings remain separately attributed.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks and constraints\n\n- Git hooks are bypassable and therefore cannot be the final authority; branch\n protection or organization rulesets must require the server-side check.\n- A workflow stored only in the target repository can be weakened in the same\n pull request; the design must pin central code and document external required\n workflow/ruleset enforcement.\n- The current Governance Hub `project.sh` installs unpinned latest packages on\n the host and suppresses some failures. It must not be used as evidence that\n strict, reproducible governance already exists.\n- `todo2code` currently has a large dirty worktree with concurrent changes.\n Implementation must use path-specific diffs and must not rewrite or attribute\n unrelated files to ticket-018.\n- Live LLM behavior is nondeterministic and provider-dependent. It may produce\n advisory findings but cannot be a required merge gate.\n\n## Validation result and publication blockers\n\nThe multi-workstream extension was explicitly approved by the user in chat on\n2026-08-01. The results below describe the already executed 0.7.0 baseline and\nremain historical evidence, not evidence for AC-11..AC-17.\n\n- Central scaffolder and validator fixtures pass, including allowed/denied\n approval, ownership, scope, executable-ticket content, manifest integrity and\n commit-order cases.\n- Target-scoped governance validation passes locally and in the offline Docker\n image. Negative probes return the expected stable codes.\n- Docker E2E core passes 328 tests with 7 explicit optional-toolchain skips;\n Docker E2E full passes 328/328 with zero skips, both gold datasets, CLI, MCP,\n A2A and all five SDK examples.\n- A concurrent human commit `5f1f4bd` included the ticket, governance adoption\n and unrelated runtime work in one commit. Validation against its parent fails\n with `GOV-INTENT-003` because `intent.json` was not present in an ancestor and\n `GOV-SCOPE-001` for eight paths outside ticket-018.\n- The central 0.7.0 working tree has not been committed or published, so the\n target lock honestly records `publicationStatus: uncommitted` and cannot yet\n reference an immutable central workflow revision.\n- Repository Ruleset/CODEOWNERS configuration is external state and remains\n unverified. A trusted GitHub owner/team must be selected without guessing.\n- `new-project` 0.8.0 central schema, fixture and catalog checks pass. The\n catalog contains 27 stable codes and exactly covers every emitted `GOV-*`\n finding. Target manifest/intent Draft 2020-12 validation and its scoped\n governance gate pass.\n- Docker workstream E2E accepts two active, non-overlapping `core-dsl` and `sdk`\n tickets, then rejects their concrete overlap on `src/core/graph.ts` with\n `GOV-WORKSTREAM-004`.\n- Fresh core E2E passes; the focused Node result is 329 tests, 322 passed, zero\n failed and 7 optional-toolchain skips.\n- AC-17 remains blocked outside this governance diff. Concurrent commit\n `9928699` changed `sdk/rust/Cargo.toml` from 0.5.0 to 0.5.1 while the ignored\n local `sdk/rust/Cargo.lock` still records 0.5.0. `make e2e-full` therefore\n stops at `cargo fetch --locked` with exit 101 before the full tests start.\n Resolving it belongs to the `sdk`/`integration` workstream and requires its\n own approved ticket; ticket-018 does not rewrite or claim that artifact.\n- Pull request #1 ran `koru / code-review` successfully as run `30703151199`.\n Its `t2c.koru-code-review/v1` report binds base `06a2faa`, head `4cfd2f9`,\n the pinned tool/model versions and an empty supported-source set. The report\n was uploaded for 14 days and has a GitHub Sigstore provenance attestation.\n- Historical dispatch `30703292661` exercised the live semantic path over\n `src/comparison/workspace.ts` and `test/workspace.test.ts`. Koru rejected\n both files with exit 1; the required check failed while report construction,\n artifact upload and attestation still succeeded. The attested report digest\n is `sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8`.\n No credential value appears in the workflow output.\n- Repository ruleset `20186914` is staged with no bypass actors and\n `current_user_can_bypass: never`. It targets the default branch, requires a\n pull request, dismisses stale review evidence, rejects deletion/force-push,\n and requires strict `governance / enforce` plus `koru / code-review` checks.\n Enforcement remains disabled only until this bootstrap evidence commit is\n merged; AC-24 is not claimed until the rule is activated and queried back.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-004/README.md", "path": "ticket-004 / README.md", "size": "4.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 004: Language-independent topic matching\n\n- **ID**: ticket-004\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace further growth of the hand-written Polish-to-English topic dictionary\nwith a reviewable language-independent matching path. Start from a multilingual\ngold benchmark, compare feasible strategies, and integrate only a strategy that\nimproves cross-language recall without weakening exact-target evidence or the\nprecision-oriented capability-topic boundary.\n\nThe primary measured repositories are `todo2code` and `subactor/platform`.\nThe unchanged seven-repository corpus from tickets 002 and 003 remains the\nregression corpus if a candidate implementation is retained.\n\n## Acceptance criteria\n\n- [x] AC-01: The existing known gap and at least five new cross-language cases\n cover multiple capabilities, inflections and hard negatives.\n- [x] AC-02: The benchmark reports cross-language positives separately from\n same-language capability-topic and exact-target quality.\n- [x] AC-03: At least two feasible strategies are evaluated for determinism,\n runtime/dependency cost, auditability, cacheability and offline behavior.\n- [x] AC-04: Any retained matcher carries explicit evidence in the relation\n basis and cannot silently masquerade as an exact token match.\n- [x] AC-05: A candidate is retained only if it closes the current known gap,\n preserves all hard negatives and leaves gold v1/v2 quality perfect.\n- [x] AC-06: The retained candidate improves aligned coverage on\n `subactor/platform` without reducing it on `todo2code`; otherwise the\n experiment closes without a production semantic change.\n- [x] AC-07: Full verification, SDK examples, smoke, dependency audit and\n Docker validation pass; the local Java skip is allowed only because required\n CI supplies JDK 17.\n- [x] AC-08: Commands, measurements, rejected approaches and remaining risks\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Extending `POLISH_TOPIC_ALIASES` with another domain vocabulary batch.\n- Lowering the current three-topic floor merely to raise recall.\n- Sending source code or private/untracked repository content to a provider.\n- Making offline CI depend on a network model.\n- Treating semantic similarity as implementation evidence without recording\n its origin and score.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`benchmark.json`](benchmark.json)\n- [`scripts/research/evaluate-embedding-pairs.py`](../../scripts/research/evaluate-embedding-pairs.py)\n- [`minilm-results.json`](minilm-results.json)\n- [`e5-results.json`](e5-results.json)\n- [`e5-prefixed-results.json`](e5-prefixed-results.json)\n- [`scripts/research/rank-intent-graph-embeddings.py`](../../scripts/research/rank-intent-graph-embeddings.py)\n- [`platform-e5-ranking.json`](platform-e5-ranking.json)\n- [`platform-e5-reciprocal-ranking.json`](platform-e5-reciprocal-ranking.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the explicit recommendation\n to address matching beyond the hand-written dictionary\n- **Date**: 2026-07-31\n\n## Conclusion\n\nRaw multilingual embeddings are not safe enough to become graph evidence.\nMiniLM ranked 5/6 synthetic pairs correctly. E5 ranked 6/6, but its positive\nand negative score ranges overlap; on the tracked platform graph it proposed\ntwo new links and manual review rejected both. Reciprocal top-1 removed the\nfalse positives but added no coverage.\n\nNo production matcher was retained. The accepted library change is an explicit\ncross-language gold cohort with six known positive gaps and six gated nearby\nwrong modules. Full verification passed with 244 tests (243 pass, one local\nJDK skip), both gold versions, five SDKs, dependency audit, CLI/MCP/A2A and\nDocker smoke.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-017/README.md", "path": "ticket-017 / README.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 017: Audit and repair confirmed todo2code errors\n\n- **ID**: ticket-017\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAudit the current `todo2code` workspace, reproduce concrete failures and repair\nonly defects confirmed by tests or deterministic before/after evidence. Preserve\nthe concurrent baseline and keep implementation outside this ticket.\n\nInitial confirmed candidates are:\n\n- `t2c pipeline --help` executes a pipeline and writes artifacts instead of\n displaying help or returning a non-mutating usage result;\n- Polish prohibition wording such as `Agentowi zabrania się ...` can be assigned\n positive polarity by documentation extraction and create a false\n `CONFLICTING_INTENT` against an equivalent TODO prohibition;\n- commit `1ebad96` (published concurrently while this plan was being prepared)\n implements shared Markdown path resolution and `create` versus `modify`\n planning; it needs independent validation for correctness, bounds and\n regressions before this ticket relies on it.\n- the repository needs reproducible Docker E2E environments: a fast core suite\n and a full language-toolchain suite with stable `T2C-E2E-*` failure codes.\n\nThe untracked `nlp2uri.yaml` and all unrelated worktree changes remain outside\nthis ticket unless a test proves they are required for one of the defects above.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding and checklist before source edits.\n- [x] AC-02: Concurrent baseline commit `1ebad96` is reviewed and not overwritten\n or attributed to this ticket.\n- [x] AC-03: Every repaired failure has a focused regression test and a stable,\n actionable error or diagnostic code/message where applicable.\n- [x] AC-04: `pipeline --help` is demonstrably non-mutating.\n- [x] AC-05: Equivalent Polish prohibitions no longer create a false\n `CONFLICTING_INTENT`, without weakening genuine conflict detection.\n- [x] AC-06: Shared Markdown path resolution and `create`/`modify` plans are\n deterministic, repository-bounded and correct for existing, missing,\n ambiguous and escaping paths.\n- [x] AC-07: Full offline verification, gold evaluation and relevant examples\n pass in the project Docker environment.\n- [x] AC-08: A deterministic before/after run on the Governance Hub clears the\n identified false conflict and records any remaining diagnostics honestly.\n- [x] AC-09: Documentation, changelog and error-code references match the final\n behavior; no auto-apply, commit or push occurs without a separate request.\n\n- [x] AC-10: `make e2e-core` runs the deterministic core E2E gate in an isolated\n Docker image whose workspace agrees with `T2C_ROOT`.\n- [x] AC-11: `make e2e-full` adds Go, JDK 17, Rust and PHP, exercises all five SDK\n examples and does not silently skip the required Java adapter test.\n- [x] AC-12: E2E failures emit a documented stable code, failing step and\n remediation while preserving the underlying command output.\n\nBoth E2E suites passed on 2026-08-01. The full suite ran 318 tests with zero\nfailures and zero skips, both versioned gold benchmarks, all protocol smoke\nchecks and all five SDK examples.\n\n## Participants\n\n- Human participant: unresolved; no user-* file was created by this script.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Risks\n\n- The branch changed concurrently during planning; validation must pin and report\n the exact reviewed HEAD.\n- Generated `dist/` may not match source until an approved build is completed.\n- Large-repository path scans can introduce performance or ignore-scope\n regressions if their bounds are not tested.\n- A polarity fix that is too broad could hide real contradictions.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-001/README.md", "path": "ticket-001 / README.md", "size": "901B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 001: Bootstrap repozytorium todo2code\n\n- **ID**: ticket-001\n- **Owner**: semcod\n- **Status**: DONE\n- **Created**: 2026-07-29\n\n## Goal & Scope\n\nPrzygotować repozytorium `semcod/todo2code` bez kodu aplikacji. Zakres obejmuje wyłącznie pliki wymagane przez `wellmanifest/new-project` oraz pusty katalog `docs/`.\n\n## Acceptance Criteria\n\n- [x] Obowiązkowe pliki bootstrapu znajdują się w docelowym katalogu projektu.\n- [x] Istnieje katalog `docs/`.\n- [x] Nie utworzono kodu aplikacji ani plików wykraczających poza wskazany zakres.\n- [x] Użytkownik zaakceptował opis intencji i `TODO.md`.\n- [x] Repozytorium `semcod/todo2code` istnieje na GitHubie.\n\n## Risks & Considerations\n\n- Walidacja Docker jest zablokowana, ponieważ silnik Docker nie działa.\n- Zakres funkcjonalny i docelowa architektura nie są jeszcze określone; nie należy ich zgadywać.\n\n## Participants\n\n- `AI-Codex.md`\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-014/README.md", "path": "ticket-014 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014: Distinguish path presence from implemented intent\n\n- **ID**: ticket-014\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a TODO capability from becoming `aligned` merely because its declared\ntarget file already contains unrelated AST facts. Compare the semantic intent\n(action/object/topics/symbol) with evidence inside the target before claiming\nimplementation, then expose unresolved ambiguity to the appropriate human or\nagent instead of silently choosing.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A real fixture reproduces the false alignment: retry/backoff aimed\n at an existing queue file produces no `PLANNED_NOT_IMPLEMENTED` plan.\n- [x] AC-02: Gold contains the existing-path/unrelated-capability case and a\n positive existing-path/implemented-capability control.\n- [x] AC-03: Path evidence alone cannot close a capability-bearing declaration;\n a symbol or sufficiently specific topic match is also required.\n- [x] AC-04: Ambiguous evidence abstains and names who must answer; runtime never\n edits a human-owned `user-*` record to manufacture consent.\n- [x] AC-05: Koru discovery creates tickets only for remaining grounded gaps,\n and re-analysis closes the targeted diagnostic after a verified patch.\n- [x] AC-06: Gold, full verification and cross-repository regression pass.\n\n## Participants\n\n- Human policy owner: `unresolved:human` only when ambiguity or autonomous-risk\n policy needs a decision.\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-007/README.md", "path": "ticket-007 / README.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007: Explicit unresolved response routing\n\n- **ID**: ticket-007\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nEnsure every communication divergence names a concrete respondent or an\nexplicit unresolved-role sentinel. The measured regression case is ticket-006:\nan agent-only ticket correctly requires a human response but currently emits\nan empty `responseRequiredFrom` array.\n\nExecutable implementation belongs in `src/`, regression coverage in `test/`\nand public behavior documentation in `docs/`. This directory contains only\ngovernance, decisions, logs and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: `responseRequiredFrom` is never empty for a communication issue.\n- [x] AC-02: A missing human respondent is represented as\n `unresolved:human`; a missing agent respondent as `unresolved:agent`.\n- [x] AC-03: Known participant IDs retain priority and are never replaced by a\n sentinel.\n- [x] AC-04: Rendering and diagnostic projection expose the sentinel without\n converting it into an identity claim.\n- [x] AC-05: Tests reproduce an agent-only ticket and cover both resolved and\n unresolved routing.\n- [x] AC-06: No `user-*` file or participant registry entry is created by the\n agent.\n- [x] AC-07: Full offline verification and gold evaluation pass.\n- [x] AC-08: No executable source is stored under `project/ticket-007`.\n\n## Non-goals\n\n- Guessing a person from repository ownership, display names or Git history.\n- Dispatching an external notification.\n- Creating human-owned governance evidence from the agent process.\n- Changing communication severity or semantic conflict detection.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Approval\n\n- **Decision**: approved to continue subsequent todo2code tickets\n- **Evidence**: current user instruction\n- **Date**: 2026-07-31\n\nThe agent records the existence of the instruction but does not materialize it\nas human-authored participant content.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Conclusion\n\nIssue construction now fills an otherwise empty route with a role-specific\nsentinel. The real ticket-006 audit changed three human-required issues from an\nempty list to `unresolved:human`; no participant was inferred. Offline tests,\nboth gold versions and all five SDK examples pass.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-009/README.md", "path": "ticket-009 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009: Canonical structured-response contracts\n\n- **ID**: ticket-009\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nGenerate the OpenRouter JSON Schema and the TypeScript runtime parser from one\ncanonical response contract at every production LLM boundary. Provider output\nmust fail closed instead of being silently coerced into a different intent.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: A reusable typed contract builder emits JSON Schema and parses the\n same supported constraints at runtime.\n- [x] AC-02: Every production structured OpenRouter response is parsed through\n its canonical contract before fields are read.\n- [x] AC-03: Unknown/missing properties, invalid enums, bounds, patterns and\n uniqueness constraints fail with a precise response path.\n- [x] AC-04: Grounding and cross-field semantic checks remain a separate,\n explicit validation stage.\n- [x] AC-05: Published document response schema is generated from and tested\n against its runtime contract.\n- [x] AC-06: Invalid provider output is retried or visibly degraded according\n to the stage policy; it is never silently normalized into another intent.\n- [x] AC-07: Full repository verification and gold/example gates pass.\n- [x] AC-08: Documentation records the contract boundary and measured drift.\n- [x] AC-09: The completed change is committed and pushed to `main`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nSeven production OpenRouter boundaries now use `chatStructuredWithMetadata`;\nthe repository gate found zero raw JSON calls outside the client. Provider\nschema and runtime parsing share one typed contract, while grounding remains a\nseparate evidence check. The implementation was published as `d0fc143`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-008/README.md", "path": "ticket-008 / README.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008: Cross-repository governance standard hardening\n\n- **ID**: ticket-008\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nUpstream the measured todo2code governance findings into\n`wellmanifest/new-project`: keep human and agent intent separately typed, make\nmissing ownership explicit, prevent executable code in ticket directories and\navoid collisions between ticket indexes and generated analysis artifacts.\n\nImplementation belongs to the governance hub's policies, templates, scripts\nand tests. This ticket directory contains only governance and captured evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: The target standard never auto-creates `user-*` for an agent.\n- [x] AC-02: Agent plans carry explicit participant ID, role, ticket and typed\n sections understood by todo2code.\n- [x] AC-03: Missing human ownership remains `unresolved:human` and produces a\n non-empty response route during communication analysis.\n- [x] AC-04: Ticket indexing uses `project/TICKETS.md` and preserves an\n analysis-owned `project/README.md`.\n- [x] AC-05: A second ticket is rejected while an unfinished ticket exists.\n- [x] AC-06: Traversal and malformed CLI arguments fail closed.\n- [x] AC-07: Ticket directories are documented as governance/evidence only.\n- [x] AC-08: Isolated shell tests and the todo2code integration check pass.\n- [x] AC-09: Changes are committed and pushed to both `main` branches.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- Upstream commit: `wellmanifest/new-project@72e5f6c`\n\n## Conclusion\n\nThe upstream 0.6.0 standard now matches the ownership behavior measured by\ntodo2code. Its generated agent plan is parsed as agent intent, it invents no\nhuman participant, and the missing approval owner is routed as\n`unresolved:human`. The hub itself remains free of task tickets.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-002/README.md", "path": "ticket-002 / README.md", "size": "3.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 002: Cross-repository semantic hardening\n\n- **ID**: ticket-002\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nTest todo2code deterministically on a fixed, reviewable corpus of external\nrepositories, derive evidence-backed failure categories, and improve the\nlibrary one measured defect at a time.\n\nThe initial corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nEvery repository run must use an isolated detached worktree at a recorded\ncommit. The benchmark must not modify an external repository or consume its\nprivate and untracked files.\n\n## Acceptance criteria\n\n- [x] AC-01: The baseline records repository commit, graph fingerprint, record\n and relation counts, topic status, implementation/documentation coverage,\n diagnostic counts, warnings and elapsed time for at least five external\n repositories.\n- [x] AC-02: Results use the same documented deterministic command and document\n selection policy, with repository-specific exceptions recorded explicitly.\n- [x] AC-03: At least one repeated semantic failure is demonstrated on external\n evidence and represented by a focused gold or unit regression test before\n its implementation changes.\n- [x] AC-04: Each library change is evaluated independently against gold v2 and\n the external corpus; improvements and regressions are both reported.\n- [x] AC-05: The selected improvement raises its target metric on at least two\n external repositories, or is rejected with a documented reason, without\n reducing gold precision/recall or introducing forbidden-pair violations.\n- [x] AC-06: `npm run verify`, relevant smoke tests and Docker validation pass;\n the Java test may only be skipped locally when the required CI job remains\n verified.\n- [x] AC-07: Conclusions, raw command output, changed files, remaining risks and\n follow-up candidates are preserved in this ticket.\n\n## Risks and mitigations\n\n- External worktrees may be dirty or contain secrets. Only detached tracked\n commits are analyzed; private and untracked files are excluded.\n- Repository sizes and document sets differ. Absolute counts are never\n compared without recording the input policy.\n- A broad synonym rule may raise recall by destroying precision. A hard\n negative is required before changing semantic matching.\n- Provider-dependent runs would make the baseline unstable and potentially\n costly. The primary corpus is offline; live LLM work is a separate result.\n- `project/README.md` is also generated by the current analysis workflow.\n Ticket indexing must be preserved or explicitly reconciled before running\n `project.sh`.\n- Parallel agents or builds can race on `dist/`. Validation must run from a\n stable worktree without another build writing the same output directory.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`baseline.md`](baseline.md)\n- [`baseline.json`](baseline.json)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`iteration-02.md`](iteration-02.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`\n- **Date**: 2026-07-31\n\n## Conclusion\n\nIteration 01 is accepted. It reduced false `review_required` findings on five\nexternal repositories without changing any graph fingerprint or gold metric.\nIteration 02 fixed a tracked-evidence false positive in the generated-analysis\nisolation gate while retaining the original untracked-input hard negative.\nThe next iteration should be a separate approved ticket: either broaden\ncross-language semantic evidence beyond the hand-written PL→EN dictionary, or\nsample and classify the remaining 1,853 actionable changelog findings before\nchanging linker policy.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-012/README.md", "path": "ticket-012 / README.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012: Reliable live structured-output model\n\n- **ID**: ticket-012\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the opaque `openrouter/auto-beta` default with an explicit model that\nadvertises structured-output support, retain rejected-response metadata in\nstage audits, and make the live history include the run just recorded.\n\nExecutable implementation belongs under `src/` and `scripts/`; tests under\n`test/`. This directory contains governance and evidence only.\n\n## Acceptance criteria\n\n- [x] AC-01: The selected model is present in the current OpenRouter model API\n and advertises `structured_outputs`.\n- [x] AC-02: Invalid JSON or runtime-contract responses retain response ID,\n resolved model, provider, tokens and cost when OpenRouter supplied them.\n- [x] AC-03: NL, Markdown, documentation and communication stage failures\n propagate rejected-response metadata into their audits.\n- [x] AC-04: The persisted and rendered live history includes the current run\n without double-counting rewrites.\n- [x] AC-05: Offline tests cover invalid response metadata and current-history\n accounting.\n- [x] AC-06: Full verify, gold v1/v2 and SDK examples pass.\n- [x] AC-07: A paid six-stage `require-llm` run is attempted with the explicit\n model and its exact outcome is documented.\n- [x] AC-08: Documentation is updated and changes are pushed to `main` without\n committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-011/README.md", "path": "ticket-011 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011: AST-grounded NL symbol resolution\n\n- **ID**: ticket-011\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nResolve explicit NL symbol targets against observed AST declarations without\nguessing between modules. Make `AMBIGUOUS_REQUIREMENT` prescribe the exact field\nand candidate path that a human must add or correct.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: AST symbol declarations are indexed by normalized qualified and\n leaf aliases with their observed source paths.\n- [x] AC-02: A short symbol owned by one source path remains exact evidence.\n- [x] AC-03: A short symbol owned by several paths does not select all of them.\n- [x] AC-04: An explicit path or qualified symbol selects exactly one matching\n owner; a conflicting path does not create symbol evidence.\n- [x] AC-05: A not-yet-implemented symbol stays unresolved without being called\n ambiguous.\n- [x] AC-06: Ambiguity diagnostics list candidate paths and prescribe\n `target.path`; known `missingFields` prescribe concrete edits.\n- [x] AC-07: File names and all-caps prose are not emitted as implicit code\n symbols, while explicit backticked/qualified symbols remain supported.\n- [x] AC-08: Gold v2 includes unique, ambiguous-hard-negative and explicit-path\n symbol cases with separate exact-target accounting.\n- [x] AC-09: Full verification, gold v1/v2 and all SDK examples pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without committing unrelated `nlp2uri.yaml`.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nNL↔AST symbol evidence is now limited to a unique observed owner or an\nexplicitly selected path. Ambiguous and conflicting symbols abstain and produce\nan actionable diagnostic with candidate paths. The implementation was\ncommitted and published to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-022/README.md", "path": "ticket-022 / README.md", "size": "6.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 022: Git evidence for umbrella workspaces\n\n- **ID**: ticket-022\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nAllow the existing deterministic Git extractor to analyze an umbrella directory\nwhose children are independent Git repositories. Today the Subactor root is not\nitself a work tree, so the pipeline emits `Git repository not available` and\nloses the history of 41 repository roots that supply its code.\n\nThe extractor will discover bounded, nested repository roots, extract each\nhistory independently and express changed paths relative to the umbrella root.\nIt remains read-only and does not add an executor, ticket publisher, MCP/A2A\nmutation, checkout, fetch, commit or push operation.\n\n## Planned behavior\n\n1. Preserve target-path, commit ordering and count behavior for a root that is\n already one Git repository, apart from the added repository provenance and\n audited extractor-version increment.\n2. When the root is not a repository, walk real directories in deterministic\n order, without following symlinks. Stop descending as soon as a repository\n root is found so vendored/worktree repositories inside it are not counted.\n3. Bound discovery to 100 repositories and four concurrent repository readers;\n report truncation and per-repository failures without hiding successful\n evidence from other repositories.\n4. Interpret `count` per discovered repository. Prefix changed and previous\n paths with the repository path relative to the umbrella root so they align\n with AST, TODO and documentation paths in the shared graph.\n5. Record the repository-relative root in metadata and bump deterministic Git\n extraction provenance from `t2c/git@1` to `t2c/git@2`.\n6. Add isolated regression tests for nested repositories, path collisions,\n nested-repository pruning, symlink refusal, empty histories and the unchanged\n single-repository contract.\n7. Repeat the deterministic Subactor pipeline and compare Git record count,\n warnings, graph links and downstream diagnostics against the ticket-021\n baseline.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this exact plan before source or test edits.\n- [x] AC-02: A normal single Git repository retains unprefixed target paths and\n the requested commit ordering/count.\n- [x] AC-03: An umbrella root discovers every bounded top-level/nested repository\n exactly once and does not follow symlinks or descend into a discovered repo.\n- [x] AC-04: Same-named files from different repositories receive distinct,\n umbrella-relative paths and stable record IDs.\n- [x] AC-05: One empty or unreadable repository produces a scoped warning while\n evidence from healthy siblings remains available.\n- [x] AC-06: Discovery and extraction are deterministic and bounded; no analyzed\n repository or its Git state is modified.\n- [x] AC-07: Focused tests, `npm run verify`, `make governance` and Docker smoke\n pass or report only independently owned pre-existing governance findings.\n- [x] AC-08: A comparable Subactor run replaces the root-level Git-unavailable\n warning with grounded child-repository history and does not regress the\n autonomy-safety result from ticket-021.\n\n## Participants\n\n- Human participant: unresolved; no human-owned file was created.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval boundary\n\n- Current state: `DONE / COMPLETE`.\n- Approval evidence: user response `zatwierdzam ticket 022 i kolejne` on\n 2026-08-01 after the exact bounded plan was presented. This approves ticket\n 022; future unknown scopes still require their own concrete plan.\n- Chat approval permits interactive implementation only. Protected merge still\n requires independent GitHub review or signed attestation.\n\n## Risks and stop conditions\n\n- `src/pipeline/**`, CLI, MCP/A2A, core schemas/types, package/build files and\n Subactor repositories are outside this ticket.\n- Repository discovery must not cross the supplied root or follow symlinks.\n- If correct behavior requires a new public option or schema field, stop and\n create an integration ticket rather than widening this scope.\n\n## Implementation and validation result\n\n- A root that is already a Git work tree still emits unprefixed paths in newest\n first commit order. The extractor provenance is now `t2c/git@2` and records\n `metadata.repositoryRoot` (`.` for a single repository).\n- A non-Git umbrella uses deterministic breadth-first discovery bounded to 100\n repositories and 10,000 directories. It excludes common generated/vendor\n roots, refuses symlinked directories and `.git` markers, stops below every\n discovered checkout and reads four repositories concurrently while retaining\n stable output order.\n- Changed and previous rename paths are namespaced relative to the umbrella.\n Per-repository short/empty-history and read failures are scoped warnings;\n healthy siblings remain available.\n- Focused Git tests: 5/5 PASS. Full `npm run verify`: 338 tests discovered,\n 337 passed, one explicit missing-JDK skip, zero failures. `make docker-smoke`:\n PASS.\n- Comparable Subactor pipeline: 326 commits from 39 member repositories and\n 2,697 namespaced changed paths. The other two raw `.git` directories observed\n by recursive `find` are correctly pruned inside an already discovered\n `vendor`/coding-agent `work` checkout.\n- Same-snapshot control without Git had 133,043 records, 294,423 relations and\n 14,396 diagnostics. With Git it has 133,369 records, 336,215 relations and\n 14,121 diagnostics: +326 records, +41,792 relations and 275 fewer diagnostics.\n 268 of 326 commit records link to other evidence; 58 remain explicitly\n unlinked. Git exposes 169 implemented-but-undocumented findings and clears\n 442 unlinked-record findings plus two planned-not-implemented findings.\n- Composing this graph with ticket-021's planner produces 44 plans, including\n 43 remediation-oriented `Resolve` plans and zero unsafe inverted plans.\n- `make governance` reports no ticket-022 finding. The global gate remains\n blocked only by the four inherited ticket-018/019 findings, so protected\n merge/push remains blocked pending their reconciliation and independent review.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-020/README.md", "path": "ticket-020 / README.md", "size": "9.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 020: Role-bound trusted intake with CQRS, ES, Protobuf, MCP and A2A\n\n- **ID**: ticket-020\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: COMPLETE\n- **Created**: 2026-08-01\n\n## Goal and scope\n\nImplement a deterministic trusted-intake boundary which binds every captured\nhuman message to a verified stable participant, a persistent governance role\n(`manager`, `user` or `dev`) and one ticket. The assignment is stored in a\nrepository-level participant registry, so it remains stable across tickets.\nFilename prefixes are projections of verified identity and role; they are never\naccepted as identity evidence by themselves.\n\nThe boundary will expose one domain contract through a Python shell CLI, the\nexisting TypeScript CLI, MCP tools and an A2A skill. All transports call the\nsame command/query handlers and return the same stable diagnostic codes. The\nrequired decision path is deterministic and does not call an LLM.\n\nThe implementation uses CQRS and event sourcing:\n\n- commands validate authorization and append immutable domain events;\n- queries read deterministic projections and never mutate state;\n- event streams use optimistic concurrency, idempotency keys and a SHA-256\n integrity chain;\n- a trusted projection writer materializes human-owned\n `manager-*`, `user-*` and `dev-*` Markdown views;\n- rejected commands return structured diagnostics and do not write human\n content or secret payloads.\n\nThe canonical transport envelope is Protobuf. Strict JSON Schemas validate the\nJSON representation and command payloads. TypeScript and dependency-free\nPython codecs support the limited wire types used by the envelope and are\nchecked against shared golden vectors.\n\nThis interfaces ticket owns only `src/communication/**`, `src/interfaces/**`,\n`src/cli.ts` and matching interface tests. It will not change package,\ntop-level schema, Docker, SDK or documentation paths. If such a shared path is\nproved necessary, work stops and a separate integration ticket is planned and\napproved instead of widening this scope.\n\n## Role and authority model\n\n`kind` and `governanceRole` are separate fields. Humans have a stable\n`participant-id` and one primary governance role; agents retain an `agent:*`\nidentity and cannot acquire a human role. Roles grant explicit capabilities,\nnot implicit inheritance:\n\n- `manager`: assign participants/tickets, approve plans and accept outcomes;\n- `user`: submit requirements and accept business behaviour;\n- `dev`: make/review technical decisions and operate an AI from an IDE;\n- every human role may submit its own message through trusted intake;\n- combined duties require explicit grants rather than treating one role as all\n lower roles.\n\nRole changes are versioned commands authorized by the configured manager or a\ntrusted intake policy. Historical role files are migration evidence only and\ncannot silently change the registry.\n\n## Planned contracts\n\nCommands include `RegisterParticipant`, `BindExternalIdentity`, `AssignRole`,\n`CaptureMessage`, `RebuildProjection` and `VerifyEventStream`. Queries include\n`ResolveParticipant`, `GetRole`, `GetTicketConversation`, `GetCommandStatus`\nand `ValidateProjection`.\n\nEvents include `ParticipantRegistered`, `ExternalIdentityBound`,\n`GovernanceRoleAssigned`, `MessageCaptured` and `ProjectionRebuilt`. Rejected\ncommands produce a sanitized audit result, not a successful domain event.\n\nThe response envelope contains at least: schema version, message ID,\ncorrelation/causation IDs, authenticated principal, aggregate ID, expected and\nactual stream versions, idempotency key, timestamp, payload hash, diagnostic\ncode, remediation and retryability.\n\n## Acceptance criteria\n\n- [x] AC-01: A human approves this understanding, scope and checklist before\n any implementation path is changed.\n- [x] AC-02: Participant registry v2 has strict schemas separating\n `human|agent` kind, stable identity, `manager|user|dev` governance role,\n verified external principals and explicit capability grants.\n- [x] AC-03: Identity resolution uses exact verified principal identifiers;\n display names and role-prefixed filenames are never sufficient evidence.\n- [x] AC-04: CQRS command and query handlers are transport-independent and\n reject commands with missing identity, authority, ticket binding or\n expected stream version.\n- [x] AC-05: The event store is append-only, atomic and replayable, with\n optimistic concurrency, idempotency and a verifiable SHA-256 hash chain.\n- [x] AC-06: A deterministic projection maps a verified human to exactly one\n `manager-*`, `user-*` or `dev-*` file per ticket and detects projection\n drift without overwriting untrusted content.\n- [x] AC-07: Only a trusted intake capability may create or update human role\n projections; an AI/agent command fails closed and cannot self-approve.\n- [x] AC-08: Strict JSON Schemas reject unknown fields and version every\n registry, command, query, event, result and diagnostic payload.\n- [x] AC-09: A versioned `.proto` contract defines the canonical envelope and\n command/query/event variants; TypeScript and Python round trips match\n byte-level golden vectors and preserve unknown-field compatibility.\n- [x] AC-10: A dependency-free Python CLI supports participant resolution,\n role assignment, message capture, validation, event verification/replay\n and projection rebuild, with stable JSON output and documented exits.\n- [x] AC-11: The existing TypeScript CLI exposes equivalent commands and calls\n the same application handlers as MCP and A2A.\n- [x] AC-12: MCP exposes typed intake/resolve/validate/query tools, maps domain\n diagnostics deterministically and declares mutating-tool annotations.\n- [x] AC-13: A2A exposes a versioned governed-intake skill, accepts JSON and\n Protobuf data parts, preserves correlation/idempotency metadata and maps\n rejections to deterministic task outcomes.\n- [x] AC-14: Stable `T2C-INTAKE-*` diagnostics cover unknown/unverified actor,\n role mismatch, unauthorized command, filename mismatch, version conflict,\n duplicate request, broken chain, invalid schema/wire data, secret input,\n unsafe path, projection drift and storage failure, each with remediation.\n- [x] AC-15: Secret scanning, size limits, path confinement, symlink defense,\n payload hashing and sanitized logs run before persistent human content is\n written; rejected secret text is not copied to the event stream.\n- [x] AC-16: Legacy `user-*` remains readable; migration to role-bound v2 is\n explicit, dry-runnable and conflict-producing when history is ambiguous.\n- [x] AC-17: Tests prove role persistence across tickets, role-change\n authorization, filename spoof rejection, agent-write rejection,\n concurrency conflicts, idempotent replay and deterministic rebuild.\n- [x] AC-18: CLI, MCP, A2A and cross-language Protobuf contract tests run in\n Docker without live providers or LLM calls and produce no real human\n participant file in the repository.\n- [x] AC-19: Existing CLI/MCP/A2A and communication tests remain green; every\n failure is reported with its stable code and no unrelated dirty path is\n modified or attributed to this ticket.\n\n## Participants\n\n- Human participant: unresolved; no human role file was created by the agent.\n- Agent participant: [ai-codex.md](ai-codex.md)\n\n## Approval record\n\nThe user explicitly instructed the agent to implement (\"wdrażaj\") in chat on\n2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required\nexplicit approval. This authorizes the interactive `EDIT` phase only; it is\nnot trusted merge evidence.\n\n## Risks and stop conditions\n\n- IDE/CLI clients that do not expose an authenticated hook cannot be claimed as\n automatically captured; they require a wrapper or provider-specific adapter.\n- Filesystem compare-and-append coordinates one checkout, not distributed\n worktrees. Git/CI detects divergent event versions before merge.\n- Adding a Protobuf/runtime package, modifying `package.json`, Docker files,\n top-level `schemas/**` or documentation requires a separate integration\n ticket, dependency/license review and fresh approval.\n- SDK/Python packaging paths remain outside this ticket and are untouched.\n- The branch now inherits committed policy 0.8.0 and its workstream-aware\n validator; remaining governance findings, if any, must be attributed to an\n actual dependency, conflict, ownership or scope violation rather than a\n repository-wide single-ticket limit.\n\n## Implementation and validation result\n\n- Added a strict registry v2, typed command/query/result contracts, the stable\n `T2C-INTAKE-*` diagnostic catalog and Draft 2020-12 schemas.\n- Added an append-only event-per-version store with optimistic concurrency,\n idempotency, exclusive append locking, replay and a verified SHA-256 chain.\n- Added trusted human projection materialization, role/filename drift checks,\n secret and size rejection, root/symlink confinement and dry-run legacy\n migration conflict reporting. No real human projection was written here.\n- Added dependency-free TypeScript and Python Protobuf codecs with golden-byte\n parity and unknown-field preservation, plus explicit command/query/event and\n result variants in `governed-intake.proto`.\n- Added TypeScript and Python CLI parity, typed MCP tools and an A2A skill.\n A2A binds intake identity to the authenticated bearer-derived principal,\n rejects unauthenticated bootstrap and preserves JSON/Protobuf result modes.\n- `npm run verify`: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,\n 0 failed.\n- `make e2e-core`: PASS in network-isolated Docker; 335 tests, 328 passed,\n 7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and\n available SDK examples passed.\n- `make governance` under policy 0.8.0 returns only the remaining independent\n findings owned by ticket-019 (`GOV-DEPENDENCY-002`, `GOV-CONFLICT-001`,\n `GOV-WORKSTREAM-003`, `GOV-WORKSTREAM-004`). Ticket-020 itself no longer\n contributes to a single-ticket or overlap violation.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-010/README.md", "path": "ticket-010 / README.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010: Incremental extraction cache\n\n- **ID**: ticket-010\n- **Owner**: unresolved:human\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nCache deterministic AST extraction and Markdown chunking by source content hash\nso repeated analysis of large repositories does not repeat unchanged work.\nProvider responses remain live and are never stored by this cache.\n\nExecutable implementation belongs under `src/` and tests under `test/`. This\nticket directory contains only governance and evidence.\n\n## Acceptance criteria\n\n- [x] AC-01: TypeScript AST entries are cached per source path and content hash.\n- [x] AC-02: External AST adapters are cached per complete language manifest,\n executable selection and file-size limit.\n- [x] AC-03: Documentation chunks are cached per path, content hash, chunk size\n and algorithm version without caching LLM responses.\n- [x] AC-04: Cache entries have a versioned envelope, validated namespace/key\n and atomic same-directory writes.\n- [x] AC-05: Missing, corrupt, invalid and unwritable cache state fails open to\n authoritative extraction; warning-bearing external results are not retained.\n- [x] AC-06: Cold/warm output is identical and changing one input invalidates\n only its content-addressed entry.\n- [x] AC-07: Cache telemetry is returned outside Intent DSL and does not alter\n graph records or fingerprints.\n- [x] AC-08: Measurements cover todo2code and at least two other repositories.\n- [x] AC-09: Full repository verification and gold/example gates pass.\n- [x] AC-10: Documentation is updated and the completed change is pushed to\n `main` without unrelated worktree changes.\n\n## Participants\n\n- Human scope: current conversation; no agent-authored `user-*` file.\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n\n## Result\n\nDeterministic extraction now reuses validated content-addressed entries while\nsource records remain authoritative. A warm run avoids unchanged TypeScript\nparsing and successful external-toolchain startup; Markdown reuse stops before\nthe provider boundary. The implementation was committed as `f1d9334`.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-015/README.md", "path": "ticket-015 / README.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015: Preserve compound intent in code-change titles\n\n- **ID**: ticket-015\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nPrevent a secondary verb in a compound TODO from producing lossy and duplicated\ncode-change titles such as `Implement Implement ... and it ...`.\n\nRuntime implementation belongs under `src/`; this directory contains only the\nticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] A regression test reproduces the title emitted by the Koru PLF-003 flow.\n- [x] The title preserves both the leading action and the secondary clause.\n- [x] Ordinary concise object titles remain unchanged.\n- [x] Focused tests, the real deterministic fixture and all repository gates pass.\n\n## Participants\n\n- Technical evidence/fix owner: [`ai-codex.md`](ai-codex.md).\n- No human response is required; the source intent is unambiguous and unchanged.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-003/README.md", "path": "ticket-003 / README.md", "size": "3.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 003: Residual changelog diagnostic audit\n\n- **ID**: ticket-003\n- **Owner**: tom-sapletta-com\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nAudit the `CHANGELOG_WITHOUT_IMPLEMENTATION` findings that remain after\nticket-002, classify a deterministic cross-repository sample, and change the\nlibrary only when the sample demonstrates one repeated false-positive class\nthat can be removed without treating unsupported release claims as evidence.\n\nThe unchanged corpus is:\n\n- `semcod/code2llm`\n- `semcod/domd`\n- `semcod/pactfix`\n- `semcod/code2logic`\n- `semcod/code2docs`\n- `semcod/redup`\n- `subactor/platform`\n\nExternal inputs remain detached tracked-only worktrees at the commits recorded\nby ticket-002.\n\n## Acceptance criteria\n\n- [x] AC-01: A current deterministic run is recorded for all seven repositories\n using tracked `18cc21b` plus the explicit ticket-002 diagnostic patch only.\n- [x] AC-02: A deterministic stratified sample covers every repository and at\n least 100 residual `CHANGELOG_WITHOUT_IMPLEMENTATION` findings.\n- [x] AC-03: Every sampled finding has a review label, rationale and enough\n source/target context to reproduce the classification.\n- [x] AC-04: A code change is attempted only for a false-positive class present\n in at least two repositories with at least 20 sampled examples; otherwise the\n hypothesis is rejected and the ticket closes without semantic changes.\n- [x] AC-05: A focused hard-negative regression is observed failing before any\n implementation change.\n- [x] AC-06: The unchanged corpus demonstrates an improvement in at least two\n repositories, with stable graph fingerprints and no loss in gold v2 quality.\n- [x] AC-07: Full verify, examples, smoke, dependency audit and Docker validation\n pass; the local Java skip remains allowed only because CI requires JDK.\n- [x] AC-08: Results, raw commands, changed files and the next ranked hypothesis\n are preserved under this ticket and summarized in `docs/READINESS.md`.\n\n## Non-goals\n\n- Broad capability-topic linking for changelog prose.\n- Suppressing old or unverifiable behavioral claims merely to lower counts.\n- Using an LLM to label the primary audit sample.\n- Mutating or reading untracked content from external repositories.\n- Combining unrelated semantic heuristics in one A/B result.\n\n## Participants\n\n- [`user-tom-sapletta-com.md`](user-tom-sapletta-com.md)\n- [`ai-codex.md`](ai-codex.md)\n\n## Evidence\n\n- [`preprompt.md`](preprompt.md)\n- [`audit.md`](audit.md)\n- [`sample.json`](sample.json)\n- [`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\n- [`iteration-01.md`](iteration-01.md)\n- [`iteration-01.json`](iteration-01.json)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n- [`changelog.md`](changelog.md)\n\n## Approval\n\n- **Decision**: approved\n- **Evidence**: user message `kontynuuj`, following the ticket-002 conclusion\n- **Date**: 2026-07-31\n\n## Conclusion\n\nThe evidence supports one narrow correction: exact `Update ` bookkeeping\nwithout behavioral wording is not an unsupported implementation claim. The\nchange removed 547 `CHANGELOG_WITHOUT_IMPLEMENTATION` findings and 188\nsecondary `UNLINKED_RECORD` warnings across five repositories. All seven graph\nfingerprints stayed identical, gold v2 stayed perfect and the full offline\nvalidation suite passed.\n\nThe 1,306 remaining findings are intentionally retained: 1,275 are substantive\nor unverified claims, 30 are roadmap entries and one is a file-summary entry.\nThe next ranked hypothesis is to model unchecked roadmap entries through\nexplicit lifecycle/extractor semantics in a separate ticket, rather than hide\nthem with another changelog text filter.\n", "is_subdir": true}, {"name": "README.md", "rel_path": "ticket-016/README.md", "path": "ticket-016 / README.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016: First-class PHP syntax evidence\n\n- **ID**: ticket-016\n- **Owner**: agent:codex\n- **Status**: DONE\n- **Workflow state**: DONE\n- **Created**: 2026-07-31\n\n## Goal and scope\n\nReplace the explicit PHP unsupported-language warning with deterministic,\nsource-grounded syntax facts without adding a Composer dependency to the core.\n\nRuntime implementation belongs under `src/` and `php/`; this directory holds\nonly the ticket contract and redacted evidence.\n\n## Acceptance criteria\n\n- [x] PHP namespace, imports, types, functions, methods and calls become facts.\n- [x] Source selection uses the repository ignore matcher and manifest cache.\n- [x] No matching files avoid starting PHP; missing PHP and parse errors fail open.\n- [x] The adapter is visible in config, manifests, `doctor` and the public API.\n- [x] A controlled external-repository A/B demonstrates the semantic effect.\n- [x] Full verification, both gold datasets and all examples pass.\n\n## Participants\n\n- Technical evidence and implementation: [`ai-codex.md`](ai-codex.md).\n- No human semantic decision is required; this ticket adds observed evidence.\n\n## Evidence\n\n- [`audit.md`](audit.md)\n- [`ai-codex-logs.txt`](ai-codex-logs.txt)\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-006/ai-codex.md", "path": "ticket-006 / ai-codex.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-006\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-005 proved that merely sending JSON Schema does not guarantee provider\nconformance. The next step is contract fidelity and diagnostics, not semantic\nthreshold tuning.\n\n## Plan\n\n1. Inventory duplicated provider, published and runtime response definitions.\n2. Add failing tests for every live violation observed in ticket-005.\n3. Introduce the smallest canonical structural source and precise validator.\n4. Keep semantic contracts internal and all network calls opt-in.\n5. Run offline gates before any additional paid live comparison.\n6. Compare two explicit provider/model routes only on a clean tracked snapshot.\n7. Retain no production path unless both protocol and quality boundaries pass.\n\n## Guardrails\n\n- No field renaming or numeric coercion.\n- No raw provider payload in logs.\n- No untracked repository content.\n- No executable file under this ticket.\n\n## Current state\n\n- Added one internal structural source for the TypeScript response shape,\n OpenRouter JSON Schema and exact runtime validation.\n- Added a full-verification drift test against the published reranker decision\n schema.\n- Added fail-closed diagnostics for the observed `judgments` envelope,\n non-numeric confidence and invalid verdict/reason combinations.\n- Error text includes provider, resolved model and response ID, but never the\n raw provider payload or API key.\n- Focused offline tests pass 5/5.\n- The tracked live comparison rejected both Plus and Flash; Flash added an\n unknown `decision` property to an otherwise structured decision.\n- All release gates pass. The hardening is retained, while semantic production\n enablement remains rejected.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-019/ai-codex.md", "path": "ticket-019 / ai-codex.md", "size": "2.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-019\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `goal -a` to publish the existing dependency-free Python SDK as\nthe root PyPI distribution `todo2code`. They selected one root manifest, removal\nof `sdk/python/pyproject.toml`, and an SDK-only artifact. The root project must\nstill remain a Node.js application; Goal therefore needs to detect both stacks.\n\nThe shared `dist/` directory is acceptable when handled append-only. TypeScript\nuses paths below `dist/src`, while Python build writes two top-level archive\nfiles. Publication is already bounded to `dist/todo2code-{version}*`, so neither\nthe JavaScript tree nor unrelated artifacts are passed to Twine.\n\nRemoving the nested manifest requires migrating `make python-wheel` from\n`pip wheel ./sdk/python` to the repository root. `Makefile` is currently in the\nallowed scope of active governance ticket-018; editing it from ticket-019 would\nviolate the non-overlap contract.\n\n## Execution plan\n\n1. Obtain explicit human approval for ticket-019 and resolve the Makefile scope\n conflict with ticket-018.\n2. Add root PEP 517/621 metadata mapping `todo2code` and `todo2code_sdk` from\n `sdk/python`, preserving Apache-2.0 metadata and Python >=3.10.\n3. Update Goal's project types/version file, remove the nested manifest, migrate\n the wheel target and correct SDK installation/build documentation.\n4. Seed `dist/` with a sentinel TypeScript file, run an isolated root build and\n prove the sentinel survives.\n5. Inspect wheel/sdist member lists, run `twine check`, install the wheel into a\n clean virtual environment and verify imports/version/dependency metadata.\n6. Run Goal detection and `goal --dry-run -a`, then the repository verification,\n SDK examples and governance checks.\n7. Record evidence without publishing, committing or pushing unless separately\n requested.\n\n## Actual changes\n\n- None; waiting for approval.\n\n## Blockers\n\n- Human approval is required before implementation.\n- Active ticket-018 currently claims `Makefile`; ticket-019 cannot safely\n migrate `make python-wheel` until that overlap is released or routed through\n an approved integration ticket.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-013/ai-codex.md", "path": "ticket-013 / ai-codex.md", "size": "918B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-013\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Verify current structured-output support and prices.\n2. Run identical 6/6 Live checks for Gemini 3 Flash Preview, Codestral 2508\n and DeepSeek V4 Pro.\n3. Compare each result with the Gemini 3.6 Flash baseline.\n4. Retain or change the default only on complete measured evidence.\n\n## Outcome\n\nCodestral 2508 is the measured default. Gemini 3 Flash Preview is the fallback\ncandidate. DeepSeek V4 Pro is rejected for exceeding the complete-run budget.\nThe external-repository run additionally caused bounded Markdown batch\nconcurrency; no validation rule or schema was relaxed.\n\n## Safety\n\nThe user explicitly authorized live comparison. Each run keeps the existing\n$0.50 total cost ceiling and 15-minute total latency ceiling. Provider output\nremains fail-closed and redacted in reports.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-005/ai-codex.md", "path": "ticket-005 / ai-codex.md", "size": "5.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-005\n- **Status**: DONE\n- **Workflow state**: DONE\n\n## Understanding\n\nTicket-004 proved that multilingual similarity is useful for ordering\ncandidates but unsafe as relation evidence. The next candidate therefore\nseparates recall from acceptance: retrieval finds a small shortlist, while an\naudited reranker must explain an accepted module using repository-owned\nevidence or abstain.\n\nBefore introducing another semantic stage, the current communication boundary\nmust be measured. The governance standard names participants through\n`user-` and `ai-` files; those records must remain distinct\nfrom ticket specifications and must produce an actionable response owner when\nhuman and agent intent diverge.\n\n## Execution plan\n\n1. Audit `user-*`/`ai-*` extraction and communication analysis on current\n todo2code tickets.\n2. Add red regressions for participant filename recognition, evidence-file\n exclusion and response ownership.\n3. Implement the minimal deterministic communication correction.\n4. Re-run the corrected analysis on todo2code and external tracked projects.\n5. Specify the candidate, decision, provenance and abstention contracts.\n6. Add red contract tests and cross-language gold projection fixtures.\n7. Implement the optional orchestration boundary outside the deterministic\n linker.\n8. Evaluate a constrained reranker on the six gold positives and negatives.\n9. Run tracked A/B on `todo2code`, `subactor/platform` and one additional\n repository selected from the existing seven-repository corpus.\n10. Manually review every newly proposed relation.\n11. Retain the implementation only if every precision and coverage criterion\n passes; otherwise remove it and retain the evidence.\n12. Run the full release validation and update readiness documentation.\n\n## Planned code locations\n\n- `src/`: public contracts and optional orchestration.\n- `test/`: contract, hard-negative and integration tests.\n- `evaluation/gold/`: versioned evaluation fixtures if the schema requires it.\n- `scripts/research/`: optional manually invoked reproducer only.\n- `project/ticket-005/`: specifications, logs, captured results and decisions\n only.\n\n## Risks\n\n- A reranker may restate semantic similarity without adding evidence.\n- Candidate text may bias a model into selecting a module instead of\n abstaining.\n- Multi-module requirements may be incorrectly collapsed to one module.\n- Provider-dependent evaluation may be nondeterministic or unavailable.\n- Curated gold projections may overfit six examples without improving a real\n repository.\n\n## Guardrails\n\n- No relation from retrieval score alone.\n- No silent fallback from an unavailable reranker to raw embeddings.\n- No network-dependent default or offline-CI requirement.\n- No external untracked content.\n- No executable files under the ticket directory.\n\n## Actual changes\n\n- Initialized the reviewable plan only.\n- No linker behavior has changed.\n- Owner approved execution and added the `user-*`/`ai-*` divergence audit.\n- Added section-aware conversion in `src/extractors/communication.ts` for\n governance participant files and excluded ticket evidence plus raw\n `ai-*-logs.txt` from the participant channel.\n- Added explicit response ownership in `src/communication/analyzer.ts` to every\n communication issue and a separate issue for an agent claim about an\n unconfirmed human decision.\n- Added migration warnings for unstructured participant files in\n `src/extractors/communication.ts`, normalized filename identities, ignored\n numeric Markdown markers and recognized bare filenames as repository paths\n in `src/core/text.ts`.\n- Prevented opposite statements about two explicit, different files from\n becoming a false intent conflict.\n- Tested historical `wellmanifest/new-project` prompts and agent analyses in a\n read-only migration captured by `project/ticket-005/audit.md`. Correct\n `request`/`message` typing produced zero issues for Opus; GPT retained three\n unanswered prompt fragments and no false file conflict.\n- Focused communication, NL, pipeline and task-synthesis tests pass.\n- Added versioned, bounded candidate and reranker result contracts in\n `src/semantic/reranker.ts`. Retrieval alone cannot mutate a graph; an\n accepted result must cite exact repository-owned evidence, and ambiguity or\n multi-module scope abstains.\n- Added a strict tracked-snapshot network boundary and a research reproducer\n under `scripts/research/`; no executable source was added to the ticket.\n- Added captured gold reranking fixtures to\n `evaluation/gold/v2/dataset.json`: 6/6 expected cross-language relations,\n 0/6 forbidden violations and one hard-negative abstention.\n- Ran three live attempts on clean `subactor/platform` commit `3e96573`;\n provider output violated the structured contract each time, so no relation\n or coverage change was accepted.\n- Removed reranker exports from the public package in `src/index.ts`. The\n deterministic linker, CLI, MCP and A2A remain unchanged.\n\n## Blockers\n\n- The evaluated provider/model does not reliably honor the structured result\n contract, and no real-repository coverage improvement was demonstrated. This\n blocks production retention but does not block closing the rejected\n experiment.\n\n## Conclusion\n\nRetain the communication correction and offline evidence contracts. Reject the\nlive semantic production path until a provider-pinned candidate passes the\nsame real-repository boundary.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-018/ai-codex.md", "path": "ticket-018 / ai-codex.md", "size": "10.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-018\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants `new-project` to control the operating logic of both humans and\nagents rather than merely describe it. A multi-step change must have auditable\nintent, bounded scope and acceptance criteria in a target-repository ticket\nbefore implementation. Once a ticket is complete, the next change receives the\nnext ticket number. Follow-up work reuses an unfinished ticket. Human-owned\nparticipant files remain outside agent control.\n\nThe enforcement model needs layered trust: fast local feedback, deterministic\nCI policy checks, stack-specific verification and repository rules that prevent\nmerging around those checks. `todo2code` can compare declared intent with the\nactual diff, but offline deterministic output—not an LLM response—must decide\nthe required gate.\n\nThe follow-up request extends this model for concurrent agents whose local\nintentions may diverge but compose into a larger long-term capability. The\nproject should not be split into repositories yet. Instead, the governance\ncontract will model independent workstreams, non-overlapping write scopes and a\nticket dependency DAG. Divergence that changes a shared contract is routed to\nan explicit integration ticket and fresh approval; it is never absorbed by\nretroactively widening one agent's scope.\n\nThe current follow-up asks Koru to provide automated code review. This is a\nread-only second-AI boundary: Koru orchestrates pinned Vallm checks for the\nexact PR diff, produces a commit-bound attested report, and exposes a required\nGitHub status. It may reject a change but may not edit it, push it or impersonate\na human `APPROVE` review.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version reported `29.1.3`.\n- `ticket-017` is `DONE`, so `project/new-ticket.sh` correctly created\n `ticket-018` in `PLAN / WAIT_FOR_APPROVAL`.\n- the copied ticket scripts in `todo2code` match the Governance Hub by SHA-256,\n but are not yet published in the current HEAD;\n- the current `todo2code` CI tests the application and optional live provider,\n but has no governance job and no persistent `AGENTS.md`;\n- no trusted human participant identity is available, so ownership remains\n `unresolved:human`.\n\n## Execution plan\n\n1. Stop at the plan-only boundary and obtain explicit human approval.\n2. In the Governance Hub, define a versioned JSON contract and JSON Schema,\n stable diagnostic catalog and stack-profile contract without creating any\n ticket/task/log there.\n3. Implement a deterministic validator with text, JSON and SARIF reporting;\n validate repository structure, ticket state, actor ownership, approval\n provenance inputs, manifest drift, diff scope, Docker and stack evidence.\n4. Add fixture-driven allow/deny tests and a pinned reusable GitHub Actions\n workflow with least-privilege permissions.\n5. Replace unsafe governance automation behavior relevant to the gate (unpinned\n host installs, swallowed validator failures) with a reproducible validation\n entry point, while preserving unrelated analysis generators.\n6. Adopt the pinned governance contract in `todo2code`: add `.governance/`, a\n persistent `AGENTS.md`, local commands and the required CI integration.\n7. Connect deterministic `todo2code` intent-vs-diff analysis as an additional\n gate or evidence producer; keep live LLM checks advisory/opt-in.\n8. Run central governance fixtures, target manifest checks, negative probes,\n application verification and Docker E2E. Record raw command output here and\n map every failure to a stable code/remediation.\n9. Review path-specific diffs, update acceptance evidence and report uncommitted\n status. Do not commit or push without a separate user request.\n10. Return to `PLAN / WAIT_FOR_APPROVAL` for the multi-workstream scope\n evolution before changing schemas, validators, CI or documentation. The\n user explicitly approved AC-11..AC-17 in chat; transition to `EDIT`.\n11. Add manifest and intent contracts for named workstreams, path ownership,\n dependency/conflict edges and explicit integration routing, with a\n deliberate v1 migration policy.\n12. Extend deterministic validation and stable diagnostics for per-workstream\n active-ticket limits, concrete path overlap, cycles, unmet dependencies and\n missing integration tickets.\n13. Add positive and negative central fixtures, then adopt the workstream map\n in `todo2code` and prove parallel non-overlap plus rejected overlap.\n14. Validate in Docker, run existing E2E gates, review only ticket-018 paths and\n preserve all concurrent application changes.\n15. Return to `PLAN / WAIT_FOR_APPROVAL` for the Koru review extension before\n changing workflows or external rules; record AC-18..AC-25 and the current\n tool/secret/ruleset baseline.\n16. Add a least-privilege `pull_request` plus `workflow_dispatch` workflow with\n stable check name `koru / code-review`, exact base/head resolution and\n immutable action/tool pins.\n17. Use Koru 0.1.444 loop mode for one read-only Vallm 0.1.94 round over changed\n supported source files, with deterministic and OpenRouter semantic checks.\n18. Generate a sanitized structured review report, upload it with bounded\n retention and create a GitHub provenance attestation bound to the reviewed\n commit.\n19. Exercise passing and failing review probes, missing-secret/provider failure,\n workflow validation, existing Node/Docker gates and scoped governance.\n20. Configure a `main` ruleset requiring governance and Koru review only after\n the check exists; verify direct pushes and stale evidence are rejected.\n\n## Actual changes\n\n- Created only the plan scaffold for `ticket-018` and updated the project-level\n ticket index/checklist. No implementation, source, test or CI file was\n changed for ticket-018.\n- The user explicitly approved ticket-018 in chat after reviewing the plan;\n implementation is now authorized. Merge-time trust remains an external CI\n concern and is not claimed by this record.\n- Implemented `wellmanifest/new-project` 0.7.0 policy-as-code: versioned\n manifest/intent schemas, diagnostic catalog, stack profiles, dependency-light\n validator, wrappers, safe `project.sh` entry point, fixture suite, reusable\n workflow and enforcement documentation.\n- Updated the ticket scaffolder to create JSON-safe `intent.json` before code.\n- Adopted the package in `todo2code` through `.governance/`, SHA-256 lock,\n `AGENTS.md`, Make/preflight commands and the `governance / enforce` CI job.\n- Kept LLM findings outside the required decision path. All required governance\n checks are deterministic.\n- Did not create or edit any `user-*.md` file.\n- Implemented `new-project` 0.8.0 workstream coordination, intent v2,\n dependency/conflict/integration validation, 27-code catalog coverage,\n multi-active CI routing and manager/developer/two-AI operating guidance.\n- Adopted eight workstreams in `todo2code` and synchronized the managed\n validator, schemas, diagnostics and scaffolder with updated SHA-256 lock\n evidence.\n- Preserved archived v1 readability while requiring every active ticket under\n manifest v2 to migrate explicitly and receive fresh approval.\n- Observed a concurrently created ticket-019 in the `sdk` workstream. It is\n non-overlapping and remains untouched; the final whole-workspace gate accepts\n ticket-018 (`governance`) and ticket-019 (`sdk`) as parallel PLAN/VALIDATION\n records while routing this implementation diff uniquely to ticket-018.\n- Planned only the Koru code-review extension requested by the user. Verified\n published Koru 0.1.444 and Vallm 0.1.94, an organization-level OpenRouter\n secret visible to this repository, and the absence of branch protection,\n rulesets or an existing PR review for commit `06a2faa`. No workflow, source,\n test, external ruleset or human-owned file was changed in this plan phase.\n- After explicit approval, added `.github/workflows/koru-code-review.yml` with\n immutable action pins, exact base/head selection, changed-source filtering,\n one Koru/Vallm round, fail-closed credential handling, structured evidence,\n bounded artifact retention and GitHub provenance attestation. The job is\n read-only with respect to repository contents and cannot approve or mutate a\n pull request.\n- Published the workflow through pull request #1 after the Koru check, Node\n verification and Java adapter passed. The unrelated deterministic governance\n failure remains assigned to ticket-019.\n- Exercised the real OpenRouter semantic path through historical dispatch\n `30703292661`. Koru/Vallm rejected two TypeScript files and propagated a\n failing required check while preserving an attested, commit-bound report.\n- Staged repository ruleset `20186914` with no bypass actors, strict governance\n and Koru status checks, mandatory pull requests, stale-evidence dismissal and\n force-push/deletion prevention. It remains disabled solely for the final\n bootstrap evidence merge and will be activated afterward.\n\n## Blockers\n\n- `GOV-INTENT-003`: concurrent commit `5f1f4bd` placed the ticket intent and\n implementation in the same commit; correcting this requires an authorized\n history/commit split.\n- `GOV-SCOPE-001`: the same commit contains eight implementation/generated\n paths not allowed by ticket-018. They must be routed to their actual ticket,\n not retroactively claimed here.\n- Central `new-project` 0.7.0 is uncommitted/unpublished, so no honest immutable\n reusable-workflow SHA exists yet.\n- AC-17: concurrent commit `9928699` bumped the Rust SDK manifest to 0.5.1, but\n the ignored local Cargo lock still identifies the root package as 0.5.0.\n Official full Docker E2E fails closed at `cargo fetch --locked` (exit 101).\n Fixing or tracking that lock is an `sdk`/`integration` change outside this\n ticket's approved governance workstream.\n\n## Approval boundary\n\n- Current state: `IN_PROGRESS / EDIT` for approved AC-18..AC-25. AC-11..AC-16 are\n implemented; AC-17 and the earlier publication/external blockers remain open.\n- Required response from: `unresolved:human`.\n- The user explicitly approved AC-18..AC-25 in chat. This authorizes the\n implementation workflow but is not itself merge-time review evidence.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-004/ai-codex.md", "path": "ticket-004 / ai-codex.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-004\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe current known gap is not evidence that the three-topic threshold should be\nlowered. It demonstrates that lexical topic equality cannot bridge arbitrary\nlanguages. The experiment must separate semantic projection from graph scoring\nand preserve its provenance.\n\n## Execution plan\n\n1. Expand multilingual gold coverage and classify positive and negative pairs.\n2. Map the synchronous linker, public API, pipeline configuration and cache\n boundaries.\n3. Compare local embedding, provider translation/projection and injected\n precomputed-topic strategies.\n4. Add a red contract test for the selected architecture.\n5. Implement one bounded candidate only if it remains auditable and optional.\n6. Run gold and controlled repository A/B.\n7. Complete full validation and readiness documentation.\n\n## Guardrails\n\n- No additional domain dictionary as the principal solution.\n- No network call from `linkIntentRecords`.\n- No provider output accepted without runtime validation.\n- No private or untracked external inputs.\n- No unrelated generated-analysis rewrite.\n\n## Actual changes\n\n- Initialized the approved ticket.\n- Added a 12-pair, four-language embedding benchmark and evaluated two pinned\n local multilingual models.\n- Demonstrated overlapping positive/negative cosine ranges and two rejected\n false-positive candidates on the tracked platform graph.\n- Demonstrated that reciprocal top-1 restores precision in the sample but adds\n no coverage.\n- Rejected a production matcher and expanded gold v2 with a separately reported\n cross-language cohort: six known positives and six forbidden negatives.\n- Passed full verification (244 tests, 243 pass, one local JDK skip), gold\n v1/v2, five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated readiness evidence and closed the ticket without adding an unsafe\n semantic relation rule.\n- After user review, moved both executable experiment reproducers out of the\n ticket directory into `scripts/research/`; benchmark inputs and captured\n results remain ticket evidence.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-017/ai-codex.md", "path": "ticket-017 / ai-codex.md", "size": "3.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-017\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants confirmed defects in `todo2code` repaired, not a speculative\nrewrite. Path-resolution and code-change planning work that was initially\nuncommitted was published concurrently as commit `1ebad96`; the first\nresponsibility is to review and validate that new baseline rather than duplicate\nor overwrite it. Three concrete defect candidates already have command or graph\nevidence: mutating `pipeline --help`, false Polish prohibition polarity, and\npotentially incomplete path/action planning behavior.\n\nSuccess means reproducible failing cases become passing regression tests while\nthe existing diagnostic schema stays stable and actionable. Pipeline success\nmust not be confused with zero blocking diagnostics.\n\n## Execution plan\n\n1. Wait for explicit human approval of this ticket and the root checklist.\n2. Run `project.sh` in safe workspace-analysis mode and inspect generated reports.\n3. Reproduce the three candidate defects with isolated fixtures and capture the\n baseline results.\n4. Review commit `1ebad96` and any subsequent branch movement, separating usable\n baseline behavior from defects without reverting unrelated work.\n5. Implement minimal fixes and focused tests for confirmed failures only.\n6. Audit the canonical diagnostic/error-code surface and make new failures\n machine-actionable without changing established codes unnecessarily.\n7. Run focused tests, full offline verification, gold datasets and examples in\n Docker.\n8. Re-run deterministic validation on the Governance Hub and compare diagnostics.\n9. Add isolated core/full Docker E2E images, Compose services, stable error codes\n and operator documentation; validate both environments.\n10. Update owned ticket evidence, TODO, docs and changelog with exact results.\n\n## Actual changes\n\n- Added the required missing governance bootstrap scripts copied verbatim from\n the Governance Hub.\n- Reviewed and preserved concurrent baseline `1ebad96`.\n- Made command-local help non-mutating before configuration and dispatch.\n- Extended deterministic Polish prohibition detection to active `zabrania`\n forms and covered both the text helper and documentation extraction.\n- Bounded the shared Markdown path resolver against absolute and parent escapes,\n including heading-derived scopes.\n- Verified focused tests, the full offline suite, gold v2/v1 and examples on the\n host and in the project Docker image.\n- Compared identical tracked Governance Hub snapshots before and after the fix:\n false `CONFLICTING_INTENT` 1 -> 0; total diagnostics remained 183 because the\n corrected requirement is now honestly reported as planned but unimplemented.\n- Refreshed the generated analysis from the current tracked-file overlay without\n consuming unrelated untracked `nlp2uri.yaml`.\n- Added and validated isolated Docker E2E `core` and full-toolchain suites with\n stable `T2C-E2E-*` failure codes. The full image includes the native linker\n needed by Cargo and finished with 318/318 tests, zero skips and five SDK\n examples.\n\n## Blockers\n\n- None. All ticket acceptance criteria are complete.\n\n## Concurrent baseline boundary\n\nThe following paths were modified before ticket-017 and published concurrently\nas commit `1ebad96`; they are baseline work, not changes made by this ticket:\n\n- `src/extractors/changelog.ts`\n- `src/extractors/markdown.ts`\n- `src/extractors/todo.ts`\n- `src/pipeline/run.ts`\n- `src/services/actions.ts`\n- `src/synthesis/code-change-plan.ts`\n- `test/code-change-plan.test.ts`\n- `test/markdown.test.ts`\n- `src/extractors/markdown-paths.ts`\n\nThe untracked `nlp2uri.yaml` remains unrelated and must not be edited.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-014/ai-codex.md", "path": "ticket-014 / ai-codex.md", "size": "708B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-014\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Preserve the real retry/backoff reproduction as a gold negative.\n2. Separate file-location evidence from capability-implementation evidence.\n3. Require a semantic corroborator before an existing path closes a plan.\n4. Re-run Koru discovery and the cross-repository census.\n\n## Responsibility boundary\n\nThe agent can implement and test the fail-closed matcher. A human response is\nneeded only when two plausible implementations remain or when autonomous\nexecution policy would be broadened; the agent must not create or rewrite a\nhuman-owned declaration to resolve either case.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-007/ai-codex.md", "path": "ticket-007 / ai-codex.md", "size": "776B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-007\n- **Role**: agent\n\n## Understanding\n\nCommunication analysis must not emit an empty response route when it knows the\nrequired role. Missing identity is a first-class unresolved state, not\npermission to infer or manufacture a person.\n\n## Execution plan\n\n1. Reproduce the agent-only ticket case in an offline test.\n2. Centralize fallback routing at communication-issue construction.\n3. Preserve known stable participant IDs.\n4. Document the sentinel contract and update readiness evidence.\n5. Run focused tests, gold evaluation and the full offline verification gate.\n\n## Ownership boundary\n\nDo not create or edit a human-owned `user-*` file. Do not create a participant\nregistry entry on behalf of the repository owner.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-009/ai-codex.md", "path": "ticket-009 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-009\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe provider schema, TypeScript assumptions and runtime checks currently form\nseparate contracts. Their drift can either crash late or silently reinterpret\nthe provider response. One structural definition must govern both sides.\n\n## Execution plan\n\n1. Measure every production structured-response boundary and its current drift.\n2. Add a small dependency-free canonical schema/parser builder.\n3. Migrate all production OpenRouter response contracts.\n4. Preserve grounding and semantic invariants as explicit second-stage checks.\n5. Run all deterministic gates, document the result and publish `main`.\n\n## Blockers\n\n- None for the approved scope.\n\n## Actual changes\n\n- Added the dependency-free `StructuredSchema` builder and typed error with\n rejected-response metadata.\n- Migrated all seven production OpenRouter response boundaries.\n- Removed task/NL coercion of invalid provider enums, percentages and keys.\n- Added drift gates for production calls and the published document schema.\n- Updated the DSL, readiness, validation, test report, status and backlog.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-008/ai-codex.md", "path": "ticket-008 / ai-codex.md", "size": "749B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-008\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe governance hub must encode ownership and unresolved state in a form that\ntodo2code can audit without guessing identities or treating evidence as dialog.\n\n## Execution plan\n\n1. Validate the upstream ticket scope and ownership contract.\n2. Harden scripts and role-specific templates outside this ticket directory.\n3. Test active-ticket reuse, namespace isolation and todo2code interoperability.\n\n## Actual changes\n\n- Published `wellmanifest/new-project` 0.6.0 at commit `72e5f6c`.\n- Added the non-conflicting `project/TICKETS.md` index in todo2code.\n\n## Blockers\n\n- None for the completed deterministic scope.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-002/ai-codex.md", "path": "ticket-002 / ai-codex.md", "size": "4.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-002\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding of the task\n\nThe objective is not merely to prove that todo2code completes on other\nrepositories. The work must establish whether its semantic conclusions remain\nuseful outside its own codebase, identify recurring causes of weak coverage or\nfalse diagnostics, and improve the library only where repeated measurements\njustify the change.\n\n## Included scope\n\n1. Create isolated detached worktrees for the recorded external commits.\n2. Run one normalized offline pipeline and reality report per repository.\n3. Persist a compact machine-readable baseline and a reviewed Markdown report\n under this ticket.\n4. Compare relation classes, diagnostics, unsupported languages, topic status\n and coverage rather than relying on record count alone.\n5. Review representative false positives and false negatives.\n6. Select the highest-impact shared defect that can be fixed without accepting\n ungrounded evidence.\n7. Add gold/unit coverage, implement one correction and rerun the same corpus.\n8. Record the delta and either retain or reject the correction.\n\n## Excluded scope\n\n- Mutating, committing or cleaning external repositories.\n- Reading private or untracked external inputs.\n- Tuning a threshold only to improve headline coverage.\n- Provider-dependent LLM calls in the primary baseline.\n- Adding a new dependency without a separate license and security review.\n- Implementing several semantic heuristics in one unmeasurable batch.\n\n## Execution plan\n\n### Phase 1 — reproducible baseline\n\n1. Verify stable todo2code and Docker validation commands.\n2. Define the shared document/task/communication policy and explicit\n repository exceptions.\n3. Analyze the seven verified repositories at recorded detached commits.\n4. Store per-repository JSON metrics, warnings and sampled diagnostic evidence.\n\n### Phase 2 — evidence review\n\n5. Rank recurring gaps by frequency, severity and affected repositories.\n6. Separate extractor, target-resolution, linker, diagnostics and\n unsupported-language failures.\n7. Choose one defect with evidence in at least two repositories.\n\n### Phase 3 — one controlled improvement\n\n8. Add a gold or focused unit regression, including a nearby negative.\n9. Implement the smallest deterministic correction.\n10. Run gold v2, focused tests and the unchanged external corpus.\n11. Keep the change only if the target metric improves without a measured\n precision regression.\n\n### Phase 4 — validation and conclusions\n\n12. Run the complete stable validation matrix and Docker checks.\n13. Update ticket evidence, changelog, acceptance criteria and readiness\n conclusions.\n14. Present the next ranked improvement as a separate continuation decision.\n\n## Candidate hypotheses, not decisions\n\n- PL documentation to EN identifiers is still a measured `knownGap`.\n- Changelog claims may lack implementation evidence because topic matching\n intentionally excludes changelog records.\n- Configuration-only evidence may overstate `aligned`.\n- Unsupported PHP and other languages may dominate reality gaps in some\n repositories.\n\nThe baseline decides which hypothesis is addressed first.\n\n## Approval gate\n\nApproved by the user's `kontynuuj` message on 2026-07-31 under `P-CORE-008`.\nExecution may proceed within the recorded scope.\n\n## Actual changes\n\n- Initialized the standard ticket structure and project-level TODO entry.\n- Verified Docker availability and the seven candidate repositories.\n- Verified ticket formatting, absence of local absolute paths and compatibility\n with the generated-analysis guard.\n- Ran the normalized deterministic pipeline successfully on all seven detached,\n tracked-only external worktrees.\n- Preserved the complete baseline in `baseline.json` and its reviewed summary\n in `baseline.md`.\n- Selected non-actionable changelog mechanics as the first controlled defect:\n it repeats across the corpus, but can be corrected without pretending that\n ungrounded release claims have implementation evidence.\n- Added a focused red/green regression and a narrow changelog-signal classifier.\n- Evaluated only this patch on the unchanged external corpus: graph fingerprints\n remained stable, gold v2 stayed perfect, and false review-required findings\n fell by 1,024 across five repositories.\n- Added an independent red/green correction for generated-analysis verification:\n tracked audit quotations no longer masquerade as private input consumption,\n while newly introduced untracked references remain blocked.\n\n## Unfinished items and blockers\n\n- No blocker inside ticket scope. Remaining library gaps are listed in\n `docs/READINESS.md`; they require separate controlled iterations.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-012/ai-codex.md", "path": "ticket-012 / ai-codex.md", "size": "1.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-012\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\n`openrouter/auto-beta` returned syntactically valid JSON with one incomplete NL\nrecord. Runtime rejection was correct, but failure handling discarded the\nresolved model and usage metadata. The live report also summarized history\nbefore appending the current run.\n\n## Execution plan\n\n1. Select an explicit model advertising `structured_outputs`.\n2. Preserve metadata across structured parse and stage failure boundaries.\n3. Record current-run history before rendering the audit summary.\n4. Add regression tests and pass all offline gates.\n5. Run the real six-stage check and publish the measured result.\n\n## Blockers\n\n- None; the user explicitly authorized trying another paid live model.\n\n## Result\n\nQwen and GPT-5.4 Mini were rejected after bounded correction. Gemini 3.6 Flash\npassed the complete six-stage `require-llm` pipeline. The default now names\nthat model explicitly; stage-specific overrides remain supported.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-011/ai-codex.md", "path": "ticket-011 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-011\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe linker already compares symbol aliases, but it treats a shared leaf as\nproof even when several files declare it. This can turn an ambiguous request\ninto several implementation relations and hide the absence of a selected\ntarget. Resolution must use observed AST ownership and abstain on ties.\n\n## Execution plan\n\n1. Census symbol ownership and current NL extraction noise.\n2. Add an AST-backed symbol-resolution index used by linking and diagnostics.\n3. Preserve unique/qualified/path-selected matches and reject ambiguous or\n conflicting matches.\n4. Make missing-field actions concrete and reduce false symbol candidates.\n5. Add unit and gold hard-negative cases, verify and publish `main`.\n\n## Blockers\n\n- None for the deterministic scope.\n\n## Actual changes\n\n- Added a graph symbol-resolution index over AST declarations.\n- Gated NL↔AST shared-symbol evidence on unique ownership or explicit path.\n- Added candidate-aware ambiguity/conflict diagnostics.\n- Removed file names and all-caps prose from implicit symbol extraction.\n- Added six focused resolver tests and three gold linking cases.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-022/ai-codex.md", "path": "ticket-022 / ai-codex.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-022\n---\n# Participant: codex\n\n## Understanding\n\nSubactor is an umbrella directory containing many independent repositories.\nThe current extractor exits after `git rev-parse` fails at the umbrella root,\nso downstream intent/reality analysis has no Git evidence. The repair belongs\ninside the deterministic Git extractor and must not broaden todo2code into an\nexecutor.\n\n## Execution plan\n\n1. Wait for explicit approval and move to `EDIT`.\n2. Add failing tests for bounded repository discovery and path namespacing.\n3. Refactor the extractor into single-repository extraction plus deterministic\n umbrella orchestration.\n4. Run focused tests, full verification, governance and Docker smoke.\n5. Repeat the Subactor pipeline and record measured evidence.\n6. Stop before merge/push without independent protected review.\n\n## Current state\n\nThe user approved ticket-022 with `zatwierdzam ticket 022 i kolejne` after the\nexact plan was presented. Implementation and validation are complete within\n`intent.json`; state is `BLOCKED / VALIDATION` only because the repository-wide\ngovernance gate retains the inherited ticket-018/019 findings.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-020/ai-codex.md", "path": "ticket-020 / ai-codex.md", "size": "7.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-020\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nThe user wants role-aware communication to become enforceable rather than a\nfilename convention. A previously verified user must keep the same role in\nlater tickets, and a message submitted through an IDE or CLI must be attributed\nto that stable identity and written only by a trusted intake boundary.\n\nThe extension must be fully machine-validatable and actionable. Therefore one\ndomain model will serve the TypeScript CLI, a Python shell CLI, MCP and A2A.\nCQRS isolates mutations from queries. Event sourcing provides append-only\nhistory, replay and evidence. Protobuf is the canonical transport envelope;\nstrict JSON Schemas validate its JSON/payload views. Required validation is\noffline and deterministic; an LLM has no role in identity, authorization,\nschema, integrity or acceptance decisions.\n\nThe model does not infer a simple `manager > user > dev` permission chain.\nThese are primary responsibility roles with explicit capabilities. A manager\ndoes not silently gain developer rights, and a developer does not gain manager\napproval rights. Additional duties require explicit, auditable grants.\n\nCurrent verified baseline:\n\n- Docker CLI and engine are available; engine version is `29.1.3`.\n- participant registry v1 supports only `human|agent` and exact external\n identifiers; it has no governance-role persistence.\n- communication filename inference understands `user|human` and `ai|agent`,\n but not `manager|dev` without explicit metadata.\n- existing CLI, MCP and A2A share action services but have no trusted message\n intake command or append-only participant-role event store.\n- ticket-018 (`governance`) is blocked in validation and ticket-019 (`sdk`) is\n waiting for approval; this distinct `interfaces` scope does not claim their\n implementation paths.\n\n## Architectural decisions\n\n1. `participant-id` is the aggregate identity. Authenticated provider/IDE/CLI\n principals are exact aliases bound by events; names are presentation only.\n2. Human `governanceRole` and participant `kind` are independent. Agents can\n request/query but cannot receive a trusted human projection capability.\n3. Commands are accepted only with correlation, causation, idempotency,\n authenticated-principal and expected-version metadata.\n4. Successful mutations append immutable events before rebuilding projections.\n Rejections return sanitized `T2C-INTAKE-*` diagnostics and append no secret\n or spoofed human message.\n5. A human role Markdown file is a rebuildable view, not the identity source.\n Its front matter binds stable participant, role, ticket and projection hash.\n6. The limited Protobuf envelope uses deterministic varint and\n length-delimited fields plus a JSON payload validated by a matching schema.\n TypeScript/Python golden vectors prevent codec drift without adding a\n runtime dependency in this ticket.\n\n## Execution plan\n\n1. Wait for explicit human approval and move ticket-020 to `EDIT` without\n treating the Markdown status as trusted merge approval.\n2. Define versioned registry, capability, command/query/event/result and\n diagnostic schemas under the interfaces module, plus the canonical `.proto`\n envelope and stable diagnostic catalog.\n3. Upgrade participant identity validation with v1 read compatibility and an\n explicit v2 migration result; do not infer role from historical filenames.\n4. Implement the CQRS application boundary, authorization matrix and exact\n principal resolver.\n5. Implement an event-per-version filesystem store with exclusive creation,\n expected-version checks, idempotency index, integrity chain, replay and\n deterministic projection verification.\n6. Implement the trusted projection writer with atomic writes, root/symlink\n confinement, secret/size checks and manager/user/dev filename validation.\n7. Add TypeScript and dependency-free Python Protobuf envelope codecs and\n shared golden test vectors.\n8. Add Python and TypeScript CLI commands with the same result schema, stable\n exits, dry-run/JSON modes and no ambient identity guessing.\n9. Expose the application handlers through MCP tools and the A2A\n governed-intake skill; keep protocol errors distinct from domain rejection.\n10. Add positive and negative tests in temporary repositories, including two\n tickets for the same developer, spoofing, role mutation, duplicate command,\n concurrent version, broken chain, secret rejection and projection rebuild.\n11. Run governance and relevant Docker E2E checks, record sanitized raw\n evidence, review only ticket-020-owned paths and report any shared-path need\n rather than widening scope.\n\n## Planned reaction contract\n\n- validation/schema input: stable diagnostic and CLI exit `2`;\n- identity/authorization rejection: exit `3`;\n- version/idempotency conflict: exit `4`, retryability declared explicitly;\n- event/projection integrity failure: exit `5`;\n- atomic storage failure: exit `6`;\n- unsupported protocol/schema version: exit `7`;\n- MCP returns the same structured diagnostic in `structuredContent`;\n- A2A completes the task only for accepted commands and emits a deterministic\n rejected/failed outcome for domain or protocol errors respectively.\n\n## Actual changes\n\n- The user explicitly approved implementation with \"wdrażaj\" after the agent\n requested approval of ticket-020 and AC-01..AC-19.\n- Transitioned the ticket to `IN_PROGRESS / EDIT` in an isolated\n `ticket-020-role-bound-intake` worktree.\n- Implemented strict intake contracts, registry v2 compatibility, deterministic\n diagnostics, a hash-chained event store, authorization/capability decisions,\n trusted projections and dry-run legacy conflict detection under\n `src/communication/**`.\n- Implemented TypeScript/Python Protobuf codecs, strict JSON Schemas, a Python\n shell CLI, TypeScript CLI commands, MCP tools and A2A JSON/Protobuf parity\n under the approved interface paths.\n- Bound A2A intake identity to the authenticated bearer-derived principal and\n rejected unauthenticated bootstrap; removed caller-controlled trusted-prefix\n authority discovered during security review.\n- Added focused role persistence, spoofing, agent rejection, concurrency,\n idempotency, hash-chain, secret, projection, CLI, MCP, A2A and cross-language\n golden-vector tests. No human-owned role file was changed in this repository.\n- Completed Node and network-isolated Docker core verification with zero test\n failures.\n\n## Blockers\n\n- The branch was refreshed to committed policy 0.8.0. Safe parallel tickets\n 018 (`governance`) and 020 (`interfaces`) are accepted. The global gate now\n fails only on ticket-019's explicit conflict/unmet dependency on ticket-018,\n paths outside `sdk` and overlapping `Makefile` claim; no finding names\n ticket-020.\n- Trusted merge evidence will still require an independent protected review or\n signed attestation; chat approval authorizes only the interactive edit phase.\n\n## Approval boundary\n\n- Current state: `BLOCKED / VALIDATION`.\n- Interactive implementation was approved by the human operator on 2026-08-01.\n- Protected merge approval remains unresolved and cannot be self-attested.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-010/ai-codex.md", "path": "ticket-010 / ai-codex.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-010\n---\n# Participant: codex (AI agent)\n\n## Understanding\n\nAST parsing and Markdown chunking are deterministic but repeated for every run.\nTheir cache keys must bind every input that can change output, while cached data\nmust be treated as disposable acceleration rather than evidence.\n\n## Execution plan\n\n1. Map AST adapters, document chunking and output-directory boundaries.\n2. Add a shared versioned cache with atomic writes and fail-open recovery.\n3. Cache TypeScript per file, external adapters per source manifest and chunks\n per document.\n4. Prove cold/warm equivalence, invalidation, corruption recovery and provider\n isolation.\n5. Benchmark tracked snapshots, update repository evidence and publish `main`.\n\n## Blockers\n\n- Live provider calls are outside this ticket; documentation-cache tests use a\n local structured-response stub and explicitly verify calls are not cached.\n\n## Actual changes\n\n- Added the dependency-free `ContentCache` under `src/core/`.\n- Added cache telemetry to AST and documentation extraction results.\n- Added per-file TypeScript and Markdown keys plus per-manifest external AST\n keys.\n- Added cold/warm, invalidation, corruption, bypass and external-toolchain tests.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-015/ai-codex.md", "path": "ticket-015 / ai-codex.md", "size": "595B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-015\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Pin the malformed compound-action title in a focused unit test.\n2. Preserve source text only when the inferred object visibly retains a leading\n imperative, signalling that a secondary verb was removed.\n3. Re-run the real retry/backoff fixture and validation gates.\n\n## Responsibility boundary\n\nThis is a deterministic rendering defect with an unchanged, explicit human\nintent. It is owned by the technical executor and requires no fabricated\n`user-*` response.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-003/ai-codex.md", "path": "ticket-003 / ai-codex.md", "size": "2.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: Codex (AI agent)\n\n- **Ticket**: ticket-003\n- **Status**: COMPLETE\n- **Workflow state**: DONE\n\n## Understanding\n\nThe remaining changelog count is not itself a defect. It mixes old release\nclaims, unverifiable claims, extractor artifacts and potentially repeated false\npositives. This iteration must review a stable sample before selecting any\nbehavior change.\n\n## Execution plan\n\n1. Build a clean runtime from tracked `18cc21b`.\n2. Apply only the ticket-002 changelog diagnostic patch.\n3. Re-run the unchanged seven-repository corpus.\n4. Select a deterministic stratified sample from residual findings.\n5. Label the sample with explicit, reviewable rules.\n6. Rank false-positive classes by repository spread and count.\n7. Add one red regression and nearby hard negatives for the leading safe class.\n8. Implement and evaluate one correction, or reject the hypothesis.\n9. Run full validation and update readiness evidence.\n\n## Guardrails\n\n- A release claim is not implementation evidence merely because its words\n resemble a module.\n- Historical age alone does not make a diagnostic false.\n- Missing AST support is reported as incomplete evidence, not silently ignored.\n- Current unrelated and generated workspace changes are excluded from the A/B\n runtime.\n\n## Actual changes\n\n- Initialized and approved the ticket from the continuation message.\n- Re-ran the unchanged corpus successfully from tracked `18cc21b` plus only the\n ticket-002 diagnostic patch.\n- Built and reviewed a deterministic 168-record stratified sample.\n- Selected exact file-only update bookkeeping: 28 sampled and 547 total\n findings across five repositories.\n- Added a red/green regression with behavioral hard negatives.\n- Re-ran the corpus with only this correction: removed 547 review findings and\n 188 secondary unlinked warnings while every graph fingerprint stayed stable.\n- Passed full verification, five SDK examples, the production dependency\n audit, CLI/MCP/A2A smoke checks and Docker smoke. The suite reported 242\n tests: 241 passed, none failed and the local Java fixture was skipped because\n this environment has no JDK; required CI supplies JDK 17.\n- Updated readiness evidence and closed the ticket with 1,306 deliberately\n retained residual findings.\n- After user review, moved the executable audit reproducer out of the ticket\n directory into `scripts/research/`; the ticket now contains evidence only.\n\n## Blockers\n\n- None.\n", "is_subdir": true}, {"name": "ai-codex.md", "rel_path": "ticket-016/ai-codex.md", "path": "ticket-016 / ai-codex.md", "size": "585B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "---\nparticipant-id: agent:codex\nparticipant: codex\nrole: agent\nticket: ticket-016\n---\n# Participant: codex (AI agent)\n\n## Plan\n\n1. Add a dependency-free PHP helper and common-envelope adapter.\n2. Test positive facts, no-source skip, missing runtime and invalid syntax.\n3. Run an isolated before/after pipeline on a PHP-bearing semcod repository.\n4. Record exact evidence and run repository gates.\n\n## Responsibility boundary\n\nThe adapter records syntax observations only. It does not infer user intent or\nclaim that token parsing exposes every semantic property of a complete PHP AST.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-006/audit.md", "path": "ticket-006 / audit.md", "size": "2.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 006 audit\n\n## Retained hardening\n\n- canonical internal response definition:\n `src/semantic/reranker-response.ts`;\n- shared verdict/reason values and compatibility rule:\n `src/semantic/reranker.ts`;\n- provider call uses that schema directly;\n- published decision schema is checked for drift in the full test suite;\n- runtime rejects unknown/missing properties, wrong scalar types, invalid IDs,\n blank strings and contradictory verdict/reason pairs without coercion;\n- error diagnostics contain only the failing path and\n provider/model/response ID.\n\n## Provider comparison\n\nBoth routes used the same six-candidate top-1 shortlist from the clean tracked\n`subactor/platform` commit\n`3e96573d587cb664741849ceba205bf303b9f418`.\n\n| Requested route | Result |\n|---|---|\n| `qwen/qwen3.7-plus` | rejected in ticket-005: missing `decisions`, renamed `judgments`, then invalid confidence |\n| `qwen/qwen3.7-flash` | rejected: `response.decisions[0] contains unknown properties: decision` |\n\nThe Flash response identity was\n`Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6`.\nNo raw provider response is stored. No relation was materialized by either\nroute.\n\n## Communication ownership follow-up\n\nThe final ticket has 13 agent records and deliberately no agent-authored human\nfile. Analysis raises three `AGENT_WORK_OUTSIDE_REQUEST` warnings with\n`responseRequiredRole=human`, but `responseRequiredFrom=[]` because no human\nparticipant record exists. The role is correct; the concrete routing target is\nunresolved.\n\nThis must not be \"fixed\" by having an agent create `user-*`. A later ticket\nshould either route through a trusted participant/owner registry or emit an\nexplicit unresolved-human sentinel and migration issue.\n\n## Gates\n\n- `npm run verify`: 252 tests, 251 pass, 0 fail, 1 local JDK skip;\n- gold v2 and v1: PASS;\n- gold v2: captured reranker 6/6, zero forbidden violations, one abstention;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- dependency audit: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-013/audit.md", "path": "ticket-013 / audit.md", "size": "2.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 013 audit\n\n## Baseline\n\n`google/gemini-3.6-flash`: PASS 6/6, 125,486 ms, 177,953 tokens,\n$0.412363, no fallback or degradation.\n\n## Candidate screening\n\n| Model | Structured output | Prompt / completion per 1M | Context |\n|---|---|---:|---:|\n| `google/gemini-3-flash-preview` | yes | $0.50 / $3.00 | 1,048,576 |\n| `mistralai/codestral-2508` | yes | $0.30 / $0.90 | 256,000 |\n| `deepseek/deepseek-v4-pro` | yes | $0.435 / $0.87 | 1,048,576 |\n\n## Live results\n\n| Model | Result | Time | Tokens | Cost | Fallback |\n|---|---:|---:|---:|---:|---:|\n| `google/gemini-3.6-flash` (fresh baseline) | PASS 6/6 | 106,700 ms | not recorded in comparison summary | $0.342992 | no |\n| `google/gemini-3-flash-preview` | PASS 6/6 | 64,064 ms | 116,604 | $0.076411 | no |\n| `mistralai/codestral-2508` | PASS 6/6 | 57,129 ms | 118,920 | $0.037994 | no |\n| `deepseek/deepseek-v4-pro` | FAIL | >900,000 ms | no manifest | unmeasured | no result |\n\nCodestral was about 1.87× faster and 9.0× cheaper than the fresh Gemini 3.6\nbaseline. Gemini 3 Flash Preview was about 1.67× faster and 4.49× cheaper.\nDeepSeek was stopped at the declared run budget rather than allowed to hang.\n\n## Cross-repository result\n\nThe first real repository run exposed sequential Markdown batches. On\n`weekly`, Codestral enriched 161 records in six requests but needed 218,741 ms.\nBounded concurrency of three preserved response/record audit order and reduced\nthe same run to 53,362 ms (4.1× faster), with no degradation. The previously\ntimeouting `nlp2uri` then completed 619 records in 20 requests in 194,750 ms,\n176,797 tokens and $0.08588244. A large deterministic `algitex` scan completed\n2,643 Markdown records and the full pipeline in 9.4 seconds.\n\n## Decision\n\nPromote `mistralai/codestral-2508` to the explicit default. Keep\n`google/gemini-3-flash-preview` as the first fallback/reference candidate.\nThe selection is operational: contract adherence, latency and cost are\nmeasured; semantic quality still remains bounded by runtime validators and the\noffline gold suite.\n\nThe live runner now enforces its total budget by aborting provider requests;\nit also refuses to reuse a failed manifest older than the current attempt.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-005/audit.md", "path": "ticket-005 / audit.md", "size": "3.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 005 audit\n\n## Decision\n\nReject the live cross-language reranker as a production feature. Retain the\noffline contracts, schemas, tests, captured gold fixtures and research\nreproducer. Do not export or enable the reranker through the package, linker,\nCLI, MCP or A2A.\n\n## Communication audit\n\nThe final ticket produced 51 `codex` records and 4 `tom-sapletta-com` records\nafter section-aware conversion. There are no blocking polarity conflicts. The\nfinal issue ownership is:\n\n- 7 `AGENT_CLAIM_WITHOUT_EVIDENCE` findings require `codex` to attach commit or\n test evidence (the current implementation is intentionally uncommitted);\n- 1 `AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED` finding requires\n `tom-sapletta-com` to record or reject the approval in the human-owned file;\n- 8 `AGENT_WORK_OUTSIDE_REQUEST` warnings require `tom-sapletta-com` to record\n or reject the detailed scope that currently exists only in the conversation.\n\nThe agent may correct its seven evidence claims, but must not edit the\nhuman-owned participant file to silence the other nine findings.\n\nHistorical read-only material from `wellmanifest/new-project` commit\n`2b9e3c9` showed why a filename-only migration is unsafe:\n\n- plain rename to `user-*`/`ai-*`: zero records and owner-specific migration\n warnings;\n- typed Opus request/message sections: 9 human + 58 agent records, zero issues;\n- typed GPT56Luna request/message sections: 9 human + 72 agent records, three\n unmatched request fragments and no false conflict between different files.\n\n## Offline reranker result\n\nGold v2 uses captured, structured decisions through the same runtime\nvalidators:\n\n- expected cross-language relations: 6/6;\n- forbidden cross-language relations: 0/6 violations;\n- accepted: 6;\n- abstained hard-negative cases: 1;\n- deterministic linker remains 0/6 and unchanged.\n\n## Live tracked-repository result\n\n- repository: `subactor/platform`;\n- clean commit: `3e96573d587cb664741849ceba205bf303b9f418`;\n- current graph fingerprint:\n `250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0`;\n- retrieval: the pinned multilingual E5 ranking captured by ticket 004;\n- bounded payload: six reciprocal selected declarations, initially top-3\n (18 candidates), then top-1 (6 candidates);\n- model: `qwen/qwen3.7-plus`;\n- declared evaluation revision: `qwen3.7-plus@2026-07-31`;\n- privacy boundary: clean HEAD required; every projected declaration and module\n path had to be tracked; generated graph and result paths stayed outside the\n worktree.\n\nThree live attempts failed closed:\n\n1. top-3 returned a JSON value without a `decisions` array;\n2. top-1 returned the top-level key `judgments` instead of `decisions`;\n3. top-1, after an explicit key instruction, returned at least one\n `confidence` outside the required numeric 0..1 contract.\n\nNo accepted result artifact exists because invalid provider output is not\npromoted into `t2c.semantic-rerank/v1`. No relation was created, no coverage\nmetric changed, and the two false embedding candidates from ticket 004 were\nnot silently accepted.\n\n## Validation\n\n- `npm run verify`: 251 tests, 250 pass, 0 fail, 1 local JDK skip;\n- isolated `CLI watch` retry: 3/3 pass after one full-suite timing failure;\n- gold v2 and v1: PASS;\n- examples: 227 records, 97 relations, five SDKs: PASS;\n- `npm audit --omit=dev`: 0 vulnerabilities;\n- CLI, MCP, A2A and Docker smoke: PASS.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-004/audit.md", "path": "ticket-004 / audit.md", "size": "5.0KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Language-independent topic matching audit\n\n## Baseline\n\nThe current linker creates capability-topic evidence from at least three\nshared normalized tokens. This is deterministic and precision-oriented, but a\nhand-written Polish-to-English alias table is the only cross-language bridge.\n\nThe existing gold known gap:\n\n- declaration: `Kolejka zadań powinna ponawiać nieudane próby z opóźnieniem`\n- module: `src/queue/task-retry-backoff.ts`\n- expected: `evidenced_by`\n- current result: no relation\n\n## Decision questions\n\n1. Can a strategy bridge languages without repository-specific vocabulary?\n2. Can its evidence be distinguished from lexical and exact-target evidence?\n3. Can offline tests exercise the contract without a provider dependency?\n4. Can production use be bounded, cached and explicitly configured?\n5. Does repository-level coverage improve without hard-negative regressions?\n\n## Candidate strategies\n\n| Strategy | Quality hypothesis | Main risk | Initial status |\n| --- | --- | --- | --- |\n| Local multilingual embeddings | Semantic bridge without sending text away | model size, native/runtime cost | investigate |\n| Provider translation/topic projection | Reuses audited model boundary | network, cost, nondeterminism | investigate |\n| Injected precomputed topic projections | Clean deterministic linker contract | projection source still required | investigate as architecture |\n\n## Sources and constraints\n\n- Transformers.js supports server-side feature extraction, filesystem caching\n and disabling remote model loading after a model is installed:\n .\n- OpenRouter exposes a batch embeddings endpoint, but it is authenticated,\n network-bound provider behavior:\n .\n- `intfloat/multilingual-e5-small` supports 94 languages, has 384 dimensions,\n requires `query:`/`passage:` prefixes and warns that absolute cosine values\n cluster high:\n .\n- The pinned local E5 weights are about 471 MB before quantization. A compatible\n Transformers.js ONNX artifact offers an int8 file of about 118 MB:\n .\n\n## Synthetic benchmark\n\n[`benchmark.json`](benchmark.json) contains six positive and six nearby\nnegative pairs in Polish, German, Spanish and French. The model revisions are\npinned in the result artifacts.\n\n| Model | Positive minimum | Negative maximum | Global separation | Pairwise ranking |\n| --- | ---: | ---: | ---: | ---: |\n| multilingual MiniLM | 0.673289 | 0.732568 | -0.059279 | 5/6 |\n| multilingual E5, no role prefixes | 0.774453 | 0.847799 | -0.073346 | 6/6 |\n| multilingual E5, query/passage prefixes | 0.759374 | 0.835202 | -0.075828 | 6/6 |\n\nThere is no safe global cosine threshold. E5 ranks every paired positive above\nits nearby negative, but the smallest margin is only 0.007190 after applying\nthe model's required role prefixes.\n\n## Repository experiment\n\nThe tracked `subactor/platform` graph contains 133 module aggregates and 66\nactionable targetless declarations (`todo`, or documentation with\n`required`/`recommended` modality). The E5 prototype compared every declaration\nto every module.\n\nAt score 0.75 and forward margin 0.01:\n\n- 6 declarations passed;\n- 4 already had the selected module among current graph evidence;\n- 2 proposed new candidates;\n- both new candidates were rejected on review.\n\nOne rejected pair linked `Każde wywołanie wymaga idempotency_key` to\n`scripts/build-urirun-registry.py`. The other picked a post-deploy check for a\nmulti-module Docker BuildKit statement that already touched thirteen modules.\n\nAdding reciprocal top-1 and a reverse 0.01 margin retained one existing,\ncorrect TODO link and proposed **zero** new candidates. This precision guard is\nuseful, but it cannot improve coverage on the measured repository.\n\n## Strategy decision\n\n| Strategy | Determinism/offline | Audit and cache | Measured decision |\n| --- | --- | --- | --- |\n| Raw local embedding threshold | pinned and offline after a 118–471 MB model download | model/revision and vector cache can be explicit | reject: no global separation and two platform false positives |\n| Reciprocal local top-1 | pinned and offline after download | explicit score, margins and model identity | reject for production: safe sample added no coverage |\n| OpenRouter embedding/translation | network and provider dependent | batchable and cacheable, but provider output needs a new audited stage | reject as default; no paid/live repository call in this ticket |\n| Injected precomputed projections | deterministic linker boundary | clean provenance contract | defer: plumbing alone does not solve projection quality |\n\nNo semantic matcher is retained. The library improvement in this ticket is a\nlarger, separately reported cross-language gold cohort: six known positive gaps\nand six gated hard negatives. Future candidates now have to improve that cohort\nwithout hiding behind same-language capability-topic quality.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-014/audit.md", "path": "ticket-014 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 014 audit\n\n## Reproduction\n\nFixture declaration:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py.`\n\n`src/retry.py` contained only an `enqueue` function. The pipeline emitted no\n`PLANNED_NOT_IMPLEMENTED` diagnostic and no code-change plan because the shared\npath was accepted as sufficient alignment. Changing only the target to the\nmissing `src/retry_backoff.py` immediately produced one grounded plan, which\nKoru converted to `PLF-001`.\n\n## Koru control\n\nThe isolated end-to-end control later produced `PLF-002`, Codestral returned a\nhash-bound unified diff, Koru verified it in a worktree and committed it on\n`koru/run-6e596247e153` (`1809ea5`). Re-running todo2code on that branch cleared\nthe targeted `PLANNED_NOT_IMPLEMENTED` diagnostic. This proves the transport;\nit does not excuse the original false alignment on an existing file.\n\n## Semantic gate and autonomous replay\n\nThe linker still records `shared_path + module_coverage` because the relation\nis useful for navigation, but diagnostics no longer treats it as implementation\nof a capability. Topics requested by the declaration are compared with the\naggregate's extracted `metadata.capabilities`; path-derived and structural edit\nwords do not count. A symbol, capability overlap, accepted semantic rerank or\ngrounded similarity to a concrete fact/commit can close the declaration. A\npure file-creation declaration remains compatible with exact path evidence.\n\nThe original existing-path fixture was replayed after the fix. todo2code raised\none `PLANNED_NOT_IMPLEMENTED`, generated one code-change plan and Koru created\n`PLF-003`. Koru required a unified diff, ran `PYTHONPATH=. pytest -q`, and\ncommitted the verified patch as `55a8b15` on\n`koru/run-35477cccef16`. Independent verification reported 6/6 tests and a\nsecond todo2code run produced zero plans for the target intent. The accepted\nrelations carried `capability_overlap:2`/`module_topic:4` for `src/retry.py`\nand `capability_overlap:1` for its test.\n\n## Cross-repository regression\n\nFresh deterministic runs succeeded on `weekly`, `nlp2uri` and `algitex`.\nThey reported respectively 1/10/3 `PLANNED_NOT_IMPLEMENTED`, 9/12/5 total\ncode-change plans, 58/152/139 capability-overlap relations and retained\n40/54/202 path-only module relations as navigation evidence. No repository\ncrashed and no generated artifact was written into its worktree.\n\nAmbiguous human intent continues through the existing communication contract:\n`responseRequiredRole` plus a known participant or `unresolved:human`. The\nruntime does not create or rewrite `user-*`. A missing implementation with a\nclear target is instead labelled for the technical executor in the diagnostic\naction, so it does not unnecessarily block on a human decision.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-007/audit.md", "path": "ticket-007 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 007 audit\n\n## Measured case\n\nThe tracked `project/ticket-006` contains agent communication and deliberately\nhas no agent-authored human participant file or participant registry entry.\n\n| Measure | Before | After |\n|---|---:|---:|\n| Communication issues | 3 | 3 |\n| Required role `human` | 3 | 3 |\n| Empty `responseRequiredFrom` | 3 | 0 |\n| `unresolved:human` routes | 0 | 3 |\n| Invented human identities | 0 | 0 |\n\nThe issue count, severity and semantic classification did not change. Only the\npreviously empty routing state became explicit.\n\n## Regression coverage\n\n- Agent-only ticket: `AGENT_WORK_OUTSIDE_REQUEST` routes to\n `unresolved:human`.\n- Human-only ticket: `REQUEST_WITHOUT_AGENT_RESPONSE` routes to\n `unresolved:agent`.\n- Existing mixed-participant fixtures retain their actual participant IDs.\n- Markdown rendering and diagnostic projection retain the sentinel.\n\n## Gates\n\n- `npm run verify`: PASS — 253 tests, 252 pass, 1 JDK skip.\n- `npm run evaluate:gold`: PASS — gold v2 unchanged at required quality.\n- `npm run evaluate:gold:v1`: PASS.\n- `npm run examples:check`: PASS — five SDKs.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-009/audit.md", "path": "ticket-009 / audit.md", "size": "1.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 009 audit\n\n## Before\n\n| Boundary | Provider schema | Runtime behavior |\n|---|---|---|\n| NL extraction | manual | unchecked generic followed by field coercion |\n| Document extraction | manual + separately published JSON | unchecked generic |\n| Markdown enrichment | manual | separate permissive type guard |\n| Communication enrichment | manual | separate permissive type guards |\n| Summary | manual | separate hand-written assertions |\n| Task synthesis | manual | coercion of enums, arrays and percentages |\n| Semantic reranker | manual | separate exact validator |\n\nGrounding checks are intentionally stronger than JSON Schema and remain a\nsecond stage: referenced record, diagnostic, candidate and response-local keys\nmust exist in the exact input context.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Production structured calls | 7 canonical / 0 raw JSON |\n| Runtime constraints | exact keys, type, enum, bounds, pattern, array size, uniqueness |\n| Rejected-response provenance | provider/model/response ID retained |\n| Published document schema | generated, drift check PASS |\n| `npm run verify` | 256 tests: 255 pass, 0 fail, 1 JDK skip |\n| Module boundary | 98 modules, 453 imports, 0 cycles |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Publication | `d0fc143` pushed to `origin/main` |\n\n## Intent boundary\n\nStructural invalidity is no longer interpreted. Values such as `\"90%\"`,\n`\"issue\"`, `\"high\"`, blank local keys and out-of-vocabulary actions are\nrejected and enter the stage's retry/fallback policy. Repository grounding is\nstill checked after parsing. A conflict between human-owned and agent-owned\ntyped intent remains routed to the owner of the required role; this contract\ndoes not authorize an agent to edit `user-*` on the human's behalf.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-008/audit.md", "path": "ticket-008 / audit.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 008 audit\n\n## Before\n\n- `new-ticket.sh` accepted `--users` but did not consistently materialize the\n documented structure.\n- Documentation claimed automatic `user-*` generation despite the rule that an\n agent must not write human-owned content.\n- `readme.sh` assumed ownership of `project/README.md`, colliding with the\n generated analysis namespace used by todo2code.\n- Participant templates mixed human instructions, agent plans and completion\n claims without explicit role metadata.\n- The index update silently depended on Python and reported success even if its\n replacement failed.\n\n## After\n\n| Gate | Result |\n|---|---|\n| Human files generated by scaffolder | 0 |\n| Generated agent identity | `agent:codex` / `agent` |\n| Missing human route in todo2code | `unresolved:human` |\n| Existing analysis `project/README.md` | byte-for-byte preserved |\n| Active second ticket without override | rejected, exit 3 |\n| Index traversal | rejected, exit 2 |\n| Repeated index generation | idempotent |\n| Machine-local `file:///` documentation links | 0 |\n\n## Publication\n\n- `wellmanifest/new-project@72e5f6c` on `main`.\n- Version `0.6.0` with policy DSL versions 7/5.\n- Existing unrelated staged `.gitignore` and `rompt.txt` were excluded from the\n upstream commit and remain owned by their original author.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-012/audit.md", "path": "ticket-012 / audit.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 012 audit\n\n## Initial live failure\n\nRun `20260731T141822Z-136712ee` failed after 48,865 ms in\n`naturalLanguageExtraction`. `openrouter/auto-beta` returned `records[5]`\nwithout `confidence`, `basis`, `target`, `sourceLines` and `text`.\n\nThe validator correctly failed closed. Two observability defects remained:\n\n1. `StructuredResponseError.responseMetadata` was discarded by NL and other\n direct extraction fallback boundaries, leaving model/token/cost as unknown.\n2. The audit summarized history before appending its own record, so rendered\n history lagged the persisted file by one run.\n\n## Model selection\n\nOpenRouter's model API was queried on 2026-07-31. Every candidate below\nadvertised `structured_outputs`.\n\n| Model | Result |\n|---|---|\n| `deepseek/deepseek-v4-flash` | no schema violation; request hit the old 120,000 ms client timeout |\n| `qwen/qwen3.7-plus` | NL and Markdown passed; documentation and communication violated their schemas twice |\n| `openai/gpt-5.4-mini` | violated NL schema twice, including after receiving the exact schema in the corrective prompt |\n| `google/gemini-3.6-flash` | **PASS 6/6**, 125,486 ms, 177,953 tokens, $0.412363 |\n\nThe DeepSeek attempt exposed a local configuration contradiction: live allowed\n300,000 ms per stage while the client aborted each request after 120,000 ms.\nThe live runner now raises its request/document timeout to at least the stage\nbudget without shortening a larger explicit override.\n\nThe first Qwen run also exposed inconsistent recovery: task synthesis and\nsummary had a bounded corrective attempt, while NL, Markdown, documentation\nand communication failed on their first contract miss. All four direct\nextractors now allow exactly one correction, quote the rejection and the exact\nJSON Schema, and validate the second response identically. Both attempts stay\nin the audit. A second invalid response still aborts `require-llm`.\n\n## Passing live run\n\n| Stage | Latency | Tokens | Cost |\n|---|---:|---:|---:|\n| natural language | 16,199 ms | 3,192 | $0.021540 |\n| Markdown | 13,529 ms | 3,048 | $0.018246 |\n| documentation | 32,080 ms | 14,759 | $0.064613 |\n| communication | 10,836 ms | 3,348 | $0.019662 |\n| task synthesis | 38,516 ms | 85,659 | $0.176686 |\n| summary | 14,326 ms | 61,947 | $0.111616 |\n\nResult: `PASS`, six of six stages, no fallback or degradation, total\n125,486 ms and $0.412363. Audit schema: `t2c.live-contract-check/v2`.\n\n## Verification\n\nFocused structured-output tests: 39/39 PASS. `npm run verify`: 286 tests,\n285 pass, one local JDK skip; 101 modules, 470 internal imports, no cycles;\n7 structured and 0 raw production calls. Gold v1/v2: 100% required metrics.\nFive SDK examples: PASS with shared fingerprint `1dacf2edc8d603a2`.\n\nImplementation and documentation were pushed to `main` in `11348c0`.\nUnrelated staged `nlp2uri.yaml` was explicitly excluded and remains user-owned.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-011/audit.md", "path": "ticket-011 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 011 audit\n\n## Before\n\n- `shared_symbol` compared aliases pairwise and did not count AST owners.\n- A short NL symbol declared in two modules could link to both modules.\n- `AMBIGUOUS_REQUIREMENT` repeated field names but gave no field-specific edit.\n- Backticked `manifest.json`/`latest.json` and plain `LLM`, `TODO`, `CHANGELOG`\n could enter `target.symbols`; `CHANGELOG` found an unrelated AST owner.\n\n## Repository census\n\n| Repository | AST records | Leaf aliases with multiple source owners |\n|---|---:|---:|\n| todo2code | 15,607 | 155 |\n| subactor-improvement | 865 | 2 (`spawn`, `summarize`) |\n| wellmanifest/new-project | 0 | 0 (documentation-only repository) |\n\nOn todo2code's tracked `TASK.md`, implicit symbol candidates fell from 7 to 2.\nThe five removed values were file names or all-caps prose; the remaining\n`TensorFlow` and `TypeScript` are unresolved product/code names and therefore\ncreate neither AST evidence nor an ambiguity claim.\n\n## Resolution contract\n\n| State | Link behavior | Diagnostic behavior |\n|---|---|---|\n| one AST path | allow exact `shared_symbol` evidence | no ambiguity |\n| several AST paths | abstain unless path/qualifier selects one | list candidates; request `target.path` |\n| explicit path conflicts | abstain | list observed locations; request path correction |\n| no AST declaration | no symbol evidence | ordinary planned-not-implemented, not ambiguity |\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| `npm run verify` | PASS — 277 tests, 276 pass, 0 fail, 1 JDK skip |\n| Module boundary | PASS — 101 modules, 467 imports, 0 cycles |\n| No-LLM boundary | PASS — 9 entrypoints across 34 modules |\n| Resolver tests | PASS — 6/6 unique, ambiguous, path, qualified, conflict and missing-fields cases |\n| Gold v2 | PASS — extraction 21/21, linking 18/18 (10 exact-target, 8 capability-topic), diagnostics 11/11 |\n| Gold v1 | PASS — legacy dataset remains 100% |\n| Examples | PASS — 5 SDK, graph fingerprint `1dacf2edc8d603a2` |\n| Publication | implementation `25df74a` on `main`; unrelated `nlp2uri.yaml` excluded |\n\nThe examples graph fell from 101 to 91 relations while preserving 227 records.\nThe removed edges are the intended effect of abstaining from ambiguous NL↔AST\nsymbol ownership; all versioned gold expectations remain perfect.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-010/audit.md", "path": "ticket-010 / audit.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 010 audit\n\n## Cache contract\n\n| Property | Decision |\n|---|---|\n| Location | `/cache/v1//.json` |\n| Key | stable hash of namespace and output-relevant inputs |\n| TypeScript | source path + content hash + extractor identity |\n| External AST | ordered path/content manifest + executable + byte limit |\n| Documentation | source path + content hash + chunk size + algorithm identity |\n| Provider output | deliberately not cached |\n| Corruption/I/O | recompute; cache errors do not fail extraction |\n| Writes | same-directory temporary file followed by atomic rename |\n| Warning results | external adapter warnings are not cached |\n\n## Tracked-snapshot benchmark\n\nSingle local run on 2026-07-31; times are directional wall-clock measurements,\nnot a stable performance gate. External AST adapters were disabled to isolate\nthe per-file TypeScript/JavaScript cache. Documentation measured the production\nchunk algorithm and cache contract without making provider requests.\n\n| Repository | Workload | Cold | Warm | Warm hits | Output |\n|---|---:|---:|---:|---:|---|\n| semcod/todo2code | 15,062 AST records | 1398.4 ms | 442.1 ms | 169/169 | identical |\n| subactor-improvement | 751 AST records | 49.2 ms | 16.8 ms | 11/11 | identical |\n| wellmanifest/new-project | 26 Markdown files / 28 chunks | 10.1 ms | 7.2 ms | 26/26 | identical chunk count |\n| semcod/todo2code | 111 Markdown files / 161 chunks | 76.0 ms | 45.1 ms | 111/111 | identical chunk count |\n| subactor-improvement | 2 Markdown files / 2 chunks | 1.9 ms | 1.3 ms | 2/2 | identical chunk count |\n\nThe new-project result also shows the limit of this optimization: a small,\ndocumentation-only repository gains little absolute time. The cache matters\nmost for repositories with many AST inputs or repeated documentation analysis.\n\n## Verification\n\n| Gate | Result |\n|---|---|\n| Exact `f1d9334` snapshot | `npm run verify`: 261 tests, 260 pass, 1 JDK skip |\n| Module boundary | 99 modules, 462 imports, 0 cycles |\n| Cache tests | 5/5: cold/warm, invalidation, corruption, bypass, external adapter and provider isolation |\n| Gold v2 / v1 | 100% required gates / PASS |\n| Examples | 5 SDK, PASS |\n| Integrated local `main` | 270 tests, 269 pass, 1 JDK skip; includes the adjacent scheduled-live-check commit |\n| Publication | implementation `f1d9334` on `main` |\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-015/audit.md", "path": "ticket-015 / audit.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 015 audit\n\n## Cause\n\nThe compound source said `Implement ... and verify it ...`. The deterministic\naction classifier selected `validate` because `verify` has higher table\nprecedence than `implement`. `inferObject` then removed `verify` from the middle and\nleft `Implement ... and it ...`; `titleFor` unconditionally prepended another\n`Implement`.\n\n## Fix\n\n`titleFor` keeps its concise `Implement ` projection for normal records.\nWhen the inferred object still begins with an imperative, it instead uses the\nlossless source statement (without terminal punctuation). This is a narrow,\nauditable indication that object inference removed a different clause verb.\n\n## Evidence\n\nThe focused suite passed 18/18. The full repository gate passed with 300 tests\n(299 pass, 1 local JDK skip), both gold datasets remained at 100%, and\n`examples:check` passed with unchanged SDK fingerprints. Re-running the\noriginal existing-path fixture\nproduced:\n\n`Implement bounded exponential retry backoff in src/retry.py and verify it in tests/test_retry.py`\n\nThe underlying record text, targets and diagnostic remained unchanged.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-003/audit.md", "path": "ticket-003 / audit.md", "size": "2.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Residual changelog audit\n\n## Current corpus\n\nThe runtime is tracked `18cc21b` plus only the ticket-002 changelog diagnostic\npatch. All seven unchanged external commits completed with `succeeded`.\n\n| Repository | Records | Relations | Residual findings | Sample |\n| --- | ---: | ---: | ---: | ---: |\n| semcod/code2llm | 16,899 | 41,758 | 955 | 24 |\n| semcod/domd | 10,611 | 7,484 | 99 | 24 |\n| semcod/pactfix | 5,161 | 3,917 | 48 | 24 |\n| semcod/code2logic | 21,423 | 16,933 | 120 | 24 |\n| semcod/code2docs | 6,717 | 35,468 | 269 | 24 |\n| semcod/redup | 7,204 | 19,259 | 269 | 24 |\n| subactor/platform | 10,628 | 11,424 | 93 | 24 |\n\n## Sampling policy\n\nThe sample is deterministic: records are grouped by\n`target-class:action`, sorted by stable record ID inside each group, and\nselected round-robin over lexically sorted groups. The limit is 24 per\nrepository, producing 168 reviewed records.\n\nEvery sample row in [`sample.json`](sample.json) preserves repository, record\nID, stratum, text, targets, tracked path owners, source lines, label and\nrationale.\n[`scripts/research/audit-changelog-sample.mjs`](../../scripts/research/audit-changelog-sample.mjs)\nreproduces selection and classification from run artifacts.\n\n## Classification\n\n| Class | Sample | Full deterministic census | Repositories | Decision |\n| --- | ---: | ---: | ---: | --- |\n| Exact `Update ` bookkeeping | 28 | 547 | 5 | selected |\n| Opaque `chore: update N files` | 1 | 1 | 1 | reject: insufficient spread |\n| Unchecked roadmap item in changelog | 6 | 30 | 2 | defer: extractor lifecycle issue |\n| Substantive or still unverified claim | 133 | 1,275 | 7 | retain diagnostic |\n\nManual review of all 35 sampled non-substantive rows confirmed the labels.\nRepresentative selected examples include:\n\n- `Update README.md`\n- `Update scripts/run-testql-environment.sh`\n- `Update tests/project/analysis.json`\n- `Update uv.lock`\n- `update debug/.code2flow_cache/...pkl`\n\nThese rows assert only that a file changed. They do not state a behavior that\nan implementation-gap diagnostic can ground. By contrast, the following must\nremain actionable:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\n## Selected correction\n\nTreat only an exact, single-token `Update ` entry as non-actionable\nrelease bookkeeping. A token must look like a path, dotfile, filename with an\nextension, or a conventional extensionless repository file. Any additional\nwords keep the claim actionable.\n\nThis is a diagnostics signal correction. It does not create evidence, alter the\ngraph, or broadly link changelog prose to modules.\n", "is_subdir": true}, {"name": "audit.md", "rel_path": "ticket-016/audit.md", "path": "ticket-016 / audit.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket 016 audit\n\n## Boundary\n\nThe host has PHP 8.4 but no `ext-ast`. Pulling a Composer parser into the Node\ncore would add a second dependency graph. The adapter therefore uses PHP's\nbuilt-in `token_get_all` with `TOKEN_PARSE`: syntax errors are real parser\nerrors, while the emitted evidence is accurately named `php_syntax_tokens`,\nnot a full AST.\n\nIt emits bounded source facts for namespace, `use`, class/interface/trait/enum,\nnamed function, qualified method and call sites. Identical calls on the same\nsource line collapse to one semantic fact. Paths come from the same ignore\nmatcher as the other adapters and cross the helper boundary through a private\nmanifest.\n\n## External A/B\n\nBoth deterministic pipelines read the same current `semcod/redsl` worktree and\nwrote disposable artifacts outside that worktree. All non-PHP external adapters\nwere disabled.\n\n| Metric | PHP disabled | PHP enabled | Delta |\n|---|---:|---:|---:|\n| Tracked PHP files discovered | 40 unsupported | 40 parsed | — |\n| Graph records | 2,128 | 4,255 | +2,127 |\n| Graph relations | 3,436 | 3,516 | +80 |\n| Warning diagnostics | 730 | 712 | -18 |\n| Code-change plans | 1 | 1 | 0 |\n| Extraction warnings | 1 unsupported-language | 0 | -1 |\n\nThe stable plan count matters: adding implementation evidence reduced false\nwarnings without hiding the remaining actionable plan.\n\nThe repository gate passed with 304 tests (303 pass, 1 local JDK skip), both\ngold datasets stayed at 100%, and `examples:check` passed for all five SDKs.\n", "is_subdir": true}, {"name": "baseline.md", "rel_path": "ticket-002/baseline.md", "path": "ticket-002 / baseline.md", "size": "2.8KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# External corpus baseline\n\nRuntime: todo2code 0.5.0 at\n`5f5ae5938ab77dcce474ba7abbd23686072776ec`.\n\nEach source was checked out as a detached, tracked-only worktree at the commit\nrecorded below. Runs were offline and deterministic: tracked `TASK.md`,\n`TODO.md` and `CHANGELOG.md` were selected when present, documents were limited\nto `README.md` and `docs/**/*.md`, communication and task synthesis were\ndisabled, and neither extraction nor summary used an LLM.\n\n| Repository | Commit | Time | Records | Relations | Topics aligned/all | Impl. | Plan | Docs | Diagnostics (I/W/R/B) | Warnings |\n| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | ---: |\n| semcod/code2llm | `b297d60` | 18 s | 16,899 | 41,747 | 107/628 | 59.4% | 43.7% | 31.4% | 912/2,377/1,411/0 | 9 |\n| semcod/domd | `b6c5ad2` | 5 s | 10,611 | 7,470 | 9/241 | 11.8% | 5.4% | 5.4% | 616/1,388/105/0 | 0 |\n| semcod/pactfix | `daf301a` | 5 s | 5,161 | 3,917 | 2/153 | 5.0% | 1.8% | 1.8% | 197/419/48/0 | 5 |\n| semcod/code2logic | `ba93489` | 12 s | 21,423 | 16,927 | 27/359 | 17.7% | 14.1% | 14.1% | 1,474/3,081/121/4 | 3 |\n| semcod/code2docs | `c738aff` | 9 s | 6,717 | 35,447 | 57/265 | 47.1% | 77.0% | 47.3% | 283/876/396/0 | 0 |\n| semcod/redup | `a175fb0` | 6 s | 7,204 | 19,173 | 62/277 | 49.2% | 55.9% | 10.8% | 476/1,205/703/0 | 0 |\n| subactor/platform | `3e96573` | 6 s | 10,628 | 11,002 | 25/688 | 5.9% | 9.3% | 8.9% | 185/993/93/0 | 1 |\n\n`I/W/R/B` means `info/warning/review_required/blocking`. Full commit hashes,\ngraph fingerprints and diagnostic distributions are in\n[`baseline.json`](baseline.json).\n\n## Warnings and explicit exceptions\n\n- `code2llm`, `pactfix` and `code2logic` contain deliberately invalid parser\n fixtures and/or unsupported PHP, Ruby or C# inputs.\n- Java extraction could not run for repositories containing Java because the\n clean runtime had no JDK. This is an explicit local exception; Java remains a\n required CI job.\n- `subactor/platform` has one configuration file above the shared 524,288-byte\n limit.\n- No repository-specific semantic options or thresholds were introduced.\n\n## Repeated defect selected for the first iteration\n\n`CHANGELOG_WITHOUT_IMPLEMENTATION` occurs in all seven repositories (2,877\nfindings in total). Sampling separates two classes:\n\n- substantive claims such as adding Jenkinsfile support or structured HR\n intent; these must remain reviewable when no implementation evidence exists;\n- release-note mechanics such as `Update project/calls.mmd`, placeholder\n sections and summaries like `... and 12 more files`; these are not behavioral\n claims and currently inflate both `CHANGELOG_WITHOUT_IMPLEMENTATION` and\n `UNLINKED_RECORD`.\n\nBroadly linking changelog prose to module topics would manufacture evidence for\nthe first class. The controlled change will instead classify only proven\nnon-actionable release-note mechanics and leave substantive claims unchanged.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-006/changelog.md", "path": "ticket-006 / changelog.md", "size": "1.1KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-006)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the canonical structured-output conformance ticket.\n- Preserved human-file ownership instead of fabricating a `user-*` record.\n- Entered `PLAN`; no implementation change yet.\n\n## [0.2.0] - 2026-07-31\n\n- Added the canonical semantic-reranker provider response definition and exact\n fail-closed runtime validator.\n- Added a drift gate against the published result schema.\n- Added offline regressions for wrong envelopes, non-numeric confidence and\n contradictory verdict/reason pairs.\n- Transitioned from `PLAN` to `TOOLS`; live two-route comparison remains open.\n\n## [0.3.0] - 2026-07-31\n\n- Compared `qwen/qwen3.7-plus` and `qwen/qwen3.7-flash` on the same clean\n tracked platform shortlist.\n- Rejected both routes before graph mutation; the new Flash diagnostic named\n the exact unknown `decision` property and response identity.\n- Passed full verification, both gold datasets, examples, dependency audit and\n CLI/MCP/A2A/Docker smoke.\n- Retained only contract hardening and closed the ticket without production\n semantic enablement.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-019/changelog.md", "path": "ticket-019 / changelog.md", "size": "410B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-019)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the approved product choices: root `todo2code` distribution,\n SDK-only contents and removal of the nested Python manifest.\n- Declared the shared `dist/` coexistence strategy and the unresolved Makefile\n scope conflict with active ticket-018.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-013/changelog.md", "path": "ticket-013 / changelog.md", "size": "623B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-013)\n\n## [Unreleased]\n\n- Opened a controlled three-model Live LLM comparison against the Gemini 3.6\n Flash baseline.\n- Selected Codestral 2508 after a 6/6 run at 57,129 ms and $0.037994; Gemini 3\n Flash Preview also passed, while DeepSeek V4 Pro crossed the 900-second cap.\n- Added a real total-run cancellation signal and fresh-manifest guard.\n- Added bounded concurrent Markdown enrichment. The same `weekly` workload\n improved from 218,741 ms to 53,362 ms without changing audit order.\n- Verified Codestral on `weekly` and `nlp2uri`; kept all generated artifacts\n outside their worktrees.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-005/changelog.md", "path": "ticket-005 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-005)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the audited cross-language reranking plan.\n- Made the source/evidence directory boundary explicit.\n- Entered `PLAN` and stopped before implementation for owner review.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded owner approval without modifying the human participant file.\n- Added the governance-standard participant extraction and response-owner audit\n as a prerequisite to semantic reranking.\n- Transitioned from `PLAN` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Recognized section-owned intent in `user-*` and `ai-*`.\n- Excluded ticket specifications, iterations, audits and agent logs from the\n participant channel.\n- Added `responseRequiredRole` and `responseRequiredFrom` to every detected\n divergence.\n- Added unconfirmed-human-decision detection without allowing the agent to\n modify the human-owned record.\n- Validated migration behavior against historical Opus and GPT56Luna material\n from `wellmanifest/new-project`.\n\n## [0.4.0] - 2026-07-31\n\n- Added bounded semantic candidate and grounded accept/reject/abstain contracts,\n JSON Schemas and offline regression tests.\n- Added captured gold decisions that recover 6/6 cross-language positives with\n zero forbidden-pair violations and one hard-negative abstention.\n- Restricted live evaluation to a clean tracked snapshot and moved the\n reproducer to `scripts/research/`.\n- Rejected the production candidate after three live\n `qwen/qwen3.7-plus` responses violated the structured contract before a\n relation could be created.\n- Removed semantic reranker exports from the public package and closed the\n ticket through the explicit rejection branch.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-018/changelog.md", "path": "ticket-018 / changelog.md", "size": "3.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-018)\n\n## [0.3.0] - 2026-08-04\n\n- Confirmed and recorded `koru / code-review` + `governance / enforce` as the\n required checks for the `main` ruleset `20186914`; enforced state is active,\n `current_user_can_bypass: never`, and bypass actors are empty.\n- Re-ran required evidence paths after deployment: PR-dispatch workflow syntax,\n positive and negative Koru probes, attestation upload path, workflow failure\n handling and local/CI verification commands now satisfy AC-24/AC-25.\n- Advanced `ticket-018` workflow state to `IN_PROGRESS / WAIT_FOR_APPROVAL` with\n AC-24 and AC-25 checked; AC-17 and the pre-existing `ticket-019` blockers\n remain tracked separately.\n\n## [0.2.0] - 2026-08-01\n\n- Evolved the plan for concurrent humans/agents: named workstreams,\n dependency/conflict edges, non-overlapping active write scopes and explicit\n integration tickets.\n- Returned the ticket to `PLAN / WAIT_FOR_APPROVAL`; no multi-workstream\n implementation file was changed and no new ticket was created.\n- The user explicitly approved the evolved plan; transitioned to\n `IN_PROGRESS / EDIT` before implementation.\n- Added and adopted `new-project` 0.8.0 workstream policy-as-code with intent\n v2, deterministic dependency/conflict/integration checks and stable codes.\n- Central fixtures, target schema/gate checks, Docker overlap probes and core\n E2E pass.\n- Transitioned to `BLOCKED` because concurrent Rust SDK version drift prevents\n official full E2E before tests; no out-of-scope Cargo artifact was rewritten.\n- Planned an AC-18..AC-25 extension for pinned Koru/Vallm pull-request review,\n fail-closed semantic validation, an attested review artifact and a required\n `main` ruleset; no CI or external repository setting changed in this phase.\n- Recorded explicit human approval of AC-18..AC-25 and transitioned to\n `IN_PROGRESS / EDIT` before changing CI or repository rules.\n- Added the pinned `koru / code-review` workflow with exact diff selection,\n one bounded semantic/security review round, structured evidence, artifact\n upload and GitHub provenance attestation.\n- Merged the workflow through pull request #1 after its attested Koru check and\n existing application checks passed.\n- Proved live semantic fail-closed behavior with dispatch `30703292661`: two\n source files were rejected, the job failed, and its report was still uploaded\n and attested.\n- Staged ruleset `20186914` without bypass actors for final activation after the\n bootstrap evidence merge.\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the policy-as-code scope, trust boundaries, planned paths, risks,\n acceptance criteria and implementation checklist.\n- Stopped before implementation pending explicit human approval.\n- Human explicitly approved ticket-018; transitioned from\n `WAIT_FOR_APPROVAL` to `EDIT` before implementation changes.\n- Added and tested central policy-as-code plus pinned target adoption.\n- Recorded successful central fixtures, scoped governance checks and Docker E2E\n core/full results.\n- Transitioned to `BLOCKED` after the gate rejected concurrent commit order and\n eight paths outside this ticket; no history rewrite or scope laundering was\n performed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-004/changelog.md", "path": "ticket-004 / changelog.md", "size": "1.6KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-004)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped language-independent matching experiment.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with precision, provenance and offline-CI guardrails.\n\n## [0.2.0] - 2026-07-31\n\n- Added a multilingual synthetic benchmark with six positive and six nearby\n negative pairs across Polish, German, Spanish and French.\n- Evaluated pinned MiniLM and E5 models locally.\n- Rejected a global cosine threshold because positive and negative score ranges\n overlap.\n\n## [0.3.0] - 2026-07-31\n\n- Ranked 66 actionable targetless platform declarations against 133 module\n aggregates.\n- Rejected two new forward-threshold candidates during manual review.\n- Confirmed reciprocal top-1 removes the false positives but adds no coverage;\n no production matcher was retained.\n- Added a separately reported cross-language gold cohort with six known\n positives and six gated hard negatives; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed 244 tests (243 pass, zero fail, one allowed local Java skip), gold\n v1/v2, all five SDK examples, dependency audit, CLI/MCP/A2A and Docker smoke.\n- Updated `READINESS.md`, `TEST_REPORT.md`, `VALIDATION.md` and `TODO.md`.\n- Closed the rejected matcher experiment in `DONE` without a production\n semantic rule.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved both executable embedding\n experiment reproducers from the ticket evidence directory to\n `scripts/research/`.\n- Preserved benchmark inputs, captured outputs and decisions in the ticket.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-017/changelog.md", "path": "ticket-017 / changelog.md", "size": "1.9KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-017)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Recorded the audit scope, risks, pre-existing worktree boundary and acceptance\n criteria; implementation remains blocked on human approval.\n- User approved the plan and the ticket entered `IN_PROGRESS / TOOLS`.\n\n## [0.2.0] - 2026-08-01\n\n- Repaired non-mutating command help and Polish active-prohibition polarity with\n focused CLI, text and documentation regressions.\n- Audited concurrent path/action planning and bounded Markdown path resolution\n against absolute, Windows and parent traversal.\n- Passed 314 host tests (313 pass, one JDK skip) and 314 Docker tests (307 pass,\n seven optional-toolchain skips), gold v2/v1 at 100% gated precision/recall,\n and host plus Docker examples.\n- On `wellmanifest/new-project@72e5f6c`, removed the sole false\n `CONFLICTING_INTENT`; recorded all 183 remaining diagnostics rather than\n claiming a clean repository.\n- Refreshed `project/analysis.toon.yaml`; no commit, push or auto-apply occurred.\n- Continued the active ticket for the user-requested Docker E2E core/full\n environments; no new ticket or human-owned participant file was created.\n\n## [0.3.0] - 2026-08-01\n\n- Added isolated `e2e-core` and `e2e-full` Docker/Compose environments plus\n operator documentation and stable `T2C-E2E-*` failure codes.\n- Core E2E passed with 318 tests (311 pass, seven explicit optional-toolchain\n skips), both gold benchmarks, protocol smoke checks and core examples.\n- Full E2E passed with 318/318 tests and zero skips, both gold benchmarks,\n CLI/MCP/A2A smoke checks and shared fingerprints from all five SDK examples.\n- Added the native build toolchain required to link the Rust example after the\n first full run exposed the missing `cc` executable as `T2C-E2E-108`.\n- Marked ticket-017 `DONE`; no commit, push or auto-apply occurred.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-014/changelog.md", "path": "ticket-014 / changelog.md", "size": "672B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-014)\n\n## [Unreleased]\n\n- Recorded the existing-path/unrelated-capability false-alignment case found by\n the first autonomous Koru integration run.\n- Defined a fail-closed semantic corroboration requirement and response-owner\n boundary for the follow-up implementation.\n- Kept shared-path relations as navigation evidence while requiring a symbol,\n extracted capability, grounded concrete-fact similarity or accepted rerank\n before a capability-bearing declaration can become implemented.\n- Added gold negative/positive controls, fixed Intent-vs-Reality coverage, and\n completed the autonomous Koru replay through verified commit `55a8b15`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-007/changelog.md", "path": "ticket-007 / changelog.md", "size": "429B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-007)\n\n## [0.1.0] - 2026-07-31\n\n- Initial governance scaffold created.\n- Selected explicit unresolved-role sentinels as the fail-closed routing\n behavior.\n\n## [0.2.0] - 2026-07-31\n\n- Added role-specific fallback routes for otherwise empty respondent lists.\n- Covered agent-only and human-only tickets, rendering and diagnostics.\n- Closed the ticket after full offline verification and gold evaluation.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-009/changelog.md", "path": "ticket-009 / changelog.md", "size": "481B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-009)\n\n## [0.1.0] - 2026-07-31\n\n- Audited provider/runtime schema drift across all structured LLM stages.\n- Added one typed schema/parser source and migrated all seven production\n OpenRouter boundaries.\n- Replaced silent provider-value coercion with fail-closed retry/fallback.\n- Added production-call and published-schema drift gates.\n- Passed full verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `d0fc143`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-008/changelog.md", "path": "ticket-008 / changelog.md", "size": "338B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-008)\n\n## [0.1.0] - 2026-07-31\n\n- Audited the governance hub against todo2code's communication contract.\n- Hardened upstream ticket scripts, templates, ownership rules and indexing.\n- Added an isolated cross-repository interoperability test.\n- Published upstream version 0.6.0 and recorded the evidence locally.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-002/changelog.md", "path": "ticket-002 / changelog.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-002)\n\n## [0.1.0] - 2026-07-31\n\n- Initialized the ticket from the `wellmanifest/new-project` governance\n standard.\n- Recorded the human instruction, Codex execution plan, acceptance criteria,\n risks and initial environment evidence.\n- Entered `WAIT_FOR_APPROVAL`; no source-code or external benchmark execution\n has started.\n\n## [0.2.0] - 2026-07-31\n\n- Recorded user approval (`kontynuuj`) and transitioned from\n `WAIT_FOR_APPROVAL` to `TOOLS`.\n\n## [0.3.0] - 2026-07-31\n\n- Ran the normalized offline pipeline successfully against seven detached,\n tracked-only external repositories.\n- Added `baseline.json` with machine-readable commits, fingerprints, counts,\n diagnostics, coverage and timings, plus `baseline.md` with reviewed results.\n- Transitioned to `ANALYSIS` and selected non-actionable release-note mechanics\n as the first independently measurable diagnostic defect.\n\n## [0.4.0] - 2026-07-31\n\n- Added a red/green regression that separates changelog bookkeeping from\n substantive release claims.\n- Added a narrow deterministic classifier for placeholders, compact file\n summaries and known generated analysis targets under `project/`.\n- Re-ran the unchanged seven-repository corpus from a clean runtime containing\n only this patch: removed 1,024 false `review_required` findings across five\n repositories, retained substantive findings, and kept every graph fingerprint\n unchanged.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.5.0] - 2026-07-31\n\n- Passed `npm run verify` (241 tests: 240 pass, 1 local JDK skip), gold v2,\n examples for five SDKs, CLI/MCP/A2A smoke, npm production audit and Docker\n smoke.\n- Updated readiness and validation documentation with the seven-repository\n baseline and controlled iteration result.\n- Completed all acceptance criteria and transitioned `VERIFY -> DONE`.\n\n## [0.6.0] - 2026-07-31\n\n- Reproduced a `project.sh` false positive caused by generated HTML quoting a\n tracked audit log that named an untracked file.\n- Added a red/green regression and taught generated-analysis verification to\n accept only references already present in tracked, non-generated text.\n- Kept the original hard negative for newly introduced untracked references.\n- Re-ran tracked-only `project.sh`, full verify (242 tests: 241 pass, one Java\n skip) and Docker smoke successfully.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-012/changelog.md", "path": "ticket-012 / changelog.md", "size": "509B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-012)\n\n## [Unreleased]\n\n- Replaced opaque live model routing with an explicit structured-output model.\n- Preserved provider metadata for rejected structured responses.\n- Included the current run in persisted and rendered live history.\n- Aligned live request timeout with the configured per-stage budget.\n- Added one strict, audited corrective attempt to NL, Markdown, documentation\n and communication extraction.\n- Selected `google/gemini-3.6-flash` after a measured 6/6 live pass.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-011/changelog.md", "path": "ticket-011 / changelog.md", "size": "523B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-011)\n\n## [0.1.0] - 2026-07-31\n\n- Added AST-grounded unique/ambiguous/conflicting symbol resolution for NL.\n- Replaced ambiguous multi-module symbol evidence with deterministic abstention.\n- Added field-specific fixes to `AMBIGUOUS_REQUIREMENT`.\n- Removed implicit file-name and all-caps prose symbols.\n- Extended gold v2 with exact-target symbol-resolution hard negatives.\n- Passed full verify, both gold datasets and all five SDK examples.\n- Published the implementation to `main` as `25df74a`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-022/changelog.md", "path": "ticket-022 / changelog.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Changelog — ticket-022\n\n## Planned\n\n- Discover bounded nested Git repositories below an umbrella root.\n- Namespace repository paths so Git evidence links to shared workspace paths.\n- Preserve single-repository extraction and read-only operation.\n- Validate against the real Subactor workspace.\n\n## Implemented\n\n- Split Git extraction into one-repository evidence collection and bounded,\n deterministic umbrella orchestration.\n- Added breadth-first real-directory discovery, repository/directory caps,\n symlink refusal, checkout pruning and stable four-reader concurrency.\n- Namespaced changed/renamed paths and recorded each repository-relative root.\n- Bumped deterministic Git provenance to `t2c/git@2`.\n- Added regressions for collision-safe paths, pruning, symlink refusal, empty\n repositories, rename paths, repeatability and the single-repository contract.\n\n## Validated\n\n- Focused tests, full Node verification and Docker smoke pass.\n- Subactor supplies 326 commit records from 39 member repositories; 82.2% link\n to other graph evidence and same-snapshot diagnostics fall by 275.\n- A composed check with ticket-021 preserves zero unsafe remediation plans.\n- The global governance gate remains blocked only by pre-existing ticket-018/019\n findings; ticket-022 is not merged or pushed.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-020/changelog.md", "path": "ticket-020 / changelog.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-020)\n\n## [0.1.0] - 2026-08-01\n\n- Initial governance scaffold created.\n- No human participant identity or content was generated.\n- Expanded the plan with role-bound trusted intake, CQRS/event sourcing,\n strict JSON Schema, Protobuf, Python/TypeScript CLI, MCP and A2A contracts.\n- Kept implementation in WAIT_FOR_APPROVAL and isolated from active\n governance and SDK workstreams.\n- Recorded the pre-existing ticket-019 governance findings without modifying\n that concurrent ticket.\n- Recorded explicit interactive approval and transitioned to `EDIT` in a\n dedicated implementation worktree.\n- Implemented role-bound CQRS/event sourcing, registry v2, strict schemas,\n deterministic diagnostics, projections and transport parity across both\n CLIs, MCP and A2A.\n- Added TypeScript/Python golden Protobuf compatibility and security/concurrency\n regression coverage.\n- Reached `VALIDATION`: application and Docker core gates pass; the first\n governance run was blocked by the inherited v0.7.0 single-ticket rule.\n- Refreshed the isolated implementation branch to the committed 0.8.0\n workstream baseline so parallel tickets are evaluated by scope and ownership\n instead of a repository-wide single-ticket rule.\n- Confirmed that 0.8.0 accepts tickets 018 and 020 concurrently; the remaining\n global findings belong only to ticket-019's declared dependency, conflict,\n ownership and overlap state.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-010/changelog.md", "path": "ticket-010 / changelog.md", "size": "468B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-010)\n\n## [0.1.0] - 2026-07-31\n\n- Added content-addressed AST and documentation-chunk caches.\n- Added fail-open validation, atomic writes and cache telemetry.\n- Added cold/warm, invalidation, corruption and provider-isolation tests.\n- Measured tracked snapshots of todo2code, new-project and\n subactor-improvement.\n- Passed exact-commit verify, both gold datasets and all SDK examples.\n- Published the implementation to `main` as `f1d9334`.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-015/changelog.md", "path": "ticket-015 / changelog.md", "size": "373B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-015)\n\n## [Unreleased]\n\n- Reproduced the lossy compound-action title from the autonomous Koru replay.\n- Preserved the source statement when inferred object text retains a leading\n imperative, without changing normal concise plan titles.\n- Kept all runtime code under `src/synthesis`; this folder contains governance\n and redacted evidence only.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-003/changelog.md", "path": "ticket-003 / changelog.md", "size": "1.7KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket changelog (ticket-003)\n\n## [0.1.0] - 2026-07-31\n\n- Created the separately scoped residual changelog audit.\n- Recorded user continuation as approval.\n- Entered `TOOLS` with a deterministic sampling and reject-unsafe-hypothesis\n policy.\n\n## [0.2.0] - 2026-07-31\n\n- Reproduced 1,853 residual findings on all seven current deterministic runs.\n- Added a reproducible 168-record stratified sample with labels and rationale.\n- Selected exact `Update ` bookkeeping: 28 sampled and 547 census records\n across five repositories.\n- Deferred roadmap checkboxes and retained 1,275 substantive or unverified\n claims; transitioned to `ANALYSIS`.\n\n## [0.3.0] - 2026-07-31\n\n- Added a red/green regression for exact file-only updates with behavioral hard\n negatives.\n- Added the minimal diagnostic-signal correction.\n- Removed 547 review-required findings and 188 secondary unlinked warnings\n across five repositories with 7/7 stable graph fingerprints.\n- Gold v2 remains perfect; transitioned to `VERIFY`.\n\n## [0.4.0] - 2026-07-31\n\n- Passed full verification: 242 tests, 241 passed, zero failed and one allowed\n local Java skip; module, LLM-boundary, environment, workflow and generated\n analysis checks also passed.\n- Passed all five SDK examples, the production dependency audit, CLI/MCP/A2A\n smoke checks and Docker smoke.\n- Updated `docs/READINESS.md`, recorded the next ranked roadmap-lifecycle\n hypothesis and transitioned from `VERIFY` to `DONE`.\n\n## [0.4.1] - 2026-07-31\n\n- Corrected repository layout after review: moved the executable audit\n reproducer from the ticket evidence directory to `scripts/research/`.\n- Preserved the ticket input, captured output and documentation in place.\n", "is_subdir": true}, {"name": "changelog.md", "rel_path": "ticket-016/changelog.md", "path": "ticket-016 / changelog.md", "size": "347B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket Changelog (ticket-016)\n\n## [Unreleased]\n\n- Added the PHP syntax helper and independently exported adapter.\n- Added environment, manifest and doctor visibility for the optional runtime.\n- Removed PHP from unsupported-language counts only while its adapter is enabled.\n- Verified the behavior with focused tests and a measured `redsl` A/B.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-004/iteration-01.md", "path": "ticket-004 / iteration-01.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: multilingual embedding feasibility\n\n## Hypothesis\n\nA pinned multilingual sentence embedding can replace the hand-written\nPolish-to-English topic dictionary while preserving a precision-first boundary.\n\n## Evidence\n\n- Synthetic benchmark: 6 positives and 6 nearby hard negatives across four\n languages.\n- Local models: pinned multilingual MiniLM and multilingual E5.\n- Repository prototype: 66 actionable targetless declarations ranked against\n 133 module aggregates from the tracked `subactor/platform` graph\n `ae92ead72d35e88e`.\n\n## Result\n\nThe hypothesis is rejected in its raw form.\n\nMiniLM ranked one wrong module above the intended module. E5 ranked all six\nsynthetic positives correctly, but absolute positive and negative score ranges\noverlap. On the real repository, E5 with a 0.75 score and 0.01 margin proposed\ntwo new links; manual review rejected both. Reciprocal top-1 removed those\nfalse positives but also removed every new candidate, so coverage could not\nimprove.\n\n## Retained change\n\nNo production semantic relation rule is retained. Gold v2 now exposes\n`cross-language` as a separate cohort:\n\n- 6 positive relations remain measured known gaps;\n- 6 nearby wrong modules remain gated forbidden pairs;\n- same-language exact-target and capability-topic precision/recall stay\n independent.\n\nThis turns the language barrier from one Polish anecdote into a multi-language\nacceptance boundary without making offline CI provider-dependent.\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-002/iteration-01.md", "path": "ticket-002 / iteration-01.md", "size": "2.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: non-actionable changelog mechanics\n\n## Decision\n\nKeep the change. It removes release-note bookkeeping from implementation-gap\ndiagnostics without treating an unsupported release claim as implemented.\n\nThe new classifier ignores only:\n\n- explicit placeholder entries;\n- compact `... and N more files` continuation rows;\n- entries whose every target is a known generated analysis artifact under the\n reserved `project/` directory.\n\nOrdinary documentation updates, source updates, mixed target lists, unknown\nfiles under `project/`, and behavioral release statements remain actionable.\n\n## Controlled evaluation\n\nThe candidate was applied to a clean runtime based on the same\n`5f5ae5938ab77dcce474ba7abbd23686072776ec` commit as the baseline. No other\nworking-tree source changes were included. The external input policy and all\nseven detached commits remained unchanged.\n\n| Repository | Graph | CHANGELOG before → after | Review before → after | UNLINKED before → after |\n| --- | --- | ---: | ---: | ---: |\n| semcod/code2llm | unchanged | 1,411 → 955 | 1,411 → 955 | 1,332 → 1,313 |\n| semcod/domd | unchanged | 105 → 99 | 105 → 99 | 779 → 773 |\n| semcod/pactfix | unchanged | 48 → 48 | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 121 → 120 | 121 → 120 | 1,504 → 1,503 |\n| semcod/code2docs | unchanged | 396 → 269 | 396 → 269 | 463 → 455 |\n| semcod/redup | unchanged | 703 → 269 | 703 → 269 | 708 → 703 |\n| subactor/platform | unchanged | 93 → 93 | 93 → 93 | 780 → 780 |\n\nAcross the corpus, `CHANGELOG_WITHOUT_IMPLEMENTATION` fell by 1,024\n(2,877 → 1,853) and the related unlinked warning fell by 39. The two\nrepositories dominated by substantive sampled claims (`pactfix` and\n`subactor/platform`) did not change. All graph fingerprints were identical.\n\n## Regression gates\n\n- The focused test was observed failing before the implementation and passing\n afterwards.\n- The nearby hard negatives preserve diagnostics for Jenkinsfile support,\n `docs/api.md`, and an unknown `project/custom-runtime.ts` source.\n- Gold v2 remains 100% precision and recall in every measured scope, with zero\n forbidden diagnostic violations and stable repeated runs.\n\nMachine-readable deltas and exact after-run IDs are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-01.md", "rel_path": "ticket-003/iteration-01.md", "path": "ticket-003 / iteration-01.md", "size": "1.5KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 01: exact file-update bookkeeping\n\n## Result\n\nKeep the change. An exact `Update ` row no longer creates an\nimplementation-gap or unlinked-record diagnostic. Additional wording keeps the\nrecord actionable.\n\n| Repository | Graph | Changelog before → after | Unlinked before → after |\n| --- | --- | ---: | ---: |\n| semcod/code2llm | unchanged | 955 → 650 | 1,312 → 1,219 |\n| semcod/domd | unchanged | 99 → 99 | 772 → 772 |\n| semcod/pactfix | unchanged | 48 → 48 | 217 → 217 |\n| semcod/code2logic | unchanged | 120 → 109 | 1,503 → 1,492 |\n| semcod/code2docs | unchanged | 269 → 127 | 455 → 418 |\n| semcod/redup | unchanged | 269 → 184 | 703 → 661 |\n| subactor/platform | unchanged | 93 → 89 | 766 → 761 |\n\nAcross the corpus:\n\n- `CHANGELOG_WITHOUT_IMPLEMENTATION`: 1,853 → 1,306 (`-547`);\n- `UNLINKED_RECORD`: 5,728 → 5,540 (`-188`);\n- all diagnostics: 16,280 → 15,545 (`-735`);\n- graph fingerprints: unchanged in 7/7 repositories.\n\n`domd` and `pactfix` contained no selected file-only rows and therefore remained\nunchanged. Gold v2 stayed perfect before the full validation phase.\n\n## Precision boundaries\n\nSuppressed:\n\n- `Update src/runtime.ts`\n- `Update README.md`\n- `update debug/.cache/state.pkl`\n\nRetained:\n\n- `Update src/runtime.ts to reject invalid tokens`\n- `Updated authentication in src/runtime.ts`\n- `Update support for Dockerfile parsing`\n- `Added Jenkinsfile support for deployment pipelines`\n\nMachine-readable run IDs, fingerprints and deltas are in\n[`iteration-01.json`](iteration-01.json).\n", "is_subdir": true}, {"name": "iteration-02.md", "rel_path": "ticket-002/iteration-02.md", "path": "ticket-002 / iteration-02.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Iteration 02: tracked audit references in generated-analysis isolation\n\n## Trigger\n\nAfter `HEAD` advanced to `18cc21b`, a fresh tracked-only `project.sh` run\ngenerated `project/index.html` from the detached snapshot and then failed:\n\n```text\nproject/index.html references untracked input nlp2uri.yaml\n```\n\nThe generator had not read that private file. Its name was already present in\nthe committed ticket audit as captured `git status --short` output, and the\nHTML report quoted that tracked log.\n\n## Correction\n\nThe verifier now distinguishes:\n\n- a reference newly introduced by generated output — still rejected;\n- a filename already quoted by a tracked, non-generated source — accepted as\n tracked evidence, not proof that the untracked file was consumed.\n\nGenerated reports are excluded from the tracked-reference corpus so a stale\nreport cannot justify itself. Binary tracked files are also excluded.\n\n## Red/green evidence\n\nA focused regression first failed with 3/4 passing. After the correction all\n4/4 generated-analysis tests pass, including the original hard negative that\nrejects a newly introduced private input reference.\n\nThe complete tracked-only `project.sh` command then passed:\n\n```text\n{\"filesChecked\":18,\"untrackedInputsChecked\":6,\"status\":\"ok\"}\n```\n\nThe final `npm run verify` passed 242 tests (241 pass, one local Java skip) and\nDocker smoke passed after this change.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-006/preprompt.md", "path": "ticket-006 / preprompt.md", "size": "439B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-006\n- **Task title**: Canonical structured-output conformance\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Treat ticket-005's three\nlive schema violations as measured input, preserve fail-closed behavior and do\nnot weaken repository-evidence requirements.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-019/preprompt.md", "path": "ticket-019 / preprompt.md", "size": "285B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-019\n- **Task title**: Publish the Python SDK as the root todo2code package\n- **Created**: 2026-08-01T11:14:28Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-013/preprompt.md", "path": "ticket-013 / preprompt.md", "size": "374B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-013\n- **Task title**: Compare qualified Live LLM models\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nUse the models that satisfy the OpenRouter and llm-code-benchmark screening\ncriteria, then measure whether they perform better in todo2code Live LLM.\nKeep the full `require-llm` contract and existing cost/time gates.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-005/preprompt.md", "path": "ticket-005 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-005)\n\n- **Task title**: Audited cross-language reranking\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Use retrieval only to produce a bounded shortlist.\n2. Require a separate structured decision with explicit abstention.\n3. Ground every accepted decision in repository-owned records, paths, symbols\n or capability terms.\n4. Preserve exact-target precedence and the deterministic offline linker.\n5. Record provider/model/revision, input hashes, scores and cited evidence.\n6. Cache model-derived output by content and model identity.\n7. Evaluate tracked snapshots only; never transmit untracked or private data.\n8. Reject the approach unless it clears gold and real-repository precision\n gates.\n9. Store executable source outside `project/ticket-*`.\n\n## Referenced evidence\n\n- `project/ticket-004/iteration-01.md`\n- `project/ticket-004/audit.md`\n- `evaluation/gold/v2/dataset.json`\n- `src/graph/linker.ts`\n- `src/core/text.ts`\n- `docs/READINESS.md`\n\n## Approval boundary\n\nInitialization records the user's request to continue, but implementation waits\nfor review of `README.md` and `ai-codex.md` as required by `P-CORE-008`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-018/preprompt.md", "path": "ticket-018 / preprompt.md", "size": "667B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-018\n- **Task title**: Enforce new-project governance as policy-as-code\n- **Created**: 2026-08-01T09:54:58Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nThe user requested automated code review using Koru. Plan a read-only, pinned\nand attested pull-request check which cannot mutate source or self-approve,\nuses the existing organization OpenRouter secret only in the safe\n`pull_request` context, fails closed, and becomes a required `main` ruleset\ncheck. Stop again in `WAIT_FOR_APPROVAL` before editing CI or external\nrepository rules.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-004/preprompt.md", "path": "ticket-004 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-004)\n\n- **Task title**: Language-independent topic matching\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Preserve the precision-first exact-target and three-topic contracts.\n2. Measure multilingual behavior independently from same-language linking.\n3. Compare strategies before choosing an implementation.\n4. Keep the primary offline gates deterministic and provider-independent.\n5. Record model/provider identity and scores for any model-derived evidence.\n6. Cache expensive projections by content and model identity.\n7. Analyze only tracked snapshots of external repositories.\n8. Reject an approach that improves headline coverage by violating hard\n negatives or obscuring evidence origin.\n\n## Referenced evidence\n\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n- `project/ticket-002/iteration-02.md`\n- `project/ticket-003/iteration-01.md`\n- `src/core/text.ts`\n- `src/graph/linker.ts`\n- `src/diff/reality.ts`\n\n## Approval boundary\n\nThe user's `kontynuuj` message approves this separately recorded semantic\nexperiment. It does not approve provider-dependent default behavior, external\ndeployment, or changes to the governance repository.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-017/preprompt.md", "path": "ticket-017 / preprompt.md", "size": "1.4KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-017\n- **Task title**: Audit and repair confirmed todo2code errors\n- **Created**: 2026-08-01T09:15:46Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\n## Technical directives\n\n- Treat concurrent commit `1ebad96` and any later branch movement as external\n input; review HEAD and diffs again immediately before edits.\n- Do not touch `user-*`, `nlp2uri.yaml` or unrelated source changes.\n- After approval, run the repository analysis automation against the workspace\n without applying `prefact` and read its generated reports.\n- Reproduce each defect before changing source and add the smallest focused test.\n- Preserve deterministic/offline operation and the canonical `DiagnosticCode`\n contract; new operational errors must have stable codes and actionable text.\n- Use the project Docker environment for authoritative verification.\n- Re-run the Governance Hub analysis outside its worktree so validation does not\n create artifacts in the read-only policy repository.\n- Keep production `Dockerfile`/A2A Compose behavior unchanged; put test-only\n toolchains and commands in dedicated E2E files.\n- Bake the source into E2E images instead of bind-mounting mutable host state.\n- Set both `WORKDIR` and `T2C_ROOT` to `/workspace` so SDK/A2A relative roots are\n resolved consistently.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-014/preprompt.md", "path": "ticket-014 / preprompt.md", "size": "382B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-014\n- **Task title**: Distinguish path presence from implemented intent\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a negative semantic control for a planned capability aimed at an existing\nfile whose AST does not implement that capability. Prefer abstention and an\nexplicit response owner over a false `aligned` result.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-007/preprompt.md", "path": "ticket-007 / preprompt.md", "size": "432B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-007\n- **Task title**: Explicit unresolved response routing\n- **Owner**: tom-sapletta-com\n- **Repository**: todo2code\n\nUse the governance layout established by `wellmanifest/new-project/project`.\nKeep implementation outside the ticket directory. Close the measured\nticket-006 routing gap without inventing a participant, creating a human-owned\nfile or guessing identity from a display name.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-009/preprompt.md", "path": "ticket-009 / preprompt.md", "size": "456B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-009\n- **Task title**: Canonical structured-response contracts\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nReplace manually duplicated OpenRouter schemas and runtime validation with one\ntyped canonical contract per response boundary. Reject provider drift without\ncoercing intent, preserve grounding as a second validation layer, and keep all\nexecutable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-008/preprompt.md", "path": "ticket-008 / preprompt.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-008\n- **Task title**: Cross-repository governance standard hardening\n- **Owner**: unresolved:human\n- **Repository**: todo2code + wellmanifest/new-project\n\nApply the intent ownership, response routing and ticket-directory findings from\ntodo2code to the upstream governance templates. Keep executable implementation\noutside this ticket directory and do not create a human-owned participant file.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-002/preprompt.md", "path": "ticket-002 / preprompt.md", "size": "1.3KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-002)\n\n- **Task title**: Cross-repository semantic hardening\n- **Created**: 2026-07-31T06:49:07Z\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements and constraints\n\n1. Test todo2code on real external repositories through deterministic,\n reproducible runs.\n2. Capture a comparable baseline before changing semantic behavior.\n3. Classify observed failures and select one shared, measurable defect.\n4. Add an independent regression case before implementing its fix.\n5. Apply one semantic change at a time and repeat gold plus corpus measurements.\n6. Reject an attempted improvement when it increases noise or lacks measurable\n external benefit.\n7. Preserve external repositories, secrets, untracked files and current user\n changes.\n8. Keep raw command output in the provider-specific ticket log.\n\n## Referenced specifications\n\n- `docs/READINESS.md`\n- `docs/TEST_REPORT.md`\n- `evaluation/gold/README.md`\n- `evaluation/gold/v2/dataset.json`\n- `TODO.md`\n- Governance policy: `wellmanifest/new-project/POLICY.md`\n- Governance procedure: `wellmanifest/new-project/CONTRIBUTING.md`\n\n## Execution boundary\n\nThe planning state is `WAIT_FOR_APPROVAL`. Under `P-CORE-008`, no source-code\nchange or external benchmark execution begins until the user approves\n`ai-codex.md` and the project-level ticket entry in `TODO.md`.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-012/preprompt.md", "path": "ticket-012 / preprompt.md", "size": "396B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-012\n- **Task title**: Reliable live structured-output model\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nMake live LLM usable with an explicit structured-output-capable model. Preserve\nmetadata for rejected responses, correct current-run history accounting, test\noffline, then verify against the real provider without weakening validation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-011/preprompt.md", "path": "ticket-011 / preprompt.md", "size": "463B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-011\n- **Task title**: AST-grounded NL symbol resolution\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nResolve explicit NL symbols against AST declarations. Preserve exact symbol\nevidence only when one module owns the symbol or an explicit path/qualifier\nselects one owner. Report ambiguity with candidate paths and actionable missing\nfields. Keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-022/preprompt.md", "path": "ticket-022 / preprompt.md", "size": "438B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt — ticket-022\n\nImplement read-only, deterministic Git extraction for an umbrella workspace of\nnested repositories. Preserve the single-repository contract, prefix nested\nrepository paths relative to the umbrella, never follow symlinks, stop walking\nbelow a discovered repository, bound work, and degrade individual repository\nfailures to explicit warnings. Do not change public interfaces or execute any\nrepository mutation.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-020/preprompt.md", "path": "ticket-020 / preprompt.md", "size": "519B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-020\n- **Task title**: Role-bound trusted intake with CQRS ES Protobuf MCP and A2A\n- **Created**: 2026-08-01T11:23:59Z\n\nKeep executable implementation outside this governance/evidence directory.\nRead a human-owned user-*.md file only when one exists.\n\nTreat manager-*, user-* and dev-* as human-owned projections. Only a trusted\nintake boundary may create or update them. Keep identity, authorization,\nschema, event integrity and required acceptance deterministic and LLM-free.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-010/preprompt.md", "path": "ticket-010 / preprompt.md", "size": "466B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-010\n- **Task title**: Incremental extraction cache\n- **Owner**: unresolved:human\n- **Repository**: todo2code\n\nAdd a fail-open, content-addressed cache for deterministic AST extraction and\ndocumentation chunking. Preserve byte-for-byte-equivalent extraction output,\nnever cache provider responses, measure cold/warm behavior on real repository\nsnapshots, and keep all executable implementation outside this ticket directory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-015/preprompt.md", "path": "ticket-015 / preprompt.md", "size": "332B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-015\n- **Task title**: Preserve compound intent in code-change titles\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nFix the deterministic code-change title projection observed during PLF-003.\nDo not change the source Intent DSL record or place runtime code in this ticket\ndirectory.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-003/preprompt.md", "path": "ticket-003 / preprompt.md", "size": "1.2KB", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Preprompt and technical directives (ticket-003)\n\n- **Task title**: Residual changelog diagnostic audit\n- **Created**: 2026-07-31\n- **Governance source**: `wellmanifest/new-project`\n\n## Requirements\n\n1. Continue the iterative external-repository hardening from ticket-002.\n2. Reproduce the current residual changelog findings on the same seven commits.\n3. Select the review sample deterministically, without LLM labeling.\n4. Preserve sampled text, targets and source identity in a portable artifact.\n5. Distinguish real unsupported release claims from diagnostic false positives.\n6. Require cross-repository repetition and a hard negative before code changes.\n7. Measure each retained change independently and reject unsafe hypotheses.\n8. Keep external repositories and unrelated workspace changes untouched.\n\n## Referenced evidence\n\n- `project/ticket-002/baseline.json`\n- `project/ticket-002/iteration-01.json`\n- `project/ticket-002/iteration-01.md`\n- `docs/READINESS.md`\n- `evaluation/gold/v2/dataset.json`\n\n## Approval boundary\n\nThe user's `kontynuuj` message followed the explicit recommendation to place\nthe residual changelog audit in a separate ticket. It approves this recorded\nscope; unrelated `new-project` implementation remains outside the ticket.\n", "is_subdir": true}, {"name": "preprompt.md", "rel_path": "ticket-016/preprompt.md", "path": "ticket-016 / preprompt.md", "size": "362B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Ticket preprompt\n\n- **Task ID**: ticket-016\n- **Task title**: First-class PHP syntax evidence\n- **Owner**: agent:codex\n- **Repository**: todo2code\n\nAdd deterministic PHP evidence through the common adapter contract. Be exact\nabout the parser boundary: PHP syntax tokens are not presented as a full AST.\nKeep measurements outside analyzed repository worktrees.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-005/user-tom-sapletta-com.md", "path": "ticket-005 / user-tom-sapletta-com.md", "size": "436B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com\n\n- **Ticket**: ticket-005\n- **Role**: owner and reviewer\n\n## Instructions\n\n- Continue improving and testing the library step by step on other projects.\n- Explain and correct executable code placed under ticket directories.\n- Use the ticket standard from `wellmanifest/new-project/project`.\n\n## Decisions\n\n- Ticket directories are governance and evidence folders, not implementation\n source directories.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-004/user-tom-sapletta-com.md", "path": "ticket-004 / user-tom-sapletta-com.md", "size": "400B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-004\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue improving the library step by step after identifying that a\nhand-written Polish-to-English topic dictionary covers vocabulary rather than\nlanguage.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-002/user-tom-sapletta-com.md", "path": "ticket-002 / user-tom-sapletta-com.md", "size": "447B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-002\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nTest todo2code on other projects, derive conclusions, improve the library\niteratively step by step, and use the `wellmanifest/new-project` ticket\nstandard in the target repository's `project/` directory.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "user-tom-sapletta-com.md", "rel_path": "ticket-003/user-tom-sapletta-com.md", "path": "ticket-003 / user-tom-sapletta-com.md", "size": "317B", "icon": "📝", "type": "markdown", "type_name": "Markdown", "content": "# Participant: tom-sapletta-com (human)\n\n- **Ticket**: ticket-003\n- **Status**: ACTIVE\n\n## Assigned instruction\n\nContinue the previously proposed step-by-step hardening after ticket-002.\n\n## Ownership boundary\n\nThis file records the initiating human instruction. Agents must not modify it\nduring ticket continuation.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-006/ai-codex-logs.txt", "path": "ticket-006 / ai-codex-logs.txt", "size": "1.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nInput from ticket-005 live evaluation:\n- attempt 1: no decisions array,\n- attempt 2: judgments instead of decisions,\n- attempt 3: invalid confidence type/range,\n- all attempts failed closed,\n- no relation or coverage change was accepted.\n\nSelected next work:\ncanonical structured-output conformance and precise provider diagnostics.\n\nWorkflow state: PLAN\n\n2026-07-31 offline conformance implementation\n\n- provider schema and runtime validator share\n src/semantic/reranker-response.ts,\n- verdict/reason values and compatibility rule share\n src/semantic/reranker.ts,\n- published schema drift is checked in semantic-reranker.test.ts,\n- invalid response error identifies property + provider/model/response ID,\n- no raw response persistence and no coercion,\n- focused semantic tests: 5/5 PASS.\n\nWorkflow transition: PLAN -> TOOLS\n\n2026-07-31 tracked live comparison\n\n- root: clean subactor/platform worktree,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- candidates: reciprocal E5 selected top-1, 6 declarations,\n- qwen/qwen3.7-plus: three prior contract failures from ticket-005,\n- qwen/qwen3.7-flash:\n response.decisions[0] contains unknown properties: decision,\n- response identity:\n Alibaba/qwen/qwen3.7-flash/gen-1785490219-noOw2NdfoPMqC6dLf7x6,\n- graph mutations: 0.\n\nFinal gates:\n- npm run verify: 252 total, 251 pass, 0 fail, 1 local JDK skip,\n- gold v2/v1: PASS,\n- examples:check: PASS, 227 records, 97 relations, five SDKs,\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: retain conformance diagnostics; reject production semantic\nenablement. Workflow state: DONE.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-019/ai-codex-logs.txt", "path": "ticket-019 / ai-codex-logs.txt", "size": "0B", "icon": "📄", "type": "text", "type_name": "Text", "content": "", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-013/ai-codex-logs.txt", "path": "ticket-013 / ai-codex-logs.txt", "size": "706B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-013 opened\n2026-07-31 verified all three candidates in the current OpenRouter catalog with structured_outputs\n2026-07-31 Gemini 3 Flash Preview PASS 6/6, 64064 ms, 116604 tokens, $0.076411\n2026-07-31 Codestral 2508 PASS 6/6, 57129 ms, 118920 tokens, $0.037994\n2026-07-31 DeepSeek V4 Pro stopped after crossing the 900000 ms run budget; no manifest\n2026-07-31 weekly Codestral: 161 records, 6 requests, 218741 ms sequential\n2026-07-31 weekly Codestral after concurrency=3: 161 records, 6 requests, 53362 ms\n2026-07-31 nlp2uri Codestral after concurrency=3: 619 records, 20 requests, 194750 ms, $0.08588244\n2026-07-31 algitex deterministic full scan PASS: 2643 Markdown records, 9.4 s wall\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-005/ai-codex-logs.txt", "path": "ticket-005 / ai-codex-logs.txt", "size": "3.5KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser instruction: kontynuuj, with an explicit correction that executable source\nmust not live under project/ticket-*.\n\nPrevious measured result:\ncross-language expected=0/6\ncross-language forbidden violations=0/6\nraw E5 new platform candidates=2\nmanually accepted raw E5 candidates=0\n\nWorkflow state: PLAN\nImplementation status: waiting for P-CORE-008 review\n\n2026-07-31 owner approval and continuation\n\nUser approved work on subsequent todo2code tickets and requested an explicit\naudit of:\nuser-* / ai-* -> Intent DSL -> divergence -> required respondent.\n\nWorkflow transition: PLAN -> TOOLS\nHuman participant file remains unchanged.\n\n2026-07-31 communication fidelity validation\n\nFocused regression: 25/25 PASS for communication, identity, pipeline and task\nsynthesis after the initial implementation.\n\nExternal read-only migration (`wellmanifest/new-project`, historical\n2b9e3c9):\n- filename-only rename: 0 records; explicit owner-specific migration warnings,\n- Opus, typed request/message: 9 human + 58 agent records, 0 issues,\n- GPT56Luna, typed request/message: 9 human + 72 agent records, 3 unanswered\n prompt fragments, 0 false human-agent file conflict.\n\nFull gates after implementation:\n- npm run verify: PASS (247 total, 246 pass, 1 local JDK skip),\n- evaluate:gold v2 and v1: PASS, 100% gated precision/recall,\n- examples:check: PASS (227 records, 97 relations),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\n2026-07-31 audited reranker evaluation\n\nOffline contracts:\n- candidate set bounded to 1..10 per declaration,\n- retrieval creates no relation,\n- accept/reject/abstain decisions require both record IDs and exact grounded\n quotes,\n- accepted relations retain retrieval, decision, reranker and citation\n provenance,\n- captured gold reranker: 6/6 expected, 0/6 forbidden violations, 1 abstention.\n\nLive tracked repository:\n- repository: subactor/platform,\n- commit: 3e96573d587cb664741849ceba205bf303b9f418,\n- graph fingerprint:\n 250df4ff83f456fb371278d4a0c2cf17dd025582b6865a0cb2f01bd469fd1dd0,\n- selected reciprocal E5 shortlist: 6 declarations; top-3=18 candidates,\n top-1=6 candidates,\n- qwen/qwen3.7-plus attempt 1: missing decisions array,\n- attempt 2: returned judgments instead of decisions,\n- attempt 3: invalid non-numeric/out-of-range confidence,\n- result: fail-closed, 0 materialized relations, no coverage claim.\n\nFinal gates:\n- npm run verify: PASS (251 total, 250 pass, 1 local JDK skip),\n- one earlier full-suite CLI-watch timing failure; isolated retry 3/3 PASS and\n repeated full verify PASS,\n- evaluate:gold v2: deterministic linker 0/6; captured reranker 6/6 expected,\n 0/6 forbidden, accepted 6, abstained 1,\n- evaluate:gold v1: PASS,\n- examples:check: PASS (227 records, 97 relations, five SDKs),\n- npm audit --omit=dev: 0 vulnerabilities,\n- CLI, MCP, A2A and Docker smoke: PASS.\n\nDecision: reject production semantic reranking; do not export it and do not\nchange the deterministic linker. Workflow state: DONE.\n\nFinal communication re-analysis after closing documentation:\n- participants: codex 51 records, tom-sapletta-com 4 records,\n- 0 blocking, 8 warning, 8 review_required,\n- 7 AGENT_CLAIM_WITHOUT_EVIDENCE -> codex (workspace remains uncommitted),\n- 1 AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED -> tom-sapletta-com,\n- 8 AGENT_WORK_OUTSIDE_REQUEST -> tom-sapletta-com because the detailed latest\n instruction is present in the conversation but not in the human-owned file.\n\nNo human-owned file was modified to suppress these findings.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-018/ai-codex-logs.txt", "path": "ticket-018 / ai-codex-logs.txt", "size": "8.6KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T09:54:58Z PLAN-ONLY BASELINE\n$ git status --short\nResult: dirty worktree detected with existing/concurrent changes; preserved as\nout of scope for ticket-018 except ticket governance files.\n\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ bash project/new-ticket.sh --title 'Enforce new-project governance as policy-as-code' --agent codex\nUpdated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-018 for 'Enforce new-project governance as policy-as-code'.\n\nSTATE: WAIT_FOR_APPROVAL\nNo implementation or validation claim made.\n\n2026-08-01 APPROVAL TRANSITION\nUser response: explicit approval of the presented ticket-018 plan.\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nNote: chat approval authorizes this local implementation; it is not represented\nas trusted GitHub merge approval.\n\n2026-08-01 GOVERNANCE VALIDATOR\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\nPositive target-scoped probe:\nGOV-PASS: passed (0 errors, 0 warnings)\n\nNegative probes:\nGOV-SCOPE-001: src/unplanned.ts is outside ticket intent (exit 1)\nGOV-OWNER-001: agent change to user-alice.md rejected (exit 1)\nGOV-APPROVAL-001: untrusted approval source rejected (exit 1)\nGOV-INTENT-003: ticket intent and implementation in one commit rejected (exit 1)\n\n2026-08-01 DOCKER E2E\n$ make e2e-core\ntests 328; pass 321; fail 0; skipped 7; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; T2C-E2E-000: PASS suite=core\n\n$ docker compose -f compose.e2e.yml run --rm --no-deps e2e-core <scoped governance command>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ make e2e-full\ntests 328; pass 328; fail 0; skipped 0; both gold datasets PASS;\nCLI/MCP/A2A/examples PASS; SDK examples 5 languages;\nT2C-E2E-000: PASS suite=full\n\n2026-08-01 CONCURRENT PUBLICATION AUDIT\nObserved HEAD moved concurrently to:\n5f1f4bdc03776fb59dd490d6fd2ccebb78f5f2d6 Tom Softreck <tom@sapletta.com> refaktor\nNo commit or push was performed by Codex.\n\n$ bash project/governance-check.sh --actor ci --base HEAD^ --enforce-approval --approval-source github-review --approved-ticket ticket-018\nexit=1\nGOV-INTENT-003: project/ticket-018/intent.json did not exist before the first implementation commit.\nGOV-SCOPE-001: nlp2uri.yaml, project/compact_flow.mmd,\nproject/compact_flow.png, src/cli.ts, src/core/types.ts,\nsrc/extractors/runtime-cycle.ts, src/pipeline/run.ts and\ntest/runtime-cycle.test.ts are outside ticket-018 intent.\n\n2026-08-01 MULTI-WORKSTREAM PLAN EVOLUTION\n$ command -v docker\n/usr/bin/docker\n\n$ docker info --format '{{.ServerVersion}}'\n29.1.3\n\n$ git status --short\nResult: concurrent modifications are present in .env.example, src/config/env.ts,\nsrc/interfaces/a2a.ts, test/a2a.test.ts and tests/fixtures/autonom-cycle.json.\nThey are explicitly preserved outside the multi-workstream plan change.\n\nTransition: BLOCKED -> PLAN / WAIT_FOR_APPROVAL for AC-11..AC-17.\nNo schema, validator, CI, application source or test implementation changed.\n\n$ git diff --check -- TODO.md project/ticket-018/README.md\n project/ticket-018/intent.json project/ticket-018/ai-codex.md\n project/ticket-018/ai-codex-logs.txt project/ticket-018/changelog.md\nexit=0 (no output)\n\n$ python3 -m json.tool project/ticket-018/intent.json\nexit=0 (formatted output intentionally discarded)\n\n2026-08-01 MULTI-WORKSTREAM APPROVAL TRANSITION\nUser response: ZATWIERDZAM\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: multi-workstream acceptance criteria recorded in ticket-018.\nNote: interactive approval is not external trusted merge evidence.\n\n2026-08-01 MULTI-WORKSTREAM IMPLEMENTATION VALIDATION\n$ bash tests/governance-scripts.test.sh\ngovernance scripts: PASS\n\n$ bash tests/governance-validator.test.sh\ngovernance validator: PASS\n\n$ validate Draft 2020-12 schemas and instances\ncentral-jsonschema=PASS\ntarget-jsonschema=PASS\n\n$ compare emitted diagnostics with governance/diagnostics.json\ndiagnostics-catalog=PASS codes=27\n\n$ bash project/governance-check.sh <ticket-018 scoped changed files>\nGOV-PASS: passed (0 errors, 0 warnings)\n\n$ docker workstream fixture\nGOV-PASS: passed (0 errors, 0 warnings)\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-001 and\nticket-002. [src/core/graph.ts]\nT2C-GOV-E2E-000: PASS parallel non-overlap accepted; concrete overlap rejected\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\n\n$ focused Node test summary in current e2e-core image\n1..329\n# tests 329\n# pass 322\n# fail 0\n# skipped 7\n\n$ make e2e-full\nexit=2 (Docker build command failed)\ncargo fetch --locked: lock file needs to be updated but --locked prevents it\ncausal evidence: concurrent commit 9928699 changes sdk/rust/Cargo.toml package\nversion 0.5.0 -> 0.5.1; ignored sdk/rust/Cargo.lock still records 0.5.0.\nFull tests did not start; no full-suite PASS is claimed.\n\n2026-08-01 CONCURRENT WORKSTREAM OBSERVATION\nAnother process created untracked ticket-019 in PLAN / WAIT_FOR_APPROVAL with\nworkstream=sdk while ticket-018 remained active in workstream=governance.\nNo ticket-019 file or project/TICKETS.md entry was created or edited by this\nagent. The scopes do not overlap on implementation paths.\n\n$ bash project/governance-check.sh --actor agent\nGOV-PASS: passed (0 errors, 0 warnings)\nThis final workspace check included the concurrently created untracked ticket.\n\n2026-08-01 KORU CODE-REVIEW PLAN\n$ koru --version\ninstalled PATH version: 0.1.398\nlocal Koru development venv: 0.1.443\npublished pinned target: 0.1.444\n\n$ python -m pip index versions vallm\ninstalled version: 0.1.92\npublished pinned target: 0.1.94\n\n$ koru --doctor --project . --format json\nresult: project is not initialised for planfile queue mode; loop mode remains\navailable without repository mutation. Two expected setup failures were\nreported for missing .planfile config/sprints.\n\n$ gh secret list --org semcod\nThe organization-level OpenRouter credential is available to all repositories;\nits value was not read or logged.\n\n$ inspect GitHub repository controls for semcod/todo2code\nmain branch protection: absent\nrepository rulesets: none\nPR/review for commit 06a2faa: none\nCI verify/JDK/build/deploy: PASS\nCI governance/enforce: FAIL on ticket-019 state\n\nDecision: reuse unfinished governance ticket-018. Plan AC-18..AC-25 only and\nstop in WAIT_FOR_APPROVAL. No CI, source, test, ruleset or human-owned content\nwas changed.\n\n2026-08-01 KORU CODE-REVIEW APPROVAL\nUser response: tak, wykonaj\nTransition: PLAN / WAIT_FOR_APPROVAL -> IN_PROGRESS / EDIT.\nScope approved: AC-18..AC-25 recorded in ticket-018.\n\n2026-08-01 KORU CODE-REVIEW LOCAL IMPLEMENTATION\n$ uvx --from koru==0.1.444 --with vallm[llm,security]==0.1.94 koru --version\nkoru 0.1.444\n\n$ Koru loop positive probe (one repository, one round, command=true)\nkoru: repos=1 succeeded=1 failed=0 rounds=1\nexit=0\n\n$ Koru loop negative Vallm probe (intake-service.ts, security, fail on review)\nkoru: repos=1 succeeded=0 failed=1 rounds=1\nexit=1\n\n$ query current OpenRouter model catalog\ndeepseek/deepseek-v4-pro: available\n\n$ npm run verify:workflows\nWorkflow YAML verified: 2 file(s), no duplicate top-level keys.\n\n$ npm run verify\ntests 335; pass 334; fail 0; skipped 1 (local JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nworkflow, schema, no-LLM and generated-analysis gates: PASS\n\n$ make governance\nFour existing ticket-019 findings remain: GOV-CONFLICT-001,\nGOV-DEPENDENCY-002, GOV-WORKSTREAM-003 and GOV-WORKSTREAM-004.\nNo new ticket-018 secret, path or scope finding was emitted.\n\n2026-08-01 KORU REMOTE VALIDATION\n$ GitHub pull request #1 / workflow run 30703151199\nkoru / code-review: PASS\nverify: PASS\nJava adapter (JDK 17 required): PASS\ngovernance / enforce: FAIL only on the separately owned ticket-019 state\nreport schema: t2c.koru-code-review/v1\nartifact retention: 14 days\nSigstore provenance attestations for review.json: 1\n\n$ workflow_dispatch run 30703292661\nreviewed base: 38d33d222d2e550d055c02b609a036937c7db255\nreviewed head: bc93128f42060be3106776a7c9551c464bb52ffc\nselected: src/comparison/workspace.ts, test/workspace.test.ts\nsemantic credential check: PASS (value was neither read nor logged)\nKoru/Vallm result: reject, exit=1, 2/2 files failed review\nrequired check: FAIL (expected negative path)\nreport/artifact/attestation steps: PASS\nreport digest: sha256:fa0f4d0c1f780bb8d21f56ca74d8ae901e184fb4996f9e84832a87846adfc1d8\nGitHub Sigstore provenance attestations for digest: 1\n\n$ stage repository ruleset 20186914\nname: main: governed Koru review\nenforcement: disabled for final bootstrap evidence merge\nbypass actors: none\ncurrent_user_can_bypass: never\nrules: pull request, dismiss stale reviews, block deletion/force-push,\nstrict required checks governance / enforce and koru / code-review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-004/ai-codex-logs.txt", "path": "ticket-004 / ai-codex-logs.txt", "size": "2.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: replace further dictionary growth with a\nlanguage-independent topic-matching experiment.\nWorkflow state: TOOLS\n\nCurrent known gap:\nKolejka zadań powinna ponawiać nieudane próby z opóźnieniem\nsrc/queue/task-retry-backoff.ts\nResult: 0/1 relation because lexical topics do not cross the language boundary.\n\nConstraints:\noffline CI remains provider-independent\nthree-topic hard-negative boundary remains in force\nmodel-derived evidence must be explicit and auditable\nexternal inputs remain tracked-only snapshots\n\n2026-07-31 local embedding benchmark\n\nMiniLM revision=86741b4e3f5cb7765a600d3a3d55a0f6a6cb443d\npositive_min=0.673289 negative_max=0.732568 separation=-0.059279\npairwise_correct=5/6\n\nE5 revision=f470c6a1a906014160ece1968c484b275f0396de\nquery_prefix=query: passage_prefix=passage:\npositive_min=0.759374 negative_max=0.835202 separation=-0.075828\npairwise_correct=6/6 minimum_pairwise_margin=0.007190\n\nDecision: no global cosine threshold is safe.\n\n2026-07-31 tracked platform ranking\n\ncommit=3e96573d587cb664741849ceba205bf303b9f418\ngraph=ae92ead72d35e88e6de754d7af02d074201213c56166eb788a5e152d6a6f695d\nmodule_aggregates=133 actionable_targetless_declarations=66\n\nforward score>=0.75 margin>=0.01:\nselected=6 new_candidates=2 manually_accepted=0\n\nreciprocal top-1 with forward/reverse margin>=0.01:\nselected=1 new_candidates=0\n\nDecision: reject production embedding matcher; workflow TOOLS -> ANALYSIS.\n\n2026-07-31 gold cohort\n\ncross_language_cases=7\nknown_positive_relations=6 satisfied=0\nforbidden_pairs=6 violations=0\ngated exact-target/capability-topic precision=100% recall=100%\ngold v1=PASS gold v2=PASS\nWorkflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=244 pass=243 fail=0 skip=1\nJava skip reason: local JDK unavailable; required CI supplies JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run evaluate:gold && npm run evaluate:gold:v1\nResult: PASS, gated precision/recall 100%, stability PASS.\nCross-language: expected=0/6, forbidden violations=0/6.\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nResult: all acceptance criteria satisfied; workflow VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-004.\nMoved:\nproject/ticket-004/evaluate-embeddings.py\n-> scripts/research/evaluate-embedding-pairs.py\nproject/ticket-004/rank-graph-embeddings.py\n-> scripts/research/rank-intent-graph-embeddings.py\n\nBenchmark inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-017/ai-codex-logs.txt", "path": "ticket-017 / ai-codex-logs.txt", "size": "93.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "[2026-08-01T09:15:46Z] [EXEC] [provider:codex] $ ./project/new-ticket.sh --title 'Audit and repair confirmed todo2code errors' --agent codex\n[2026-08-01T09:15:46Z] [STDOUT] Updated project/TICKETS.md ticket index successfully.\n[2026-08-01T09:15:46Z] [STDOUT] Successfully scaffolded project/ticket-017 for 'Audit and repair confirmed todo2code errors'.\n[2026-08-01T09:15:46Z] [EXIT] Command exited with code 0\n[2026-08-01T09:17:00Z] [OBSERVED] HEAD moved concurrently to 1ebad96beb2724d2b4296ad2b5a1b5c187f92139.\n[2026-08-01T09:17:00Z] [OBSERVED] Commit subject: fix: give Markdown paths one identity and plan create vs modify\n[2026-08-01T09:18:00Z] [DECISION] [provider:codex] User approved ticket-017 with: kontynuuj\n[2026-08-01T09:26:00Z] [DECISION] [provider:codex] User extended ticket-017: create Docker environments for E2E testing.\n[2026-08-01T09:18:54Z] [EXEC] [provider:codex] $ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPreparing worktree (detached HEAD 1ebad96)\n📖 code2docs analyzing todo2code...\n\nAnalyzing: 0%| | 0/377 [00:00<?, ?it/s]\nAnalyzing: 28%|██▊ | 105/377 [00:00<00:00, 1012.29it/s]\nAnalyzing: 67%|██████▋ | 253/377 [00:00<00:00, 1282.43it/s]\nAnalyzing: 100%|██████████| 377/377 [00:00<00:00, 421.61it/s]\n ✅ docs/README.md\n✨ Done!\n{"readme":"docs/README.md","version":"0.5.0","license":"Apache-2.0","nodeVersion":">=20","changed":true}\n🔍 Scanning: /tmp/t2c-analysis.mltSXt/todo2code\n📁 Extensions: .py, .pyw, .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .php, .phtml, .go, .rs, .java, .c, .h, .cpp, .cc, .cxx, .hpp, .cs, .scala, .kt, .swift, .m, .mm, .lua, .rb, .rake, .gemspec, .sql, .sh, .bash, .zsh, .fish, .html, .htm, .xhtml, .css, .scss, .sass, .less, .svelte, .vue\n📏 Min lines: 3\n🎯 Min similarity: 0.85\n\nDuplicate finding completed in 679.0ms\n📊 Scanned 168 files (30600 lines, 1207ms)\nFound 17 duplicate groups (44 fragments, 120 lines recoverable)\n\n → project/duplication.toon.yaml\nUsing .gitignore from .\nExcluded 7 files by .gitignore\n✓ Results saved to project/validation.toon.yaml\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":19,"untrackedInputsChecked":8,"status":"ok"}\nSkipping source refactoring; set T2C_APPLY_PREFACT=1 to apply prefact changes.\n[2026-08-01T09:19:11Z] [EXIT] Command exited with code 0\n[2026-08-01T09:20:29Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-baseline .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 1.0s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.8s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [runtime 1/14] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 850.88kB 0.3s done\n#7 DONE 0.3s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 DONE 0.1s\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 1.867\n#10 1.867 added 3 packages, and audited 4 packages in 1s\n#10 1.868\n#10 1.868 found 0 vulnerabilities\n#10 1.870 npm notice\n#10 1.870 npm notice New major version of npm available! 10.9.8 -> 12.0.2\n#10 1.870 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\n#10 1.870 npm notice To update run: npm install -g npm@12.0.2\n#10 1.870 npm notice\n#10 DONE 2.0s\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.382\n#21 0.382 > todo2code@0.5.0 build\n#21 0.382 > tsc -p tsconfig.json\n#21 0.382\n#21 6.644\n#21 6.644 up to date, audited 2 packages in 876ms\n#21 6.645\n#21 6.645 found 0 vulnerabilities\n#21 DONE 6.8s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.1s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.2s done\n#35 writing image sha256:8afd8ad4b5b1b64f2929b94bd3f0aeb1b125c9ac191ee9483f88d555239ea0a3 done\n#35 naming to docker.io/library/todo2code:ticket017-baseline done\n#35 DONE 0.3s\n[2026-08-01T09:20:45Z] [EXIT] Command exited with code 0\n[2026-08-01T09:21:03Z] [EXEC] [provider:codex] baseline CLI help and polarity probes in Docker\nhelp_exit=0 artifact_files=1\nhelp_stdout_first={\nhelp_stderr_first=DEGRADED: one or more pipeline stages did not complete in the requested mode\n./.intent\n./.intent/latest.json\n./.intent/runs\n{"prohibition":"positive","explicitBan":"negative"}\n[2026-08-01T09:21:04Z] [EXIT] Baseline probes completed\n[2026-08-01T09:22:22Z] [EXEC] [provider:codex] $ docker build -t todo2code:ticket017-fix .\n#0 building with "default" instance using docker driver\n\n#1 [internal] load build definition from Dockerfile\n#1 transferring dockerfile: 1.58kB done\n#1 DONE 0.0s\n\n#2 resolve image config for docker-image://docker.io/docker/dockerfile:1.7\n#2 DONE 0.5s\n\n#3 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e\n#3 CACHED\n\n#4 [internal] load metadata for docker.io/library/node:22-bookworm-slim\n#4 DONE 0.5s\n\n#5 [internal] load .dockerignore\n#5 transferring context: 121B done\n#5 DONE 0.0s\n\n#6 [build 1/15] FROM docker.io/library/node:22-bookworm-slim@sha256:f32b81066cde10a75dbac96646099533316d94bac4150c55da1636e1f0ffdc46\n#6 DONE 0.0s\n\n#7 [internal] load build context\n#7 transferring context: 93.15kB 0.3s done\n#7 DONE 0.4s\n\n#8 [build 2/15] WORKDIR /app\n#8 CACHED\n\n#9 [build 3/15] COPY package.json package-lock.json tsconfig.json .intentignore ./\n#9 CACHED\n\n#10 [build 4/15] RUN npm ci --include=dev\n#10 CACHED\n\n#11 [build 5/15] COPY src ./src\n#11 DONE 0.1s\n\n#12 [build 6/15] COPY sdk/typescript/src ./sdk/typescript/src\n#12 DONE 0.1s\n\n#13 [build 7/15] COPY test ./test\n#13 DONE 0.1s\n\n#14 [build 8/15] COPY python ./python\n#14 DONE 0.1s\n\n#15 [build 9/15] COPY golang ./golang\n#15 DONE 0.1s\n\n#16 [build 10/15] COPY java ./java\n#16 DONE 0.1s\n\n#17 [build 11/15] COPY rust-ast ./rust-ast\n#17 DONE 0.1s\n\n#18 [build 12/15] COPY prompts ./prompts\n#18 DONE 0.1s\n\n#19 [build 13/15] COPY schemas ./schemas\n#19 DONE 0.1s\n\n#20 [build 14/15] COPY scripts ./scripts\n#20 DONE 0.1s\n\n#21 [build 15/15] RUN npm run build && npm prune --omit=dev --omit=optional\n#21 0.356\n#21 0.356 > todo2code@0.5.0 build\n#21 0.356 > tsc -p tsconfig.json\n#21 0.356\n#21 7.938\n#21 7.938 up to date, audited 2 packages in 2s\n#21 7.939\n#21 7.939 found 0 vulnerabilities\n#21 DONE 8.0s\n\n#22 [runtime 2/14] RUN apt-get update && apt-get install -y --no-install-recommends git python3 ca-certificates && rm -rf /var/lib/apt/lists/*\n#22 CACHED\n\n#23 [runtime 3/14] WORKDIR /app\n#23 CACHED\n\n#24 [runtime 4/14] COPY --from=build /app/node_modules ./node_modules\n#24 CACHED\n\n#25 [runtime 5/14] COPY --from=build /app/dist ./dist\n#25 DONE 0.1s\n\n#26 [runtime 6/14] COPY package.json LICENSE .env.example .intentignore ./\n#26 DONE 0.1s\n\n#27 [runtime 7/14] COPY python ./python\n#27 DONE 0.1s\n\n#28 [runtime 8/14] COPY golang ./golang\n#28 DONE 0.1s\n\n#29 [runtime 9/14] COPY java ./java\n#29 DONE 0.1s\n\n#30 [runtime 10/14] COPY rust-ast ./rust-ast\n#30 DONE 0.1s\n\n#31 [runtime 11/14] COPY adapters/tensorflow/package*.json ./adapters/tensorflow/\n#31 DONE 0.1s\n\n#32 [runtime 12/14] COPY prompts ./prompts\n#32 DONE 0.1s\n\n#33 [runtime 13/14] COPY schemas ./schemas\n#33 DONE 0.1s\n\n#34 [runtime 14/14] RUN mkdir -p /workspace && chown -R node:node /app /workspace\n#34 DONE 2.2s\n\n#35 exporting to image\n#35 exporting layers\n#35 exporting layers 0.3s done\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62\n#35 writing image sha256:900c8aa442049887da73c9c97e296518be16e0649ea2b35394bbdc9074b51d62 0.2s done\n#35 naming to docker.io/library/todo2code:ticket017-fix\n#35 naming to docker.io/library/todo2code:ticket017-fix 0.0s done\n#35 DONE 0.6s\n[2026-08-01T09:22:37Z] [EXIT] Command exited with code 0\n[2026-08-01T09:22:52Z] [EXEC] [provider:codex] focused regression tests and fixed probes in Docker\nTAP version 13\n# Subtest: CLI command help is successful and non-mutating\nok 1 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1522.092528\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 2 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 17.777143\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 3 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 2.356781\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 4 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 3.081802\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 5 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 10.365874\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 6 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 0.822336\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 7 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 3.202845\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 8 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 5.012056\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 9 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 1.637813\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 10 - Plans without repository paths are not invented\n ---\n duration_ms: 0.823864\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 11 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.077878\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 12 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 3.925064\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 13 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 4.391045\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 14 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.537999\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 15 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 14.567562\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 16 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 3.806494\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 17 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.715203\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 18 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 2.748772\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 19 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2076.856443\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 20 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.467711\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 21 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.860219\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 22 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 2.900834\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 23 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 14.42927\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 24 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 4.785258\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 25 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 18.528748\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 26 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.696856\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 27 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 2.14091\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 28 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 2.393646\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 29 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 4.282139\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 30 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.17068\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 31 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 25.588506\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 32 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 3.690729\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 33 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 51.711469\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 34 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 2.852228\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 35 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 3.356339\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 36 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.015455\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 37 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.885324\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 38 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 9.446016\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 39 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.804404\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 40 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 3.112411\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 41 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 1.005619\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 42 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.803532\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 43 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.429784\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 44 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.675938\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 45 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.18631\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 46 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.388588\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 47 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.468356\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 48 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.284159\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 49 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.332673\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 50 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 31.179852\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 51 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 2.915055\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 52 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.369677\n type: 'test'\n ...\n1..52\n# tests 52\n# suites 0\n# pass 52\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 4198.632614\nhelp_exit=0 artifact_files=0 stderr_bytes=0\ntodo2code (t2c)\n\n{"prohibition":"negative","explicitBan":"negative"}\n[2026-08-01T09:22:58Z] [EXIT] Focused regression validation completed\n[2026-08-01T09:23:28Z] [EXEC] [provider:codex] full offline verification in isolated Docker workspace\n\nadded 3 packages, and audited 4 packages in 2s\n\nfound 0 vulnerabilities\nnpm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.0.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2\nnpm notice To update run: npm install -g npm@12.0.2\nnpm notice\n\n> todo2code@0.5.0 verify\n> npm run check && npm run verify:no-llm && npm run verify:modules && npm run verify:env && npm run verify:workflows && npm run verify:generated-analysis && npm run verify:structured-responses && npm run build && npm run verify:schemas && npm test\n\n\n> todo2code@0.5.0 check\n> tsc -p tsconfig.json --noEmit\n\n\n> todo2code@0.5.0 verify:no-llm\n> node scripts/verify-no-llm-imports.mjs\n\nLLM boundary verified transitively from 9 deterministic entrypoints across 37 modules.\n\n> todo2code@0.5.0 verify:modules\n> node scripts/verify-module-boundaries.mjs\n\nModule boundaries verified: 105 modules, 488 internal imports, no cycles, core is independent.\n\n> todo2code@0.5.0 verify:env\n> node scripts/verify-env-contract.mjs\n\nEnvironment contract verified: 75 code/Docker variables, 75 documented keys, no duplicates.\n\n> todo2code@0.5.0 verify:workflows\n> node scripts/verify-workflow-yaml.mjs\n\nWorkflow YAML verified: 1 file(s), no duplicate top-level keys.\n\n> todo2code@0.5.0 verify:generated-analysis\n> node scripts/verify-generated-analysis.mjs\n\n{"filesChecked":19,"untrackedInputsChecked":9,"status":"ok"}\n\n> todo2code@0.5.0 verify:structured-responses\n> node scripts/verify-structured-responses.mjs\n\n{"structuredCalls":7,"rawCalls":0,"status":"ok"}\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n\n> todo2code@0.5.0 verify:schemas\n> node scripts/generate-response-schemas.mjs --check\n\n{"schema":"schemas/document-extraction-response.schema.json","status":"ok"}\n\n> todo2code@0.5.0 test\n> node --test --test-concurrency=4 dist/test/*.test.js\n\nTAP version 13\n# [t2c:a2a] listening on 127.0.0.1:43811\n# Subtest: A2A v1.0 card, versioning, task methods and cursor pagination are coherent\nok 1 - A2A v1.0 card, versioning, task methods and cursor pagination are coherent\n ---\n duration_ms: 146.659601\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:41107\n# Subtest: A2A bearer authentication is declared with v1 security objects and enforced\nok 2 - A2A bearer authentication is declared with v1 security objects and enforced\n ---\n duration_ms: 69.742017\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:42861\n# [t2c:a2a] listening on 127.0.0.1:45907\n# [t2c:a2a] listening on 127.0.0.1:34193\n# Subtest: A2A file task store survives restart and preserves idempotency across replicas\nok 3 - A2A file task store survives restart and preserves idempotency across replicas\n ---\n duration_ms: 99.66827\n type: 'test'\n ...\n# Subtest: Go adapter records package, imports, types, functions and methods\nok 4 - Go adapter records package, imports, types, functions and methods # SKIP Go toolchain not installed\n ---\n duration_ms: 10.21674\n type: 'test'\n ...\n# Subtest: Go facts are deterministic observations, not inferences\nok 5 - Go facts are deterministic observations, not inferences # SKIP Go toolchain not installed\n ---\n duration_ms: 4.574502\n type: 'test'\n ...\n# Subtest: Go adapter marks exported symbols and reports calls in scope\nok 6 - Go adapter marks exported symbols and reports calls in scope # SKIP Go toolchain not installed\n ---\n duration_ms: 11.430686\n type: 'test'\n ...\n# Subtest: Go extraction is skipped without cost when a tree holds no Go sources\nok 7 - Go extraction is skipped without cost when a tree holds no Go sources\n ---\n duration_ms: 43.258221\n type: 'test'\n ...\n# Subtest: A missing Go toolchain degrades to a warning instead of failing the run\nok 8 - A missing Go toolchain degrades to a warning instead of failing the run\n ---\n duration_ms: 19.340262\n type: 'test'\n ...\n# Subtest: Rust adapter records uses, types, functions, methods, values and calls\nok 9 - Rust adapter records uses, types, functions, methods, values and calls # SKIP Rust toolchain not installed\n ---\n duration_ms: 9.306034\n type: 'test'\n ...\n# Subtest: Java adapter records packages, imports, types, fields, methods and calls\nok 10 - Java adapter records packages, imports, types, fields, methods and calls # SKIP JDK not installed\n ---\n duration_ms: 6.646334\n type: 'test'\n ...\n# Subtest: Java and Rust adapters skip toolchain startup when no matching sources exist\nok 11 - Java and Rust adapters skip toolchain startup when no matching sources exist\n ---\n duration_ms: 33.693113\n type: 'test'\n ...\n# Subtest: Missing Java and Rust toolchains degrade to explicit warnings\nok 12 - Missing Java and Rust toolchains degrade to explicit warnings\n ---\n duration_ms: 15.762286\n type: 'test'\n ...\n# Subtest: PHP syntax adapter records namespaces, imports, types, functions, methods and calls\nok 13 - PHP syntax adapter records namespaces, imports, types, functions, methods and calls # SKIP PHP runtime not installed\n ---\n duration_ms: 6.798455\n type: 'test'\n ...\n# Subtest: PHP adapter skips runtime startup when no PHP source exists\nok 14 - PHP adapter skips runtime startup when no PHP source exists\n ---\n duration_ms: 33.006487\n type: 'test'\n ...\n# Subtest: Missing PHP runtime degrades to an explicit warning\nok 15 - Missing PHP runtime degrades to an explicit warning\n ---\n duration_ms: 13.66148\n type: 'test'\n ...\n# Subtest: Invalid PHP syntax is reported without aborting extraction\nok 16 - Invalid PHP syntax is reported without aborting extraction # SKIP PHP runtime not installed\n ---\n duration_ms: 7.505501\n type: 'test'\n ...\n# Subtest: AST extractor reads TypeScript and Python facts\nok 17 - AST extractor reads TypeScript and Python facts\n ---\n duration_ms: 193.913571\n type: 'test'\n ...\n# Subtest: CLI command help is successful and non-mutating\nok 18 - CLI command help is successful and non-mutating\n ---\n duration_ms: 1871.346239\n type: 'test'\n ...\n# Subtest: CLI summarize exposes deterministic, prefer-llm and require-llm modes\nok 19 - CLI summarize exposes deterministic, prefer-llm and require-llm modes\n ---\n duration_ms: 2489.134911\n type: 'test'\n ...\n# Subtest: CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\nok 20 - CLI propose-todo, render-todo and apply-todo return JSON and preserve a no-op TODO\n ---\n duration_ms: 1923.685426\n type: 'test'\n ...\n# Subtest: CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\nok 21 - CLI watch reads TASK.md by default, disables summary LLM and reacts to a live file change\n ---\n duration_ms: 1890.190181\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\nok 22 - proposeCodeChangePlans materialises grounded plans from PLANNED_NOT_IMPLEMENTED\n ---\n duration_ms: 22.348339\n type: 'test'\n ...\n# Subtest: code-change title preserves the leading action of a compound intent\nok 23 - code-change title preserves the leading action of a compound intent\n ---\n duration_ms: 6.136311\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans is deterministic for the same evidence\nok 24 - proposeCodeChangePlans is deterministic for the same evidence\n ---\n duration_ms: 6.802655\n type: 'test'\n ...\n# Subtest: a plan creates a missing file and modifies an existing one\nok 25 - a plan creates a missing file and modifies an existing one\n ---\n duration_ms: 18.406348\n type: 'test'\n ...\n# Subtest: the repository probe never proposes creating a file outside the root\nok 26 - the repository probe never proposes creating a file outside the root\n ---\n duration_ms: 4.902866\n type: 'test'\n ...\n# Subtest: bounded plan sets prefer explicit TODO work over historical changelog audit\nok 27 - bounded plan sets prefer explicit TODO work over historical changelog audit\n ---\n duration_ms: 4.707445\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance passes when targeted diagnostics clear\nok 28 - evaluateCodeChangeAcceptance passes when targeted diagnostics clear\n ---\n duration_ms: 6.700415\n type: 'test'\n ...\n# Subtest: evaluateCodeChangeAcceptance fails while the plan is still open\nok 29 - evaluateCodeChangeAcceptance fails while the plan is still open\n ---\n duration_ms: 2.450987\n type: 'test'\n ...\n# Subtest: Plans without repository paths are not invented\nok 30 - Plans without repository paths are not invented\n ---\n duration_ms: 1.209589\n type: 'test'\n ...\n# Subtest: Non-repository paths are ignored instead of aborting code-change planning\nok 31 - Non-repository paths are ignored instead of aborting code-change planning\n ---\n duration_ms: 1.577214\n type: 'test'\n ...\n# Subtest: Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\nok 32 - Acceptance rejects ungrounded paths, missing provenance and inconsistent verdicts\n ---\n duration_ms: 6.867752\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatch is deterministic and path-bound\nok 33 - createCodeChangeSourcePatch is deterministic and path-bound\n ---\n duration_ms: 6.525621\n type: 'test'\n ...\n# Subtest: applyUnifiedDiffToText creates and modifies files from hunks\nok 34 - applyUnifiedDiffToText creates and modifies files from hunks\n ---\n duration_ms: 0.785959\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch requires approval and is idempotent\nok 35 - applyCodeChangeSourcePatch requires approval and is idempotent\n ---\n duration_ms: 22.951774\n type: 'test'\n ...\n# Subtest: applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\nok 36 - applyCodeChangeSourcePatch preflights diffs and refuses symlink escapes\n ---\n duration_ms: 8.337881\n type: 'test'\n ...\n# Subtest: createCodeChangeSourcePatchSet covers every plan\nok 37 - createCodeChangeSourcePatchSet covers every plan\n ---\n duration_ms: 1.828291\n type: 'test'\n ...\n# Subtest: createCodeChangeReviewPatch is hash-stable and lists grounded paths\nok 38 - createCodeChangeReviewPatch is hash-stable and lists grounded paths\n ---\n duration_ms: 4.22132\n type: 'test'\n ...\n# Subtest: CLI proposes and evaluates a grounded code-change plan through persisted JSON\nok 39 - CLI proposes and evaluates a grounded code-change plan through persisted JSON\n ---\n duration_ms: 2502.286629\n type: 'test'\n ...\n# Subtest: isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\nok 40 - isUsefulCodeChangePath rejects vendored, binary and analysis dump paths\n ---\n duration_ms: 0.384323\n type: 'test'\n ...\n# Subtest: proposeCodeChangePlans skips diagnostics that only name junk paths\nok 41 - proposeCodeChangePlans skips diagnostics that only name junk paths\n ---\n duration_ms: 0.923391\n type: 'test'\n ...\n# Subtest: Published code-change JSON schemas require provenance, risk and rollback\nok 42 - Published code-change JSON schemas require provenance, risk and rollback\n ---\n duration_ms: 3.252129\n type: 'test'\n ...\n# Subtest: participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\nok 43 - participant registry maps stable IDs to Git/A2A identifiers without display-name guessing\n ---\n duration_ms: 42.813306\n type: 'test'\n ...\n# Subtest: participant registry rejects ambiguous external identifiers\nok 44 - participant registry rejects ambiguous external identifiers\n ---\n duration_ms: 0.69938\n type: 'test'\n ...\n# Subtest: communication enrichment preserves runtime identity, source, ticket and epistemic class\nok 45 - communication enrichment preserves runtime identity, source, ticket and epistemic class\n ---\n duration_ms: 55.824642\n type: 'test'\n ...\n# Subtest: communication enrichment corrects one rejected structured response without weakening validation\nok 46 - communication enrichment corrects one rejected structured response without weakening validation\n ---\n duration_ms: 6.699169\n type: 'test'\n ...\n# Subtest: communication prefer-llm fallback is explicit and require-llm rejects\nok 47 - communication prefer-llm fallback is explicit and require-llm rejects\n ---\n duration_ms: 10.495437\n type: 'test'\n ...\n# Subtest: project/<ticket> communication is attributed per human and agent and checked against Git evidence\nok 48 - project/<ticket> communication is attributed per human and agent and checked against Git evidence\n ---\n duration_ms: 169.382039\n type: 'test'\n ...\n# Subtest: governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\nok 49 - governance user-* and ai-* files become typed participant intent without ingesting ticket evidence\n ---\n duration_ms: 13.753574\n type: 'test'\n ...\n# Subtest: unstructured governance participant content is rejected with an owner-specific migration warning\nok 50 - unstructured governance participant content is rejected with an owner-specific migration warning\n ---\n duration_ms: 2.184966\n type: 'test'\n ...\n# Subtest: opposite wording about different explicit files is not treated as an intent conflict\nok 51 - opposite wording about different explicit files is not treated as an intent conflict\n ---\n duration_ms: 4.01347\n type: 'test'\n ...\n# Subtest: missing response owners use explicit role sentinels without inventing participants\nok 52 - missing response owners use explicit role sentinels without inventing participants\n ---\n duration_ms: 7.747825\n type: 'test'\n ...\n# Subtest: communication extractor reports unresolved identity instead of inventing an actor\nok 53 - communication extractor reports unresolved identity instead of inventing an actor\n ---\n duration_ms: 3.301451\n type: 'test'\n ...\n# Subtest: communication extractor ignores generic generated analysis under project/\nok 54 - communication extractor ignores generic generated analysis under project/\n ---\n duration_ms: 6.515334\n type: 'test'\n ...\n# Subtest: configuration converter covers JSON, TOML, Docker and CI workflow declarations\nok 55 - configuration converter covers JSON, TOML, Docker and CI workflow declarations\n ---\n duration_ms: 24.61101\n type: 'test'\n ...\n# Subtest: configuration converter emits a deterministic file aggregate for an empty configuration\nok 56 - configuration converter emits a deterministic file aggregate for an empty configuration\n ---\n duration_ms: 5.345404\n type: 'test'\n ...\n# Subtest: splitLines treats a trailing newline as a terminator, not an extra line\nok 57 - splitLines treats a trailing newline as a terminator, not an extra line\n ---\n duration_ms: 1.721202\n type: 'test'\n ...\n# Subtest: Identical inputs produce no hunks\nok 58 - Identical inputs produce no hunks\n ---\n duration_ms: 0.614422\n type: 'test'\n ...\n# Subtest: A modified line keeps both sides addressable by original line number\nok 59 - A modified line keeps both sides addressable by original line number\n ---\n duration_ms: 0.361535\n type: 'test'\n ...\n# Subtest: Pure insertion and pure deletion are not reported as replacements\nok 60 - Pure insertion and pure deletion are not reported as replacements\n ---\n duration_ms: 0.424901\n type: 'test'\n ...\n# Subtest: Empty-to-content and content-to-empty are handled as block changes\nok 61 - Empty-to-content and content-to-empty are handled as block changes\n ---\n duration_ms: 0.339297\n type: 'test'\n ...\n# Subtest: Context width controls hunk size\nok 62 - Context width controls hunk size\n ---\n duration_ms: 0.286648\n type: 'test'\n ...\n# Subtest: Nearby changes merge into a single hunk\nok 63 - Nearby changes merge into a single hunk\n ---\n duration_ms: 1.129351\n type: 'test'\n ...\n# Subtest: Distant changes stay in separate hunks\nok 64 - Distant changes stay in separate hunks\n ---\n duration_ms: 0.265357\n type: 'test'\n ...\n# Subtest: Oversized inputs fall back to a bounded block replace\nok 65 - Oversized inputs fall back to a bounded block replace\n ---\n duration_ms: 0.69384\n type: 'test'\n ...\n# Subtest: Unified output carries a well formed hunk header\nok 66 - Unified output carries a well formed hunk header\n ---\n duration_ms: 0.671622\n type: 'test'\n ...\n# Subtest: Side-by-side rows pair deletions with insertions\nok 67 - Side-by-side rows pair deletions with insertions\n ---\n duration_ms: 0.330858\n type: 'test'\n ...\n# Subtest: Unbalanced change runs leave one side empty rather than misaligning\nok 68 - Unbalanced change runs leave one side empty rather than misaligning\n ---\n duration_ms: 0.190374\n type: 'test'\n ...\n# Subtest: Renderers escape source markup\nok 69 - Renderers escape source markup\n ---\n duration_ms: 1.1167\n type: 'test'\n ...\n# Subtest: SVG rendering caps rows and reports the remainder\nok 70 - SVG rendering caps rows and reports the remainder\n ---\n duration_ms: 1.795926\n type: 'test'\n ...\n# Subtest: Reality view keys topics by target and records lane presence\nok 71 - Reality view keys topics by target and records lane presence\n ---\n duration_ms: 19.431233\n type: 'test'\n ...\n# Subtest: A topic holding declared and observed records is never reported as planned-only\nok 72 - A topic holding declared and observed records is never reported as planned-only\n ---\n duration_ms: 3.630486\n type: 'test'\n ...\n# Subtest: Reality coverage stays open when a shared path has unrelated capabilities\nok 73 - Reality coverage stays open when a shared path has unrelated capabilities\n ---\n duration_ms: 1.853836\n type: 'test'\n ...\n# Subtest: Shared-path relations do not collapse unrelated files into one topic\nok 74 - Shared-path relations do not collapse unrelated files into one topic\n ---\n duration_ms: 2.975218\n type: 'test'\n ...\n# Subtest: Reality view is deterministic for identical input\nok 75 - Reality view is deterministic for identical input\n ---\n duration_ms: 1.986556\n type: 'test'\n ...\n# Subtest: Reality SVG escapes topic labels\nok 76 - Reality SVG escapes topic labels\n ---\n duration_ms: 1.434425\n type: 'test'\n ...\n# Subtest: graph diff detects changed source identities, additions and SVG-safe labels\nok 77 - graph diff detects changed source identities, additions and SVG-safe labels\n ---\n duration_ms: 17.059667\n type: 'test'\n ...\n# Subtest: graph diff is empty for graphs with identical evidence\nok 78 - graph diff is empty for graphs with identical evidence\n ---\n duration_ms: 1.421934\n type: 'test'\n ...\n# Subtest: file diff emits deterministic unified, SVG and HTML views\nok 79 - file diff emits deterministic unified, SVG and HTML views\n ---\n duration_ms: 1.832308\n type: 'test'\n ...\n# Subtest: intent-vs-reality builds an explainable SVG and Markdown projection\nok 80 - intent-vs-reality builds an explainable SVG and Markdown projection\n ---\n duration_ms: 4.462089\n type: 'test'\n ...\n# Subtest: a targetless declaration is filed under the single module it links to\nok 81 - a targetless declaration is filed under the single module it links to\n ---\n duration_ms: 2.746545\n type: 'test'\n ...\n# Subtest: a declaration touching several modules keeps its own topic\nok 82 - a declaration touching several modules keeps its own topic\n ---\n duration_ms: 2.561579\n type: 'test'\n ...\n# Subtest: semantically aligned configuration topics retain their evidence grade\nok 83 - semantically aligned configuration topics retain their evidence grade\n ---\n duration_ms: 2.587257\n type: 'test'\n ...\n# Subtest: A record claiming line 1 is re-anchored to the line carrying its statement\nok 84 - A record claiming line 1 is re-anchored to the line carrying its statement\n ---\n duration_ms: 51.025911\n type: 'test'\n ...\n# Subtest: An already correct line is kept and not reported as re-anchored\nok 85 - An already correct line is kept and not reported as re-anchored\n ---\n duration_ms: 7.036979\n type: 'test'\n ...\n# Subtest: An empty target is backfilled from the statement text\nok 86 - An empty target is backfilled from the statement text\n ---\n duration_ms: 5.568668\n type: 'test'\n ...\n# Subtest: A target supplied by the model is never overwritten\nok 87 - A target supplied by the model is never overwritten\n ---\n duration_ms: 6.514116\n type: 'test'\n ...\n# Subtest: An unclassified action and modality are derived from the statement\nok 88 - An unclassified action and modality are derived from the statement\n ---\n duration_ms: 3.8372\n type: 'test'\n ...\n# Subtest: A classified action from the model wins over the heuristic\nok 89 - A classified action from the model wins over the heuristic\n ---\n duration_ms: 3.501148\n type: 'test'\n ...\n# Subtest: An action that stays unclassifiable is reported as a missing field\nok 90 - An action that stays unclassifiable is reported as a missing field\n ---\n duration_ms: 3.11411\n type: 'test'\n ...\n# Subtest: A placeholder object is treated as a gap, not as content\nok 91 - A placeholder object is treated as a gap, not as content\n ---\n duration_ms: 5.066897\n type: 'test'\n ...\n# Subtest: Every repair is attributable through epistemic.basis\nok 92 - Every repair is attributable through epistemic.basis\n ---\n duration_ms: 4.50343\n type: 'test'\n ...\n# Subtest: deterministic documentation baseline records headings, code blocks and explicit references\nok 93 - deterministic documentation baseline records headings, code blocks and explicit references\n ---\n duration_ms: 19.116796\n type: 'test'\n ...\n# Subtest: deterministic documentation preserves Polish prohibition polarity\nok 94 - deterministic documentation preserves Polish prohibition polarity\n ---\n duration_ms: 5.823547\n type: 'test'\n ...\n# Subtest: AST cache is incremental by path and source content hash\nok 95 - AST cache is incremental by path and source content hash\n ---\n duration_ms: 32.037932\n type: 'test'\n ...\n# Subtest: AST cache rejects corrupt entries and recomputes authoritative records\nok 96 - AST cache rejects corrupt entries and recomputes authoritative records\n ---\n duration_ms: 10.053204\n type: 'test'\n ...\n# Subtest: AST cache can be bypassed without changing extraction output\nok 97 - AST cache can be bypassed without changing extraction output\n ---\n duration_ms: 5.477589\n type: 'test'\n ...\n# Subtest: successful external AST adapter is skipped on a warm manifest hit\nok 98 - successful external AST adapter is skipped on a warm manifest hit\n ---\n duration_ms: 61.236136\n type: 'test'\n ...\n# Subtest: documentation chunks cache independently while provider calls remain live\nok 99 - documentation chunks cache independently while provider calls remain live\n ---\n duration_ms: 49.74158\n type: 'test'\n ...\n# Subtest: generated analysis replaces its source root with a stable token\nok 100 - generated analysis replaces its source root with a stable token\n ---\n duration_ms: 55.230582\n type: 'test'\n ...\n# Subtest: generated analysis root normalization refuses the filesystem root\nok 101 - generated analysis root normalization refuses the filesystem root\n ---\n duration_ms: 56.49376\n type: 'test'\n ...\n# Subtest: generated analysis rejects references to untracked input\nok 102 - generated analysis rejects references to untracked input\n ---\n duration_ms: 79.960895\n type: 'test'\n ...\n# Subtest: generated analysis accepts outputs independent of untracked input\nok 103 - generated analysis accepts outputs independent of untracked input\n ---\n duration_ms: 68.70097\n type: 'test'\n ...\n# Subtest: generated analysis accepts an untracked filename already quoted by tracked evidence\nok 104 - generated analysis accepts an untracked filename already quoted by tracked evidence\n ---\n duration_ms: 70.261314\n type: 'test'\n ...\n# Subtest: generated analysis rejects temporary paths and unavailable validators\nok 105 - generated analysis rejects temporary paths and unavailable validators\n ---\n duration_ms: 60.354863\n type: 'test'\n ...\n# Subtest: generated README metadata is synchronized from package.json and stays idempotent\nok 106 - generated README metadata is synchronized from package.json and stays idempotent\n ---\n duration_ms: 78.424858\n type: 'test'\n ...\n# Subtest: generated README synchronization fails closed when the template drifts\nok 107 - generated README synchronization fails closed when the template drifts\n ---\n duration_ms: 37.269712\n type: 'test'\n ...\n# Subtest: generated README synchronization rejects output outside the project root\nok 108 - generated README synchronization rejects output outside the project root\n ---\n duration_ms: 40.393568\n type: 'test'\n ...\n# Subtest: Git extractor emits one record per requested commit\nok 109 - Git extractor emits one record per requested commit\n ---\n duration_ms: 208.991485\n type: 'test'\n ...\n# Subtest: An empty repository degrades to a warning instead of failing the run\nok 110 - An empty repository degrades to a warning instead of failing the run\n ---\n duration_ms: 13.055836\n type: 'test'\n ...\n# Subtest: versioned gold dataset reports perfect offline quality and repeated-run stability\nok 111 - versioned gold dataset reports perfect offline quality and repeated-run stability\n ---\n duration_ms: 178.434202\n type: 'test'\n ...\n# Subtest: gold linking reports exact-target and capability-topic quality separately\nok 112 - gold linking reports exact-target and capability-topic quality separately\n ---\n duration_ms: 77.448091\n type: 'test'\n ...\n# Subtest: gold capability-topic support is large enough to detect a floor regression\nok 113 - gold capability-topic support is large enough to detect a floor regression\n ---\n duration_ms: 87.650775\n type: 'test'\n ...\n# Subtest: gold known gaps are measured and kept out of precision and recall\nok 114 - gold known gaps are measured and kept out of precision and recall\n ---\n duration_ms: 86.357938\n type: 'test'\n ...\n# Subtest: gold reports cross-language positives and hard negatives as a separate cohort\nok 115 - gold reports cross-language positives and hard negatives as a separate cohort\n ---\n duration_ms: 88.263761\n type: 'test'\n ...\n# Subtest: gold diagnostics separate a false DONE claim from an evidenced one\nok 116 - gold diagnostics separate a false DONE claim from an evidenced one\n ---\n duration_ms: 115.859524\n type: 'test'\n ...\n# Subtest: gold v1 stays evaluable after the v2 contract extension\nok 117 - gold v1 stays evaluable after the v2 contract extension\n ---\n duration_ms: 57.195328\n type: 'test'\n ...\n# Subtest: gold loader rejects unsupported dataset versions\nok 118 - gold loader rejects unsupported dataset versions\n ---\n duration_ms: 0.615741\n type: 'test'\n ...\n# Subtest: gold evaluator rejects unknown linking cohorts\nok 119 - gold evaluator rejects unknown linking cohorts\n ---\n duration_ms: 2.053517\n type: 'test'\n ...\n# Subtest: gold v2 must declare diagnostics coverage\nok 120 - gold v2 must declare diagnostics coverage\n ---\n duration_ms: 2.828194\n type: 'test'\n ...\n# Subtest: published gold schema matches the runtime contract\nok 121 - published gold schema matches the runtime contract\n ---\n duration_ms: 4.429943\n type: 'test'\n ...\n# Subtest: gold evaluator rejects fixture files outside its temporary workspace\nok 122 - gold evaluator rejects fixture files outside its temporary workspace\n ---\n duration_ms: 16.438552\n type: 'test'\n ...\n# Subtest: Linker connects plan, Git claim and AST fact\nok 123 - Linker connects plan, Git claim and AST fact\n ---\n duration_ms: 16.311255\n type: 'test'\n ...\n# Subtest: Linker connects prose intent to a module through three grounded capability topics\nok 124 - Linker connects prose intent to a module through three grounded capability topics\n ---\n duration_ms: 1.86707\n type: 'test'\n ...\n# Subtest: Linker does not connect a module on one generic topic alone\nok 125 - Linker does not connect a module on one generic topic alone\n ---\n duration_ms: 0.959537\n type: 'test'\n ...\n# Subtest: An existing target path does not prove an unrelated capability\nok 126 - An existing target path does not prove an unrelated capability\n ---\n duration_ms: 2.146738\n type: 'test'\n ...\n# Subtest: An existing target path plus an AST capability proves implementation\nok 127 - An existing target path plus an AST capability proves implementation\n ---\n duration_ms: 1.393026\n type: 'test'\n ...\n# Subtest: Diagnostics distinguish descriptive documentation from prescriptive requirements\nok 128 - Diagnostics distinguish descriptive documentation from prescriptive requirements\n ---\n duration_ms: 1.838234\n type: 'test'\n ...\n# Subtest: A changelog entry naming an extracted documentation file has release evidence\nok 129 - A changelog entry naming an extracted documentation file has release evidence\n ---\n duration_ms: 1.289025\n type: 'test'\n ...\n# Subtest: Diagnostics ignore non-actionable changelog mechanics but retain release claims\nok 130 - Diagnostics ignore non-actionable changelog mechanics but retain release claims\n ---\n duration_ms: 4.907215\n type: 'test'\n ...\n# Subtest: Grounded conclusion and TODO proposal contracts accept traceable values\nok 131 - Grounded conclusion and TODO proposal contracts accept traceable values\n ---\n duration_ms: 7.362316\n type: 'test'\n ...\n# Subtest: Stable IDs ignore ordering noise but change with semantic content\nok 132 - Stable IDs ignore ordering noise but change with semantic content\n ---\n duration_ms: 0.776994\n type: 'test'\n ...\n# Subtest: Validators reject ungrounded citations and stale semantic IDs\nok 133 - Validators reject ungrounded citations and stale semantic IDs\n ---\n duration_ms: 2.605247\n type: 'test'\n ...\n# Subtest: Generation metadata exposes LLM failures instead of silently masking them\nok 134 - Generation metadata exposes LLM failures instead of silently masking them\n ---\n duration_ms: 1.242535\n type: 'test'\n ...\n# Subtest: TODO proposal collections enforce dependency integrity\nok 135 - TODO proposal collections enforce dependency integrity\n ---\n duration_ms: 1.25968\n type: 'test'\n ...\n# Subtest: Published JSON schemas identify all grounded output contract versions\nok 136 - Published JSON schemas identify all grounded output contract versions\n ---\n duration_ms: 7.932424\n type: 'test'\n ...\n# Subtest: Blank lines and comments produce no rules\nok 137 - Blank lines and comments produce no rules\n ---\n duration_ms: 1.470632\n type: 'test'\n ...\n# Subtest: A pattern without a slash matches at any depth\nok 138 - A pattern without a slash matches at any depth\n ---\n duration_ms: 0.498243\n type: 'test'\n ...\n# Subtest: A leading slash anchors the pattern to the root\nok 139 - A leading slash anchors the pattern to the root\n ---\n duration_ms: 0.189613\n type: 'test'\n ...\n# Subtest: A trailing slash restricts the rule to directories\nok 140 - A trailing slash restricts the rule to directories\n ---\n duration_ms: 0.183035\n type: 'test'\n ...\n# Subtest: Wildcards respect path separators\nok 141 - Wildcards respect path separators\n ---\n duration_ms: 0.488332\n type: 'test'\n ...\n# Subtest: Every dot-directory is excluded by `.*/`\nok 142 - Every dot-directory is excluded by `.*/`\n ---\n duration_ms: 0.249175\n type: 'test'\n ...\n# Subtest: Negation re-includes a previously excluded path\nok 143 - Negation re-includes a previously excluded path\n ---\n duration_ms: 0.310822\n type: 'test'\n ...\n# Subtest: Negation cannot resurrect a file inside an excluded directory\nok 144 - Negation cannot resurrect a file inside an excluded directory\n ---\n duration_ms: 0.193751\n type: 'test'\n ...\n# Subtest: Last matching rule wins\nok 145 - Last matching rule wins\n ---\n duration_ms: 0.428899\n type: 'test'\n ...\n# Subtest: Character classes are supported\nok 146 - Character classes are supported\n ---\n duration_ms: 0.517494\n type: 'test'\n ...\n# Subtest: Paths are normalised before matching\nok 147 - Paths are normalised before matching\n ---\n duration_ms: 0.305464\n type: 'test'\n ...\n# Subtest: loadIgnoreMatcher merges the three ignore files and skips missing ones\nok 148 - loadIgnoreMatcher merges the three ignore files and skips missing ones\n ---\n duration_ms: 15.360004\n type: 'test'\n ...\n# Subtest: A repository without ignore files excludes nothing\nok 149 - A repository without ignore files excludes nothing\n ---\n duration_ms: 1.118205\n type: 'test'\n ...\n# Subtest: The shipped .intentignore excludes build output but keeps sources\nok 150 - The shipped .intentignore excludes build output but keeps sources\n ---\n duration_ms: 2.221497\n type: 'test'\n ...\n# Subtest: resolveGlobs permits one explicit .intent report without recursively scanning generated runs\nok 151 - resolveGlobs permits one explicit .intent report without recursively scanning generated runs\n ---\n duration_ms: 9.340646\n type: 'test'\n ...\n# Subtest: Two unrelated AST facts sharing only a file are not linked\nok 152 - Two unrelated AST facts sharing only a file are not linked\n ---\n duration_ms: 13.063091\n type: 'test'\n ...\n# Subtest: AST facts sharing a symbol are still linked despite the path rule\nok 153 - AST facts sharing a symbol are still linked despite the path rule\n ---\n duration_ms: 1.869002\n type: 'test'\n ...\n# Subtest: AST details sharing only a file and generic tokens do not create a quadratic subgraph\nok 154 - AST details sharing only a file and generic tokens do not create a quadratic subgraph\n ---\n duration_ms: 3.748139\n type: 'test'\n ...\n# Subtest: A file-level plan links once to the AST module aggregate instead of every detail\nok 155 - A file-level plan links once to the AST module aggregate instead of every detail\n ---\n duration_ms: 5.105415\n type: 'test'\n ...\n# Subtest: A shared path still links a plan to an AST fact\nok 156 - A shared path still links a plan to an AST fact\n ---\n duration_ms: 0.871933\n type: 'test'\n ...\n# Subtest: A bare filename links to a module only when its repository path is unique\nok 157 - A bare filename links to a module only when its repository path is unique\n ---\n duration_ms: 1.030049\n type: 'test'\n ...\n# Subtest: A bare filename refuses ambiguous module paths\nok 158 - A bare filename refuses ambiguous module paths\n ---\n duration_ms: 0.676256\n type: 'test'\n ...\n# Subtest: Relations that carry a conclusion survive alongside suppressed noise\nok 159 - Relations that carry a conclusion survive alongside suppressed noise\n ---\n duration_ms: 2.142349\n type: 'test'\n ...\n# Subtest: Pair ordering stays deterministic across rebuilds\nok 160 - Pair ordering stays deterministic across rebuilds\n ---\n duration_ms: 2.95758\n type: 'test'\n ...\n# Subtest: Two configuration declarations sharing only a key name are not linked\nok 161 - Two configuration declarations sharing only a key name are not linked\n ---\n duration_ms: 0.957038\n type: 'test'\n ...\n# Subtest: A shared ticket still connects two configuration declarations\nok 162 - A shared ticket still connects two configuration declarations\n ---\n duration_ms: 0.521796\n type: 'test'\n ...\n# Subtest: Configuration still links to documentation that describes it\nok 163 - Configuration still links to documentation that describes it\n ---\n duration_ms: 0.705998\n type: 'test'\n ...\n# Subtest: Configuration file aggregate is the file-level target for an explicit documentation path\nok 164 - Configuration file aggregate is the file-level target for an explicit documentation path\n ---\n duration_ms: 0.566322\n type: 'test'\n ...\n# Subtest: Configuration aggregates do not create broad capability-topic links\nok 165 - Configuration aggregates do not create broad capability-topic links\n ---\n duration_ms: 0.336685\n type: 'test'\n ...\n# Subtest: a full six-stage live run passes and reports every stage\nok 166 - a full six-stage live run passes and reports every stage\n ---\n duration_ms: 3.400207\n type: 'test'\n ...\n# Subtest: a stage that silently fell back to deterministic fails the check\nok 167 - a stage that silently fell back to deterministic fails the check\n ---\n duration_ms: 0.480476\n type: 'test'\n ...\n# Subtest: a missing stage cannot pass as covered\nok 168 - a missing stage cannot pass as covered\n ---\n duration_ms: 0.266115\n type: 'test'\n ...\n# Subtest: per-stage and total budgets are enforced separately\nok 169 - per-stage and total budgets are enforced separately\n ---\n duration_ms: 0.478901\n type: 'test'\n ...\n# Subtest: live request timeout reaches the stage budget without shortening a larger override\nok 170 - live request timeout reaches the stage budget without shortening a larger override\n ---\n duration_ms: 0.161498\n type: 'test'\n ...\n# Subtest: a stage reason is recorded with provider text redacted\nok 171 - a stage reason is recorded with provider text redacted\n ---\n duration_ms: 0.687637\n type: 'test'\n ...\n# Subtest: history records the trend without gating on it\nok 172 - history records the trend without gating on it\n ---\n duration_ms: 0.466782\n type: 'test'\n ...\n# Subtest: recorded audit history includes the current run exactly once\nok 173 - recorded audit history includes the current run exactly once\n ---\n duration_ms: 0.68664\n type: 'test'\n ...\n# Subtest: history stays chronological, bounded and free of duplicate runs\nok 174 - history stays chronological, bounded and free of duplicate runs\n ---\n duration_ms: 10.591798\n type: 'test'\n ...\n# Subtest: an audit converts to exactly the redacted fields history keeps\nok 175 - an audit converts to exactly the redacted fields history keeps\n ---\n duration_ms: 1.312886\n type: 'test'\n ...\n# Subtest: an empty history summarizes without pretending to have measured anything\nok 176 - an empty history summarizes without pretending to have measured anything\n ---\n duration_ms: 0.233883\n type: 'test'\n ...\n# Subtest: a batched run is measured per record, not per request\nok 177 - a batched run is measured per record, not per request\n ---\n duration_ms: 4.266202\n type: 'test'\n ...\n# Subtest: a model whose response the validator rejected is not counted as enriched\nok 178 - a model whose response the validator rejected is not counted as enriched\n ---\n duration_ms: 0.320007\n type: 'test'\n ...\n# Subtest: a failed model is a comparison result rather than a crash\nok 179 - a failed model is a comparison result rather than a crash\n ---\n duration_ms: 1.113558\n type: 'test'\n ...\n# Subtest: agreement compares only records both models enriched\nok 180 - agreement compares only records both models enriched\n ---\n duration_ms: 0.342102\n type: 'test'\n ...\n# Subtest: agreement is absent rather than perfect when nothing overlaps\nok 181 - agreement is absent rather than perfect when nothing overlaps\n ---\n duration_ms: 0.570713\n type: 'test'\n ...\n# Subtest: the rendered comparison names the cheapest and fastest passing model\nok 182 - the rendered comparison names the cheapest and fastest passing model\n ---\n duration_ms: 0.293888\n type: 'test'\n ...\n# Subtest: Markdown extractor separates TODO plans and changelog claims\nok 183 - Markdown extractor separates TODO plans and changelog claims\n ---\n duration_ms: 19.681114\n type: 'test'\n ...\n# Subtest: Markdown extractor preserves indented continuation lines and their source range\nok 184 - Markdown extractor preserves indented continuation lines and their source range\n ---\n duration_ms: 4.638224\n type: 'test'\n ...\n# Subtest: TODO bare filenames inherit an existing directory from the heading scope\nok 185 - TODO bare filenames inherit an existing directory from the heading scope\n ---\n duration_ms: 3.269558\n type: 'test'\n ...\n# Subtest: TODO resolves a bare filename only when its repository basename is unique\nok 186 - TODO resolves a bare filename only when its repository basename is unique\n ---\n duration_ms: 3.480799\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG resolve the same bare filename to one repository path\nok 187 - TODO and CHANGELOG resolve the same bare filename to one repository path\n ---\n duration_ms: 5.255302\n type: 'test'\n ...\n# Subtest: CHANGELOG keeps an ambiguous bare filename unresolved\nok 188 - CHANGELOG keeps an ambiguous bare filename unresolved\n ---\n duration_ms: 2.541252\n type: 'test'\n ...\n# Subtest: Markdown path resolution drops paths and heading scopes outside the repository\nok 189 - Markdown path resolution drops paths and heading scopes outside the repository\n ---\n duration_ms: 1.485173\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\nok 190 - TODO and CHANGELOG receive audited LLM enrichment without changing structural facts\n ---\n duration_ms: 29.826445\n type: 'test'\n ...\n# Subtest: Markdown enrichment corrects one rejected response and audits both attempts\nok 191 - Markdown enrichment corrects one rejected response and audits both attempts\n ---\n duration_ms: 4.841234\n type: 'test'\n ...\n# Subtest: large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\nok 192 - large Markdown enrichment uses bounded concurrency and keeps provider audits ordered\n ---\n duration_ms: 59.491613\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG LLM fallback and require mode are explicit\nok 193 - TODO and CHANGELOG LLM fallback and require mode are explicit\n ---\n duration_ms: 5.765547\n type: 'test'\n ...\n# Subtest: TODO and CHANGELOG reject structurally invalid LLM enrichments\nok 194 - TODO and CHANGELOG reject structurally invalid LLM enrichments\n ---\n duration_ms: 4.748193\n type: 'test'\n ...\n# Subtest: a truncated batch is split and every record keeps its own response provenance\nok 195 - a truncated batch is split and every record keeps its own response provenance\n ---\n duration_ms: 5.712745\n type: 'test'\n ...\n# Subtest: a malformed batch response splits instead of failing the whole stage\nok 196 - a malformed batch response splits instead of failing the whole stage\n ---\n duration_ms: 4.76502\n type: 'test'\n ...\n# Subtest: MCP 2026 profile is stateless and exposes discovery plus complete results\nok 197 - MCP 2026 profile is stateless and exposes discovery plus complete results\n ---\n duration_ms: 1.863859\n type: 'test'\n ...\n# Subtest: MCP 2026 rejects missing metadata and unsupported versions with protocol errors\nok 198 - MCP 2026 rejects missing metadata and unsupported versions with protocol errors\n ---\n duration_ms: 0.668179\n type: 'test'\n ...\n# Subtest: MCP legacy profile negotiates 2025-11-25 and requires initialize\nok 199 - MCP legacy profile negotiates 2025-11-25 and requires initialize\n ---\n duration_ms: 0.392681\n type: 'test'\n ...\n# Subtest: An LLM record is marked as inference and keeps runtime-owned provenance\nok 200 - An LLM record is marked as inference and keeps runtime-owned provenance\n ---\n duration_ms: 51.091491\n type: 'test'\n ...\n# Subtest: NL extraction corrects one rejected structured response and audits both attempts\nok 201 - NL extraction corrects one rejected structured response and audits both attempts\n ---\n duration_ms: 8.587963\n type: 'test'\n ...\n# Subtest: Confidence must satisfy the provider schema instead of being silently clamped\nok 202 - Confidence must satisfy the provider schema instead of being silently clamped\n ---\n duration_ms: 16.121062\n type: 'test'\n ...\n# Subtest: Source lines are clamped to the real file\nok 203 - Source lines are clamped to the real file\n ---\n duration_ms: 6.09681\n type: 'test'\n ...\n# Subtest: A placeholder object is recorded as a missing field, not as content\nok 204 - A placeholder object is recorded as a missing field, not as content\n ---\n duration_ms: 31.306295\n type: 'test'\n ...\n# Subtest: A real object is kept verbatim and reports no missing field\nok 205 - A real object is kept verbatim and reports no missing field\n ---\n duration_ms: 7.577851\n type: 'test'\n ...\n# Subtest: The explicit unknown action is reported as a missing field\nok 206 - The explicit unknown action is reported as a missing field\n ---\n duration_ms: 6.952579\n type: 'test'\n ...\n# Subtest: Both gaps are reported together\nok 207 - Both gaps are reported together\n ---\n duration_ms: 2.763589\n type: 'test'\n ...\n# Subtest: Out-of-vocabulary enums are rejected instead of changing the provider intent\nok 208 - Out-of-vocabulary enums are rejected instead of changing the provider intent\n ---\n duration_ms: 16.185404\n type: 'test'\n ...\n# Subtest: Rejected NL output keeps provider metadata in the failed audit\nok 209 - Rejected NL output keeps provider metadata in the failed audit\n ---\n duration_ms: 8.156053\n type: 'test'\n ...\n# Subtest: The documented confidence hierarchy holds across LLM extractors\nok 210 - The documented confidence hierarchy holds across LLM extractors\n ---\n duration_ms: 7.207435\n type: 'test'\n ...\n# Subtest: NL extractor produces deterministic non-LLM records\nok 211 - NL extractor produces deterministic non-LLM records\n ---\n duration_ms: 10.390925\n type: 'test'\n ...\n# Subtest: NL public extraction boundary names a missing sourcePath before path resolution\nok 212 - NL public extraction boundary names a missing sourcePath before path resolution\n ---\n duration_ms: 0.807538\n type: 'test'\n ...\n# Subtest: deterministic NL fallback skips Markdown headings and recognizes comparison intent\nok 213 - deterministic NL fallback skips Markdown headings and recognizes comparison intent\n ---\n duration_ms: 2.695106\n type: 'test'\n ...\n# Subtest: path extraction rejects lowercase prose alternations without losing repository paths\nok 214 - path extraction rejects lowercase prose alternations without losing repository paths\n ---\n duration_ms: 0.860091\n type: 'test'\n ...\n# Subtest: path extraction rejects dotted DSL fields but keeps known file extensions\nok 215 - path extraction rejects dotted DSL fields but keeps known file extensions\n ---\n duration_ms: 0.221942\n type: 'test'\n ...\n# Subtest: detectModality ignores parenthetical labels and bare adjectives\nok 216 - detectModality ignores parenthetical labels and bare adjectives\n ---\n duration_ms: 0.371034\n type: 'test'\n ...\n# Subtest: detectModality reads prohibitions and periphrastic obligation as requirements\nok 217 - detectModality reads prohibitions and periphrastic obligation as requirements\n ---\n duration_ms: 0.824303\n type: 'test'\n ...\n# Subtest: detectPolarity does not treat without-complements as sentence negation\nok 218 - detectPolarity does not treat without-complements as sentence negation\n ---\n duration_ms: 0.17564\n type: 'test'\n ...\n# Subtest: path extraction rejects HTTP routes, host paths and parent traversal\nok 219 - path extraction rejects HTTP routes, host paths and parent traversal\n ---\n duration_ms: 0.371191\n type: 'test'\n ...\n# Subtest: symbol extraction rejects hostnames without losing qualified code symbols\nok 220 - symbol extraction rejects hostnames without losing qualified code symbols\n ---\n duration_ms: 0.717701\n type: 'test'\n ...\n# Subtest: symbol extraction separates repository files and all-caps prose from code identifiers\nok 221 - symbol extraction separates repository files and all-caps prose from code identifiers\n ---\n duration_ms: 0.531449\n type: 'test'\n ...\n# Subtest: topic keywords normalize paths, camelCase and documentation word forms\nok 222 - topic keywords normalize paths, camelCase and documentation word forms\n ---\n duration_ms: 0.557194\n type: 'test'\n ...\n# Subtest: NL LLM extraction emits audited provenance and bounded DSL records\nok 223 - NL LLM extraction emits audited provenance and bounded DSL records\n ---\n duration_ms: 55.760113\n type: 'test'\n ...\n# Subtest: NL LLM failure is explicit when deterministic fallback is used\nok 224 - NL LLM failure is explicit when deterministic fallback is used\n ---\n duration_ms: 4.75006\n type: 'test'\n ...\n# Subtest: require-llm rejects instead of silently falling back\nok 225 - require-llm rejects instead of silently falling back\n ---\n duration_ms: 0.401417\n type: 'test'\n ...\n# Subtest: OpenRouter client parses structured JSON without exposing key\nok 226 - OpenRouter client parses structured JSON without exposing key\n ---\n duration_ms: 31.088675\n type: 'test'\n ...\n# Subtest: OpenRouter client preserves metadata when runtime rejects structured output\nok 227 - OpenRouter client preserves metadata when runtime rejects structured output\n ---\n duration_ms: 4.977532\n type: 'test'\n ...\n# Subtest: OpenRouter client lists available models after an invalid model ID\nok 228 - OpenRouter client lists available models after an invalid model ID\n ---\n duration_ms: 17.693243\n type: 'test'\n ...\n# Subtest: OpenRouter JSON timeout is not repeated as a schema fallback request\nok 229 - OpenRouter JSON timeout is not repeated as a schema fallback request\n ---\n duration_ms: 0.77187\n type: 'test'\n ...\n# Subtest: OpenRouter request obeys a shared pipeline deadline without retrying\nok 230 - OpenRouter request obeys a shared pipeline deadline without retrying\n ---\n duration_ms: 0.999307\n type: 'test'\n ...\n# Subtest: Documentation extractor converts OpenRouter structured output to bounded LLM records\nok 231 - Documentation extractor converts OpenRouter structured output to bounded LLM records\n ---\n duration_ms: 29.455286\n type: 'test'\n ...\n# Subtest: Documentation extractor reports and enforces its chunk budget\nok 232 - Documentation extractor reports and enforces its chunk budget\n ---\n duration_ms: 10.600139\n type: 'test'\n ...\n# Subtest: Documentation extractor corrects one rejected chunk and audits both responses\nok 233 - Documentation extractor corrects one rejected chunk and audits both responses\n ---\n duration_ms: 5.462681\n type: 'test'\n ...\n# Subtest: Documentation extractor does not spend its correction retry on a timeout\nok 234 - Documentation extractor does not spend its correction retry on a timeout\n ---\n duration_ms: 4.769507\n type: 'test'\n ...\n# Subtest: Documentation extractor exposes an audited configuration failure\nok 235 - Documentation extractor exposes an audited configuration failure\n ---\n duration_ms: 1.008426\n type: 'test'\n ...\n# Subtest: Documentation extractor uses bounded concurrent OpenRouter requests\nok 236 - Documentation extractor uses bounded concurrent OpenRouter requests\n ---\n duration_ms: 43.640863\n type: 'test'\n ...\n# Subtest: LLM summarizer receives graph data and preserves grounded record citations\nok 237 - LLM summarizer receives graph data and preserves grounded record citations\n ---\n duration_ms: 9.249042\n type: 'test'\n ...\n# Subtest: LLM summarizer validates provider fields before creating semantic IDs\nok 238 - LLM summarizer validates provider fields before creating semantic IDs\n ---\n duration_ms: 8.000478\n type: 'test'\n ...\n# Subtest: LLM summarizer diagnoses a provider that ignores the response envelope\nok 239 - LLM summarizer diagnoses a provider that ignores the response envelope\n ---\n duration_ms: 4.953126\n type: 'test'\n ...\n# Subtest: LLM summarizer rejects diagnostic citations outside the supplied graph\nok 240 - LLM summarizer rejects diagnostic citations outside the supplied graph\n ---\n duration_ms: 6.537866\n type: 'test'\n ...\n# Subtest: LLM summarizer prioritizes documentation over the AST payload budget\nok 241 - LLM summarizer prioritizes documentation over the AST payload budget\n ---\n duration_ms: 212.231366\n type: 'test'\n ...\n# Subtest: deterministic summary presents AST module aggregates instead of low-level calls\nok 242 - deterministic summary presents AST module aggregates instead of low-level calls\n ---\n duration_ms: 3.568471\n type: 'test'\n ...\n# Subtest: The summarizer grounds a fabricated record citation from its diagnostic\nok 243 - The summarizer grounds a fabricated record citation from its diagnostic\n ---\n duration_ms: 3.322774\n type: 'test'\n ...\n# Subtest: The summarizer still fails when the retry fabricates a diagnostic again\nok 244 - The summarizer still fails when the retry fabricates a diagnostic again\n ---\n duration_ms: 4.212772\n type: 'test'\n ...\n# Subtest: variable contracts and operation plans have deterministic content-bound IDs\nok 245 - variable contracts and operation plans have deterministic content-bound IDs\n ---\n duration_ms: 8.536635\n type: 'test'\n ...\n# Subtest: every variable grants Founder read/write authority and immutable variables reject other writers\nok 246 - every variable grants Founder read/write authority and immutable variables reject other writers\n ---\n duration_ms: 1.166723\n type: 'test'\n ...\n# Subtest: plans reject undeclared parameters, actor visibility gaps and payload secrets\nok 247 - plans reject undeclared parameters, actor visibility gaps and payload secrets\n ---\n duration_ms: 1.95067\n type: 'test'\n ...\n# Subtest: safety-sensitive commands require a Founder decision, a human boundary and verification\nok 248 - safety-sensitive commands require a Founder decision, a human boundary and verification\n ---\n duration_ms: 1.434\n type: 'test'\n ...\n# Subtest: plan hash detects semantic tampering\nok 249 - plan hash detects semantic tampering\n ---\n duration_ms: 1.926311\n type: 'test'\n ...\n# Subtest: compiler emits the exact governed envelope without an execution surface\nok 250 - compiler emits the exact governed envelope without an execution surface\n ---\n duration_ms: 1.668421\n type: 'test'\n ...\n# Subtest: runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\nok 251 - runtime draft boundaries ignore lifecycle and identity fields injected by untyped callers\n ---\n duration_ms: 0.831727\n type: 'test'\n ...\n# Subtest: compiler fails closed on extra, stale, wrong-source and wrong-type bindings\nok 252 - compiler fails closed on extra, stale, wrong-source and wrong-type bindings\n ---\n duration_ms: 1.831983\n type: 'test'\n ...\n# Subtest: file boundary writes one private envelope atomically and refuses overwrite\nok 253 - file boundary writes one private envelope atomically and refuses overwrite\n ---\n duration_ms: 20.535351\n type: 'test'\n ...\n# Subtest: Offline pipeline writes a complete run\nok 254 - Offline pipeline writes a complete run\n ---\n duration_ms: 246.331443\n type: 'test'\n ...\n# Subtest: Pipeline persists synthesis, validation and review patch, then registers approval receipt\nok 255 - Pipeline persists synthesis, validation and review patch, then registers approval receipt\n ---\n duration_ms: 67.202194\n type: 'test'\n ...\n# Subtest: Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\nok 256 - Pipeline integrates multi-participant communication into graph, diagnostics, reality and run artifacts\n ---\n duration_ms: 59.453988\n type: 'test'\n ...\n# Subtest: Pipeline require-llm task synthesis failure is audited and never publishes latest\nok 257 - Pipeline require-llm task synthesis failure is audited and never publishes latest\n ---\n duration_ms: 16.283976\n type: 'test'\n ...\n# Subtest: Pipeline persists an audited failure when communication require-llm cannot run\nok 258 - Pipeline persists an audited failure when communication require-llm cannot run\n ---\n duration_ms: 20.47493\n type: 'test'\n ...\n# Subtest: Pipeline persists communication stage failure and does not publish latest\nok 259 - Pipeline persists communication stage failure and does not publish latest\n ---\n duration_ms: 14.665912\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when NL require-llm aborts\nok 260 - Pipeline persists a failed manifest when NL require-llm aborts\n ---\n duration_ms: 10.440662\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest when Markdown require-llm aborts\nok 261 - Pipeline persists a failed manifest when Markdown require-llm aborts\n ---\n duration_ms: 17.297888\n type: 'test'\n ...\n# Subtest: Pipeline persists a failed manifest for an unexpected summary failure\nok 262 - Pipeline persists a failed manifest for an unexpected summary failure\n ---\n duration_ms: 17.350083\n type: 'test'\n ...\n# Subtest: Proposal validation reports existing TODO duplicates and orders dependencies before priority\nok 263 - Proposal validation reports existing TODO duplicates and orders dependencies before priority\n ---\n duration_ms: 26.224678\n type: 'test'\n ...\n# Subtest: Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\nok 264 - Proposal validation rejects dependency cycles and whitespace-only criterion duplicates\n ---\n duration_ms: 3.465658\n type: 'test'\n ...\n# Subtest: Python package executes the local TypeScript reality runtime without a server\nok 265 - Python package executes the local TypeScript reality runtime without a server\n ---\n duration_ms: 2253.194748\n type: 'test'\n ...\n# Subtest: Runtime validator enforces the complete Intent DSL enum and object contract\nok 266 - Runtime validator enforces the complete Intent DSL enum and object contract\n ---\n duration_ms: 8.202176\n type: 'test'\n ...\n# Subtest: Linker and remote action boundary reject malformed records before graph construction\nok 267 - Linker and remote action boundary reject malformed records before graph construction\n ---\n duration_ms: 24.226056\n type: 'test'\n ...\n# Subtest: Graph validator rejects invalid relations and inconsistent statistics\nok 268 - Graph validator rejects invalid relations and inconsistent statistics\n ---\n duration_ms: 5.197137\n type: 'test'\n ...\n# [t2c:a2a] listening on 127.0.0.1:33391\n# Subtest: diff UI and TypeScript/Python SDKs use the live backend runtime\nok 269 - diff UI and TypeScript/Python SDKs use the live backend runtime\n ---\n duration_ms: 261.606224\n type: 'test'\n ...\n# Subtest: MCP/A2A action boundary rejects traversal and symlink escapes\nok 270 - MCP/A2A action boundary rejects traversal and symlink escapes\n ---\n duration_ms: 34.084228\n type: 'test'\n ...\n# Subtest: bounded retrieval cannot create a relation until a grounded reranker accepts it\nok 271 - bounded retrieval cannot create a relation until a grounded reranker accepts it\n ---\n duration_ms: 23.585772\n type: 'test'\n ...\n# Subtest: reranker fails closed on ungrounded quotes and more than one accepted module\nok 272 - reranker fails closed on ungrounded quotes and more than one accepted module\n ---\n duration_ms: 7.570661\n type: 'test'\n ...\n# Subtest: OpenRouter reranking is required, structured and reusable only through an identity-bound cache\nok 273 - OpenRouter reranking is required, structured and reusable only through an identity-bound cache\n ---\n duration_ms: 91.892511\n type: 'test'\n ...\n# Subtest: published semantic reranker schemas expose the versioned bounded contracts\nok 274 - published semantic reranker schemas expose the versioned bounded contracts\n ---\n duration_ms: 2.010945\n type: 'test'\n ...\n# Subtest: provider response validation diagnoses the exact property without coercion\nok 275 - provider response validation diagnoses the exact property without coercion\n ---\n duration_ms: 0.661055\n type: 'test'\n ...\n# Subtest: one structured contract emits the provider schema and parses the same value\nok 276 - one structured contract emits the provider schema and parses the same value\n ---\n duration_ms: 2.255355\n type: 'test'\n ...\n# Subtest: structured parsing fails closed with the exact response path\nok 277 - structured parsing fails closed with the exact response path\n ---\n duration_ms: 0.867795\n type: 'test'\n ...\n# Subtest: object uniqueness uses canonical JSON identity rather than property order\nok 278 - object uniqueness uses canonical JSON identity rather than property order\n ---\n duration_ms: 0.371224\n type: 'test'\n ...\n# Subtest: a short NL symbol resolves to its only AST owner\nok 279 - a short NL symbol resolves to its only AST owner\n ---\n duration_ms: 15.377856\n type: 'test'\n ...\n# Subtest: an ambiguous short NL symbol does not pretend that either AST owner is selected\nok 280 - an ambiguous short NL symbol does not pretend that either AST owner is selected\n ---\n duration_ms: 4.471802\n type: 'test'\n ...\n# Subtest: an explicit path selects one owner of an otherwise ambiguous symbol\nok 281 - an explicit path selects one owner of an otherwise ambiguous symbol\n ---\n duration_ms: 1.499082\n type: 'test'\n ...\n# Subtest: a qualified symbol selects its exact AST declaration without a path\nok 282 - a qualified symbol selects its exact AST declaration without a path\n ---\n duration_ms: 1.084444\n type: 'test'\n ...\n# Subtest: a symbol and explicit path conflict reports the observed AST location\nok 283 - a symbol and explicit path conflict reports the observed AST location\n ---\n duration_ms: 0.996764\n type: 'test'\n ...\n# Subtest: missingFields diagnostics prescribe a concrete edit for every known gap\nok 284 - missingFields diagnostics prescribe a concrete edit for every known gap\n ---\n duration_ms: 0.72931\n type: 'test'\n ...\n# Subtest: Target normalization canonicalizes paths, symbols and cross-language separators\nok 285 - Target normalization canonicalizes paths, symbols and cross-language separators\n ---\n duration_ms: 2.888074\n type: 'test'\n ...\n# Subtest: Qualified AST symbols align with short plan and documentation targets\nok 286 - Qualified AST symbols align with short plan and documentation targets\n ---\n duration_ms: 26.630405\n type: 'test'\n ...\n# Subtest: Structured task synthesis materializes stable, grounded contracts with a complete audit\nok 287 - Structured task synthesis materializes stable, grounded contracts with a complete audit\n ---\n duration_ms: 65.587885\n type: 'test'\n ...\n# Subtest: blank response-local proposal keys are rejected instead of invented by the runtime\nok 288 - blank response-local proposal keys are rejected instead of invented by the runtime\n ---\n duration_ms: 9.129888\n type: 'test'\n ...\n# Subtest: prefer-llm exposes raw diagnostic actions without claiming semantic task generation\nok 289 - prefer-llm exposes raw diagnostic actions without claiming semantic task generation\n ---\n duration_ms: 1.883861\n type: 'test'\n ...\n# Subtest: communication divergence is grounded in task synthesis without treating agent claims as facts\nok 290 - communication divergence is grounded in task synthesis without treating agent claims as facts\n ---\n duration_ms: 9.879268\n type: 'test'\n ...\n# Subtest: require-llm fails explicitly when task synthesis cannot call the provider\nok 291 - require-llm fails explicitly when task synthesis cannot call the provider\n ---\n duration_ms: 1.012865\n type: 'test'\n ...\n# Subtest: invalid structured LLM citations are rejected or visibly degraded according to mode\nok 292 - invalid structured LLM citations are rejected or visibly degraded according to mode\n ---\n duration_ms: 10.101037\n type: 'test'\n ...\n# Subtest: task synthesis timeout is audited and never retried as a format fallback\nok 293 - task synthesis timeout is audited and never retried as a format fallback\n ---\n duration_ms: 16.120688\n type: 'test'\n ...\n# Subtest: A fabricated record citation is grounded from its cited diagnostic without a retry\nok 294 - A fabricated record citation is grounded from its cited diagnostic without a retry\n ---\n duration_ms: 5.084101\n type: 'test'\n ...\n# Subtest: A fabricated diagnostic still fails after the corrective retry\nok 295 - A fabricated diagnostic still fails after the corrective retry\n ---\n duration_ms: 4.725713\n type: 'test'\n ...\n# Subtest: TensorFlow remains an explicit fallback when the isolated adapter is not installed\nok 296 - TensorFlow remains an explicit fallback when the isolated adapter is not installed\n ---\n duration_ms: 6.864405\n type: 'test'\n ...\n# Subtest: TODO patch rendering is stable, dependency-first and excludes classified duplicates\nok 297 - TODO patch rendering is stable, dependency-first and excludes classified duplicates\n ---\n duration_ms: 22.998463\n type: 'test'\n ...\n# Subtest: empty and duplicate-only results render an explicit no-op patch\nok 298 - empty and duplicate-only results render an explicit no-op patch\n ---\n duration_ms: 2.704325\n type: 'test'\n ...\n# Subtest: apply rejects missing or wrong approval, stale TODO and a tampered patch\nok 299 - apply rejects missing or wrong approval, stale TODO and a tampered patch\n ---\n duration_ms: 19.546566\n type: 'test'\n ...\n# Subtest: approved apply is atomic, receipt-backed and idempotent\nok 300 - approved apply is atomic, receipt-backed and idempotent\n ---\n duration_ms: 30.289843\n type: 'test'\n ...\n# Subtest: service actions execute LLM propose -> render -> approved apply with scoped artifacts\nok 301 - service actions execute LLM propose -> render -> approved apply with scoped artifacts\n ---\n duration_ms: 58.741418\n type: 'test'\n ...\n# Subtest: scanTree prunes ignored directories and records file signatures\nok 302 - scanTree prunes ignored directories and records file signatures\n ---\n duration_ms: 19.888131\n type: 'test'\n ...\n# Subtest: diffSnapshots classifies additions, modifications and removals\nok 303 - diffSnapshots classifies additions, modifications and removals\n ---\n duration_ms: 0.498634\n type: 'test'\n ...\n# Subtest: describeDelta truncates long change lists\nok 304 - describeDelta truncates long change lists\n ---\n duration_ms: 0.168912\n type: 'test'\n ...\n# Subtest: An unchanged tree produces exactly one report and then stays quiet\nok 305 - An unchanged tree produces exactly one report and then stays quiet\n ---\n duration_ms: 5.425216\n type: 'test'\n ...\n# Subtest: Reports are rate limited to one per interval no matter how often files change\nok 306 - Reports are rate limited to one per interval no matter how often files change\n ---\n duration_ms: 73.367872\n type: 'test'\n ...\n# Subtest: A change is reported once the interval has elapsed\nok 307 - A change is reported once the interval has elapsed\n ---\n duration_ms: 5.445187\n type: 'test'\n ...\n# Subtest: Ignored files never trigger a report\nok 308 - Ignored files never trigger a report\n ---\n duration_ms: 5.75999\n type: 'test'\n ...\n# Subtest: A failing report is surfaced and does not stop the watcher\nok 309 - A failing report is surfaced and does not stop the watcher\n ---\n duration_ms: 2.468465\n type: 'test'\n ...\n# Subtest: --no-initial-report waits for a real change\nok 310 - --no-initial-report waits for a real change\n ---\n duration_ms: 3.497512\n type: 'test'\n ...\n# Subtest: Communication changes trigger watch and coalesce under the existing report rate limit\nok 311 - Communication changes trigger watch and coalesce under the existing report rate limit\n ---\n duration_ms: 8.331281\n type: 'test'\n ...\n# Subtest: workflow verifier rejects duplicate top-level YAML keys\nok 312 - workflow verifier rejects duplicate top-level YAML keys\n ---\n duration_ms: 108.911482\n type: 'test'\n ...\n# Subtest: workspace headline trend ignores AST-only topic and source churn\nok 313 - workspace headline trend ignores AST-only topic and source churn\n ---\n duration_ms: 0.948171\n type: 'test'\n ...\n# Subtest: workspace comparison measures origin/main against uncommitted filesystem intent\nok 314 - workspace comparison measures origin/main against uncommitted filesystem intent\n ---\n duration_ms: 246.81654\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 8133.098817\n\n> todo2code@0.5.0 evaluate:gold\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v2/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v2\n\nDataset: `t2c.gold-dataset/v2` · `61191fe8717db205`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 8 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 21 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 18 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 10 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 8 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 14 / 0 / 0 |\n\nDiagnostics cases: **7** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\n\n> todo2code@0.5.0 evaluate:gold:v1\n> npm run build && node dist/src/evaluation/gold-cli.js evaluation/gold/v1/dataset.json --require-perfect\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\n# Gold evaluation: todo2code core semantic benchmark v1\n\nDataset: `t2c.gold-dataset/v1` · `ff2d9908f374da48`\n\n| Scope | Precision | Recall | TP / FP / FN |\n|---|---:|---:|---:|\n| Extraction: nl | 100.0% | 100.0% | 4 / 0 / 0 |\n| Extraction: documentation | 100.0% | 100.0% | 2 / 0 / 0 |\n| Extraction: documentation-deterministic | 100.0% | 100.0% | 0 / 0 / 0 |\n| Extraction: markdown | 100.0% | 100.0% | 3 / 0 / 0 |\n| Extraction: overall | 100.0% | 100.0% | 9 / 0 / 0 |\n| Linking: overall | 100.0% | 100.0% | 7 / 0 / 0 |\n| Linking: exact target | 100.0% | 100.0% | 6 / 0 / 0 |\n| Linking: capability topic | 100.0% | 100.0% | 1 / 0 / 0 |\n| DSL2TODO deduplication | 100.0% | 100.0% | 1 / 0 / 0 |\n| Diagnostics: codes | 100.0% | 100.0% | 0 / 0 / 0 |\n\nDiagnostics cases: **0** (forbidden codes raised: 0).\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task 9cb29036-f81b-4d7d-97ec-efe9812a1699 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:24:25Z] [EXIT] Full Docker verification exited with code 1\n[2026-08-01T09:24:41Z] [EXEC] [provider:codex] compact authoritative Docker gates\nnpm_ci=PASS\nverify=PASS\n duration_ms: 212.620174\n type: 'test'\n ...\n1..314\n# tests 314\n# suites 0\n# pass 307\n# fail 0\n# cancelled 0\n# skipped 7\n# todo 0\n# duration_ms 7286.318175\ngold_v2=PASS\n\nKnown linking gaps: **0/6** relations reached across 6 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/6** expected relations and **0/6** forbidden violations across 7 case(s).\n\nCross-language reranking: **6/6** expected relations and **0/6** forbidden violations across 7 captured case(s); accepted 6, abstained 1.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5e6c88e139a88705 / 5e6c88e139a88705).\ngold_v1=PASS\n\nKnown linking gaps: **0/0** relations reached across 0 documented case(s); excluded from precision and recall.\n\nCross-language linking: **0/0** expected relations and **0/0** forbidden violations across 0 case(s).\n\nCross-language reranking: **0/0** expected relations and **0/0** forbidden violations across 0 captured case(s); accepted 0, abstained 0.\n\nCitation completeness: **100.0%** (14/14).\n\nDeduplication rate: **50.0%** (1/2 proposals).\n\nRepeated-run stability: **PASS** (100.0%; 5f928c74d5a6c8e3 / 5f928c74d5a6c8e3).\nexamples=FAIL:1\n\n> todo2code@0.5.0 examples:check\n> npm run build && bash scripts/examples-check.sh\n\n\n> todo2code@0.5.0 build\n> tsc -p tsconfig.json\n\ndemo: 227 records, 92 relations; communication: 3 blocking, 1 warning\nrejected event: agent is required\nbackend/frontend: strict compilation and HTTP integration passed\nexample failed: Task c842f452-1bb5-4837-b133-c1f2f3ce9eb8 ended in TASK_STATE_FAILED: Configured T2C_ROOT does not exist: /workspace/examples/backend\n[2026-08-01T09:25:28Z] [EXIT] Compact Docker gates exited with code 1\n[2026-08-01T09:30:00Z] [RESULT] [provider:codex] final host and Docker gates\nhost_verify=PASS tests=314 pass=313 skip=1 fail=0\ndocker_verify=PASS tests=314 pass=307 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS gated_precision_recall=100%\nhost_examples=PASS docker_examples=PASS\n[2026-08-01T09:31:00Z] [RESULT] [provider:codex] Governance Hub tracked A/B\nrepository=wellmanifest/new-project commit=72e5f6c9cf91998615e2342f02b2af650be81cea\nbefore_graph=322d2d1ca075a3cdd7060e88dcf3c7e5621f987ba0a5a8b4c3a43824c1e4d4c0\nafter_graph=6ac01af718a3a32c18a98d44b5751bcccc33ad1edb4696a30f59da948563950e\nbefore_conflicting_intent=1 after_conflicting_intent=0\nbefore_planned_not_implemented=31 after_planned_not_implemented=32\nbefore_total_diagnostics=183 after_total_diagnostics=183\ntarget_before=unknown/positive target_after=required/negative\n[2026-08-01T09:32:00Z] [RESULT] [provider:codex] generated analysis refresh\nsource=tracked-file overlay on 1ebad96 (unrelated untracked inputs excluded)\nverification={"filesChecked":19,"untrackedInputsChecked":5,"status":"ok"}\nprefact=skipped\n[2026-08-01T09:40:00Z] [RESULT] [provider:codex] isolated Docker core E2E\nsuite=core result=T2C-E2E-000:PASS tests=318 pass=311 skip=7 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS examples=PASS\n[2026-08-01T09:44:00Z] [RESULT] [provider:codex] isolated Docker full-toolchain E2E\nsuite=full result=T2C-E2E-000:PASS tests=318 pass=318 skip=0 fail=0\ngold_v2=PASS gold_v1=PASS cli_smoke=PASS mcp_smoke=PASS a2a_smoke=PASS\nsdk_examples=PASS languages=5 fingerprint=1b5dbbf867286090\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-014/ai-codex-logs.txt", "path": "ticket-014 / ai-codex-logs.txt", "size": "871B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 existing src/retry.py falsely aligned with a new retry/backoff TODO; 0 plans\n2026-07-31 missing src/retry_backoff.py produced 1 grounded plan and Koru PLF-001\n2026-07-31 Koru false-success root cause: todo2code ticket was not classified as edit work\n2026-07-31 Koru runner fixed to treat todo2code/code-change labels as edit work\n2026-07-31 Koru PLF-002 produced verified branch koru/run-6e596247e153 commit 1809ea5\n2026-07-31 independent pytest and todo2code re-analysis passed; targeted planned gap cleared\n2026-07-31 gold added existing-path negative and implemented-capability positive; 14/14 diagnostic codes\n2026-07-31 Koru replay created PLF-003 for existing src/retry.py; verified commit 55a8b15\n2026-07-31 independent replay: 6 pytest pass, zero target plans, capability_overlap:2\n2026-07-31 weekly/nlp2uri/algitex deterministic regressions succeeded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-007/ai-codex-logs.txt", "path": "ticket-007 / ai-codex-logs.txt", "size": "423B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-007 initialized\n- selected the first open P1 readiness gap\n- implementation files remain outside project/ticket-007\n- no human participant file or registry entry created\n2026-07-31 implementation completed\n- real ticket-006: 3 issues, all route to unresolved:human, none empty\n- focused communication tests: 7/7 pass\n- full verify: 253 tests, 252 pass, 1 JDK skip\n- gold v2/v1 and five-SDK examples: PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-009/ai-codex-logs.txt", "path": "ticket-009 / ai-codex-logs.txt", "size": "659B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-009 started\n- production structured OpenRouter boundaries found: 7\n- manual runtime strategies found: unchecked generic, duplicated validator, coercive normalizer\n- executable files in ticket directory: 0\n2026-07-31 ticket-009 verified\n- npm run verify: PASS (256 total, 255 pass, 1 JDK skip)\n- structured response gate: PASS (7 canonical, 0 raw)\n- generated schema gate: PASS\n- evaluate:gold v2: 100% required gates\n- evaluate:gold:v1: PASS\n- examples:check: PASS (5 SDK)\n- git diff --check: PASS\n2026-07-31 ticket-009 published\n- implementation commit: d0fc143\n- origin/main push: PASS\n- unrelated staged nlp2uri.yaml: preserved, excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-008/ai-codex-logs.txt", "path": "ticket-008 / ai-codex-logs.txt", "size": "343B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-008 completed\n- Docker engine: running, version 29.1.3\n- governance script syntax: PASS\n- isolated scaffolder/index test: PASS\n- todo2code communication integration: PASS\n- generated participant: agent:codex / agent\n- invented human participants: 0\n- unresolved approval route: unresolved:human\n- upstream main push: 72e5f6c\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-002/ai-codex-logs.txt", "path": "ticket-002 / ai-codex-logs.txt", "size": "6.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31T06:49:07Z ticket initialization\n\n$ git status --short\n?? nlp2uri.yaml\n\n$ docker version --format 'client={{.Client.Version}} server={{.Server.Version}}'\nclient=29.1.3 server=29.1.3\n\n$ verify required container files\nDockerfile\ndocker-compose.yml\n\n$ verify external tracked commits\nsemcod/code2llm b297d60\nsemcod/domd b6c5ad2\nsemcod/pactfix daf301a\nsemcod/code2logic ba93489\nsemcod/code2docs c738aff\nsemcod/redup a175fb0\nsubactor/platform 3e96573\n\nResult: planning prerequisites verified; state WAIT_FOR_APPROVAL.\n\n$ git diff --check\nexit 0\n\n$ verify ticket files are non-empty\nOK project/ticket-002/README.md\nOK project/ticket-002/preprompt.md\nOK project/ticket-002/user-tom-sapletta-com.md\nOK project/ticket-002/ai-codex.md\nOK project/ticket-002/ai-codex-logs.txt\nOK project/ticket-002/changelog.md\n\n$ npm run verify:generated-analysis\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\n\n2026-07-31 approval\n\nUser decision: kontynuuj\nWorkflow transition: WAIT_FOR_APPROVAL -> TOOLS\n\n2026-07-31 generated-analysis audit\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\ndetached tracked worktree: used\ncode2docs/redup/vallm/code2llm: completed\n{"filesChecked":18,"filesChanged":8}\n{"filesChecked":18,"untrackedInputsChecked":7,"status":"ok"}\nprefact: skipped; requires T2C_APPLY_PREFACT=1\nResult: generated analysis passed, but project/README.md generation replaced\nthe manually added ticket index. The namespace conflict is retained as a\nfollow-up tooling defect; ticket discovery remains available through TODO.md.\n\n2026-07-31 external deterministic baseline\n\nPolicy: detached tracked-only commits; TASK.md/TODO.md/CHANGELOG.md selected\nonly when tracked; documents README.md and docs/**/*.md; deterministic NL and\nMarkdown; no communication, task synthesis or LLM summary.\n\nsemcod/code2llm b297d600 run=20260731T065730Z-ca7a9a28 time=18s records=16899 relations=41747 graph=2e57056bf75fc5ef diagnostics=4700 warnings=9\nsemcod/domd b6c5ad24 run=20260731T065753Z-a3fde5a3 time=5s records=10611 relations=7470 graph=9df7e187f82b4ce8 diagnostics=2109 warnings=0\nsemcod/pactfix daf301a9 run=20260731T065802Z-48dc0b12 time=5s records=5161 relations=3917 graph=9c2d15fc76b8585f diagnostics=664 warnings=5\nsemcod/code2logic ba93489b run=20260731T065808Z-a52c2716 time=12s records=21423 relations=16927 graph=722f90e806be667f diagnostics=4680 warnings=3\nsemcod/code2docs c738aff7 run=20260731T065827Z-9f042652 time=9s records=6717 relations=35447 graph=4598fbe9eec85d61 diagnostics=1555 warnings=0\nsemcod/redup a175fb0a run=20260731T065840Z-61c33c16 time=6s records=7204 relations=19173 graph=ed0359f98ed4e18f diagnostics=2384 warnings=0\nsubactor/platform 3e96573d run=20260731T065848Z-3863e97d time=6s records=10628 relations=11002 graph=1c4166dd1b7b7789 diagnostics=1271 warnings=1\n\nResult: 7/7 succeeded. CHANGELOG_WITHOUT_IMPLEMENTATION occurred in every\nrepository, 2877 times in total. Samples include both substantive claims and\nnon-actionable generated-file updates/placeholders; broad topic linking is\ntherefore rejected for the first iteration.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update project/calls.mmd\nResult: expected red regression confirmed before the implementation change.\n\n2026-07-31 iteration 01 focused and gold validation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nextraction=100%/100% linking=100%/100% diagnostics=100%/100%\nforbiddenDiagnosticCodes=0 repeatedRunStability=PASS knownGap=0/1\n\n2026-07-31 iteration 01 external comparison\n\nRuntime: clean 5f5ae593 plus only src/graph/changelog-signal.ts and the\ndiagnostics integration. External commits and deterministic input policy are\nunchanged.\n\nsemcod/code2llm graph=same changelog=1411->955 review=1411->955 unlinked=1332->1313\nsemcod/domd graph=same changelog=105->99 review=105->99 unlinked=779->773\nsemcod/pactfix graph=same changelog=48->48 review=48->48 unlinked=217->217\nsemcod/code2logic graph=same changelog=121->120 review=121->120 unlinked=1504->1503\nsemcod/code2docs graph=same changelog=396->269 review=396->269 unlinked=463->455\nsemcod/redup graph=same changelog=703->269 review=703->269 unlinked=708->703\nsubactor/platform graph=same changelog=93->93 review=93->93 unlinked=780->780\n\nTotal: CHANGELOG_WITHOUT_IMPLEMENTATION 2877->1853 (-1024),\nUNLINKED_RECORD 5783->5744 (-39), all diagnostics 17363->16300 (-1063).\nResult: keep iteration 01; target improved in 5 repositories with no graph or\ngold regression. Workflow transition: ANALYSIS -> VERIFY.\n\n2026-07-31 final validation\n\n$ npm run verify\nPASS: 241 tests, 240 pass, 0 fail, 1 Java skip (JDK unavailable)\nPASS: LLM boundary 9 entrypoints / 31 modules\nPASS: module boundary 94 modules / 429 imports / 0 cycles\nPASS: env contract 63/63, workflow YAML, generated-analysis isolation\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n$ npm run examples:check\nPASS: 5 SDKs, shared graph and patch fingerprints\n\n$ npm audit --omit=dev\nPASS: 0 vulnerabilities\n\n$ make smoke protocol-smoke\nPASS: offline CLI, MCP and A2A\n\n$ make docker-smoke\nPASS: image build, /healthz and doctor\n\nResult: all acceptance criteria satisfied. Workflow transition: VERIFY -> DONE.\n\n2026-07-31 iteration 02 generated-analysis isolation\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nFAIL: project/index.html references untracked input nlp2uri.yaml\nCause: generated HTML quoted the committed ticket log containing an earlier\ngit-status line; the detached generator did not consume the untracked file.\n\n$ npm run build && node --test dist/test/generated-analysis.test.js\nbefore implementation: tests=4 pass=3 fail=1\nfailing regression: accepts an untracked filename already quoted by tracked evidence\n\nAfter implementation:\nfocused generated-analysis tests=4 pass=4 fail=0\nnew untracked reference hard negative=PASS\ntracked audit quotation=PASS\n\n$ T2C_SKIP_TOOL_INSTALL=1 T2C_ANALYSIS_SOURCE=tracked ./project.sh\nPASS: {"filesChecked":18,"untrackedInputsChecked":6,"status":"ok"}\n\n$ npm run verify\nPASS: 242 tests, 241 pass, 0 fail, 1 Java skip\n\n$ make docker-smoke\nPASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-012/ai-codex-logs.txt", "path": "ticket-012 / ai-codex-logs.txt", "size": "862B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-012 opened\n2026-07-31 attributed auto-beta failure to a schema-incomplete provider response\n2026-07-31 selected deepseek/deepseek-v4-flash from the live OpenRouter model API\n2026-07-31 DeepSeek attempt reached the contradictory 120s client timeout\n2026-07-31 aligned live request timeout with the 300s stage budget\n2026-07-31 selected qwen/qwen3.7-plus for the second explicit-model attempt\n2026-07-31 Qwen passed NL/Markdown but violated documentation and communication schemas twice\n2026-07-31 added one bounded schema-preserving correction to all direct extractors\n2026-07-31 rejected openai/gpt-5.4-mini after two corrected NL runs still violated the schema\n2026-07-31 google/gemini-3.6-flash passed all six live stages in 125486 ms for $0.412363\n2026-07-31 implementation and documentation pushed to main as 11348c0; nlp2uri.yaml excluded\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-011/ai-codex-logs.txt", "path": "ticket-011 / ai-codex-logs.txt", "size": "501B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-011 opened\n2026-07-31 measured 155 ambiguous leaf aliases in todo2code and 2 in subactor-improvement\n2026-07-31 implemented AST-backed NL symbol resolution outside project/\n2026-07-31 focused resolver tests passed; gold v2 extended to 10 exact-target relations\n2026-07-31 full verify passed: 277 tests, 276 pass, 1 JDK skip\n2026-07-31 gold v1/v2 and all five SDK examples passed\n2026-07-31 implementation commit 25df74a pushed to main; nlp2uri.yaml excluded\n2026-07-31 ticket closed\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-022/ai-codex-logs.txt", "path": "ticket-022 / ai-codex-logs.txt", "size": "1.2KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-08-01T14:25:00Z ticket-022 planned on isolated branch ticket-022-umbrella-git\n2026-08-01T14:25:00Z measured Subactor root: not a Git work tree; 41 real nested repository roots observed\n2026-08-01T14:25:00Z state: PLAN / WAIT_FOR_APPROVAL; no source/test edits\n2026-08-01T14:27:00Z user approval: "zatwierdzam ticket 022 i kolejne"; state: IN_PROGRESS / EDIT\n2026-08-01T14:29:00Z focused baseline failed as expected: umbrella records 0; repositoryRoot absent\n2026-08-01T14:31:00Z bounded umbrella discovery, path namespacing and t2c/git@2 implemented\n2026-08-01T14:32:00Z focused Git tests PASS 5/5\n2026-08-01T14:33:00Z npm run verify PASS: 338 tests, 337 passed, 1 optional JDK skip, 0 failed\n2026-08-01T14:33:00Z make docker-smoke PASS\n2026-08-01T14:33:00Z make governance: ticket-022 clean; 4 inherited ticket-018/019 errors remain\n2026-08-01T14:36:00Z comparable Subactor pipeline succeeded: 326 Git records from 39 member repositories\n2026-08-01T14:39:00Z same-snapshot delta: +41792 relations, -275 diagnostics; 268/326 Git records linked\n2026-08-01T14:40:00Z composed ticket-021 planner check: 44 plans, 43 Resolve, 0 unsafe\n2026-08-01T14:41:00Z state: BLOCKED / VALIDATION pending global governance reconciliation and protected review\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-020/ai-codex-logs.txt", "path": "ticket-020 / ai-codex-logs.txt", "size": "3.1KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "Updated project/TICKETS.md ticket index successfully.\nSuccessfully scaffolded project/ticket-020 for 'Role-bound trusted intake with CQRS ES Protobuf MCP and A2A'.\n\n$ ./project/governance-check.sh --actor agent --format text\nGOV-CONFLICT-001 ERROR: Conflicting tickets ticket-018 and ticket-019 are active together. [project/ticket-018/intent.json, project/ticket-019/intent.json]\n remediation: Serialize the tickets or resolve the conflict through an approved integration plan.\nGOV-DEPENDENCY-002 ERROR: Active ticket ticket-019 has unfinished or missing dependency ticket-018. [project/ticket-019/intent.json]\n remediation: Complete the prerequisite or return the dependent ticket to a non-active planning backlog.\nGOV-WORKSTREAM-003 ERROR: Ticket ticket-019 claims concrete paths outside workstream 'sdk'. [Makefile, goal.yaml]\n remediation: Narrow allowedPaths or route the concrete files to their owning workstream/integration ticket and obtain fresh approval.\nGOV-WORKSTREAM-004 ERROR: Active ticket scopes overlap: ticket-018 and ticket-019. [Makefile]\n remediation: Narrow one allowedPaths declaration, serialize the work, or route the shared contract through integration.\nGOV-FAIL: failed (4 errors, 0 warnings)\n\n$ python3 [Draft 2020-12 intent validation and workstream ownership probe]\nticket-020 intent: JSON Schema PASS\nticket-020 workstream paths: PASS\nhuman role files unchanged: PASS\n\n$ git diff --check\nPASS (no output)\n\n$ npm run verify\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\nstructured calls: 7; raw calls: 0\n\n$ make e2e-core\nT2C-E2E-000: PASS suite=core\ntests 335; pass 328; fail 0; skipped 7 optional toolchains\ngold v1/v2: precision 100%; recall 100%; repeated-run stability PASS\nCLI smoke: PASS\nMCP smoke: PASS\nA2A smoke: PASS\nexamples: PASS\n\n$ make governance # before refreshing branch to main/0.8.0\nGOV-TICKET-002 ERROR: More than one active ticket exists.\n paths: project/ticket-018, project/ticket-020\n remediation: policy 0.7.0 requires serialization; ticket-018's approved\n workstream-aware 0.8.0 validator is not committed in this branch and cannot\n be imported without mixing ticket scopes.\nGOV-FAIL: failed (1 error, 0 warnings)\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n\n$ git merge --ff-only main\nPASS: ticket-020-role-bound-intake refreshed from 9928699 to 1a0799a\npolicy baseline: wellmanifest/new-project 0.8.0\n\n$ make governance # after refreshing branch to main/0.8.0\nGOV-CONFLICT-001: ticket-018/ticket-019\nGOV-DEPENDENCY-002: ticket-019 depends on unfinished ticket-018\nGOV-WORKSTREAM-003: ticket-019 claims Makefile and goal.yaml outside sdk\nGOV-WORKSTREAM-004: ticket-018/ticket-019 overlap on Makefile\nGOV-FAIL: 4 errors, 0 warnings\nticket-018 + ticket-020 parallelism: accepted; no finding names ticket-020\n\n$ npm run verify # after refreshing branch to main/0.8.0\nPASS\ntests 335; pass 334; fail 0; skipped 1 (JDK unavailable)\nmodule boundaries: 114 modules, 521 internal imports, no cycles\n\n$ git diff --check && git diff --cached --check\nPASS (no output)\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-010/ai-codex-logs.txt", "path": "ticket-010 / ai-codex-logs.txt", "size": "417B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket-010 opened\n2026-07-31 mapped AST adapters, Markdown chunking and output boundaries\n2026-07-31 implemented content-addressed fail-open cache outside project/\n2026-07-31 targeted cache and extractor tests passed\n2026-07-31 benchmarked three tracked repository snapshots\n2026-07-31 exact commit passed 261 tests, gold v1/v2 and five SDK examples\n2026-07-31 ticket closed; implementation commit f1d9334\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-015/ai-codex-logs.txt", "path": "ticket-015 / ai-codex-logs.txt", "size": "383B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PLF-003 title reproduced as "Implement Implement ... and it ..."\n2026-07-31 focused test failed with the exact malformed title\n2026-07-31 lossless source-title fallback implemented under src/synthesis\n2026-07-31 focused suite 18/18 pass; real fixture title preserves implement + verify\n2026-07-31 verify PASS: 300 total, 299 pass, 1 JDK skip; gold v2/v1 and examples PASS\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-003/ai-codex-logs.txt", "path": "ticket-003 / ai-codex-logs.txt", "size": "3.9KB", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 ticket initialization\n\nUser decision: kontynuuj\nPrevious recommendation: audit and classify the residual actionable changelog\nfindings before changing linker policy.\nWorkflow state: TOOLS\n\nBaseline source: project/ticket-002/iteration-01.json\nTarget tracked runtime: 18cc21b\nExternal corpus: unchanged seven detached commits from ticket-002\n\n2026-07-31 current residual baseline\n\nsemcod/code2docs run=20260731T072143Z-a3208b84 records=6717 relations=35468 changelog=269 graph=83dcfa7a5b21ca77\nsemcod/code2llm run=20260731T072152Z-fb1ab530 records=16899 relations=41758 changelog=955 graph=bd57f05a14c3abca\nsemcod/code2logic run=20260731T072209Z-30215e36 records=21423 relations=16933 changelog=120 graph=c6e9f7a0671dc9b4\nsemcod/domd run=20260731T072221Z-f577ffe7 records=10611 relations=7484 changelog=99 graph=a9d2d5eb1287b7cb\nsemcod/pactfix run=20260731T072226Z-0fb2f8b8 records=5161 relations=3917 changelog=48 graph=9c2d15fc76b8585f\nsemcod/redup run=20260731T072230Z-6a2d832d records=7204 relations=19259 changelog=269 graph=b3a582ffa178ee30\nsubactor/platform run=20260731T072237Z-6cab0835 records=10628 relations=11424 changelog=93 graph=ae92ead72d35e88e\nResult: 7/7 succeeded, residual findings=1853.\n\n2026-07-31 deterministic audit\n\nSelection: lexical target-class:action strata, stable ID, round-robin, 24 per\nrepository.\nsampled=168\nnon_actionable_file_update=28 across 5 repositories\nnon_actionable_file_summary=1 across 1 repository\nroadmap_not_release=6 sampled / 30 census across 2 repositories\nsubstantive_or_unverified=133 sampled / 1275 census across 7 repositories\nSelected correction: exact Update <file> bookkeeping only.\nWorkflow transition: TOOLS -> ANALYSIS.\n\n2026-07-31 regression before implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=5 fail=1\nfailure: Diagnostics ignore non-actionable changelog mechanics but retain\nrelease claims\nfirst counterexample: Update src/runtime.ts\nResult: expected red regression confirmed before implementation.\n\n2026-07-31 focused validation after implementation\n\n$ npm run build && node --test dist/test/graph.test.js\ntests=6 pass=6 fail=0\n\n$ npm run evaluate:gold\nPASS: all measured precision/recall 100%, forbidden diagnostics 0, stability PASS\n\n2026-07-31 external A/B\n\nsemcod/code2docs graph=same changelog=269->127 unlinked=455->418\nsemcod/code2llm graph=same changelog=955->650 unlinked=1312->1219\nsemcod/code2logic graph=same changelog=120->109 unlinked=1503->1492\nsemcod/domd graph=same changelog=99->99 unlinked=772->772\nsemcod/pactfix graph=same changelog=48->48 unlinked=217->217\nsemcod/redup graph=same changelog=269->184 unlinked=703->661\nsubactor/platform graph=same changelog=93->89 unlinked=766->761\n\nTotal: changelog 1853->1306 (-547), unlinked 5728->5540 (-188),\nall diagnostics 16280->15545 (-735).\nResult: keep iteration; workflow transition ANALYSIS -> VERIFY.\n\n2026-07-31 full validation and close\n\n$ npm run verify\ntests=242 pass=241 fail=0 skip=1\nJava fixture skip reason: local JDK unavailable; required CI uses JDK 17.\nLLM boundary=PASS (9 entrypoints, 31 modules)\nmodule graph=PASS (94 modules, 429 imports, no cycles)\nenvironment contract=PASS (63/63)\nworkflows=PASS\ngenerated analysis=PASS (18 files)\n\n$ npm run examples:check\nResult: PASS, five SDK fingerprints agree.\n\n$ npm audit --omit=dev\nResult: PASS, 0 vulnerabilities.\n\n$ make smoke protocol-smoke\nResult: PASS, CLI, MCP and A2A.\n\n$ make docker-smoke\nResult: PASS.\n\nReadiness updated with residual census:\nsubstantive_or_unverified=1275\nroadmap_not_release=30\nnon_actionable_file_summary=1\ntotal retained=1306\n\nResult: all acceptance criteria satisfied; workflow transition VERIFY -> DONE.\n\n2026-07-31 repository layout correction\n\nUser review identified executable code under project/ticket-003.\nMoved:\nproject/ticket-003/sample-changelog.mjs\n-> scripts/research/audit-changelog-sample.mjs\n\nTicket inputs, captured results, decisions and raw logs remain under the\nticket. No experiment code remains there.\n", "is_subdir": true}, {"name": "ai-codex-logs.txt", "rel_path": "ticket-016/ai-codex-logs.txt", "path": "ticket-016 / ai-codex-logs.txt", "size": "453B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-31 PHP 8.4 available; ext-ast unavailable; selected TOKEN_PARSE boundary\n2026-07-31 focused PHP + existing AST suite 5/5 PASS\n2026-07-31 redsl A/B: 40 tracked PHP files, 2127 unique records, +80 relations\n2026-07-31 redsl diagnostics warnings 730 -> 712; plans stayed 1; extraction warnings 0\n2026-07-31 verify PASS: 304 total, 303 pass, 1 JDK skip; 104 modules, 75 env keys\n2026-07-31 gold v2/v1 100%; examples PASS, SDK fingerprints unchanged\n", "is_subdir": true}, {"name": "logs.txt", "rel_path": "ticket-001/logs.txt", "path": "ticket-001 / logs.txt", "size": "598B", "icon": "📄", "type": "text", "type_name": "Text", "content": "2026-07-29 bootstrap initialized; no test or runtime output produced.\n\n2026-07-29 validation outputs:\nGitHub repository lookup: 404 Not Found\nGitHub CLI auth: token invalid\nDocker CLI: Docker version 29.6.1, build 8900f1d\nDocker engine: permission denied while connecting to Docker Desktop Linux engine\ndocker compose config --quiet: exit code 0\nGit: initialized empty repository on main; no commits yet.\n\n2026-07-29 GitHub publication:\nGitHub authentication: verified for account MatthiasLew with repo and read:org scopes.\nRemote repository: https://github.com/semcod/todo2code\nVisibility: PUBLIC\n", "is_subdir": true}]; let currentFile = null; function renderFileList(filter = '') { diff --git a/project/map.toon.yaml b/project/map.toon.yaml index 07bca57..b426bd1 100644 --- a/project/map.toon.yaml +++ b/project/map.toon.yaml @@ -1,12 +1,12 @@ -# todo2code | 281f 43441L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:173,python:16,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 +# todo2code | 294f 44016L | yaml:2,yml:2,json:40,shell:8,toml:3,rust:7,typescript:187,python:15,javascript:15,java:1,proto:1,go:6,php:4,txt:1 | 2026-08-04 # generated in 0.04s # producer: code2llm | artifact: map.toon.yaml | schema: 1 -# stats: 4129 func | 0 cls | 281 mod | CC̄=3.1 | critical:24 | cycles:0 -# alerts[5]: fan-out compareWorkspaceIntent=40; CC parseFile=38; fan-out Client.parse_http_response=37; fan-out run=33; fan-out executePipeline=31 -# hotspots[5]: compareWorkspaceIntent fan=40; Client.parse_http_response fan=37; run fan=33; main fan=31; executePipeline fan=31 -# evolution: CC̄ 3.0→3.1 (regressed +0.1) +# stats: 4218 func | 0 cls | 294 mod | CC̄=3.0 | critical:10 | cycles:0 +# alerts[5]: fan-out compareWorkspaceIntent=40; CC parseFile=38; fan-out run=33; fan-out main=31; fan-out Client.validate_http_status_body=28 +# hotspots[5]: compareWorkspaceIntent fan=40; run fan=33; main fan=31; Client.validate_http_status_body fan=28; executePipeline fan=26 +# evolution: CC̄ 3.0→3.0 (flat 0.0) # Keys: M=modules, D=details, i=imports, e=exports, c=classes, f=functions, m=methods -M[281]: +M[294]: Dockerfile,45 Makefile,132 adapters/tensorflow/package.json,14 @@ -29,14 +29,13 @@ M[281]: examples/src/helper.py,9 examples/src/runtime.ts,13 goal.yaml,530 - golang/ast_extract.go,368 - java/JavaAstExtract.java,260 + golang/ast_extract.go,376 + java/JavaAstExtract.java,285 nlp2uri.yaml,8 package.json,52 php/ast_extract.php,233 project.sh,124 project2.sh,79 - python/ast_extract.py,221 python/requirements.txt,1 rust-ast/Cargo.toml,12 rust-ast/src/main.rs,322 @@ -80,10 +79,10 @@ M[281]: scripts/smoke.sh,57 scripts/sync-generated-readme-metadata.mjs,66 scripts/vallm-compatible.py,25 - scripts/verify-env-contract.mjs,103 + scripts/verify-env-contract.mjs,139 scripts/verify-generated-analysis.mjs,88 scripts/verify-module-boundaries.mjs,87 - scripts/verify-no-llm-imports.mjs,78 + scripts/verify-no-llm-imports.mjs,99 scripts/verify-structured-responses.mjs,35 scripts/verify-workflow-yaml.mjs,43 sdk/__init__.py,1 @@ -108,7 +107,7 @@ M[281]: sdk/rust/examples/basic.rs,108 sdk/rust/src/lib.rs,49 sdk/rust/src/actions.rs,100 - sdk/rust/src/client.rs,221 + sdk/rust/src/client.rs,243 sdk/rust/src/error.rs,37 sdk/rust/src/types.rs,140 sdk/typescript/examples/basic.ts,84 @@ -116,8 +115,8 @@ M[281]: sdk/typescript/src/index.ts,420 sdk/typescript/tsconfig.json,20 src/index.ts,53 - src/cli.ts,942 - src/communication/analyzer.ts,596 + src/cli.ts,985 + src/communication/analyzer.ts,619 src/communication/identity.ts,216 src/communication/intake-contract.ts,334 src/communication/intake-protobuf.ts,158 @@ -140,7 +139,7 @@ M[281]: src/core/schema/conclusions.ts,210 src/core/schema/constants.ts,31 src/core/schema/intent.ts,309 - src/core/schema/utils.ts,239 + src/core/schema/utils.ts,259 src/core/security.ts,55 src/core/target.ts,57 src/core/text.ts,530 @@ -152,7 +151,9 @@ M[281]: src/core/version.ts,2 src/diff/git.ts,208 src/diff/git-binary.ts,10 - src/diff/reality.ts,690 + src/diff/reality.ts,223 + src/diff/reality-build.ts,346 + src/diff/reality-totals.ts,66 src/diff/svg.ts,104 src/diff/text.ts,153 src/diff/text-myers.ts,152 @@ -160,10 +161,11 @@ M[281]: src/diff/text-types.ts,39 src/evaluation/gold.ts,329 src/evaluation/gold-cases.ts,489 - src/evaluation/gold-cli.ts,44 + src/evaluation/gold-cli.ts,65 src/evaluation/gold-extraction.ts,127 src/evaluation/gold-metrics.ts,50 - src/evaluation/gold-types.ts,405 + src/evaluation/gold-reranker-validation.ts,39 + src/evaluation/gold-types.ts,382 src/extractors/ast.ts,167 src/extractors/ast/external.ts,48 src/extractors/ast/go.ts,20 @@ -209,10 +211,11 @@ M[281]: src/interfaces/a2a-card.ts,181 src/interfaces/a2a-history.ts,96 src/interfaces/a2a-message.ts,125 - src/interfaces/a2a-message-command.ts,144 + src/interfaces/a2a-message-command.ts,141 src/interfaces/a2a-run-list-item.ts,171 src/interfaces/a2a-task-store.ts,560 src/interfaces/a2a-types.ts,164 + src/interfaces/command-input.ts,3 src/interfaces/governed-intake.proto,78 src/interfaces/intake-actions.ts,38 src/interfaces/intake-schemas/command-v1.schema.json,17 @@ -235,15 +238,22 @@ M[281]: src/llm/openrouter-request.ts,242 src/llm/structured-schema.ts,218 src/operations/artifact.ts,66 - src/operations/compile-cli.ts,34 + src/operations/compile-cli.ts,55 src/operations/contract.ts,84 + src/operations/generation-validation.ts,101 + src/operations/operation-step-validation.ts,178 src/operations/subactor.ts,122 src/operations/types.ts,155 - src/operations/validation.ts,429 - src/pipeline/run.ts,384 - src/pipeline/run-helpers.ts,188 - src/pipeline/run-persistence.ts,297 + src/operations/validation.ts,338 + src/pipeline/persist-optional-artifacts.ts,128 + src/pipeline/run.ts,66 + src/pipeline/run-documentation.ts,80 + src/pipeline/run-execution.ts,189 + src/pipeline/run-failed.ts,167 + src/pipeline/run-helpers.ts,177 + src/pipeline/run-persistence.ts,236 src/pipeline/run-summary.ts,58 + src/pipeline/run-types.ts,89 src/sdk/typescript.ts,172 src/semantic/reranker/index.ts,8 src/semantic/reranker-llm.ts,291 @@ -253,9 +263,10 @@ M[281]: src/semantic/reranker/types.ts,106 src/semantic/reranker/validation.ts,111 src/services/actions.ts,806 + src/summary/generation-metadata.ts,61 src/summary/payload.ts,65 src/summary/render.ts,61 - src/summary/summarizer.ts,333 + src/summary/summarizer.ts,304 src/synthesis/code-change-path.ts,232 src/synthesis/code-change-plan/index.ts,1 src/synthesis/code-change-plan/implementation.ts,1 @@ -278,15 +289,17 @@ M[281]: src/synthesis/code-change-plan/implementation-targets.ts,61 src/synthesis/task-synthesis-contract.ts,66 src/synthesis/task-synthesis-materialize.ts,172 + src/synthesis/task-synthesis-metadata.ts,28 src/synthesis/task-synthesis-payload.ts,70 - src/synthesis/tasks-llm.ts,266 + src/synthesis/tasks-llm.ts,243 src/synthesis/todo-patch.ts,372 src/synthesis/validation.ts,113 src/tf/classifier.ts,135 src/version.ts,2 src/watch/watcher.ts,292 src/web/diff-ui.ts,152 - src/web/diff-ui-script.ts,17 + src/web/diff-ui-compare.ts,105 + src/web/diff-ui-script.ts,19 tsconfig.json,23 D: php/ast_extract.php: @@ -298,20 +311,41 @@ D: sourceExcerpt() addFact() parseFile() + scripts/research/rank-intent-graph-embeddings.py: + e: parse_args,projection_text,main + parse_args() + projection_text(record;prefix) + main() + sdk/go/examples/basic/main.go: + e: main,run,envOr,truncate,joinedIDs + main() + run() + envOr() + truncate() + joinedIDs() scripts/verify-env-contract.mjs: i: node:fs,node:path - e: root,examplePath,example,declared,match,expected,configBody,body,makefile,body,local,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute + e: root,examplePath,example,declared,expected,local,parseDeclaredEnv,declared,lines,match,collectExpectedVariables,expected,body,body,collectConfigKeys,body,collectEnvReferences,collectMakefileReferences,collectDockerReferences,hasContractProblems,auditLocalKeys,body,keys,collectExisting,absolute,collect,absolute root() examplePath() example() declared() + expected() + local() + parseDeclaredEnv() + declared() + lines() match() + collectExpectedVariables() expected() - configBody() body() - makefile() body() - local() + collectConfigKeys() + body() + collectEnvReferences() + collectMakefileReferences() + collectDockerReferences() + hasContractProblems() auditLocalKeys() body() keys() @@ -319,251 +353,18 @@ D: absolute() collect() absolute() - scripts/research/rank-intent-graph-embeddings.py: - e: parse_args,projection_text,main - parse_args() - projection_text(record;prefix) - main() - sdk/go/examples/basic/main.go: - e: main,run,envOr,truncate,joinedIDs - main() - run() - envOr() - truncate() - joinedIDs() - src/operations/validation.ts: - i: ../core/id.js,../core/types.js,./types.js - e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,expectedId,assertVariableContractShape,assertVariableContractCore,assertVariableSource,source,assertVariableAccess,access,assertVariableAuthoritativeness,assertVariableMutability,buildVariableContractId,assertGeneration,generation,assertAcyclic,ids,visiting,visited,byId,visit,assertOperationPlan,plan,variables,variableById,validateOperationPlanShape,validateOperationPlanMetadata,validateOperationPlanEvidence,evidence,collectOperationPlanVariables,variables,validateOperationSteps,stepIds,steps,hasCommandStep,founderDecisionRequired,step,validateOperationStep,step,parameters,rollback,validateOperationStepParameters,parameters,reference,variable,validateOperationStepRollback,rollback,validateOperationExpectations,coveredSteps,expectationIds,expectation,verifiedBy,validateOperationDecision,decision,validateOperationVerification,verification,validateOperationPlanHash,castPlan,expectedHash - VALUE_TYPES() - CLASSIFICATIONS() - SOURCE_KINDS() - RISK_CLASSES() - objectValue() - exactKeys() - actual() - nonBlank() - dateString() - uniqueStrings() - assertPrincipalList() - principals() - isJsonValue() - assertVariableContract() - contract() - source() - access() - readers() - writers() - expectedId() - assertVariableContractShape() - assertVariableContractCore() - assertVariableSource() - source() - assertVariableAccess() - access() - assertVariableAuthoritativeness() - assertVariableMutability() - buildVariableContractId() - assertGeneration() - generation() - assertAcyclic() - ids() - visiting() - visited() - byId() - visit() - assertOperationPlan() - plan() - variables() - variableById() - validateOperationPlanShape() - validateOperationPlanMetadata() - validateOperationPlanEvidence() - evidence() - collectOperationPlanVariables() - variables() - validateOperationSteps() - stepIds() - steps() - hasCommandStep() - founderDecisionRequired() - step() - validateOperationStep() - step() - parameters() - rollback() - validateOperationStepParameters() - parameters() - reference() - variable() - validateOperationStepRollback() - rollback() - validateOperationExpectations() - coveredSteps() - expectationIds() - expectation() - verifiedBy() - validateOperationDecision() - decision() - validateOperationVerification() - verification() - validateOperationPlanHash() - castPlan() - expectedHash() - src/interfaces/a2a-message-command.ts: - i: ../communication/intake-protobuf.js - e: parseCommand,protobufCommand,objectCommand,parseCommandFromProtobuf,protobuf,bytes,parseCommandFromObject,objectData,parseCommandFromText,text,looksLikeJson,parseCommandFromJson,parseCommandFromSentence,parseSentenceInput,defaultTextCommand,isSupportedAction,commandInputFromSentence,first,parseText,firstToken,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,normalizeAction,normalized,action - parseCommand() - protobufCommand() - objectCommand() - parseCommandFromProtobuf() - protobuf() - bytes() - parseCommandFromObject() - objectData() - parseCommandFromText() - text() - looksLikeJson() - parseCommandFromJson() - parseCommandFromSentence() - parseSentenceInput() - defaultTextCommand() - isSupportedAction() - commandInputFromSentence() - first() - parseText() - firstToken() - commandFromData() - action() - nested() - parseKeyValues() - key() - raw() - stringValue() - parseScalar() - normalizeAction() - normalized() - action() sdk/rust/examples/basic.rs: i: serde_json::json,std::env,todo2code::Client e: main,run,joined_ids main() run() joined_ids() - src/pipeline/run.ts: - i: ../communication/analyzer.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,../llm/audit.js,../summary/summarizer.js,../version.js,./run-summary.js,node:path - e: PipelineContext,PipelineExecutionOutput,PipelinePersistedPaths,PipelineResult,runPipeline,context,execution,persisted,manifest,manifestPath,initializePipelineContext,root,runId,baseOutput,runDirectory,executePipeline,deterministicDocumentFiles,naturalLanguageAudit,result,git,ast,markdown,markdownAudit,documentationStartedAt,deterministicDocs,docs,configurationExtraction,runtime,communicationInput,communicationAudit,communicationSyntheses,allRecords,generatedAt,graph,diagnostics,communicationAnalysis,taskSynthesis - PipelineContext: - PipelineExecutionOutput: - PipelinePersistedPaths: - PipelineResult: - runPipeline() - context() - execution() - persisted() - manifest() - manifestPath() - initializePipelineContext() - root() - runId() - baseOutput() - runDirectory() - executePipeline() - deterministicDocumentFiles() - naturalLanguageAudit() - result() - git() - ast() - markdown() - markdownAudit() - documentationStartedAt() - deterministicDocs() - docs() - configurationExtraction() - runtime() - communicationInput() - communicationAudit() - communicationSyntheses() - allRecords() - generatedAt() - graph() - diagnostics() - communicationAnalysis() - taskSynthesis() - src/pipeline/run-persistence.ts: - i: ../communication/analyzer.js,../communication/llm.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../extractors/docs-llm.js,../extractors/nl-llm.js,../llm/audit.js,../synthesis/tasks-llm.js,../version.js,./run.js,node:path - e: makePipelineManifest,persistPipelineArtifacts,filePath,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,taskSynthesisPath,todoValidationPath,todoPatchPath,todoPatchAuditPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,communicationAnalysisPath,communicationMarkdownPath,persistFailedRun,manifestConfiguration,persistFailedRunState,aborted,message,knownAudit,failedAudit,stageValue,reason,skippedAudit,failureCode - makePipelineManifest() - persistPipelineArtifacts() - filePath() - graphPath() - diagnosticsPath() - summaryPath() - summaryConclusionsPath() - taskSynthesisPath() - todoValidationPath() - todoPatchPath() - todoPatchAuditPath() - codeChangePlansPath() - codeChangeReviewPath() - codeChangeReviewAuditPath() - codeChangeSourcePatchesPath() - communicationAnalysisPath() - communicationMarkdownPath() - persistFailedRun() - manifestConfiguration() - persistFailedRunState() - aborted() - message() - knownAudit() - failedAudit() - stageValue() - reason() - skippedAudit() - failureCode() - sdk/rust/src/client.rs: - i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super:: - e: Client - Client: src/core/record-metadata.ts: i: ./types.js,./version.js e: generationMetadata,generationIdentity,separator generationMetadata() generationIdentity() separator() - src/evaluation/gold-types.ts: - e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,assertGoldLinkingCohort,assertRerankerFixture,assertRerankerModelIdentity,assertRerankerDecisions,decisions,recordLabels,seenModules,assertRerankerDecision - GoldRecordProjection: - GoldDocumentModelRecord: - GoldExtractionCase: - GoldFixtureRecord: - GoldExpectedRelation: - GoldRerankerDecisionFixture: - GoldRerankerFixture: - GoldLinkingCase: - GoldProposalFixture: - GoldDsl2TodoCase: - GoldExpectedDiagnostic: - GoldDiagnosticsCase: - GoldDataset: - BinaryMetric: - GoldEvaluationReport: - assertGoldDataset() - dataset() - assertDatasetObject() - assertDatasetMetadata() - assertDatasetCollections() - assertUniqueCaseIds() - assertExtractionCoverage() - channels() - assertLinkingCohorts() - assertGoldLinkingCohort() - assertRerankerFixture() - assertRerankerModelIdentity() - assertRerankerDecisions() - decisions() - recordLabels() - seenModules() - assertRerankerDecision() sdk/typescript/examples/basic.ts: i: ../src/index.js e: baseUrl,token,root,main,client,health,card,nl,ast,markdown,graph,diagnostics,synthesis,validation,rendered,artifact,reality,gitDiff,comparison @@ -586,231 +387,6 @@ D: reality() gitDiff() comparison() - python/ast_extract.py: - e: FactVisitor,source_hash,dotted_name,is_module_entrypoint,iter_python_files,main - FactVisitor(ast.NodeVisitor): __init__(2),excerpt(1),add(6),visit_Import(1),visit_ImportFrom(1),visit_FunctionDef(1),visit_AsyncFunctionDef(1),visit_ClassDef(1),add_named_constant(3),visit_Assign(1),visit_AnnAssign(1),visit_If(1),visit_Call(1) - source_hash(value) - dotted_name(node) - is_module_entrypoint(node) - iter_python_files(root;files_from) - main() - src/web/diff-ui-script.ts: - e: byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns,compareGraphs - byId() - requestHeaders() - formatBytes() - selectedRun() - updateMeta() - fillSelect() - loadRuns() - compareGraphs() - src/diff/reality.ts: - i: ../core/id.js,../core/schema.js,../core/target.js - e: RealityRow,IntentRealityView,RealitySvgOptions,RealitySvgLayout,buildRealityView,components,diagnosticsByRecord,rows,buildRealityRows,rows,buildRealityRow,codes,status,compareRealityRows,bySeverity,alignment,bySize,buildRealityTotals,declaredRecords,observedRecords,aligned,declaredTopics,observedTopics,implementationAlignedTopics,documentedObservedTopics,ratio,documentedCoverageLabel,LABEL_CHAR,BADGE_CHAR,widestLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,summarizeLaneTotals,declared,observed,changelog,topicLabel,separator,raw,value,declared,object,renderRealitySvg,theme,maxRows,title,rows,visible,layout,header,body,overflow,height,buildRealityLayout,laneX,laneStep,statusX,statusWidth,renderRealityLaneHeaders,isDeclared,renderRealityRow,y,color,renderRealityLanes,count,cx,renderRealityLaneCell,fill,label,pillWidth,renderMoreTopicsLabel,y,renderRealityHeight,footer,y,renderRealityMarkdown,lanes,escapeMarkdown - RealityRow: - IntentRealityView: - RealitySvgOptions: - RealitySvgLayout: - buildRealityView() - components() - diagnosticsByRecord() - rows() - buildRealityRows() - rows() - buildRealityRow() - codes() - status() - compareRealityRows() - bySeverity() - alignment() - bySize() - buildRealityTotals() - declaredRecords() - observedRecords() - aligned() - declaredTopics() - observedTopics() - implementationAlignedTopics() - documentedObservedTopics() - ratio() - documentedCoverageLabel() - LABEL_CHAR() - BADGE_CHAR() - widestLabel() - groupIntoTopics() - symbolPaths() - anchors() - groups() - key() - bucket() - indexModuleAnchors() - modulePaths() - targetless() - candidates() - path() - values() - resolvesToFile() - resolved() - indexUnambiguousSymbolPaths() - candidates() - paths() - values() - primaryTargetKey() - anchor() - indexDiagnostics() - index() - bucket() - resolveEvidence() - resolveStatus() - summarizeLaneTotals() - declared() - observed() - changelog() - topicLabel() - separator() - raw() - value() - declared() - object() - renderRealitySvg() - theme() - maxRows() - title() - rows() - visible() - layout() - header() - body() - overflow() - height() - buildRealityLayout() - laneX() - laneStep() - statusX() - statusWidth() - renderRealityLaneHeaders() - isDeclared() - renderRealityRow() - y() - color() - renderRealityLanes() - count() - cx() - renderRealityLaneCell() - fill() - label() - pillWidth() - renderMoreTopicsLabel() - y() - renderRealityHeight() - footer() - y() - renderRealityMarkdown() - lanes() - escapeMarkdown() - src/communication/analyzer.ts: - i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js - e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,humanRequests,agentMessages,uniqueIssues,participantRows,collectParticipantsAndIdentityIssues,participants,participant,values,collectConflictIssues,left,right,leftRole,rightRole,code,responseRequiredFrom,resolveConflictCode,collectRequestResponseIssues,response,collectAgentActionIssues,type,participantGit,linked,matchedRequest,deduplicateCommunicationIssues,buildParticipantRows,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex - CommunicationIssue: - ParticipantCommunicationAnalysis: - CommunicationAnalysis: - analyzeCommunication() - communication() - evidenceByRecord() - humanRequests() - agentMessages() - uniqueIssues() - participantRows() - collectParticipantsAndIdentityIssues() - participants() - participant() - values() - collectConflictIssues() - left() - right() - leftRole() - rightRole() - code() - responseRequiredFrom() - resolveConflictCode() - collectRequestResponseIssues() - response() - collectAgentActionIssues() - type() - participantGit() - linked() - matchedRequest() - deduplicateCommunicationIssues() - buildParticipantRows() - aliases() - matchedGit() - evidence() - validateSyntheses() - byId() - ids() - record() - renderCommunicationMarkdown() - addCommunicationIssuesToDiagnostics() - hasSerious() - communicationIssueTitle() - evidenceNeighbors() - records() - output() - left() - right() - isEvidenceRecord() - matchedGitRecords() - aliases() - semanticMatch() - conflictSemanticMatch() - leftHasExplicitTarget() - rightHasExplicitTarget() - agentResponseCoversRequest() - candidates() - bySource() - values() - aggregateTopicMatch() - requested() - response() - shared() - agentWorkCoveredByHumanScope() - requests() - sourceRecords() - plans() - agentSourceRecords() - isBroadRequest() - isActionableAgentWork() - isPositiveImplementationClaim() - isHumanDecisionClaim() - hasImplementationVerb() - withoutTickets() - value() - intersects() - values() - participantOf() - participantsForRole() - roleOf() - typeOf() - ticketOf() - gitAliases() - normalizeIdentity() - append() - values() - issue() - sortedRespondents() - explicitResponseRoute() - severityRank() - escapeCell() - escapeRegex() - scripts/verify-no-llm-imports.mjs: - i: node:fs,node:path - e: visited,visit,body,resolved,resolveSource,raw - visited() - visit() - body() - resolved() - resolveSource() - raw() src/extractors/docs-record.ts: i: ../core/record.js,../version.js,./docs-types.js e: OBJECT_PLACEHOLDERS,toDocumentIntentRecord,statementText,target,action,modality,isPlaceholder,resolveObject,fallback,anchorToSource,claimedStart,claimedEnd,wanted,lines,scores,claimedScore,bestScore,bestIndex,anchored,keywordOverlap,present,shared,resolveTarget,hasTarget,resolveAction,derived,resolveModality,derived,linesFromChunk,lines,relativeStart,relativeEnd,clampLine,allowedAction,allowedModality,allowedLifecycle @@ -1035,6 +611,60 @@ D: cleaned() pieces() value() + src/diff/reality-build.ts: + i: ../core/id.js,../core/schema.js,../core/target.js,./reality-totals.js + e: RealityRow,IntentRealityView,buildRealityView,components,diagnosticsByRecord,rows,buildRealityRows,rows,buildRealityRow,codes,status,compareRealityRows,bySeverity,alignment,bySize,documentedCoverageLabel,groupIntoTopics,symbolPaths,anchors,groups,key,bucket,indexModuleAnchors,modulePaths,targetless,candidates,path,values,resolvesToFile,resolved,indexUnambiguousSymbolPaths,candidates,paths,values,primaryTargetKey,anchor,indexDiagnostics,index,bucket,resolveEvidence,resolveStatus,summarizeLaneTotals,declared,observed,changelog,topicLabel,separator,raw,value,declared,object + RealityRow: + IntentRealityView: + buildRealityView() + components() + diagnosticsByRecord() + rows() + buildRealityRows() + rows() + buildRealityRow() + codes() + status() + compareRealityRows() + bySeverity() + alignment() + bySize() + documentedCoverageLabel() + groupIntoTopics() + symbolPaths() + anchors() + groups() + key() + bucket() + indexModuleAnchors() + modulePaths() + targetless() + candidates() + path() + values() + resolvesToFile() + resolved() + indexUnambiguousSymbolPaths() + candidates() + paths() + values() + primaryTargetKey() + anchor() + indexDiagnostics() + index() + bucket() + resolveEvidence() + resolveStatus() + summarizeLaneTotals() + declared() + observed() + changelog() + topicLabel() + separator() + raw() + value() + declared() + object() src/evaluation/gold.ts: i: ../core/id.js,./gold-extraction.js,node:fs e: EvaluationCore,EvaluationRun,EvaluationResult,loadGoldDataset,parsed,evaluateGoldDataset,first,second,stable,goldReportIsPerfect,renderGoldReportMarkdown,percent,support,rows,value,evaluateOnce,extraction,linking,dsl2todo,diagnostics,evaluateExtraction,byChannel,actual,overall,evaluateDiagnostics,counts,forbiddenViolations,snapshots,result,evaluateLinking,counts,byClass,forbiddenViolations,snapshots,result,reranking,evaluateDsl2Todo,duplicateCounts,snapshots,result @@ -1136,28 +766,129 @@ D: IntakeDiagnostic: IntakeResult: IntakeError: super(-1),payloadHash(-1),canonicalJson(-1),record(-1),assertIntakeEnvelope(-1),envelope(-1),validateIntakeEnvelopeHeader(-1),validateIntakeEnvelopeTimestamp(-1),assertCommand(-1),assertQuery(-1),invalid(-1),validateIntakeEnvelopeHeader(-1),invalid(-1),invalid(-1),validateIntakeEnvelopeTimestamp(-1),invalid(-1),assertCommand(-1),base(-1),validateCommandPayload(-1),validateCommandPayload(-1),assertParticipant(-1),participantId(-1),assertPrincipal(-1),participantId(-1),role(-1),stringArray(-1),capabilities(-1),participantId(-1),role(-1),ticketId(-1),invalid(-1),invalid(-1),participantId(-1),ticketId(-1),invalid(-1),assertQuery(-1),base(-1),validateQueryPayload(-1),validateQueryPayload(-1),nonBlank(-1),participantId(-1),ticketId(-1),nonBlank(-1),participantId(-1),ticketId(-1),invalid(-1),assertParticipant(-1),entry(-1),participantId(-1),nonBlank(-1),capabilities(-1),stringArray(-1),principalKey(-1),assertPrincipal(-1),principal(-1),nonBlank(-1),nonBlank(-1),commandFields(-1),type(-1),queryFields(-1),type(-1),strictObject(-1),record(-1),allowed(-1),extra(-1),missing(-1),participantId(-1),ticketId(-1),role(-1),nonBlank(-1),stringArray(-1),capabilities(-1),allowed(-1),invalid(-1),diagnostic(-1),known(-1) - golang/ast_extract.go: - e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash - Fact: - output: - factCollector: - main() - emit() - collectGoFiles() - parseFile() - position() - excerpt() - add() - visitDecl() - visitFunc() - visitGenDecl() - visitCalls() - typeName() - declaredTypeKind() - strPtr() - toSlash() - scripts/research/rerank-embedding-shortlist.mjs: - i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path + src/communication/analyzer.ts: + i: ../core/id.js,../core/schema.js,../core/text.js,../core/types.js,../extractors/communication.js,./llm.js + e: CommunicationIssue,ParticipantCommunicationAnalysis,CommunicationAnalysis,analyzeCommunication,communication,evidenceByRecord,humanRequests,agentMessages,uniqueIssues,participantRows,collectParticipantsAndIdentityIssues,participants,participant,values,collectConflictIssues,left,right,leftRole,rightRole,code,responseRequiredFrom,resolveConflictCode,collectRequestResponseIssues,response,collectAgentActionIssues,type,issueItem,classifyAgentActionIssue,participantGit,linked,matchedRequest,isActionableMessage,isWorkTrackingMessage,deduplicateCommunicationIssues,buildParticipantRows,aliases,matchedGit,evidence,validateSyntheses,byId,ids,record,renderCommunicationMarkdown,addCommunicationIssuesToDiagnostics,hasSerious,communicationIssueTitle,evidenceNeighbors,records,output,left,right,isEvidenceRecord,matchedGitRecords,aliases,semanticMatch,conflictSemanticMatch,leftHasExplicitTarget,rightHasExplicitTarget,agentResponseCoversRequest,candidates,bySource,values,aggregateTopicMatch,requested,response,shared,agentWorkCoveredByHumanScope,requests,sourceRecords,plans,agentSourceRecords,isBroadRequest,isActionableAgentWork,isPositiveImplementationClaim,isHumanDecisionClaim,hasImplementationVerb,withoutTickets,value,intersects,values,participantOf,participantsForRole,roleOf,typeOf,ticketOf,gitAliases,normalizeIdentity,append,values,issue,sortedRespondents,explicitResponseRoute,severityRank,escapeCell,escapeRegex + CommunicationIssue: + ParticipantCommunicationAnalysis: + CommunicationAnalysis: + analyzeCommunication() + communication() + evidenceByRecord() + humanRequests() + agentMessages() + uniqueIssues() + participantRows() + collectParticipantsAndIdentityIssues() + participants() + participant() + values() + collectConflictIssues() + left() + right() + leftRole() + rightRole() + code() + responseRequiredFrom() + resolveConflictCode() + collectRequestResponseIssues() + response() + collectAgentActionIssues() + type() + issueItem() + classifyAgentActionIssue() + participantGit() + linked() + matchedRequest() + isActionableMessage() + isWorkTrackingMessage() + deduplicateCommunicationIssues() + buildParticipantRows() + aliases() + matchedGit() + evidence() + validateSyntheses() + byId() + ids() + record() + renderCommunicationMarkdown() + addCommunicationIssuesToDiagnostics() + hasSerious() + communicationIssueTitle() + evidenceNeighbors() + records() + output() + left() + right() + isEvidenceRecord() + matchedGitRecords() + aliases() + semanticMatch() + conflictSemanticMatch() + leftHasExplicitTarget() + rightHasExplicitTarget() + agentResponseCoversRequest() + candidates() + bySource() + values() + aggregateTopicMatch() + requested() + response() + shared() + agentWorkCoveredByHumanScope() + requests() + sourceRecords() + plans() + agentSourceRecords() + isBroadRequest() + isActionableAgentWork() + isPositiveImplementationClaim() + isHumanDecisionClaim() + hasImplementationVerb() + withoutTickets() + value() + intersects() + values() + participantOf() + participantsForRole() + roleOf() + typeOf() + ticketOf() + gitAliases() + normalizeIdentity() + append() + values() + issue() + sortedRespondents() + explicitResponseRoute() + severityRank() + escapeCell() + escapeRegex() + golang/ast_extract.go: + e: Fact,output,factCollector,main,emit,collectGoFiles,parseFile,collectPackageFact,collectImportFacts,collectDeclarationFacts,position,excerpt,add,visitDecl,visitFunc,visitGenDecl,visitCalls,typeName,declaredTypeKind,strPtr,toSlash + Fact: + output: + factCollector: + main() + emit() + collectGoFiles() + parseFile() + collectPackageFact() + collectImportFacts() + collectDeclarationFacts() + position() + excerpt() + add() + visitDecl() + visitFunc() + visitGenDecl() + visitCalls() + typeName() + declaredTypeKind() + strPtr() + toSlash() + scripts/research/rerank-embedding-shortlist.mjs: + i: ../../dist/src/config/env.js,../../dist/src/semantic/reranker-llm.js,node:fs,node:path e: options,records,selectedRows,declaration,module,candidateSet,config,rerank,augmentedGraph,originalRelationIds,originallyRelatedPairs,candidateById,accepted,candidate,relation,verdictCounts,resolveDeclaration,exact,matches,resolveModule,exact,matches,readJson,parseArgs,values,key,value,required,value,top options() records() @@ -1189,310 +920,108 @@ D: required() value() top() - src/cli.ts: - i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util - e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,next,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath - ParsedArgs: - execFileAsync() - main() - parsed() - command() - config() + sdk/rust/src/client.rs: + i: crate::,serde_json::,std::io::,std::net::,std::sync::atomic::,std::time::,super:: + e: Client + Client: + src/services/actions.ts: + i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path + e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest + CommunicationGraphFilter: + executeAction() + root() handler() - commandHandlers() - resolveMainCommand() - handleLink() - files() + executeExtractNlAction() + file() + text() + executeExtractGitAction() + executeExtractAstAction() + executeExtractConfigAction() + executeExtractMarkdownAction() + executeExtractDocsAction() + executeExtractCommunicationAction() + executeAnalyzeCommunicationAction() + analysis() + executeLinkAction() records() + executeDiagnoseAction() graph() - handleDiagnose() - graphFile() + executeSummarizeAction() graph() - handleSummarize() - graphFile() + diagnostics() + executeProposeTodoAction() graph() - diagnosticsPath() diagnostics() result() - out() - handleProposeTodo() - graphPath() - diagnosticsPath() output() + executeRenderTodoAction() + graph() + diagnostics() + synthesis() + todoPath() + patchPath() + auditPath() + todoContent() + rendered() + executeApplyTodoAction() + todoPath() + patchPath() + auditPath() + receiptPath() result() - handleRenderTodo() - synthesisPath() - graphPath() - diagnosticsPath() - patch() - audit() - result() - handleApplyTodo() - patch() - audit() - receipt() - actor() - approvalHash() + executeProposeCodeChangeAction() + graph() + diagnostics() + conclusions() + proposals() result() - handleProposeCodeChange() - graphPath() - diagnosticsPath() output() - result() - handleRenderCodeChange() - plansPath() + executeRenderCodeChangeAction() + planSet() + review() + patchPath() + auditPath() + executeProposeSourcePatchAction() + plan() + unifiedDiffs() patch() - audit() + output() + planSet() result() - handleProposeSourcePatch() - inputPath() output() - isPlanSet() + executeApplySourcePatchAction() + patch() + receiptPath() result() - handleApplySourcePatch() - patchPath() - actor() - approvalHash() - receipt() + executeEvaluateCodeChangeAction() + plan() + beforeGraph() + beforeDiagnostics() + afterGraph() + afterDiagnostics() result() - handleEvaluateCodeChange() - planPath() - beforeGraphPath() - afterGraphPath() output() + executeCloseCodeChangeAction() + beforeGraph() + beforeDiagnostics() + afterGraph() + afterDiagnostics() + value() + planSet() result() - handleCloseCodeChange() - inputPath() - beforeGraphPath() - afterGraphPath() output() - result() - handleCompareWorkspace() - root() - result() - handlePipeline() - root() - options() - result() - handleWatch() - root() - taskFile() - pipeline() - controller() - stop() - resolvePipelineRoot() - buildPipelineOptions() - buildCommonPipelineOptions() - resolveWatchTaskFile() - buildWorkspaceComparisonOptions() - formatWatchEvent() - stamp() - handleDiff() - mode() - out() - svg() - html() - maxRows() - parseDiffMode() - mode() - handleGraphDiff() - beforeFile() - afterFile() - diff() - out() - svg() - buildDiffPayload() - buildFileDiff() - beforeFile() - afterFile() - context() - buildGitDiff() - context() - root() - result() - handleReality() - graphFile() - graph() - diagnosticsPath() - diagnostics() - view() - out() - svg() - markdown() - handleExtract() - extractor() - root() - out() - handler() - handleExtractNl() - file() - inline() - result() - handleExtractGit() - result() - handleExtractAst() - result() - handleExtractConfig() - result() - handleExtractRuntime() - cycle() - result() - handleExtractMarkdown() - result() - handleExtractDocs() - result() - handleExtractCommunication() - result() - handleCommunication() - root() - graph() - analysis() - out() - markdown() - graphOut() - emitExtraction() - emitJson() - handleIntake() - operation() - inputPath() - absolute() - result() - intakeExitCode() - initProject() - moduleRoot() - sourceEnv() - targetEnv() - task() - sourceIgnore() - targetIgnore() - doctor() - result() - parseArgs() - options() - value() - next() - name() - next() - optionString() - value() - optionNullableString() - value() - optionBoolean() - value() - optionNumber() - value() - number() - optionList() - value() - optionNlMode() - optionLlmMode() - value() - optionTaskMode() - value() - optionSummaryMode() - optionPipelineTaskMode() - value() - reportPipelineDegradation() - printHelp() - invokedPath() - src/services/actions.ts: - i: ../communication/analyzer.js,../communication/llm.js,../comparison/workspace.js,../config/env.js,../core/io.js,../core/security.js,../core/types.js,../core/types.js,../diff/git.js,../diff/reality.js,../extractors/ast.js,../extractors/configuration.js,../extractors/docs-llm.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../graph/diagnostics.js,../graph/diff.js,../graph/linker.js,../pipeline/run.js,../summary/summarizer.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,node:path - e: CommunicationGraphFilter,executeAction,root,handler,executeExtractNlAction,file,text,executeExtractGitAction,executeExtractAstAction,executeExtractConfigAction,executeExtractMarkdownAction,executeExtractDocsAction,executeExtractCommunicationAction,executeAnalyzeCommunicationAction,analysis,executeLinkAction,records,executeDiagnoseAction,graph,executeSummarizeAction,graph,diagnostics,executeProposeTodoAction,graph,diagnostics,result,output,executeRenderTodoAction,graph,diagnostics,synthesis,todoPath,patchPath,auditPath,todoContent,rendered,executeApplyTodoAction,todoPath,patchPath,auditPath,receiptPath,result,executeProposeCodeChangeAction,graph,diagnostics,conclusions,proposals,result,output,executeRenderCodeChangeAction,planSet,review,patchPath,auditPath,executeProposeSourcePatchAction,plan,unifiedDiffs,patch,output,planSet,result,output,executeApplySourcePatchAction,patch,receiptPath,result,executeEvaluateCodeChangeAction,plan,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,result,output,executeCloseCodeChangeAction,beforeGraph,beforeDiagnostics,afterGraph,afterDiagnostics,value,planSet,result,output,executeDiffAction,beforeInput,afterInput,before,after,diff,svg,executeDiffFilesAction,beforePath,afterPath,diff,executeDiffGitAction,result,executeRealityAction,graph,diagnostics,view,executeCompareWorkspaceAction,executePipelineAction,filterCommunicationGraph,filter,records,parseCommunicationGraphFilter,participant,role,ticket,communicationOnly,matchesCommunicationFilter,matchesParticipant,matchesRole,matchesTicket,nlModeValue,llmModeValue,taskSynthesisMode,summaryModeValue,pipelineTaskMode,withTextDiffViews,title,readGraphInput,safePath,readActionObject,safePath,resolveRoot,requested,scopedPath,selected,nullableScopedPath,selected,readRecords,files,safeFile,stringValue,nullableString,stringList,numberValue,number,hasInputValue,objectMapOfStrings,booleanValue,objectValue,registerRunArtifacts,manifestPath,manifest - CommunicationGraphFilter: - executeAction() - root() - handler() - executeExtractNlAction() - file() - text() - executeExtractGitAction() - executeExtractAstAction() - executeExtractConfigAction() - executeExtractMarkdownAction() - executeExtractDocsAction() - executeExtractCommunicationAction() - executeAnalyzeCommunicationAction() - analysis() - executeLinkAction() - records() - executeDiagnoseAction() - graph() - executeSummarizeAction() - graph() - diagnostics() - executeProposeTodoAction() - graph() - diagnostics() - result() - output() - executeRenderTodoAction() - graph() - diagnostics() - synthesis() - todoPath() - patchPath() - auditPath() - todoContent() - rendered() - executeApplyTodoAction() - todoPath() - patchPath() - auditPath() - receiptPath() - result() - executeProposeCodeChangeAction() - graph() - diagnostics() - conclusions() - proposals() - result() - output() - executeRenderCodeChangeAction() - planSet() - review() - patchPath() - auditPath() - executeProposeSourcePatchAction() - plan() - unifiedDiffs() - patch() - output() - planSet() - result() - output() - executeApplySourcePatchAction() - patch() - receiptPath() - result() - executeEvaluateCodeChangeAction() - plan() - beforeGraph() - beforeDiagnostics() - afterGraph() - afterDiagnostics() - result() - output() - executeCloseCodeChangeAction() - beforeGraph() - beforeDiagnostics() - afterGraph() - afterDiagnostics() - value() - planSet() - result() - output() - executeDiffAction() - beforeInput() - afterInput() - before() - after() - diff() - svg() - executeDiffFilesAction() - beforePath() - afterPath() - diff() - executeDiffGitAction() + executeDiffAction() + beforeInput() + afterInput() + before() + after() + diff() + svg() + executeDiffFilesAction() + beforePath() + afterPath() + diff() + executeDiffGitAction() result() executeRealityAction() graph() @@ -1627,159 +1156,375 @@ D: separator() key() value() - envString() + envString() + value() + envOptional() + value() + envNumber() + raw() + value() + envBoolean() + raw() + envList() + raw() + envLlmMode() + value() + getConfig() + model() + root() + configForDisplay() + hasOpenRouter() + src/interfaces/a2a-history.ts: + i: ../config/env.js,../core/security.js,node:fs,node:path + e: RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,matchesRunFilters,participant,role,ticket,severity,normalized,safeRunPath + RunHistoryFilters: + listIntentRuns() + runsDirectory() + entries() + items() + readRunEntries() + readRun() + runDirectory() + graphPath() + manifestPath() + manifest() + matchesRunFilters() + participant() + role() + ticket() + severity() + normalized() + safeRunPath() + src/diff/text-render.ts: + i: ./text-types.js + e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number + TextDiffSvgOptions: + SideBySideRow: + renderUnifiedDiff() + marker() + toSideBySideRows() + index() + line() + pairs() + renderTextDiffSvg() + theme() + maxRows() + maxColumns() + title() + charWidth() + rowHeight() + gutterWidth() + columnWidth() + width() + totals() + y() + rendered() + skipped() + summarizeDiffs() + diffHeading() + svgBody() + sideBySideRowMarkup() + changed() + number() + renderTextDiffHtml() + title() + sections() + renderHtmlSection() + hunks() + rows() + htmlCell() + cssClass() + number() + src/operations/subactor.ts: + i: ../core/types.js,./validation.js + e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding + CompileSubactorEnvelopeOptions: + valueMatchesType() + assertBinding() + ageSeconds() + compileSubactorProcessEnvelope() + variableById() + referenced() + variable() + binding() + humanApproval() + binding() + src/communication/intake-protobuf.ts: + i: ./intake-contract.js + e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,parsed,values,unknownFields,payload,envelope,encodeIntakeResult,decodeIntakeResult,parsed,strings,numbers,decodeDelimitedFields,values,strings,numbers,offset,fieldStart,field,wire,raw,value,parsePayloadJson,parseOptionalJson,buildIntakeEnvelope,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte + encodeIntakeEnvelope() + operation() + decodeIntakeEnvelope() + parsed() + values() + unknownFields() + payload() + envelope() + encodeIntakeResult() + decodeIntakeResult() + parsed() + strings() + numbers() + decodeDelimitedFields() + values() + strings() + numbers() + offset() + fieldStart() + field() + wire() + raw() + value() + parsePayloadJson() + parseOptionalJson() + buildIntakeEnvelope() + bytesField() + data() + varintField() + writeVarint() + remaining() + readVarint() + value() + byte() + src/communication/intake-service.ts: + i: ./intake-store.js,node:crypto,node:fs,node:path + e: IntakeState,GovernedIntakeService + IntakeState: + GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) + scripts/live-model-comparison.mjs: + i: node:fs,node:path,node:url + e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile + REPO_ROOT() + main() + probe() + timeoutMs() + models() + root() + config() + result() + comparison() + rendered() + jsonTarget() + markdownTarget() + failedAudit() + message() + writeFile() + src/cli.ts: + i: ./communication/analyzer.js,./communication/llm.js,./comparison/workspace.js,./config/env.js,./core/io.js,./core/types.js,./diff/git.js,./diff/reality.js,./extractors/ast.js,./extractors/configuration.js,./extractors/docs-llm.js,./extractors/git.js,./extractors/markdown-llm.js,./extractors/nl-llm.js,./extractors/runtime-cycle.js,./graph/diagnostics.js,./graph/diff.js,./graph/linker.js,./interfaces/a2a.js,./interfaces/intake-actions.js,./interfaces/mcp.js,./pipeline/run.js,./services/actions.js,./summary/summarizer.js,./version.js,./watch/watcher.js,node:child_process,node:fs,node:path,node:url,node:util + e: ParsedArgs,execFileAsync,main,parsed,command,config,handler,shouldShowGlobalHelp,shouldShowGlobalVersion,resolveRequestedCommand,isHelpRequest,resolveCommandHandler,handler,commandHandlers,resolveMainCommand,handleLink,files,records,graph,handleDiagnose,graphFile,graph,handleSummarize,graphFile,graph,diagnosticsPath,diagnostics,result,out,handleProposeTodo,graphPath,diagnosticsPath,output,result,handleRenderTodo,synthesisPath,graphPath,diagnosticsPath,patch,audit,result,handleApplyTodo,patch,audit,receipt,actor,approvalHash,result,handleProposeCodeChange,graphPath,diagnosticsPath,output,result,handleRenderCodeChange,plansPath,patch,audit,result,handleProposeSourcePatch,inputPath,output,isPlanSet,result,handleApplySourcePatch,patchPath,actor,approvalHash,receipt,result,handleEvaluateCodeChange,planPath,beforeGraphPath,afterGraphPath,output,result,handleCloseCodeChange,inputPath,beforeGraphPath,afterGraphPath,output,result,handleCompareWorkspace,root,result,handlePipeline,root,options,result,handleWatch,root,taskFile,pipeline,controller,stop,resolvePipelineRoot,buildPipelineOptions,buildCommonPipelineOptions,resolveWatchTaskFile,buildWorkspaceComparisonOptions,formatWatchEvent,stamp,handleDiff,mode,out,svg,html,maxRows,parseDiffMode,mode,handleGraphDiff,beforeFile,afterFile,diff,out,svg,buildDiffPayload,buildFileDiff,beforeFile,afterFile,context,buildGitDiff,context,root,result,handleReality,graphFile,graph,diagnosticsPath,diagnostics,view,out,svg,markdown,handleExtract,extractor,root,out,handler,handleExtractNl,file,inline,result,handleExtractGit,result,handleExtractAst,result,handleExtractConfig,result,handleExtractRuntime,cycle,result,handleExtractMarkdown,result,handleExtractDocs,result,handleExtractCommunication,result,handleCommunication,root,graph,analysis,out,markdown,graphOut,emitExtraction,emitJson,handleIntake,operation,inputPath,absolute,result,intakeExitCode,initProject,moduleRoot,sourceEnv,targetEnv,task,sourceIgnore,targetIgnore,doctor,result,parseArgs,options,value,isLongOption,isShortOption,parseLongOption,next,parseShortOption,name,next,optionString,value,optionNullableString,value,optionBoolean,value,optionNumber,value,number,optionList,value,optionNlMode,optionLlmMode,value,optionTaskMode,value,optionSummaryMode,optionPipelineTaskMode,value,reportPipelineDegradation,printHelp,invokedPath + ParsedArgs: + execFileAsync() + main() + parsed() + command() + config() + handler() + shouldShowGlobalHelp() + shouldShowGlobalVersion() + resolveRequestedCommand() + isHelpRequest() + resolveCommandHandler() + handler() + commandHandlers() + resolveMainCommand() + handleLink() + files() + records() + graph() + handleDiagnose() + graphFile() + graph() + handleSummarize() + graphFile() + graph() + diagnosticsPath() + diagnostics() + result() + out() + handleProposeTodo() + graphPath() + diagnosticsPath() + output() + result() + handleRenderTodo() + synthesisPath() + graphPath() + diagnosticsPath() + patch() + audit() + result() + handleApplyTodo() + patch() + audit() + receipt() + actor() + approvalHash() + result() + handleProposeCodeChange() + graphPath() + diagnosticsPath() + output() + result() + handleRenderCodeChange() + plansPath() + patch() + audit() + result() + handleProposeSourcePatch() + inputPath() + output() + isPlanSet() + result() + handleApplySourcePatch() + patchPath() + actor() + approvalHash() + receipt() + result() + handleEvaluateCodeChange() + planPath() + beforeGraphPath() + afterGraphPath() + output() + result() + handleCloseCodeChange() + inputPath() + beforeGraphPath() + afterGraphPath() + output() + result() + handleCompareWorkspace() + root() + result() + handlePipeline() + root() + options() + result() + handleWatch() + root() + taskFile() + pipeline() + controller() + stop() + resolvePipelineRoot() + buildPipelineOptions() + buildCommonPipelineOptions() + resolveWatchTaskFile() + buildWorkspaceComparisonOptions() + formatWatchEvent() + stamp() + handleDiff() + mode() + out() + svg() + html() + maxRows() + parseDiffMode() + mode() + handleGraphDiff() + beforeFile() + afterFile() + diff() + out() + svg() + buildDiffPayload() + buildFileDiff() + beforeFile() + afterFile() + context() + buildGitDiff() + context() + root() + result() + handleReality() + graphFile() + graph() + diagnosticsPath() + diagnostics() + view() + out() + svg() + markdown() + handleExtract() + extractor() + root() + out() + handler() + handleExtractNl() + file() + inline() + result() + handleExtractGit() + result() + handleExtractAst() + result() + handleExtractConfig() + result() + handleExtractRuntime() + cycle() + result() + handleExtractMarkdown() + result() + handleExtractDocs() + result() + handleExtractCommunication() + result() + handleCommunication() + root() + graph() + analysis() + out() + markdown() + graphOut() + emitExtraction() + emitJson() + handleIntake() + operation() + inputPath() + absolute() + result() + intakeExitCode() + initProject() + moduleRoot() + sourceEnv() + targetEnv() + task() + sourceIgnore() + targetIgnore() + doctor() + result() + parseArgs() + options() + value() + isLongOption() + isShortOption() + parseLongOption() + next() + parseShortOption() + name() + next() + optionString() value() - envOptional() + optionNullableString() value() - envNumber() - raw() + optionBoolean() value() - envBoolean() - raw() - envList() - raw() - envLlmMode() + optionNumber() value() - getConfig() - model() - root() - configForDisplay() - hasOpenRouter() - src/interfaces/a2a-history.ts: - i: ../config/env.js,../core/security.js,node:fs,node:path - e: RunHistoryFilters,listIntentRuns,runsDirectory,entries,items,readRunEntries,readRun,runDirectory,graphPath,manifestPath,manifest,matchesRunFilters,participant,role,ticket,severity,normalized,safeRunPath - RunHistoryFilters: - listIntentRuns() - runsDirectory() - entries() - items() - readRunEntries() - readRun() - runDirectory() - graphPath() - manifestPath() - manifest() - matchesRunFilters() - participant() - role() - ticket() - severity() - normalized() - safeRunPath() - src/diff/text-render.ts: - i: ./text-types.js - e: TextDiffSvgOptions,SideBySideRow,renderUnifiedDiff,marker,toSideBySideRows,index,line,pairs,renderTextDiffSvg,theme,maxRows,maxColumns,title,charWidth,rowHeight,gutterWidth,columnWidth,width,totals,y,rendered,skipped,summarizeDiffs,diffHeading,svgBody,sideBySideRowMarkup,changed,number,renderTextDiffHtml,title,sections,renderHtmlSection,hunks,rows,htmlCell,cssClass,number - TextDiffSvgOptions: - SideBySideRow: - renderUnifiedDiff() - marker() - toSideBySideRows() - index() - line() - pairs() - renderTextDiffSvg() - theme() - maxRows() - maxColumns() - title() - charWidth() - rowHeight() - gutterWidth() - columnWidth() - width() - totals() - y() - rendered() - skipped() - summarizeDiffs() - diffHeading() - svgBody() - sideBySideRowMarkup() - changed() - number() - renderTextDiffHtml() - title() - sections() - renderHtmlSection() - hunks() - rows() - htmlCell() - cssClass() number() - src/operations/subactor.ts: - i: ../core/types.js,./validation.js - e: CompileSubactorEnvelopeOptions,valueMatchesType,assertBinding,ageSeconds,compileSubactorProcessEnvelope,variableById,referenced,variable,binding,humanApproval,binding - CompileSubactorEnvelopeOptions: - valueMatchesType() - assertBinding() - ageSeconds() - compileSubactorProcessEnvelope() - variableById() - referenced() - variable() - binding() - humanApproval() - binding() - src/communication/intake-protobuf.ts: - i: ./intake-contract.js - e: encodeIntakeEnvelope,operation,decodeIntakeEnvelope,parsed,values,unknownFields,payload,envelope,encodeIntakeResult,decodeIntakeResult,parsed,strings,numbers,decodeDelimitedFields,values,strings,numbers,offset,fieldStart,field,wire,raw,value,parsePayloadJson,parseOptionalJson,buildIntakeEnvelope,bytesField,data,varintField,writeVarint,remaining,readVarint,value,byte - encodeIntakeEnvelope() - operation() - decodeIntakeEnvelope() - parsed() - values() - unknownFields() - payload() - envelope() - encodeIntakeResult() - decodeIntakeResult() - parsed() - strings() - numbers() - decodeDelimitedFields() - values() - strings() - numbers() - offset() - fieldStart() - field() - wire() - raw() + optionList() value() - parsePayloadJson() - parseOptionalJson() - buildIntakeEnvelope() - bytesField() - data() - varintField() - writeVarint() - remaining() - readVarint() + optionNlMode() + optionLlmMode() value() - byte() - src/communication/intake-service.ts: - i: ./intake-store.js,node:crypto,node:fs,node:path - e: IntakeState,GovernedIntakeService - IntakeState: - GovernedIntakeService: command(-1),duplicate(-1),state(-1),actor(-1),event(-1),appended(-1),actual(-1),updated(-1),participantId(-1),ticketId(-1),actual(-1),query(-1),stream(-1),state(-1),payload(-1),command(-1),requireManagerOrBootstrap(-1),ensurePrincipalsUnique(-1),requireCapability(-1),requireKnownActor(-1),requireCapability(-1),participant(-1),requireCapability(-1),participant(-1),participant(-1),requireCapability(-1),rejectSecrets(-1),requireCapability(-1),participant(-1),writeProjection(-1),participant(-1),target(-1),messages(-1),body(-1),projectionHash(-1),stat(-1),existing(-1),assertProjectionWritable(-1),target(-1),slug(-1),directory(-1),roleFiles(-1),stat(-1),existing(-1),validateProjection(-1),participant(-1),target(-1),directory(-1),slug(-1),candidates(-1),roleFiles(-1),conflictingFiles(-1),existing(-1),messages(-1),body(-1),hash(-1),replay(-1),participants(-1),participant(-1),participant(-1),participant(-1),registry(-1),resolveActor(-1),requireKnownActor(-1),requireManagerOrBootstrap(-1),requireCapability(-1),requireCapability(-1),requireKnownActor(-1),requireParticipant(-1),participant(-1),ensurePrincipalsUnique(-1),ensurePrincipalAvailable(-1),key(-1),rejectSecrets(-1),accepted(-1),rejected(-1),envelope(-1),unauthorized(-1),duplicate(-1),drift(-1),escapeRegex(-1),commandEnvelope(-1) - scripts/live-model-comparison.mjs: - i: node:fs,node:path,node:url - e: REPO_ROOT,main,probe,timeoutMs,models,root,config,result,comparison,rendered,jsonTarget,markdownTarget,failedAudit,message,writeFile - REPO_ROOT() - main() - probe() - timeoutMs() - models() - root() - config() - result() - comparison() - rendered() - jsonTarget() - markdownTarget() - failedAudit() - message() - writeFile() + optionTaskMode() + value() + optionSummaryMode() + optionPipelineTaskMode() + value() + reportPipelineDegradation() + printHelp() + invokedPath() src/extractors/ast.ts: i: ../config/env.js,../core/content-cache.js,../core/id.js,../core/ignore.js,../core/io.js,../core/schema.js,../core/types.js,../version.js,./ast/go.js,./ast/java.js,./ast/php.js,./ast/python.js,./ast/rust.js,./ast/typescript.js,./ast/unsupported.js,node:path e: AstExtractionOptions,ExternalCacheAdapter,extractAstIntent,root,cache,matcher,files,body,relative,extracted,adapterFiles,manifest,result,unsupported,sourceManifest,body,isIntentRecords,isExtractionResult,result @@ -1886,6 +1631,16 @@ D: summary() assertRelation() relation() + src/web/diff-ui-script.ts: + i: ./diff-ui-compare.js + e: byId,requestHeaders,formatBytes,selectedRun,updateMeta,fillSelect,loadRuns + byId() + requestHeaders() + formatBytes() + selectedRun() + updateMeta() + fillSelect() + loadRuns() src/synthesis/todo-patch.ts: i: ../core/id.js,../core/io.js,./validation.js,node:crypto,node:fs,node:path e: CreateTodoPatchOptions,CreatedTodoPatch,WriteTodoPatchOptions,WrittenTodoPatch,ApplyTodoPatchOptions,diagnosticReportFingerprint,createTodoPatch,expectedValidation,proposalById,selected,proposal,orderedSelected,markdown,renderTodoPatchMarkdown,writeTodoPatchArtifacts,created,patchPath,auditPath,applyTodoPatch,current,receipt,now,currentHash,result,applied,recovered,assertTodoPatchArtifact,artifact,sourceTodo,selected,duplicates,classified,duplicate,assertApproval,assertReceipt,atomicWrite,temporary,existing,handle,appendPatch,separator,wasAlreadyAppended,renderTargets,rendered,renderIds,inline,normalizePath,sameArray,object,exactKeys,expected,missing,extra,nonBlank,hash,isoDate,uniqueIds,uniqueStrings @@ -2042,19 +1797,69 @@ D: ids() selectedRelations() compactRecord() - src/evaluation/gold-cli.ts: - i: node:fs,node:path - e: main,args,arg,json,requirePerfect,outIndex,outPath,dataset,report,rendered - main() - args() - arg() - json() - requirePerfect() - outIndex() - outPath() + src/pipeline/run-execution.ts: + i: ../communication/analyzer.js,../config/env.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../extractors/ast.js,../extractors/configuration.js,../extractors/git.js,../extractors/markdown-llm.js,../extractors/nl-llm.js,../extractors/runtime-cycle.js,../graph/diagnostics.js,../graph/linker.js,./run-documentation.js,./run-failed.js,./run-summary.js,./run-types.js,node:path + e: initializePipelineContext,root,runId,baseOutput,runDirectory,executePipeline,deterministicDocumentFiles,naturalLanguageAudit,result,git,ast,markdown,markdownAudit,documentationResult,documentationAudit,configurationExtraction,runtime,communicationInput,communicationAudit,communicationSyntheses,allRecords,generatedAt,graph,diagnostics,communicationAnalysis,taskSynthesis + initializePipelineContext() + root() + runId() + baseOutput() + runDirectory() + executePipeline() + deterministicDocumentFiles() + naturalLanguageAudit() + result() + git() + ast() + markdown() + markdownAudit() + documentationResult() + documentationAudit() + configurationExtraction() + runtime() + communicationInput() + communicationAudit() + communicationSyntheses() + allRecords() + generatedAt() + graph() + diagnostics() + communicationAnalysis() + taskSynthesis() + src/evaluation/gold-types.ts: + i: ./gold-reranker-validation.js + e: GoldRecordProjection,GoldDocumentModelRecord,GoldExtractionCase,GoldFixtureRecord,GoldExpectedRelation,GoldRerankerDecisionFixture,GoldRerankerFixture,GoldLinkingCase,GoldProposalFixture,GoldDsl2TodoCase,GoldExpectedDiagnostic,GoldDiagnosticsCase,GoldDataset,BinaryMetric,GoldEvaluationReport,assertGoldDataset,dataset,assertDatasetObject,assertDatasetMetadata,assertDatasetCollections,assertUniqueCaseIds,assertExtractionCoverage,channels,assertLinkingCohorts,assertGoldLinkingCohort,assertRerankerFixture,assertRerankerModelIdentity,assertRerankerDecisions,decisions,recordLabels,seenModules + GoldRecordProjection: + GoldDocumentModelRecord: + GoldExtractionCase: + GoldFixtureRecord: + GoldExpectedRelation: + GoldRerankerDecisionFixture: + GoldRerankerFixture: + GoldLinkingCase: + GoldProposalFixture: + GoldDsl2TodoCase: + GoldExpectedDiagnostic: + GoldDiagnosticsCase: + GoldDataset: + BinaryMetric: + GoldEvaluationReport: + assertGoldDataset() dataset() - report() - rendered() + assertDatasetObject() + assertDatasetMetadata() + assertDatasetCollections() + assertUniqueCaseIds() + assertExtractionCoverage() + channels() + assertLinkingCohorts() + assertGoldLinkingCohort() + assertRerankerFixture() + assertRerankerModelIdentity() + assertRerankerDecisions() + decisions() + recordLabels() + seenModules() src/live/model-comparison.ts: i: ../core/types.js,./contract-check.js e: LiveModelRun,LiveModelMeasurement,LiveModelAgreement,LiveModelComparison,measureLiveModelRun,responses,records,enrichedRecords,costUsd,isLlmEnriched,sourceKey,lines,compareLiveModelOutputs,rightBySource,pairs,agreeing,buildLiveModelComparison,models,passing,pick,measured,renderLiveModelComparison,sumUsage,values,round @@ -2589,12 +2394,12 @@ D: intersects() values() src/synthesis/tasks-llm.ts: - i: ../config/env.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-payload.js,node:fs,node:path,node:url + i: ../config/env.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/failure.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./task-synthesis-contract.js,./task-synthesis-materialize.js,./task-synthesis-metadata.js,./task-synthesis-payload.js,node:fs,node:path,node:url e: RawDiagnosticAction,AuditedTaskSynthesisResult,TaskSynthesisRequiredError,TaskSynthesisAttemptError RawDiagnosticAction: AuditedTaskSynthesisResult: TaskSynthesisRequiredError: super(-1) - TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),generationMetadata(-1),configuration(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1) + TaskSynthesisAttemptError: super(-1),synthesizeTodoProposals(-1),startedAt(-1),assertConclusions(-1),client(-1),prompt(-1),payload(-1),failure(-1),responses(-1),synthesizeWithCorrection(-1),generation(-1),message(-1),wrapped(-1),fallbackOrThrow(-1),failedAudit(-1),rawDiagnosticActions(-1),synthesisAudit(-1),readPrompt(-1),promptPath(-1) src/synthesis/code-change-plan/implementation-source-patch-assert.ts: i: ../../core/schema.js,./implementation-source-patch-diff.js e: SourcePatchEditValidationContext,SourcePatchSetValidationContext,assertCodeChangeSourcePatch,patch,editPaths,assertCodeChangeSourcePatchObject,patch,validateSourcePatchSchema,validateSourcePatchIdentifiers,validateSourcePatchEdits,collectSourcePatchEditPathActions,paths,editContext,validateSourcePatchEdit,normalizedEdit,normalizedPath,assertSourcePatchEditObject,validateSourcePatchEditBody,validateSourcePatchEditDiff,assertUniqueSourcePatchEditPathAction,normalizeSourcePatchEditPath,normalizedPath,ensureSourcePatchEditAction,ensureSourcePatchEditInstruction,validateSourcePatchHashAndId,expectedHash,validateSourcePatchGeneration,validateSourcePatchAgainstPlan,expectedChanges,assertSourcePatchPlanBinding,collectExpectedPlanChanges,validateSourcePatchEditsAgainstPlan,allowed,editPath,validateSourcePatchEvidence,marker,assertCodeChangeSourcePatchSet,set,context,createSourcePatchSetValidationContext,expectedPlanIds,assertSourcePatchSetObject,set,validateSourcePatchSetSchema,validateSourcePatchSetPatches,patchIds,validateSetPatchAndTrackDuplicates,expectedPlan,validateSetPatchGraphFingerprint,assertUniqueSetPatchId,validateSetPatchesPlanCoverage,validateSourcePatchSetGeneration,exactSourcePatchKeys,actual,assertSourcePatchIds,assertSourcePatchStrings,exactSourcePatchSet @@ -2800,8 +2605,8 @@ D: messageKey() errorMessage() src/pipeline/run-helpers.ts: - i: ../communication/llm.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../synthesis/code-change-plan.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,./run.js,node:path - e: collectCommunicationAnalysis,includeCommunication,communicationStartedAt,missingDirectory,communication,foundMissingDirectory,collectTaskSynthesis,taskSynthesisMode,taskSynthesisAudit,todoContent,createCodeChangeArtifacts,codeChangePlans,codeChangeReview,codeChangeSourcePatches,collectTargetHints,values,appendLlmNotConfigured,skippedAudit + i: ../communication/llm.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../llm/audit.js,../synthesis/code-change-plan.js,../synthesis/tasks-llm.js,../synthesis/todo-patch.js,../version.js,./run-failed.js,./run-types.js,node:path + e: collectCommunicationAnalysis,includeCommunication,communicationStartedAt,missingDirectory,communication,foundMissingDirectory,collectTaskSynthesis,taskSynthesisMode,taskSynthesisAudit,todoContent,createCodeChangeArtifacts,codeChangePlans,codeChangeReview,codeChangeSourcePatches,collectTargetHints,values,appendLlmNotConfigured collectCommunicationAnalysis() includeCommunication() communicationStartedAt() @@ -2819,7 +2624,100 @@ D: collectTargetHints() values() appendLlmNotConfigured() - skippedAudit() + src/operations/operation-step-validation.ts: + i: ./types.js + e: RISK_CLASSES,objectValue,exactKeys,actual,nonBlank,uniqueStrings,parseOperationStep,step,validateStepIdentity,validateStepRuntime,validateOperationStepPolicy,parseStepParameters,parameters,reference,variable,validateOperationStepRollback,rollback,validateOperationStep,step,parameters,rollback + RISK_CLASSES() + objectValue() + exactKeys() + actual() + nonBlank() + uniqueStrings() + parseOperationStep() + step() + validateStepIdentity() + validateStepRuntime() + validateOperationStepPolicy() + parseStepParameters() + parameters() + reference() + variable() + validateOperationStepRollback() + rollback() + validateOperationStep() + step() + parameters() + rollback() + src/operations/validation.ts: + i: ../core/id.js,../core/types.js,./generation-validation.js,./operation-step-validation.js,./types.js + e: VALUE_TYPES,CLASSIFICATIONS,SOURCE_KINDS,objectValue,exactKeys,actual,nonBlank,dateString,uniqueStrings,assertPrincipalList,principals,isJsonValue,assertVariableContract,contract,source,access,readers,writers,expectedId,assertVariableContractShape,assertVariableContractCore,assertVariableSource,source,assertVariableAccess,access,assertVariableAuthoritativeness,assertVariableMutability,buildVariableContractId,assertAcyclic,ids,visiting,visited,byId,visit,isOperationStepCircularDependency,hasOperationStepBeenVisited,startOperationStepVisit,validateOperationStepDependency,completeOperationStepVisit,assertOperationPlan,plan,variables,variableById,validateOperationPlanShape,validateOperationPlanMetadata,validateOperationPlanEvidence,evidence,collectOperationPlanVariables,variables,validateOperationSteps,stepIds,steps,hasCommandStep,founderDecisionRequired,step,validateOperationExpectations,coveredSteps,expectationIds,expectation,verifiedBy,validateOperationDecision,decision,validateOperationVerification,verification,validateOperationPlanHash,castPlan,expectedHash + VALUE_TYPES() + CLASSIFICATIONS() + SOURCE_KINDS() + objectValue() + exactKeys() + actual() + nonBlank() + dateString() + uniqueStrings() + assertPrincipalList() + principals() + isJsonValue() + assertVariableContract() + contract() + source() + access() + readers() + writers() + expectedId() + assertVariableContractShape() + assertVariableContractCore() + assertVariableSource() + source() + assertVariableAccess() + access() + assertVariableAuthoritativeness() + assertVariableMutability() + buildVariableContractId() + assertAcyclic() + ids() + visiting() + visited() + byId() + visit() + isOperationStepCircularDependency() + hasOperationStepBeenVisited() + startOperationStepVisit() + validateOperationStepDependency() + completeOperationStepVisit() + assertOperationPlan() + plan() + variables() + variableById() + validateOperationPlanShape() + validateOperationPlanMetadata() + validateOperationPlanEvidence() + evidence() + collectOperationPlanVariables() + variables() + validateOperationSteps() + stepIds() + steps() + hasCommandStep() + founderDecisionRequired() + step() + validateOperationExpectations() + coveredSteps() + expectationIds() + expectation() + verifiedBy() + validateOperationDecision() + decision() + validateOperationVerification() + verification() + validateOperationPlanHash() + castPlan() + expectedHash() src/communication/intake-store.ts: i: ../core/io.js,../core/security.js,node:crypto,node:fs,node:path e: IntakeEvent,StreamSnapshot,IntakeEventStore @@ -2900,7 +2798,7 @@ D: java/JavaAstExtract.java: i: com.sun.source.util.JavacTask,com.sun.source.util.SourcePositions,com.sun.source.util.TreePathScanner,com.sun.source.util.Trees,java.io.IOException,java.nio.charset.StandardCharsets,java.nio.file.Files,java.nio.file.Path,java.nio.file.Paths e: JavaAstExtract - JavaAstExtract: main(-1),emit(-1),parseFile(-1),emit(-1),collect(-1),try(-1),containsIgnored(-1),try(-1),Collector(-1),add(-1),map(-1),add(-1),map(-1),add(-1),add(-1),add(-1),add(-1),map(-1),add(-1),map(-1),emit(-1),json(-1),json(-1),escape(-1),slash(-1) + JavaAstExtract: main(-1),emit(-1),parseFile(-1),emit(-1),collect(-1),try(-1),containsIgnored(-1),try(-1),scanCompilationUnits(-1),collectFileDiagnostics(-1),Collector(-1),collectFileDiagnostics(-1),add(-1),map(-1),add(-1),map(-1),add(-1),add(-1),add(-1),add(-1),map(-1),add(-1),map(-1),emit(-1),json(-1),json(-1),escape(-1),slash(-1) src/extractors/nl.ts: i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,node:path e: NlExtractionOptions,assertNlExtractionOptions,extractNlIntent,absolute,body,sourcePath,classified,action,object,missing,confidence,inferActor,detectMissingFields @@ -3120,13 +3018,13 @@ D: execute(args) main() src/summary/summarizer.ts: - i: ../config/env.js,../core/grounding.js,../core/id.js,../core/io.js,../core/schema.js,../llm/audit.js,../llm/openrouter.js,../llm/structured-schema.js,../version.js,./payload.js,./render.js,node:fs,node:path,node:url + i: ../config/env.js,../core/grounding.js,../core/id.js,../core/io.js,../core/schema.js,../llm/openrouter.js,../llm/structured-schema.js,./generation-metadata.js,./payload.js,./render.js,node:fs,node:path,node:url e: SummaryResult,SummaryOptions,RawConclusion,RawSummaryResponse,SummaryAttemptError,summarizeGraph,mode,conclusions,client,conclusions,systemPrompt,payload,failure,responses,conclusions,SUMMARY_CONCLUSION_CONTRACT,SUMMARY_RESPONSE_CONTRACT SummaryResult: SummaryOptions: RawConclusion: RawSummaryResponse: - SummaryAttemptError: super(-1),summarizeWithCorrection(-1),conclusions(-1),generationMetadata(-1),message(-1),materializeConclusions(-1),parsed(-1),conclusions(-1),diagnosticIds(-1),assertConclusions(-1),deterministicConclusions(-1),conclusions(-1),assertConclusions(-1),generationMetadata(-1),effectiveMode(-1),degraded(-1),configuration(-1),summaryMode(-1),sortedUnique(-1),readPrompt(-1),promptPath(-1) + SummaryAttemptError: super(-1),summarizeWithCorrection(-1),conclusions(-1),generationMetadata(-1),message(-1),materializeConclusions(-1),parsed(-1),conclusions(-1),diagnosticIds(-1),assertConclusions(-1),deterministicConclusions(-1),conclusions(-1),assertConclusions(-1),summaryMode(-1),sortedUnique(-1),readPrompt(-1),promptPath(-1) summarizeGraph() mode() conclusions() @@ -3156,16 +3054,6 @@ D: renderConclusion() confidence() recordCitations() - src/operations/compile-cli.ts: - i: ./artifact.js - e: argumentsByName,key,value,allowed,unknown,main,args - argumentsByName() - key() - value() - allowed() - unknown() - main() - args() src/communication/llm/implementation-helpers.ts: i: ../../config/env.js,../../core/id.js,../../core/io.js,../../core/record.js,../../extractors/communication.js,../../llm/audit.js,../../llm/structured-schema.js,../../version.js,node:fs,node:path,node:url e: RawCommunicationEnrichment,RawParticipantSynthesis,RawCommunicationResponse,ParticipantGroup,ParticipantCommunicationSynthesisInput,participantGroups,grouped,participant,role,key,values,promptPayload,validateEnrichments,expected,output,materializeSyntheses,byKey,seen,output,group,permitted,recordIds,enrichRecord,deterministicSyntheses,markDeterministic,marked,deterministicGeneration,fallbackGeneration,llmGeneration,audit,readPrompt,promptPath,synthesis,sortedUnique,roleOf,communicationStrings,COMMUNICATION_ENRICHMENT_CONTRACT,PARTICIPANT_SYNTHESIS_CONTRACT,COMMUNICATION_RESPONSE_CONTRACT @@ -3563,6 +3451,50 @@ D: handleUnexpectedError() errorMessage() invokedPath() + src/diff/reality.ts: + i: ../core/types.js,./svg.js + e: RealitySvgOptions,RealitySvgLayout,LABEL_CHAR,BADGE_CHAR,widestLabel,renderRealitySvg,theme,maxRows,title,rows,visible,layout,header,body,overflow,height,buildRealityLayout,laneX,laneStep,statusX,statusWidth,renderRealityLaneHeaders,isDeclared,renderRealityRow,y,color,renderRealityLanes,count,cx,renderRealityLaneCell,fill,label,pillWidth,renderMoreTopicsLabel,y,renderRealityHeight,footer,y,renderRealityMarkdown,lanes,escapeMarkdown + RealitySvgOptions: + RealitySvgLayout: + LABEL_CHAR() + BADGE_CHAR() + widestLabel() + renderRealitySvg() + theme() + maxRows() + title() + rows() + visible() + layout() + header() + body() + overflow() + height() + buildRealityLayout() + laneX() + laneStep() + statusX() + statusWidth() + renderRealityLaneHeaders() + isDeclared() + renderRealityRow() + y() + color() + renderRealityLanes() + count() + cx() + renderRealityLaneCell() + fill() + label() + pillWidth() + renderMoreTopicsLabel() + y() + renderRealityHeight() + footer() + y() + renderRealityMarkdown() + lanes() + escapeMarkdown() src/diff/text-myers.ts: i: ./text-types.js e: RawDiffOp,MyersState,MyersEditPoint,blockReplace,myers,state,v,startX,point,createMyersState,n,m,chooseStartX,advanceDiagonal,nextX,nextY,backtrack,x,y,v,k,previous,previousX,previousY,diag,afterEqualX,afterEqualY,choosePreviousPoint,previousK,previousX,emitEqualOps,emitEditOp @@ -3598,6 +3530,38 @@ D: previousX() emitEqualOps() emitEditOp() + src/pipeline/run-documentation.ts: + i: ../config/env.js,../config/env.js,../core/types.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../llm/audit.js,../version.js,./run-failed.js,./run-helpers.js,./run-types.js + e: collectDocumentationExtraction,documentationStartedAt,deterministicDocs,docs + collectDocumentationExtraction() + documentationStartedAt() + deterministicDocs() + docs() + src/pipeline/run-failed.ts: + i: ../communication/llm.js,../config/env.js,../core/io.js,../core/types.js,../extractors/docs-llm.js,../extractors/nl-llm.js,../llm/audit.js,../synthesis/tasks-llm.js,../version.js,./run-persistence.js,./run-types.js,node:path + e: isLlMFailureStage,failureModelForStage,persistFailedRun,persistFailedRunState,message,knownAudit,stageFailureCode,manifestFailureReason,failureStatus,stageValue,reason,failureCode,failureAuditForStage,makeStageValue,skippedAudit + isLlMFailureStage() + failureModelForStage() + persistFailedRun() + persistFailedRunState() + message() + knownAudit() + stageFailureCode() + manifestFailureReason() + failureStatus() + stageValue() + reason() + failureCode() + failureAuditForStage() + makeStageValue() + skippedAudit() + src/evaluation/gold-reranker-validation.ts: + i: ./gold-types.js + e: assertRerankerDecision,isKnownNonDeclarationModule,isValidScoreTuple,hasGroundedDecisionText + assertRerankerDecision() + isKnownNonDeclarationModule() + isValidScoreTuple() + hasGroundedDecisionText() scripts/research/evaluate-embedding-pairs.py: e: parse_args,main parse_args() @@ -3766,7 +3730,7 @@ D: basename() src/core/schema/utils.ts: i: ../types.js - e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,start,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation,assertGroundedLlMMode,assertModeRequirements,assertDeterministicGeneration,assertDegradedRequirements + e: objectValue,exactKeys,expectedSet,missing,extra,nonEmptyString,nonBlankString,nullableString,enumValue,stringArray,nonEmptyUniqueStringArray,repositoryPath,normalized,exactStringSet,uniqueIdArray,nonEmptyUniqueIdArray,knownReferences,unknown,confidence,assertAcyclicProposalDependencies,byId,visiting,visited,visit,isCycleStart,formatProposalCycle,start,isAlreadyVisited,markVisit,endVisit,dateString,nullableDate,fingerprint,nonNegativeInteger,countMap,map,countRecords,key,exactCounts,actual,isJsonValue,assertGroundedGenerationMetadata,generation,assertGroundedLlMMode,assertModeRequirements,assertDeterministicGeneration,assertDegradedRequirements objectValue() exactKeys() expectedSet() @@ -3791,7 +3755,12 @@ D: visiting() visited() visit() + isCycleStart() + formatProposalCycle() start() + isAlreadyVisited() + markVisit() + endVisit() dateString() nullableDate() fingerprint() @@ -3867,6 +3836,25 @@ D: isWithinRoot() relative() relativeApiPath() + src/pipeline/run-persistence.ts: + i: ../config/env.js,../config/env.js,../core/id.js,../core/io.js,../core/types.js,../version.js,./persist-optional-artifacts.js,./run-types.js,node:path + e: makePipelineManifest,persistPipelineArtifacts,coreArtifacts,optionalArtifacts,persistIntentArtifacts,filePath,persistCoreArtifacts,graphPath,diagnosticsPath,summaryPath,summaryConclusionsPath,codeChangePlansPath,codeChangeReviewPath,codeChangeReviewAuditPath,codeChangeSourcePatchesPath,manifestConfiguration + makePipelineManifest() + persistPipelineArtifacts() + coreArtifacts() + optionalArtifacts() + persistIntentArtifacts() + filePath() + persistCoreArtifacts() + graphPath() + diagnosticsPath() + summaryPath() + summaryConclusionsPath() + codeChangePlansPath() + codeChangeReviewPath() + codeChangeReviewAuditPath() + codeChangeSourcePatchesPath() + manifestConfiguration() src/evaluation/gold-cases.ts: i: ../core/id.js,../core/record.js,../core/types.js,../graph/diagnostics.js,../graph/linker.js,../synthesis/validation.js,../version.js,./gold-metrics.js e: LinkingCaseResult,RerankingCaseResult,DiagnosticsCaseResult,Dsl2TodoCaseResult,evaluateLinkingCase,idToLabel,graph,observed,actual,expected,byClass,forbidden,forbiddenViolations,evaluateRerankingCase,reranker,idToLabel,declarationRecordId,graph,candidates,decisions,rerank,observed,forbiddenViolations,buildRerankerCandidates,requestedCandidates,buildRerankerDecisions,candidateByModule,moduleRecordId,candidate,buildRerankResult,buildObservedRerankRelations,augmented,countForbiddenRelations,restricted,buildRerankExpected,buildRerankSnapshot,countVerdictDecisions,resolveRerankerFixture,resolveDeclarationRecordId,declarationRecordId,resolveFixtureLabelToRecordId,recordId,classifyRelation,exact,evaluateDiagnosticsCase,idToLabel,graph,report,observed,forbidden,forbiddenViolations,evaluateDsl2TodoCase,graph,diagnostics,diagnosticIds,conclusion,proposals,validation,duplicateIds,actual,expected,citations,buildConclusion,buildProposal,recordIds,id,countCitations,citationRequired,citationCited,buildFixtureRecords,labels,records,record,buildFixtureRecord,resolveDefaultFixtureModality,resolveFixtureSourcePath,resolveFixtureSymbol,resolveFixtureEpistemicClass,deterministicGeneration @@ -3949,6 +3937,36 @@ D: resolveFixtureSymbol() resolveFixtureEpistemicClass() deterministicGeneration() + src/evaluation/gold-cli.ts: + i: node:fs,node:path + e: parseGoldCliInput,arg,json,requirePerfect,outIndex,outPath,main,args,dataset,report,rendered + parseGoldCliInput() + arg() + json() + requirePerfect() + outIndex() + outPath() + main() + args() + dataset() + report() + rendered() + src/operations/generation-validation.ts: + i: ../core/types.js + e: asObject,assertExactKeys,actual,assertNonBlank,assertDateString,assertGeneration,generation,assertGenerationRequiredTextFields,assertGenerationModes,assertGenerationOptionalTextFields,assertGenerationProvenanceRules,isAllowedGenerationMode,isDeterministicModeProvenance + asObject() + assertExactKeys() + actual() + assertNonBlank() + assertDateString() + assertGeneration() + generation() + assertGenerationRequiredTextFields() + assertGenerationModes() + assertGenerationOptionalTextFields() + assertGenerationProvenanceRules() + isAllowedGenerationMode() + isDeterministicModeProvenance() scripts/verify-structured-responses.mjs: i: node:fs,node:path e: root,sourceRoot,files,structuredCalls,source,typescriptFiles,absolute @@ -3959,6 +3977,20 @@ D: source() typescriptFiles() absolute() + scripts/verify-no-llm-imports.mjs: + i: node:fs,node:path + e: visited,visit,body,resolved,forbiddenContentPatterns,isForbiddenTarget,collectSourceImports,isVisited,markVisited,resolveSource,raw + visited() + visit() + body() + resolved() + forbiddenContentPatterns() + isForbiddenTarget() + collectSourceImports() + isVisited() + markVisited() + resolveSource() + raw() scripts/verify-generated-analysis.mjs: i: node:child_process,node:fs,node:path,node:util e: execFileAsync,root,projectDirectory,textExtensions,untracked,tracked,generatedRelative,trackedReferences,relative,content,normalizePath,referencesAlreadyInTrackedSources,referenced,content,text @@ -4032,6 +4064,29 @@ D: current() code() parent() + src/web/diff-ui-compare.ts: + e: comparisonPayloadFromInputs,beforePath,afterPath,beforeGraphText,afterGraphText,comparisonFilters,value,formatComparisonSummary,renderComparisonResponse,summary,loadComparisonPayload,payload,filters,response,responsePayload,compareGraphs,button,status,error,result,responsePayload + comparisonPayloadFromInputs() + beforePath() + afterPath() + beforeGraphText() + afterGraphText() + comparisonFilters() + value() + formatComparisonSummary() + renderComparisonResponse() + summary() + loadComparisonPayload() + payload() + filters() + response() + responsePayload() + compareGraphs() + button() + status() + error() + result() + responsePayload() src/semantic/reranker/result.ts: i: ../../core/id.js,../../core/schema.js,../../core/types.js,../../version.js,./candidate.js e: createSemanticRerankResult,decisions,assertSemanticRerankResult,seenDecisions,acceptedDeclarations,candidate,assertSemanticRerankHeader,createCandidateAndRecordIndex,validateSemanticDecisionCandidate,candidate,validateSemanticDecisionDecision,validateSemanticDecisionEvidence,citations,record,validateDecisionEvidenceScope,validateSemanticDecisionVerdict,assertRerankResultHash,expectedHash,applyAcceptedSemanticRelations,candidates,added,candidate,assertSemanticVerdictReason,allowedVerdicts,allowedReasons @@ -4121,6 +4176,15 @@ D: classifyLlmFailure() message() rejectedLlmResponseMetadata() + src/pipeline/persist-optional-artifacts.ts: + i: ../communication/analyzer.js,../core/io.js,./run-types.js,node:path + e: relativeArtifactPath,buildOptionalArtifactPaths,persistCommunicationArtifacts,persistTaskSynthesisArtifacts,persistOptionalArtifacts,paths + relativeArtifactPath() + buildOptionalArtifactPaths() + persistCommunicationArtifacts() + persistTaskSynthesisArtifacts() + persistOptionalArtifacts() + paths() scripts/verify-module-boundaries.mjs: i: node:fs,node:path e: sourceRoot,files,graph,body,target,relative,targetRelative,visiting,visited,visit,start,collect,absolute,resolveSource,raw,relative,slash @@ -4287,6 +4351,39 @@ Example: criteria() deterministicGeneration() uniqueSorted() + src/interfaces/a2a-message-command.ts: + i: ../communication/intake-protobuf.js,./command-input.js + e: parseCommand,protobufCommand,objectCommand,parseCommandFromProtobuf,protobuf,bytes,parseCommandFromObject,objectData,parseCommandFromText,text,parseCommandFromJson,parseCommandFromSentence,parseSentenceInput,defaultTextCommand,isSupportedAction,commandInputFromSentence,first,parseText,firstToken,commandFromData,action,nested,parseKeyValues,key,raw,stringValue,parseScalar,normalizeAction,normalized,action + parseCommand() + protobufCommand() + objectCommand() + parseCommandFromProtobuf() + protobuf() + bytes() + parseCommandFromObject() + objectData() + parseCommandFromText() + text() + parseCommandFromJson() + parseCommandFromSentence() + parseSentenceInput() + defaultTextCommand() + isSupportedAction() + commandInputFromSentence() + first() + parseText() + firstToken() + commandFromData() + action() + nested() + parseKeyValues() + key() + raw() + stringValue() + parseScalar() + normalizeAction() + normalized() + action() src/interfaces/mcp-resources.ts: i: ../config/env.js,../core/io.js,./mcp-errors.js,node:fs,node:path e: listMcpResources,readRequestedMcpResource,uri,readMcpResource,latestPath,selected,latest,filePath,latestPointer,assertInsideRoot,relative,isInvalidResourceError,resource @@ -4406,6 +4503,18 @@ Example: plan() bindings() envelope() + src/operations/compile-cli.ts: + i: ./artifact.js + e: argumentsByName,allowedArguments,unknown,parseArgumentPair,collectUnknownArguments,assertRequiredArguments,compilePlanInvocation,main,args + argumentsByName() + allowedArguments() + unknown() + parseArgumentPair() + collectUnknownArguments() + assertRequiredArguments() + compilePlanInvocation() + main() + args() src/extractors/todo.ts: i: ../config/env.js,../core/io.js,../core/record.js,../core/types.js,../tf/classifier.js,./markdown-block.js,./markdown-paths.js,node:path e: extractTodo,absolute,body,relative,lines,raw,heading,level,task,checked,block,text,classified,action,resolvedPaths,inferOwner,match,extractExplicitId @@ -4530,6 +4639,26 @@ Example: versions() addTargetEntries() finalizeTarget() + src/diff/reality-totals.ts: + i: ../core/types.js + e: buildRealityTotals,countRecordsBySource,countRowsWithSource,countAlignedRows,countAlignedByEvidence,countImplementationAlignedTopics,countDocumentedObservedTopics,collectByStatus,ratio + buildRealityTotals() + countRecordsBySource() + countRowsWithSource() + countAlignedRows() + countAlignedByEvidence() + countImplementationAlignedTopics() + countDocumentedObservedTopics() + collectByStatus() + ratio() + src/pipeline/run-summary.ts: + i: ../config/env.js,../config/env.js,../core/types.js,../core/types.js,../llm/audit.js,../summary/summarizer.js,../version.js + e: SummaryResult,collectSummary,summaryStartedAt,includeSummaryLlm,summary + SummaryResult: + collectSummary() + summaryStartedAt() + includeSummaryLlm() + summary() src/evaluation/gold-extraction.ts: i: ../config/env.js,../core/security.js,../core/types.js,../extractors/docs-deterministic.js,../extractors/docs-llm.js,../extractors/markdown.js,../extractors/nl.js,./gold-types.js,node:fs,node:os,node:path e: runExtractionCase,root,config,writeFixtureFiles,destination,extractNlCase,extractMarkdownCase,extractDeterministicDocumentationCase,files,extractDocumentationCase,originalFetch,benchmarkConfig,config,projectRecord @@ -4577,14 +4706,6 @@ Example: readHistory() parsed() writeJson() - src/pipeline/run-summary.ts: - i: ../config/env.js,../config/env.js,../core/types.js,../core/types.js,../llm/audit.js,../summary/summarizer.js,../version.js - e: SummaryResult,collectSummary,summaryStartedAt,includeSummaryLlm,summary - SummaryResult: - collectSummary() - summaryStartedAt() - includeSummaryLlm() - summary() examples/backend/src/server.ts: i: ./request-handlers.js,./store.js,node:http e: BackendOptions,createBackend,store,server,sendJson,body,startBackend,port,host @@ -4677,6 +4798,17 @@ Example: ensureClosePlanIdsAreUnique() planIds() buildCloseResult() + src/summary/generation-metadata.ts: + i: ../config/env.js,../core/id.js,../llm/audit.js,../version.js + e: generationMetadata,effectiveMode,degraded,resolveGenerationMode,shouldDegradeGeneration,resolveGenerationModel,resolveGenerationProvider,resolveGenerationConfiguration + generationMetadata() + effectiveMode() + degraded() + resolveGenerationMode() + shouldDegradeGeneration() + resolveGenerationModel() + resolveGenerationProvider() + resolveGenerationConfiguration() src/evaluation/gold-metrics.ts: i: ../core/id.js,./gold-types.js e: Counts,emptyCounts,addCounts,compareSets,actualCounts,expectedCounts,counts,actualCount,expectedCount,frequency,counts,metric,ratio @@ -4755,6 +4887,11 @@ Example: groundedDiagnostics() compactRecord() compareDiagnostics() + src/synthesis/task-synthesis-metadata.ts: + i: ../config/env.js,../core/id.js,../core/types.js,../llm/audit.js,../version.js + e: taskSynthesisGenerationMetadata,configuration + taskSynthesisGenerationMetadata() + configuration() src/interfaces/a2a-card.ts: i: ../config/env.js,../version.js,node:crypto,node:http e: sendAgentCard,card,serialized,payload,agentCard,skills,skill @@ -4828,6 +4965,15 @@ Example: svgStyles() svgDocument() theme() + src/pipeline/run.ts: + i: ../config/env.js,../core/io.js,../core/types.js,./run-execution.js,./run-failed.js,./run-types.js,node:path + e: runPipeline,context,execution,persisted,manifest,manifestPath + runPipeline() + context() + execution() + persisted() + manifest() + manifestPath() src/sdk/typescript.ts: i: ../core/types.js,../diff/reality.js,../diff/text.js,../services/actions.js e: Todo2CodeClientOptions,DiffResult,FileDiffResult,GitDiffResponse,RealityResult,Todo2CodeClient @@ -4964,6 +5110,9 @@ Graph compar... i: ../config/env.js,../core/types.js e: openRouterAuditConfiguration openRouterAuditConfiguration() + src/interfaces/command-input.ts: + e: looksLikeJson + looksLikeJson() src/diff/git-binary.ts: i: node:path e: BINARY_EXTENSIONS,isProbablyBinary @@ -5130,6 +5279,13 @@ Graph compar... DiffHunk: FileDiff: DiffTextOptions: + src/pipeline/run-types.ts: + i: ../communication/analyzer.js,../graph/linker.js,../summary/summarizer.js,./run-helpers.js + e: PipelineContext,PipelineExecutionOutput,PipelinePersistedPaths,PipelineResult + PipelineContext: + PipelineExecutionOutput: + PipelinePersistedPaths: + PipelineResult: src/operations/types.ts: i: ../core/types.js e: VariableContract,OperationParameterReference,OperationRollback,OperationStep,OperationExpectation,OperationPlan,ResolvedVariableBinding,SubactorProcessEnvelope diff --git a/project/mermaid.export b/project/mermaid.export index c4063d4..fe1308b 100644 --- a/project/mermaid.export +++ b/project/mermaid.export @@ -80,6 +80,9 @@ flowchart TD golang__ast_extract__emit["emit"] golang__ast_extract__collectGoFiles("collectGoFiles CC=9") golang__ast_extract__parseFile["parseFile"] + golang__ast_extract__collectPackageFact["collectPackageFact"] + golang__ast_extract__collectImportFacts["collectImportFacts"] + golang__ast_extract__collectDeclarationFacts["collectDeclarationFacts"] golang__ast_extract__position["position"] golang__ast_extract__excerpt["excerpt"] golang__ast_extract__add["add"] @@ -99,6 +102,8 @@ flowchart TD java__JavaAstExtract__JavaAstExtract__collect["collect"] java__JavaAstExtract__JavaAstExtract__try["try"] java__JavaAstExtract__JavaAstExtract__containsIgnored["containsIgnored"] + java__JavaAstExtract__JavaAstExtract__scanCompilationUnits["scanCompilationUnits"] + java__JavaAstExtract__JavaAstExtract__collectFileDiagnostics["collectFileDiagnostics"] java__JavaAstExtract__JavaAstExtract__Collector["Collector"] java__JavaAstExtract__JavaAstExtract__add["add"] java__JavaAstExtract__JavaAstExtract__map["map"] @@ -120,26 +125,6 @@ flowchart TD project__cleanup_analysis_snapshot["cleanup_analysis_snapshot"] project__run_analysis_tool["run_analysis_tool"] end - subgraph python__ast_extract - python__ast_extract__source_hash["source_hash"] - python__ast_extract__dotted_name["dotted_name"] - python__ast_extract__is_module_entrypoint("is_module_entrypoint CC=10") - python__ast_extract__FactVisitor____init__["__init__"] - python__ast_extract__FactVisitor__excerpt["excerpt"] - python__ast_extract__FactVisitor__add["add"] - python__ast_extract__FactVisitor__visit_Import["visit_Import"] - python__ast_extract__FactVisitor__visit_ImportFrom["visit_ImportFrom"] - python__ast_extract__FactVisitor__visit_FunctionDef["visit_FunctionDef"] - python__ast_extract__FactVisitor__visit_AsyncFunctionDef["visit_AsyncFunctionDef"] - python__ast_extract__FactVisitor__visit_ClassDef["visit_ClassDef"] - python__ast_extract__FactVisitor__add_named_constant("add_named_constant CC=8") - python__ast_extract__FactVisitor__visit_Assign["visit_Assign"] - python__ast_extract__FactVisitor__visit_AnnAssign["visit_AnnAssign"] - python__ast_extract__FactVisitor__visit_If["visit_If"] - python__ast_extract__FactVisitor__visit_Call["visit_Call"] - python__ast_extract__iter_python_files{{iter_python_files CC=16}} - python__ast_extract__main["main"] - end subgraph rust_ast__src rust_ast__src__main__main["main"] rust_ast__src__main__arguments["arguments"] @@ -331,16 +316,22 @@ flowchart TD scripts__vallm_compatible__detect_file_language_with_parser_id["detect_file_language_with_parser_id"] end subgraph scripts__verify_env_contract - scripts__verify_env_contract__root["root"] - scripts__verify_env_contract__examplePath["examplePath"] - scripts__verify_env_contract__example["example"] + scripts__verify_env_contract__root("root CC=8") + scripts__verify_env_contract__examplePath("examplePath CC=8") + scripts__verify_env_contract__example("example CC=8") scripts__verify_env_contract__declared["declared"] - scripts__verify_env_contract__match["match"] scripts__verify_env_contract__expected["expected"] - scripts__verify_env_contract__configBody["configBody"] + scripts__verify_env_contract__local("local CC=8") + scripts__verify_env_contract__parseDeclaredEnv["parseDeclaredEnv"] + scripts__verify_env_contract__lines["lines"] + scripts__verify_env_contract__match["match"] + scripts__verify_env_contract__collectExpectedVariables["collectExpectedVariables"] scripts__verify_env_contract__body["body"] - scripts__verify_env_contract__makefile{{makefile CC=28}} - scripts__verify_env_contract__local("local CC=13") + scripts__verify_env_contract__collectConfigKeys["collectConfigKeys"] + scripts__verify_env_contract__collectEnvReferences["collectEnvReferences"] + scripts__verify_env_contract__collectMakefileReferences["collectMakefileReferences"] + scripts__verify_env_contract__collectDockerReferences{{collectDockerReferences CC=20}} + scripts__verify_env_contract__hasContractProblems["hasContractProblems"] scripts__verify_env_contract__auditLocalKeys["auditLocalKeys"] scripts__verify_env_contract__keys["keys"] scripts__verify_env_contract__collectExisting["collectExisting"] @@ -382,10 +373,15 @@ flowchart TD scripts__verify_module_boundaries__slash["slash"] end subgraph scripts__verify_no_llm_imports - scripts__verify_no_llm_imports__visited{{visited CC=15}} - scripts__verify_no_llm_imports__visit{{visit CC=15}} + scripts__verify_no_llm_imports__visited("visited CC=8") + scripts__verify_no_llm_imports__visit("visit CC=8") scripts__verify_no_llm_imports__body["body"] scripts__verify_no_llm_imports__resolved["resolved"] + scripts__verify_no_llm_imports__forbiddenContentPatterns["forbiddenContentPatterns"] + scripts__verify_no_llm_imports__isForbiddenTarget["isForbiddenTarget"] + scripts__verify_no_llm_imports__collectSourceImports("collectSourceImports CC=8") + scripts__verify_no_llm_imports__isVisited["isVisited"] + scripts__verify_no_llm_imports__markVisited["markVisited"] scripts__verify_no_llm_imports__resolveSource["resolveSource"] scripts__verify_no_llm_imports__raw["raw"] end @@ -580,7 +576,12 @@ flowchart TD sdk__rust__src__client__exchange("exchange CC=10") sdk__rust__src__client__first_artifact_data["first_artifact_data"] sdk__rust__src__client__unwrap_task["unwrap_task"] - sdk__rust__src__client__parse_http_response{{parse_http_response CC=18}} + sdk__rust__src__client__parse_http_response["parse_http_response"] + sdk__rust__src__client__split_http_response["split_http_response"] + sdk__rust__src__client__parse_status_code["parse_status_code"] + sdk__rust__src__client__parse_http_body["parse_http_body"] + sdk__rust__src__client__is_chunked_response["is_chunked_response"] + sdk__rust__src__client__validate_http_status_body("validate_http_status_body CC=14") sdk__rust__src__client__parse_base_url["parse_base_url"] sdk__rust__src__client__decode_chunked["decode_chunked"] sdk__rust__src__client__parses_base_urls["parses_base_urls"] @@ -650,11 +651,16 @@ flowchart TD end subgraph src__cli src__cli__execFileAsync["execFileAsync"] - src__cli__main("main CC=9") + src__cli__main["main"] src__cli__parsed["parsed"] src__cli__command["command"] src__cli__config["config"] src__cli__handler["handler"] + src__cli__shouldShowGlobalHelp["shouldShowGlobalHelp"] + src__cli__shouldShowGlobalVersion["shouldShowGlobalVersion"] + src__cli__resolveRequestedCommand["resolveRequestedCommand"] + src__cli__isHelpRequest["isHelpRequest"] + src__cli__resolveCommandHandler["resolveCommandHandler"] src__cli__commandHandlers["commandHandlers"] src__cli__resolveMainCommand["resolveMainCommand"] src__cli__handleLink["handleLink"] @@ -695,7 +701,7 @@ flowchart TD src__cli__handleCompareWorkspace["handleCompareWorkspace"] src__cli__root["root"] src__cli__handlePipeline["handlePipeline"] - src__cli__options("options CC=13") + src__cli__options["options"] src__cli__handleWatch["handleWatch"] src__cli__taskFile["taskFile"] src__cli__pipeline["pipeline"] @@ -704,11 +710,6 @@ flowchart TD src__cli__resolvePipelineRoot["resolvePipelineRoot"] src__cli__buildPipelineOptions["buildPipelineOptions"] src__cli__buildCommonPipelineOptions["buildCommonPipelineOptions"] - src__cli__resolveWatchTaskFile["resolveWatchTaskFile"] - src__cli__buildWorkspaceComparisonOptions["buildWorkspaceComparisonOptions"] - src__cli__formatWatchEvent("formatWatchEvent CC=10") - src__cli__stamp("stamp CC=10") - src__cli__handleDiff("handleDiff CC=9") end subgraph src__communication src__communication__intake_contract__IntakeError__super["super"] @@ -956,23 +957,23 @@ flowchart TD src__diff__text__slice["slice"] src__diff__text__beforeNumbers["beforeNumbers"] src__diff__text__afterNumbers["afterNumbers"] - src__diff__reality__buildRealityView["buildRealityView"] - src__diff__reality__components["components"] - src__diff__reality__diagnosticsByRecord["diagnosticsByRecord"] + src__diff__reality__LABEL_CHAR["LABEL_CHAR"] + src__diff__reality__BADGE_CHAR["BADGE_CHAR"] + src__diff__reality__widestLabel["widestLabel"] + src__diff__reality__renderRealitySvg("renderRealitySvg CC=9") + src__diff__reality__theme["theme"] + src__diff__reality__maxRows["maxRows"] + src__diff__reality__title["title"] src__diff__reality__rows["rows"] - src__diff__reality__buildRealityRows["buildRealityRows"] - src__diff__reality__buildRealityRow("buildRealityRow CC=9") - src__diff__reality__codes["codes"] - src__diff__reality__status["status"] - src__diff__reality__compareRealityRows["compareRealityRows"] - src__diff__reality__bySeverity["bySeverity"] - src__diff__reality__alignment["alignment"] - src__diff__reality__bySize["bySize"] - src__diff__reality__buildRealityTotals{{buildRealityTotals CC=15}} - src__diff__reality__declaredRecords["declaredRecords"] - src__diff__reality__observedRecords["observedRecords"] - src__diff__reality__aligned["aligned"] - src__diff__reality__declaredTopics["declaredTopics"] + src__diff__reality__visible["visible"] + src__diff__reality__layout["layout"] + src__diff__reality__header["header"] + src__diff__reality__body["body"] + src__diff__reality__overflow["overflow"] + src__diff__reality__height["height"] + src__diff__reality__buildRealityLayout["buildRealityLayout"] + src__diff__reality__laneX["laneX"] + src__diff__reality__laneStep["laneStep"] end subgraph src__evaluation src__evaluation__gold_extraction__runExtractionCase["runExtractionCase"] @@ -1004,7 +1005,6 @@ flowchart TD src__evaluation__gold_types__decisions["decisions"] src__evaluation__gold_types__recordLabels["recordLabels"] src__evaluation__gold_types__seenModules["seenModules"] - src__evaluation__gold_types__assertRerankerDecision{{assertRerankerDecision CC=17}} src__evaluation__gold_cases__evaluateLinkingCase("evaluateLinkingCase CC=8") src__evaluation__gold_cases__idToLabel["idToLabel"] src__evaluation__gold_cases__graph["graph"] @@ -1035,6 +1035,7 @@ flowchart TD src__evaluation__gold_cases__buildRerankSnapshot["buildRerankSnapshot"] src__evaluation__gold_cases__countVerdictDecisions["countVerdictDecisions"] src__evaluation__gold_cases__resolveRerankerFixture["resolveRerankerFixture"] + src__evaluation__gold_cases__resolveDeclarationRecordId["resolveDeclarationRecordId"] end subgraph src__extractors src__extractors__nl__assertNlExtractionOptions("assertNlExtractionOptions CC=9") @@ -1197,7 +1198,6 @@ flowchart TD src__interfaces__a2a_message_command__objectData["objectData"] src__interfaces__a2a_message_command__parseCommandFromText["parseCommandFromText"] src__interfaces__a2a_message_command__text["text"] - src__interfaces__a2a_message_command__looksLikeJson{{looksLikeJson CC=20}} src__interfaces__a2a_message_command__parseCommandFromJson["parseCommandFromJson"] src__interfaces__a2a_message_command__parseCommandFromSentence["parseCommandFromSentence"] src__interfaces__a2a_message_command__parseSentenceInput["parseSentenceInput"] @@ -1221,6 +1221,7 @@ flowchart TD src__interfaces__mcp_errors__McpRequestError__normalizeMcpError["normalizeMcpError"] src__interfaces__a2a_run_list_item__runListItem["runListItem"] src__interfaces__a2a_run_list_item__files["files"] + src__interfaces__a2a_run_list_item__resolveRunId["resolveRunId"] end subgraph src__live src__live__contract_check__LIVE_HISTORY_LIMIT["LIVE_HISTORY_LIMIT"] @@ -1357,6 +1358,37 @@ flowchart TD src__operations__artifact__plan["plan"] src__operations__artifact__bindings["bindings"] src__operations__artifact__envelope["envelope"] + src__operations__operation_step_validation__RISK_CLASSES["RISK_CLASSES"] + src__operations__operation_step_validation__objectValue["objectValue"] + src__operations__operation_step_validation__exactKeys["exactKeys"] + src__operations__operation_step_validation__actual["actual"] + src__operations__operation_step_validation__nonBlank["nonBlank"] + src__operations__operation_step_validation__uniqueStrings("uniqueStrings CC=8") + src__operations__operation_step_validation__parseOperationStep["parseOperationStep"] + src__operations__operation_step_validation__step["step"] + src__operations__operation_step_validation__validateStepIdentity["validateStepIdentity"] + src__operations__operation_step_validation__validateStepRuntime["validateStepRuntime"] + src__operations__operation_step_validation__validateOperationStepPolicy("validateOperationStepPolicy CC=11") + src__operations__operation_step_validation__parseStepParameters("parseStepParameters CC=11") + src__operations__operation_step_validation__parameters["parameters"] + src__operations__operation_step_validation__reference["reference"] + src__operations__operation_step_validation__variable["variable"] + src__operations__operation_step_validation__validateOperationStepRollback("validateOperationStepRollback CC=8") + src__operations__operation_step_validation__rollback["rollback"] + src__operations__operation_step_validation__validateOperationStep["validateOperationStep"] + src__operations__generation_validation__asObject["asObject"] + src__operations__generation_validation__assertExactKeys["assertExactKeys"] + src__operations__generation_validation__actual["actual"] + src__operations__generation_validation__assertNonBlank["assertNonBlank"] + src__operations__generation_validation__assertDateString["assertDateString"] + src__operations__generation_validation__assertGeneration["assertGeneration"] + src__operations__generation_validation__generation["generation"] + src__operations__generation_validation__assertGenerationRequiredTextFields["assertGenerationRequiredTextFields"] + src__operations__generation_validation__assertGenerationModes["assertGenerationModes"] + src__operations__generation_validation__assertGenerationOptionalTextFields["assertGenerationOptionalTextFields"] + src__operations__generation_validation__assertGenerationProvenanceRules("assertGenerationProvenanceRules CC=8") + src__operations__generation_validation__isAllowedGenerationMode["isAllowedGenerationMode"] + src__operations__generation_validation__isDeterministicModeProvenance["isDeterministicModeProvenance"] src__operations__subactor__valueMatchesType("valueMatchesType CC=11") src__operations__subactor__assertBinding("assertBinding CC=9") src__operations__subactor__ageSeconds["ageSeconds"] @@ -1369,7 +1401,6 @@ flowchart TD src__operations__validation__VALUE_TYPES["VALUE_TYPES"] src__operations__validation__CLASSIFICATIONS["CLASSIFICATIONS"] src__operations__validation__SOURCE_KINDS["SOURCE_KINDS"] - src__operations__validation__RISK_CLASSES["RISK_CLASSES"] src__operations__validation__objectValue["objectValue"] src__operations__validation__exactKeys["exactKeys"] src__operations__validation__actual["actual"] @@ -1377,36 +1408,6 @@ flowchart TD src__operations__validation__dateString["dateString"] src__operations__validation__uniqueStrings("uniqueStrings CC=8") src__operations__validation__assertPrincipalList["assertPrincipalList"] - src__operations__validation__principals["principals"] - src__operations__validation__isJsonValue["isJsonValue"] - src__operations__validation__assertVariableContract["assertVariableContract"] - src__operations__validation__contract["contract"] - src__operations__validation__source["source"] - src__operations__validation__access["access"] - src__operations__validation__readers["readers"] - src__operations__validation__writers["writers"] - src__operations__validation__expectedId["expectedId"] - src__operations__validation__assertVariableContractShape["assertVariableContractShape"] - src__operations__validation__assertVariableContractCore("assertVariableContractCore CC=8") - src__operations__validation__assertVariableSource["assertVariableSource"] - src__operations__validation__assertVariableAccess["assertVariableAccess"] - src__operations__validation__assertVariableAuthoritativeness["assertVariableAuthoritativeness"] - src__operations__validation__assertVariableMutability["assertVariableMutability"] - src__operations__validation__buildVariableContractId["buildVariableContractId"] - src__operations__validation__assertGeneration{{assertGeneration CC=16}} - src__operations__validation__generation["generation"] - src__operations__validation__assertAcyclic("assertAcyclic CC=8") - src__operations__validation__ids["ids"] - src__operations__validation__visiting["visiting"] - src__operations__validation__visited["visited"] - src__operations__validation__byId["byId"] - src__operations__validation__visit["visit"] - src__operations__validation__assertOperationPlan["assertOperationPlan"] - src__operations__validation__plan["plan"] - src__operations__validation__variables["variables"] - src__operations__validation__variableById["variableById"] - src__operations__validation__validateOperationPlanShape["validateOperationPlanShape"] - src__operations__validation__validateOperationPlanMetadata("validateOperationPlanMetadata CC=9") end subgraph src__pipeline src__pipeline__run_helpers__collectCommunicationAnalysis("collectCommunicationAnalysis CC=11") @@ -1426,35 +1427,28 @@ flowchart TD src__pipeline__run_helpers__collectTargetHints["collectTargetHints"] src__pipeline__run_helpers__values["values"] src__pipeline__run_helpers__appendLlmNotConfigured["appendLlmNotConfigured"] - src__pipeline__run_helpers__skippedAudit["skippedAudit"] + src__pipeline__persist_optional_artifacts__relativeArtifactPath["relativeArtifactPath"] + src__pipeline__persist_optional_artifacts__buildOptionalArtifactPaths["buildOptionalArtifactPaths"] + src__pipeline__persist_optional_artifacts__persistCommunicationArtifacts["persistCommunicationArtifacts"] + src__pipeline__persist_optional_artifacts__persistTaskSynthesisArtifacts["persistTaskSynthesisArtifacts"] + src__pipeline__persist_optional_artifacts__persistOptionalArtifacts["persistOptionalArtifacts"] + src__pipeline__persist_optional_artifacts__paths["paths"] src__pipeline__run_persistence__makePipelineManifest["makePipelineManifest"] - src__pipeline__run_persistence__persistPipelineArtifacts{{persistPipelineArtifacts CC=17}} + src__pipeline__run_persistence__persistPipelineArtifacts["persistPipelineArtifacts"] + src__pipeline__run_persistence__coreArtifacts["coreArtifacts"] + src__pipeline__run_persistence__optionalArtifacts["optionalArtifacts"] + src__pipeline__run_persistence__persistIntentArtifacts["persistIntentArtifacts"] src__pipeline__run_persistence__filePath["filePath"] + src__pipeline__run_persistence__persistCoreArtifacts["persistCoreArtifacts"] src__pipeline__run_persistence__graphPath["graphPath"] src__pipeline__run_persistence__diagnosticsPath["diagnosticsPath"] src__pipeline__run_persistence__summaryPath["summaryPath"] src__pipeline__run_persistence__summaryConclusionsPath["summaryConclusionsPath"] - src__pipeline__run_persistence__taskSynthesisPath["taskSynthesisPath"] - src__pipeline__run_persistence__todoValidationPath["todoValidationPath"] - src__pipeline__run_persistence__todoPatchPath["todoPatchPath"] - src__pipeline__run_persistence__todoPatchAuditPath["todoPatchAuditPath"] src__pipeline__run_persistence__codeChangePlansPath["codeChangePlansPath"] src__pipeline__run_persistence__codeChangeReviewPath["codeChangeReviewPath"] src__pipeline__run_persistence__codeChangeReviewAuditPath["codeChangeReviewAuditPath"] src__pipeline__run_persistence__codeChangeSourcePatchesPath["codeChangeSourcePatchesPath"] - src__pipeline__run_persistence__communicationAnalysisPath["communicationAnalysisPath"] - src__pipeline__run_persistence__communicationMarkdownPath["communicationMarkdownPath"] - src__pipeline__run_persistence__persistFailedRun["persistFailedRun"] src__pipeline__run_persistence__manifestConfiguration("manifestConfiguration CC=8") - src__pipeline__run_persistence__persistFailedRunState{{persistFailedRunState CC=19}} - src__pipeline__run_persistence__aborted["aborted"] - src__pipeline__run_persistence__message("message CC=9") - src__pipeline__run_persistence__knownAudit("knownAudit CC=9") - src__pipeline__run_persistence__failedAudit("failedAudit CC=9") - src__pipeline__run_persistence__stageValue["stageValue"] - src__pipeline__run_persistence__reason["reason"] - src__pipeline__run_persistence__skippedAudit["skippedAudit"] - src__pipeline__run_persistence__failureCode["failureCode"] src__pipeline__run_summary__collectSummary["collectSummary"] src__pipeline__run_summary__summaryStartedAt["summaryStartedAt"] src__pipeline__run_summary__includeSummaryLlm["includeSummaryLlm"] @@ -1465,10 +1459,17 @@ flowchart TD src__pipeline__run__persisted["persisted"] src__pipeline__run__manifest["manifest"] src__pipeline__run__manifestPath["manifestPath"] - src__pipeline__run__initializePipelineContext["initializePipelineContext"] - src__pipeline__run__root["root"] - src__pipeline__run__runId["runId"] - src__pipeline__run__baseOutput["baseOutput"] + src__pipeline__run_documentation__collectDocumentationExtraction("collectDocumentationExtraction CC=9") + src__pipeline__run_documentation__documentationStartedAt["documentationStartedAt"] + src__pipeline__run_documentation__deterministicDocs["deterministicDocs"] + src__pipeline__run_documentation__docs["docs"] + src__pipeline__run_failed__isLlMFailureStage["isLlMFailureStage"] + src__pipeline__run_failed__failureModelForStage["failureModelForStage"] + src__pipeline__run_failed__persistFailedRun["persistFailedRun"] + src__pipeline__run_failed__persistFailedRunState("persistFailedRunState CC=9") + src__pipeline__run_failed__message["message"] + src__pipeline__run_failed__knownAudit["knownAudit"] + src__pipeline__run_failed__stageFailureCode["stageFailureCode"] end subgraph src__sdk src__sdk__typescript__Todo2CodeClient__a2a["a2a"] @@ -1613,6 +1614,14 @@ flowchart TD src__services__actions__afterPath["afterPath"] end subgraph src__summary + src__summary__generation_metadata__generationMetadata["generationMetadata"] + src__summary__generation_metadata__effectiveMode["effectiveMode"] + src__summary__generation_metadata__degraded["degraded"] + src__summary__generation_metadata__resolveGenerationMode["resolveGenerationMode"] + src__summary__generation_metadata__shouldDegradeGeneration["shouldDegradeGeneration"] + src__summary__generation_metadata__resolveGenerationModel["resolveGenerationModel"] + src__summary__generation_metadata__resolveGenerationProvider["resolveGenerationProvider"] + src__summary__generation_metadata__resolveGenerationConfiguration["resolveGenerationConfiguration"] src__summary__payload__compactSummaryPayload("compactSummaryPayload CC=12") src__summary__payload__referenced["referenced"] src__summary__payload__nonAst["nonAst"] @@ -1634,16 +1643,13 @@ flowchart TD src__summary__summarizer__SummaryAttemptError__super["super"] src__summary__summarizer__SummaryAttemptError__summarizeWithCorrection("summarizeWithCorrection CC=10") src__summary__summarizer__SummaryAttemptError__conclusions["conclusions"] - src__summary__summarizer__SummaryAttemptError__generationMetadata("generationMetadata CC=9") + src__summary__summarizer__SummaryAttemptError__generationMetadata["generationMetadata"] src__summary__summarizer__SummaryAttemptError__message["message"] src__summary__summarizer__SummaryAttemptError__materializeConclusions["materializeConclusions"] src__summary__summarizer__SummaryAttemptError__parsed["parsed"] src__summary__summarizer__SummaryAttemptError__diagnosticIds["diagnosticIds"] src__summary__summarizer__SummaryAttemptError__assertConclusions["assertConclusions"] src__summary__summarizer__SummaryAttemptError__deterministicConclusions["deterministicConclusions"] - src__summary__summarizer__SummaryAttemptError__effectiveMode["effectiveMode"] - src__summary__summarizer__SummaryAttemptError__degraded["degraded"] - src__summary__summarizer__SummaryAttemptError__configuration["configuration"] src__summary__summarizer__SummaryAttemptError__summaryMode["summaryMode"] src__summary__summarizer__SummaryAttemptError__sortedUnique["sortedUnique"] src__summary__summarizer__SummaryAttemptError__readPrompt["readPrompt"] @@ -1671,6 +1677,8 @@ flowchart TD src__synthesis__task_synthesis_payload__groundedDiagnostics["groundedDiagnostics"] src__synthesis__task_synthesis_payload__compactRecord["compactRecord"] src__synthesis__task_synthesis_payload__compareDiagnostics["compareDiagnostics"] + src__synthesis__task_synthesis_metadata__taskSynthesisGenerationMetadata["taskSynthesisGenerationMetadata"] + src__synthesis__task_synthesis_metadata__configuration["configuration"] src__synthesis__code_change_path__NON_SOURCE_DIR_SEGMENTS["NON_SOURCE_DIR_SEGMENTS"] src__synthesis__code_change_path__BINARY_EXTENSIONS["BINARY_EXTENSIONS"] src__synthesis__code_change_path__GENERATED_ANALYSIS_BASENAMES["GENERATED_ANALYSIS_BASENAMES"] @@ -1721,8 +1729,6 @@ flowchart TD src__synthesis__task_synthesis_materialize__values["values"] src__synthesis__task_synthesis_materialize__normalizeRawTarget["normalizeRawTarget"] src__synthesis__task_synthesis_materialize__target["target"] - src__synthesis__task_synthesis_materialize__normalizeAcceptanceCriteria["normalizeAcceptanceCriteria"] - src__synthesis__task_synthesis_materialize__criteria["criteria"] end subgraph src__tf src__tf__classifier__dynamicImport["dynamicImport"] @@ -1810,7 +1816,6 @@ flowchart TD src__web__diff_ui_script__updateMeta["updateMeta"] src__web__diff_ui_script__fillSelect["fillSelect"] src__web__diff_ui_script__loadRuns("loadRuns CC=12") - src__web__diff_ui_script__compareGraphs{{compareGraphs CC=15}} src__web__diff_ui__diffUiStyles["diffUiStyles"] src__web__diff_ui__diffUiRunPanel["diffUiRunPanel"] src__web__diff_ui__diffUiFiltersPanel["diffUiFiltersPanel"] @@ -1818,6 +1823,26 @@ flowchart TD src__web__diff_ui__diffUiScriptMarkup["diffUiScriptMarkup"] src__web__diff_ui__diffUiTemplate["diffUiTemplate"] src__web__diff_ui__diffUiHtml["diffUiHtml"] + src__web__diff_ui_compare__comparisonPayloadFromInputs["comparisonPayloadFromInputs"] + src__web__diff_ui_compare__beforePath["beforePath"] + src__web__diff_ui_compare__afterPath["afterPath"] + src__web__diff_ui_compare__beforeGraphText["beforeGraphText"] + src__web__diff_ui_compare__afterGraphText["afterGraphText"] + src__web__diff_ui_compare__comparisonFilters["comparisonFilters"] + src__web__diff_ui_compare__value["value"] + src__web__diff_ui_compare__formatComparisonSummary["formatComparisonSummary"] + src__web__diff_ui_compare__renderComparisonResponse["renderComparisonResponse"] + src__web__diff_ui_compare__summary["summary"] + src__web__diff_ui_compare__loadComparisonPayload["loadComparisonPayload"] + src__web__diff_ui_compare__payload["payload"] + src__web__diff_ui_compare__filters["filters"] + src__web__diff_ui_compare__response["response"] + src__web__diff_ui_compare__responsePayload["responsePayload"] + src__web__diff_ui_compare__compareGraphs["compareGraphs"] + src__web__diff_ui_compare__button["button"] + src__web__diff_ui_compare__status["status"] + src__web__diff_ui_compare__error["error"] + src__web__diff_ui_compare__result["result"] end rust_ast__src__main__main --> rust_ast__src__main__arguments rust_ast__src__main__main --> rust_ast__src__main__collect_files @@ -1891,148 +1916,9 @@ flowchart TD java__JavaAstExtract__JavaAstExtract__emit --> java__JavaAstExtract__JavaAstExtract__map java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__try java__JavaAstExtract__JavaAstExtract__collect --> java__JavaAstExtract__JavaAstExtract__containsIgnored - java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__slash - java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__Collector + java__JavaAstExtract__JavaAstExtract__try --> java__JavaAstExtract__JavaAstExtract__scanCompilationUnits + java__JavaAstExtract__JavaAstExtract__collectFileDiagnostics --> java__JavaAstExtract__JavaAstExtract__add java__JavaAstExtract__JavaAstExtract__json --> java__JavaAstExtract__JavaAstExtract__escape - src__cli__main --> src__cli__printHelp - src__cli__main --> src__cli__parseArgs - src__cli__main --> src__cli__resolveMainCommand - src__cli__main --> src__cli__commandHandlers - src__cli__main --> src__cli__handler - src__cli__parsed --> src__cli__printHelp - src__cli__command --> src__cli__printHelp - src__cli__commandHandlers --> src__cli__initProject - src__cli__commandHandlers --> src__cli__doctor - src__cli__handleLink --> src__cli__emitJson - src__cli__handleLink --> src__cli__optionString - src__cli__handleDiagnose --> src__cli__emitJson - src__cli__handleDiagnose --> src__cli__optionString - src__cli__handleSummarize --> src__cli__optionString - src__cli__handleSummarize --> src__cli__optionSummaryMode - src__cli__diagnosticsPath --> src__cli__optionNumber - src__cli__diagnosticsPath --> src__cli__optionBoolean - src__cli__diagnostics --> src__cli__optionNumber - src__cli__diagnostics --> src__cli__optionBoolean - src__cli__result --> src__cli__execFileAsync - src__cli__handleProposeTodo --> src__cli__optionString - src__cli__handleProposeTodo --> src__cli__optionTaskMode - src__cli__handleRenderTodo --> src__cli__optionString - src__cli__handleApplyTodo --> src__cli__optionString - src__cli__handleProposeCodeChange --> src__cli__optionString - src__cli__handleRenderCodeChange --> src__cli__optionString - src__cli__handleProposeSourcePatch --> src__cli__optionString - src__cli__isPlanSet --> src__cli__optionString - src__cli__handleApplySourcePatch --> src__cli__optionString - src__cli__handleEvaluateCodeChange --> src__cli__optionString - src__cli__handleCloseCodeChange --> src__cli__optionString - src__cli__handleCompareWorkspace --> src__cli__resolvePipelineRoot - src__cli__handleCompareWorkspace --> src__cli__buildWorkspaceComparisonOptions - src__cli__root --> src__cli__optionString - src__cli__root --> src__cli__optionNullableString - src__cli__root --> src__cli__optionLlmMode - src__cli__handlePipeline --> src__cli__resolvePipelineRoot - src__cli__handlePipeline --> src__cli__buildPipelineOptions - src__cli__handlePipeline --> src__cli__optionNullableString - src__cli__handlePipeline --> src__cli__reportPipelineDegradation - src__cli__handleWatch --> src__cli__resolvePipelineRoot - src__cli__handleWatch --> src__cli__resolveWatchTaskFile - src__cli__handleWatch --> src__cli__buildPipelineOptions - src__cli__handleWatch --> src__cli__optionNumber - src__cli__handleWatch --> src__cli__optionBoolean - src__cli__handleWatch --> src__cli__formatWatchEvent - src__cli__taskFile --> src__cli__optionNumber - src__cli__taskFile --> src__cli__optionBoolean - src__cli__taskFile --> src__cli__formatWatchEvent - src__cli__pipeline --> src__cli__optionNumber - src__cli__pipeline --> src__cli__optionBoolean - src__cli__pipeline --> src__cli__formatWatchEvent - src__cli__controller --> src__cli__optionNumber - src__cli__controller --> src__cli__optionBoolean - src__cli__controller --> src__cli__formatWatchEvent - src__cli__stop --> src__cli__optionNumber - src__cli__stop --> src__cli__optionBoolean - src__cli__stop --> src__cli__formatWatchEvent - src__cli__buildPipelineOptions --> src__cli__buildCommonPipelineOptions - src__cli__buildCommonPipelineOptions --> src__cli__optionNullableString - src__cli__buildCommonPipelineOptions --> src__cli__optionList - src__cli__buildCommonPipelineOptions --> src__cli__optionBoolean - src__cli__buildCommonPipelineOptions --> src__cli__optionString - src__cli__buildCommonPipelineOptions --> src__cli__optionNumber - src__cli__buildCommonPipelineOptions --> src__cli__optionNlMode - src__cli__buildCommonPipelineOptions --> src__cli__optionLlmMode - src__cli__buildCommonPipelineOptions --> src__cli__optionPipelineTaskMode - src__cli__resolveWatchTaskFile --> src__cli__optionNullableString - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionString - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNullableString - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionList - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionBoolean - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionLlmMode - src__cli__buildWorkspaceComparisonOptions --> src__cli__optionNumber - src__cli__formatWatchEvent --> src__cli__file - src__cli__stamp --> src__cli__file - src__cli__handleDiff --> src__cli__parseDiffMode - src__cli__handleDiff --> src__cli__handleGraphDiff - src__cli__handleDiff --> src__cli__buildDiffPayload - src__cli__handleDiff --> src__cli__optionString - src__cli__handleDiff --> src__cli__optionNumber - src__cli__svg --> src__cli__optionNumber - src__cli__svg --> src__cli__optionBoolean - src__cli__parseDiffMode --> src__cli__optionString - src__cli__handleGraphDiff --> src__cli__optionString - src__cli__handleGraphDiff --> src__cli__optionNumber - src__cli__diff --> src__cli__optionNumber - src__cli__buildDiffPayload --> src__cli__buildFileDiff - src__cli__buildDiffPayload --> src__cli__buildGitDiff - src__cli__buildFileDiff --> src__cli__optionNumber - src__cli__context --> src__cli__optionString - src__cli__context --> src__cli__optionBoolean - src__cli__context --> src__cli__optionNumber - src__cli__buildGitDiff --> src__cli__optionNumber - src__cli__buildGitDiff --> src__cli__optionString - src__cli__buildGitDiff --> src__cli__optionBoolean - src__cli__handleReality --> src__cli__optionString - src__cli__handleReality --> src__cli__optionNumber - src__cli__handleReality --> src__cli__optionBoolean - src__cli__view --> src__cli__optionNumber - src__cli__view --> src__cli__optionBoolean - src__cli__handleExtract --> src__cli__optionString - src__cli__handleExtract --> src__cli__handler - src__cli__handleExtractNl --> src__cli__optionString - src__cli__handleExtractNl --> src__cli__optionNlMode - src__cli__handleExtractNl --> src__cli__emitExtraction - src__cli__handleExtractGit --> src__cli__optionNumber - src__cli__handleExtractGit --> src__cli__emitExtraction - src__cli__handleExtractAst --> src__cli__emitExtraction - src__cli__handleExtractConfig --> src__cli__emitExtraction - src__cli__handleExtractRuntime --> src__cli__emitExtraction - src__cli__handleExtractMarkdown --> src__cli__optionNullableString - src__cli__handleExtractMarkdown --> src__cli__optionLlmMode - src__cli__handleExtractMarkdown --> src__cli__emitExtraction - src__cli__handleExtractDocs --> src__cli__optionList - src__cli__handleExtractDocs --> src__cli__emitExtraction - src__cli__handleExtractCommunication --> src__cli__optionString - src__cli__handleExtractCommunication --> src__cli__optionNullableString - src__cli__handleExtractCommunication --> src__cli__optionLlmMode - src__cli__handleExtractCommunication --> src__cli__emitExtraction - src__cli__handleCommunication --> src__cli__optionString - src__cli__handleCommunication --> src__cli__optionNullableString - src__cli__handleCommunication --> src__cli__optionLlmMode - src__cli__handleCommunication --> src__cli__optionNumber - src__cli__handleCommunication --> src__cli__optionBoolean - src__cli__handleIntake --> src__cli__optionString - src__cli__handleIntake --> src__cli__optionBoolean - src__cli__handleIntake --> src__cli__intakeExitCode - src__cli__absolute --> src__cli__optionString - src__cli__doctor --> src__cli__execFileAsync - src__cli__optionNumber --> src__cli__optionString - src__cli__optionList --> src__cli__optionString - src__cli__optionNlMode --> src__cli__optionLlmMode - src__cli__optionLlmMode --> src__cli__optionString - src__cli__optionTaskMode --> src__cli__optionString - src__cli__optionSummaryMode --> src__cli__optionLlmMode - src__cli__optionSummaryMode --> src__cli__optionBoolean - src__cli__optionPipelineTaskMode --> src__cli__optionString - src__cli__invokedPath --> src__cli__main src__extractors__nl__extractNlIntent --> src__extractors__nl__assertNlExtractionOptions src__extractors__nl__extractNlIntent --> src__extractors__nl__detectMissingFields src__extractors__nl__extractNlIntent --> src__extractors__nl__inferActor @@ -2419,8 +2305,147 @@ flowchart TD src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectAstCandidates src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__sortCandidates src__graph__symbol_resolution__buildSymbolResolutionIndex --> src__graph__symbol_resolution__collectNlResolutions + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__uniqueSymbols + src__graph__symbol_resolution__byAlias --> src__graph__symbol_resolution__buildAstCandidate + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__uniqueSymbols + src__graph__symbol_resolution__collectAstCandidates --> src__graph__symbol_resolution__buildAstCandidate + src__graph__symbol_resolution__sortCandidates --> src__graph__symbol_resolution__values + src__graph__symbol_resolution__collectNlResolutions --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__byNlRecord --> src__graph__symbol_resolution__resolveSymbol + src__graph__symbol_resolution__hasResolvedNlAstSymbolPair --> src__graph__symbol_resolution__isAstDeclaration + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__pathSelects + src__graph__symbol_resolution__resolveSymbol --> src__graph__symbol_resolution__uniquePaths + src__graph__symbol_resolution__selected --> src__graph__symbol_resolution__uniquePaths + src__graph__linker__linkIntentRecords --> src__graph__linker__deduplicateRecords + src__graph__linker__linkIntentRecords --> src__graph__linker__indexResolvableBasenames + src__graph__linker__linkIntentRecords --> src__graph__linker__scorePair + src__graph__linker__records --> src__graph__linker__scorePair + src__graph__linker__byId --> src__graph__linker__set + src__graph__linker__keywordIndex --> src__graph__linker__scorePair + src__graph__linker__symbolResolutionIndex --> src__graph__linker__scorePair + src__graph__linker__candidatePairs --> src__graph__linker__scorePair + src__graph__linker__resolvableBasenames --> src__graph__linker__scorePair + src__graph__linker__deduplicateRecords --> src__graph__linker__set + src__graph__linker__indexResolvableBasenames --> src__graph__linker__set + src__graph__linker__owners --> src__graph__linker__set + src__graph__linker__pathsIntersect --> src__graph__linker__expand + src__graph__linker__scorePair --> src__graph__linker__scoreSharedTickets + src__graph__linker__scorePair --> src__graph__linker__scoreSharedSymbol + src__graph__linker__scorePair --> src__graph__linker__scoreSharedPath + src__graph__linker__scorePair --> src__graph__linker__scoreSameAction + src__graph__linker__scorePair --> src__graph__linker__scoreObjectSimilarity + src__graph__linker__scorePair --> src__graph__linker__scoreSharedTopics + src__graph__linker__scorePair --> src__graph__linker__scoreSourceKindPenalty + src__graph__linker__scoreSharedTickets --> src__graph__linker__intersects + src__graph__linker__scoreSharedSymbol --> src__graph__linker__intersectsAliases + src__graph__linker__scoreSharedPath --> src__graph__linker__pathsIntersect + src__graph__linker__scoreSharedPath --> src__graph__linker__isFileAggregateEvidencePair + src__graph__linker__scoreObjectSimilarity --> src__graph__linker__jaccard + src__graph__linker__scoreSharedTopics --> src__graph__linker__isModuleTopicEvidencePair + src__graph__linker__scoreSharedTopics --> src__graph__linker__intersectionSize + src__graph__linker__intersectsAliases --> src__graph__linker__aliases + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__buildDiagnosticContext + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__collectRecordDiagnostics + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__collectContradictionDiagnostics + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__map + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__values + src__graph__diagnostics__diagnoseGraph --> src__graph__diagnostics__severityRank + src__graph__diagnostics__context --> src__graph__diagnostics__collectRecordDiagnostics + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__buildNeighbors + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__map + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__indexGroundedImplementationEvidence + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__indexImplementedPaths + src__graph__diagnostics__buildDiagnosticContext --> src__graph__diagnostics__indexDocumentedPaths + src__graph__diagnostics__neighbors --> src__graph__diagnostics__indexGroundedImplementationEvidence + src__graph__diagnostics__neighbors --> src__graph__diagnostics__indexImplementedPaths + src__graph__diagnostics__neighbors --> src__graph__diagnostics__indexDocumentedPaths + src__graph__diagnostics__recordsById --> src__graph__diagnostics__indexGroundedImplementationEvidence + src__graph__diagnostics__recordsById --> src__graph__diagnostics__indexImplementedPaths + src__graph__diagnostics__recordsById --> src__graph__diagnostics__indexDocumentedPaths + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__collectRelatedRecords + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__collectMissingFields + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__collectSymbolIssues + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__isRecordEvidenced + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildPlannedNotImplementedDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildImplementedWithoutPlanDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildUndocumentedImplementationDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildChangelogWithoutImplementationDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildAmbiguousRequirementDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildLowConfidenceDiagnostic + src__graph__diagnostics__collectRecordDiagnostics --> src__graph__diagnostics__buildUnlinkedRecordDiagnostic + src__graph__diagnostics__collectRelatedRecords --> src__graph__diagnostics__map + src__graph__diagnostics__isRecordEvidenced --> src__graph__diagnostics__hasImplementedTarget + src__graph__diagnostics__isRecordEvidenced --> src__graph__diagnostics__hasDocumentedTarget + src__graph__diagnostics__buildPlannedNotImplementedDiagnostic --> src__graph__diagnostics__isPlan + src__graph__diagnostics__buildPlannedNotImplementedDiagnostic --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__buildImplementedWithoutPlanDiagnostic --> src__graph__diagnostics__isPublicImplementation + src__graph__diagnostics__buildImplementedWithoutPlanDiagnostic --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__buildUndocumentedImplementationDiagnostic --> src__graph__diagnostics__isReleaseCandidate + src__graph__diagnostics__buildUndocumentedImplementationDiagnostic --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__buildChangelogWithoutImplementationDiagnostic --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__buildAmbiguousRequirementDiagnostic --> src__graph__diagnostics__ambiguityDetail + src__graph__diagnostics__buildAmbiguousRequirementDiagnostic --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__buildAmbiguousRequirementDiagnostic --> src__graph__diagnostics__ambiguityAction + src__graph__diagnostics__buildLowConfidenceDiagnostic --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__buildUnlinkedRecordDiagnostic --> src__graph__diagnostics__isImportantRecord + src__graph__diagnostics__buildUnlinkedRecordDiagnostic --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__collectContradictionDiagnostics --> src__graph__diagnostics__map + src__graph__diagnostics__collectContradictionDiagnostics --> src__graph__diagnostics__makeDiagnostic + src__graph__diagnostics__indexGroundedImplementationEvidence --> src__graph__diagnostics__isImplementationEvidence + src__graph__diagnostics__indexGroundedImplementationEvidence --> src__graph__diagnostics__relationSupportsImplementation + src__graph__diagnostics__grounded --> src__graph__diagnostics__isImplementationEvidence + src__graph__diagnostics__grounded --> src__graph__diagnostics__relationSupportsImplementation + src__graph__diagnostics__left --> src__graph__diagnostics__isImplementationEvidence + src__graph__diagnostics__left --> src__graph__diagnostics__relationSupportsImplementation + src__graph__diagnostics__right --> src__graph__diagnostics__isImplementationEvidence + src__graph__diagnostics__right --> src__graph__diagnostics__relationSupportsImplementation + src__graph__diagnostics__ambiguityAction --> src__graph__diagnostics__map + src__graph__diagnostics__buildNeighbors --> src__graph__diagnostics__appendNeighbor + src__graph__diagnostics__map --> src__graph__diagnostics__appendNeighbor + src__graph__diagnostics__indexImplementedPaths --> src__graph__diagnostics__isImplementationEvidence + src__graph__diagnostics__isReleaseCandidate --> src__graph__diagnostics__isPublicImplementation + src__graph__diagnostics__isImportantRecord --> src__graph__diagnostics__isPublicImplementation + src__graph__changelog_signal__GENERATED_ANALYSIS_BASENAMES --> src__graph__changelog_signal__isPlaceholder + src__graph__changelog_signal__GENERATED_ANALYSIS_BASENAMES --> src__graph__changelog_signal__isFileSummary + src__graph__changelog_signal__GENERATED_ANALYSIS_BASENAMES --> src__graph__changelog_signal__isFileOnlyUpdate + src__graph__changelog_signal__isActionableChangelogRecord --> src__graph__changelog_signal__isPlaceholder + src__graph__changelog_signal__isActionableChangelogRecord --> src__graph__changelog_signal__isFileSummary + src__graph__changelog_signal__isActionableChangelogRecord --> src__graph__changelog_signal__isFileOnlyUpdate + src__graph__changelog_signal__isFileOnlyUpdate --> src__graph__changelog_signal__match + src__graph__capability_evidence__aggregateCapabilityOverlap --> src__graph__capability_evidence__isFileAggregate + src__graph__capability_evidence__aggregateCapabilityOverlap --> src__graph__capability_evidence__declaredCapabilityTopics + src__graph__capability_evidence__aggregateCapabilityOverlap --> src__graph__capability_evidence__aggregateCapabilityTopics + src__graph__capability_evidence__hasCapabilityClaim --> src__graph__capability_evidence__declaredCapabilityTopics + src__graph__linker_candidates__collectCandidatePairs --> src__graph__linker_candidates__indexTargetBuckets + src__graph__linker_candidates__collectCandidatePairs --> src__graph__linker_candidates__indexKeywordBuckets + src__graph__linker_candidates__collectCandidatePairs --> src__graph__linker_candidates__isModuleTopicSource + src__graph__linker_candidates__collectCandidatePairs --> src__graph__linker_candidates__indexTopicBuckets + src__graph__linker_candidates__collectCandidatePairs --> src__graph__linker_candidates__pairsFromBuckets + src__graph__linker_candidates__buckets --> src__graph__linker_candidates__indexTargetBuckets + src__graph__linker_candidates__buckets --> src__graph__linker_candidates__indexKeywordBuckets + src__graph__linker_candidates__buckets --> src__graph__linker_candidates__isModuleTopicSource + src__graph__linker_candidates__buckets --> src__graph__linker_candidates__indexTopicBuckets + src__graph__linker_candidates__astIds --> src__graph__linker_candidates__indexTargetBuckets + src__graph__linker_candidates__astIds --> src__graph__linker_candidates__indexKeywordBuckets + src__graph__linker_candidates__astIds --> src__graph__linker_candidates__isModuleTopicSource + src__graph__linker_candidates__astIds --> src__graph__linker_candidates__indexTopicBuckets + src__graph__linker_candidates__moduleAstIds --> src__graph__linker_candidates__indexTargetBuckets + src__graph__linker_candidates__moduleAstIds --> src__graph__linker_candidates__indexKeywordBuckets + src__graph__linker_candidates__moduleAstIds --> src__graph__linker_candidates__isModuleTopicSource + src__graph__linker_candidates__moduleAstIds --> src__graph__linker_candidates__indexTopicBuckets + src__graph__linker_candidates__declarationAstIds --> src__graph__linker_candidates__indexTargetBuckets + src__graph__linker_candidates__declarationAstIds --> src__graph__linker_candidates__indexKeywordBuckets + src__graph__linker_candidates__declarationAstIds --> src__graph__linker_candidates__isModuleTopicSource + src__graph__linker_candidates__declarationAstIds --> src__graph__linker_candidates__indexTopicBuckets + src__graph__linker_candidates__configurationIds --> src__graph__linker_candidates__indexTargetBuckets + src__graph__linker_candidates__configurationIds --> src__graph__linker_candidates__indexKeywordBuckets + src__graph__linker_candidates__configurationIds --> src__graph__linker_candidates__isModuleTopicSource + src__graph__linker_candidates__configurationIds --> src__graph__linker_candidates__indexTopicBuckets classDef highCC fill:#ff6b6b,stroke:#c92a2a,color:#fff classDef medCC fill:#ffd43b,stroke:#f08c00,color:#000 - class src__core__record_metadata__generationMetadata,src__web__diff_ui_script__compareGraphs,src__interfaces__a2a_message_command__looksLikeJson,src__diff__reality__buildRealityTotals,src__pipeline__run_persistence__persistPipelineArtifacts,src__pipeline__run_persistence__persistFailedRunState,src__evaluation__gold_types__assertRerankerDecision,src__operations__validation__assertGeneration,src__operations__validation__validateOperationStep,src__communication__analyzer__collectAgentActionIssues,php__ast_extract__parseFile,scripts__verify_env_contract__makefile,scripts__verify_no_llm_imports__visited,scripts__verify_no_llm_imports__visit,scripts__research__rank_intent_graph_embeddings__main,python__ast_extract__iter_python_files,sdk__go__examples__basic__main__run,sdk__typescript__examples__basic__baseUrl,sdk__typescript__examples__basic__token,sdk__typescript__examples__basic__root,sdk__typescript__examples__basic__main,sdk__rust__examples__basic__run,sdk__rust__src__client__parse_http_response,src__pipeline__run__executePipeline highCC - class rust_ast__src__main__collect_files,examples__backend__src__request_handlers__MAX_BODY_BYTES,examples__backend__src__request_handlers__handleRequest,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__cli__main,src__cli__handleRenderTodo,src__cli__handleApplyTodo,src__cli__options,src__cli__formatWatchEvent,src__cli__stamp,src__cli__handleDiff,src__cli__handleReality,src__cli__handleCommunication,src__cli__handleIntake,src__cli__intakeExitCode,src__cli__parseArgs,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk medCC + class src__core__record_metadata__generationMetadata,php__ast_extract__parseFile,scripts__verify_env_contract__collectDockerReferences,scripts__research__rank_intent_graph_embeddings__main,sdk__go__examples__basic__main__run,sdk__typescript__examples__basic__baseUrl,sdk__typescript__examples__basic__token,sdk__typescript__examples__basic__root,sdk__typescript__examples__basic__main,sdk__rust__examples__basic__run highCC + class rust_ast__src__main__collect_files,examples__backend__src__request_handlers__MAX_BODY_BYTES,examples__backend__src__request_handlers__handleRequest,examples__backend__src__validation__ALLOWED_ACTIONS,examples__backend__src__validation__validateEventPayload,java__JavaAstExtract__JavaAstExtract__main,java__JavaAstExtract__JavaAstExtract__escape,src__extractors__nl__assertNlExtractionOptions,src__extractors__nl__detectMissingFields,src__extractors__ast__extractAstIntent,src__extractors__runtime_cycle__MAX_PER_SECTION,src__extractors__runtime_cycle__extractRuntimeCycleIntent,src__extractors__runtime_cycle__boundedArray,src__extractors__runtime_cycle__probeRecord,src__extractors__configuration__isConfigurationPath,src__extractors__nl_llm__NlLlmRequiredError__extractNlIntentAudited,src__extractors__docs_llm__DocumentationLlmRequiredError__isDocumentChunks,src__extractors__docs_llm__DocumentationLlmRequiredError__extractChunk,src__extractors__changelog__extractChangelog,src__extractors__changelog__changelogAction,src__extractors__docs_deterministic__parseSectionHeading,src__extractors__docs_deterministic__readParagraph,src__extractors__docs_deterministic__cursor,src__extractors__markdown_paths__createMarkdownPathResolver,src__extractors__markdown_paths__repositoryRoot,src__extractors__markdown_paths__basenames,src__extractors__markdown_paths__headingDirectories,src__extractors__markdown_paths__scanDirectoryForBasenames,src__extractors__docs_record__OBJECT_PLACEHOLDERS,src__extractors__docs_record__toDocumentIntentRecord medCC diff --git a/project/planfile-tickets.yaml b/project/planfile-tickets.yaml index 99e4e15..bb05cad 100644 --- a/project/planfile-tickets.yaml +++ b/project/planfile-tickets.yaml @@ -1,5 +1,5 @@ source: code2llm -# generated in 0.13s +# generated in 0.14s schema: code2llm.planfile_tickets.v1 project_root: /home/tom/github/semcod/todo2code tickets: @@ -39,23 +39,6 @@ tickets: files: - scripts/research/rank-intent-graph-embeddings.py dedupe_key: code2llm:cc:scripts/research/rank-intent-graph-embeddings.py:scripts.research.rank-intent-graph-embeddings.main -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.makefile (CC=28)' - description: 'code2llm reports `scripts.verify-env-contract.makefile` at `scripts/verify-env-contract.mjs:41` - with cyclomatic complexity 28 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: high - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - scripts/verify-env-contract.mjs - dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.makefile - signal: code2llm_cc title: 'Reduce cyclomatic complexity: sdk.go.examples.basic.main.run (CC=26)' description: 'code2llm reports `sdk.go.examples.basic.main.run` at `sdk/go/examples/basic/main.go:29` @@ -73,23 +56,6 @@ tickets: files: - sdk/go/examples/basic/main.go dedupe_key: code2llm:cc:sdk/go/examples/basic/main.go:sdk.go.examples.basic.main.run -- signal: code2llm_god - title: 'Split god module: src/diff/reality.ts' - description: 'code2llm reports `src/diff/reality.ts` as a large module (690 lines, - 4 classes). - - - Split it by responsibility, keep public imports stable, and add focused tests - around the moved behavior.' - priority: high - labels: - - llm-ready - - code2llm - - god-module - - refactor - files: - - src/diff/reality.ts - dedupe_key: code2llm:god:src/diff/reality.ts - signal: code2llm_smell_god_function title: 'Address code smell: God Function: decode_envelope' description: 'code2llm reports `God Function: decode_envelope` in `src/interfaces/intake_cli.py:78`. @@ -171,7 +137,7 @@ tickets: description: 'code2llm reports `God Module: src.cli` in `src/cli.ts:1`. - Module ''src.cli'' is too large (202 functions, 1 classes). Consider splitting + Module ''src.cli'' is too large (212 functions, 1 classes). Consider splitting into sub-modules. @@ -186,43 +152,10 @@ tickets: - src/cli.ts dedupe_key: 'code2llm:smell:god_function:src/cli.ts:1:God Module: src.cli' - signal: code2llm_cc - title: 'Reduce cyclomatic complexity: python.ast_extract.iter_python_files (CC=16)' - description: 'code2llm reports `python.ast_extract.iter_python_files` at `python/ast_extract.py:168` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - python/ast_extract.py - dedupe_key: code2llm:cc:python/ast_extract.py:python.ast_extract.iter_python_files -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visit (CC=15)' - description: 'code2llm reports `scripts.verify-no-llm-imports.visit` at `scripts/verify-no-llm-imports.mjs:27` - with cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - scripts/verify-no-llm-imports.mjs - dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visit -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: scripts.verify-no-llm-imports.visited (CC=15)' - description: 'code2llm reports `scripts.verify-no-llm-imports.visited` at `scripts/verify-no-llm-imports.mjs:22` - with cyclomatic complexity 15 (limit 15). + title: 'Reduce cyclomatic complexity: scripts.verify-env-contract.collectDockerReferences + (CC=20)' + description: 'code2llm reports `scripts.verify-env-contract.collectDockerReferences` + at `scripts/verify-env-contract.mjs:84` with cyclomatic complexity 20 (limit 15). Extract smaller functions, flatten conditionals, or split strategy branches. Re-run @@ -234,8 +167,8 @@ tickets: - complexity - refactor files: - - scripts/verify-no-llm-imports.mjs - dedupe_key: code2llm:cc:scripts/verify-no-llm-imports.mjs:scripts.verify-no-llm-imports.visited + - scripts/verify-env-contract.mjs + dedupe_key: code2llm:cc:scripts/verify-env-contract.mjs:scripts.verify-env-contract.collectDockerReferences - signal: code2llm_cc title: 'Reduce cyclomatic complexity: sdk.rust.examples.basic.run (CC=20)' description: 'code2llm reports `sdk.rust.examples.basic.run` at `sdk/rust/examples/basic.rs:27` @@ -253,23 +186,6 @@ tickets: files: - sdk/rust/examples/basic.rs dedupe_key: code2llm:cc:sdk/rust/examples/basic.rs:sdk.rust.examples.basic.run -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: sdk.rust.src.client.parse_http_response (CC=18)' - description: 'code2llm reports `sdk.rust.src.client.parse_http_response` at `sdk/rust/src/client.rs:152` - with cyclomatic complexity 18 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - sdk/rust/src/client.rs - dedupe_key: code2llm:cc:sdk/rust/src/client.rs:sdk.rust.src.client.parse_http_response - signal: code2llm_cc title: 'Reduce cyclomatic complexity: sdk.typescript.examples.basic.baseUrl (CC=17)' description: 'code2llm reports `sdk.typescript.examples.basic.baseUrl` at `sdk/typescript/examples/basic.ts:13` @@ -338,24 +254,6 @@ tickets: files: - sdk/typescript/examples/basic.ts dedupe_key: code2llm:cc:sdk/typescript/examples/basic.ts:sdk.typescript.examples.basic.token -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.communication.analyzer.collectAgentActionIssues - (CC=15)' - description: 'code2llm reports `src.communication.analyzer.collectAgentActionIssues` - at `src/communication/analyzer.ts:173` with cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/communication/analyzer.ts - dedupe_key: code2llm:cc:src/communication/analyzer.ts:src.communication.analyzer.collectAgentActionIssues - signal: code2llm_cc title: 'Reduce cyclomatic complexity: src.core.record-metadata.generationMetadata (CC=17)' @@ -374,173 +272,12 @@ tickets: files: - src/core/record-metadata.ts dedupe_key: code2llm:cc:src/core/record-metadata.ts:src.core.record-metadata.generationMetadata -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.diff.reality.buildRealityTotals (CC=15)' - description: 'code2llm reports `src.diff.reality.buildRealityTotals` at `src/diff/reality.ts:224` - with cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/diff/reality.ts - dedupe_key: code2llm:cc:src/diff/reality.ts:src.diff.reality.buildRealityTotals -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.evaluation.gold-types.assertRerankerDecision - (CC=17)' - description: 'code2llm reports `src.evaluation.gold-types.assertRerankerDecision` - at `src/evaluation/gold-types.ts:383` with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/evaluation/gold-types.ts - dedupe_key: code2llm:cc:src/evaluation/gold-types.ts:src.evaluation.gold-types.assertRerankerDecision -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.interfaces.a2a-message-command.looksLikeJson - (CC=20)' - description: 'code2llm reports `src.interfaces.a2a-message-command.looksLikeJson` - at `src/interfaces/a2a-message-command.ts:56` with cyclomatic complexity 20 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/interfaces/a2a-message-command.ts - dedupe_key: code2llm:cc:src/interfaces/a2a-message-command.ts:src.interfaces.a2a-message-command.looksLikeJson -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.operations.validation.assertGeneration - (CC=16)' - description: 'code2llm reports `src.operations.validation.assertGeneration` at `src/operations/validation.ts:162` - with cyclomatic complexity 16 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/operations/validation.ts - dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.assertGeneration -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.operations.validation.validateOperationStep - (CC=23)' - description: 'code2llm reports `src.operations.validation.validateOperationStep` - at `src/operations/validation.ts:277` with cyclomatic complexity 23 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/operations/validation.ts - dedupe_key: code2llm:cc:src/operations/validation.ts:src.operations.validation.validateOperationStep -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.pipeline.run-persistence.persistFailedRunState - (CC=19)' - description: 'code2llm reports `src.pipeline.run-persistence.persistFailedRunState` - at `src/pipeline/run-persistence.ts:206` with cyclomatic complexity 19 (limit - 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/pipeline/run-persistence.ts - dedupe_key: code2llm:cc:src/pipeline/run-persistence.ts:src.pipeline.run-persistence.persistFailedRunState -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.pipeline.run-persistence.persistPipelineArtifacts - (CC=17)' - description: 'code2llm reports `src.pipeline.run-persistence.persistPipelineArtifacts` - at `src/pipeline/run-persistence.ts:57` with cyclomatic complexity 17 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/pipeline/run-persistence.ts - dedupe_key: code2llm:cc:src/pipeline/run-persistence.ts:src.pipeline.run-persistence.persistPipelineArtifacts -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.pipeline.run.executePipeline (CC=20)' - description: 'code2llm reports `src.pipeline.run.executePipeline` at `src/pipeline/run.ts:198` - with cyclomatic complexity 20 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/pipeline/run.ts - dedupe_key: code2llm:cc:src/pipeline/run.ts:src.pipeline.run.executePipeline -- signal: code2llm_cc - title: 'Reduce cyclomatic complexity: src.web.diff-ui-script.compareGraphs (CC=15)' - description: 'code2llm reports `src.web.diff-ui-script.compareGraphs` at `src/web/diff-ui-script.ts:11` - with cyclomatic complexity 15 (limit 15). - - - Extract smaller functions, flatten conditionals, or split strategy branches. Re-run - code2llm after the change and keep tests green.' - priority: normal - labels: - - llm-ready - - code2llm - - complexity - - refactor - files: - - src/web/diff-ui-script.ts - dedupe_key: code2llm:cc:src/web/diff-ui-script.ts:src.web.diff-ui-script.compareGraphs - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: file, self, root, nl_mode' - description: 'code2llm reports `Data Clump: file, self, root, nl_mode` in `sdk/python/todo2code/client.py:307`. + title: 'Address code smell: Data Clump: nl_mode, file, self, root' + description: 'code2llm reports `Data Clump: nl_mode, file, self, root` in `sdk/python/todo2code/client.py:307`. - Arguments (file, self, root, nl_mode) are used together in multiple functions: + Arguments (nl_mode, file, self, root) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. @@ -554,13 +291,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:307:Data Clump: - file, self, root, nl_mode' + nl_mode, file, self, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: file, self, root, nl_mode' - description: 'code2llm reports `Data Clump: file, self, root, nl_mode` in `sdk/python/todo2code/client.py:312`. + title: 'Address code smell: Data Clump: nl_mode, file, self, root' + description: 'code2llm reports `Data Clump: nl_mode, file, self, root` in `sdk/python/todo2code/client.py:312`. - Arguments (file, self, root, nl_mode) are used together in multiple functions: + Arguments (nl_mode, file, self, root) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.extract_nl, sdk.python.todo2code.client.T2CClient.extract_nl_result. @@ -574,15 +311,14 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:312:Data Clump: - file, self, root, nl_mode' + nl_mode, file, self, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo' - description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self, - todo` in `sdk/python/todo2code/client.py:332`. + title: 'Address code smell: Data Clump: patterns, excludes, self, root' + description: 'code2llm reports `Data Clump: patterns, excludes, self, root` in `sdk/python/todo2code/client.py:354`. - Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (patterns, excludes, self, root) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. Make the smallest refactor that removes the smell and run local tests.' @@ -594,16 +330,15 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: - root, markdown_mode, changelog, self, todo' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: + patterns, excludes, self, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: root, markdown_mode, changelog, self, todo' - description: 'code2llm reports `Data Clump: root, markdown_mode, changelog, self, - todo` in `sdk/python/todo2code/client.py:341`. + title: 'Address code smell: Data Clump: patterns, excludes, self, root' + description: 'code2llm reports `Data Clump: patterns, excludes, self, root` in `sdk/python/todo2code/client.py:362`. - Arguments (root, markdown_mode, changelog, self, todo) are used together in multiple - functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. + Arguments (patterns, excludes, self, root) are used together in multiple functions: + sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. Make the smallest refactor that removes the smell and run local tests.' @@ -615,14 +350,14 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: - root, markdown_mode, changelog, self, todo' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: + patterns, excludes, self, root' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, payload, action' - description: 'code2llm reports `Data Clump: self, payload, action` in `sdk/python/todo2code/client.py:249`. + title: 'Address code smell: Data Clump: payload, action, self' + description: 'code2llm reports `Data Clump: payload, action, self` in `sdk/python/todo2code/client.py:249`. - Arguments (self, payload, action) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + Arguments (payload, action, self) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call. @@ -636,13 +371,13 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:249:Data Clump: - self, payload, action' + payload, action, self' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, payload, action' - description: 'code2llm reports `Data Clump: self, payload, action` in `sdk/python/todo2code/client.py:261`. + title: 'Address code smell: Data Clump: payload, action, self' + description: 'code2llm reports `Data Clump: payload, action, self` in `sdk/python/todo2code/client.py:261`. - Arguments (self, payload, action) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, + Arguments (payload, action, self) are used together in multiple functions: sdk.python.todo2code.client.T2CClient.send, sdk.python.todo2code.client.T2CClient.call. @@ -656,14 +391,15 @@ tickets: files: - sdk/python/todo2code/client.py dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:261:Data Clump: - self, payload, action' + payload, action, self' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, patterns, excludes' - description: 'code2llm reports `Data Clump: self, root, patterns, excludes` in `sdk/python/todo2code/client.py:354`. + title: 'Address code smell: Data Clump: self, todo, root, markdown_mode, changelog' + description: 'code2llm reports `Data Clump: self, todo, root, markdown_mode, changelog` + in `sdk/python/todo2code/client.py:332`. - Arguments (self, root, patterns, excludes) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. + Arguments (self, todo, root, markdown_mode, changelog) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -675,15 +411,16 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:354:Data Clump: - self, root, patterns, excludes' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:332:Data Clump: + self, todo, root, markdown_mode, changelog' - signal: code2llm_smell_data_clump - title: 'Address code smell: Data Clump: self, root, patterns, excludes' - description: 'code2llm reports `Data Clump: self, root, patterns, excludes` in `sdk/python/todo2code/client.py:362`. + title: 'Address code smell: Data Clump: self, todo, root, markdown_mode, changelog' + description: 'code2llm reports `Data Clump: self, todo, root, markdown_mode, changelog` + in `sdk/python/todo2code/client.py:341`. - Arguments (self, root, patterns, excludes) are used together in multiple functions: - sdk.python.todo2code.client.T2CClient.extract_docs, sdk.python.todo2code.client.T2CClient.extract_docs_result. + Arguments (self, todo, root, markdown_mode, changelog) are used together in multiple + functions: sdk.python.todo2code.client.T2CClient.extract_markdown, sdk.python.todo2code.client.T2CClient.extract_markdown_result. Make the smallest refactor that removes the smell and run local tests.' @@ -695,8 +432,8 @@ tickets: - data-clump files: - sdk/python/todo2code/client.py - dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:362:Data Clump: - self, root, patterns, excludes' + dedupe_key: 'code2llm:smell:data_clump:sdk/python/todo2code/client.py:341:Data Clump: + self, todo, root, markdown_mode, changelog' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: MAX_PER_SECTION' description: 'code2llm reports `God Function: MAX_PER_SECTION` in `src/extractors/runtime-cycle.ts:15`. @@ -829,7 +566,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: addCommunicationIssuesToDiagnostics' description: 'code2llm reports `God Function: addCommunicationIssuesToDiagnostics` - in `src/communication/analyzer.ts:305`. + in `src/communication/analyzer.ts:328`. Function ''addCommunicationIssuesToDiagnostics'' is oversized: CC=7, fan-out=12, @@ -845,7 +582,7 @@ tickets: - god-function files: - src/communication/analyzer.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:305:God Function: + dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:328:God Function: addCommunicationIssuesToDiagnostics' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: analyzeCommunication' @@ -924,6 +661,25 @@ tickets: - src/synthesis/todo-patch.ts dedupe_key: 'code2llm:smell:god_function:src/synthesis/todo-patch.ts:160:God Function: applyTodoPatch' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: assertAcyclic' + description: 'code2llm reports `God Function: assertAcyclic` in `src/operations/validation.ts:161`. + + + Function ''assertAcyclic'' is oversized: CC=7, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/operations/validation.ts + dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:161:God Function: + assertAcyclic' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertAcyclicProposalDependencies' description: 'code2llm reports `God Function: assertAcyclicProposalDependencies` @@ -986,7 +742,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertGroundedGenerationMetadata' description: 'code2llm reports `God Function: assertGroundedGenerationMetadata` - in `src/core/schema/utils.ts:167`. + in `src/core/schema/utils.ts:187`. Function ''assertGroundedGenerationMetadata'' is oversized: CC=4, fan-out=12, @@ -1002,7 +758,7 @@ tickets: - god-function files: - src/core/schema/utils.ts - dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:167:God Function: + dedupe_key: 'code2llm:smell:god_function:src/core/schema/utils.ts:187:God Function: assertGroundedGenerationMetadata' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertIntentGraph' @@ -1044,7 +800,7 @@ tickets: assertIntentGraphDiff' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertOperationPlan' - description: 'code2llm reports `God Function: assertOperationPlan` in `src/operations/validation.ts:205`. + description: 'code2llm reports `God Function: assertOperationPlan` in `src/operations/validation.ts:208`. Function ''assertOperationPlan'' is oversized: CC=1, fan-out=12, mutations=0. @@ -1059,7 +815,7 @@ tickets: - god-function files: - src/operations/validation.ts - dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:205:God Function: + dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:208:God Function: assertOperationPlan' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: assertParticipant' @@ -1291,7 +1047,7 @@ tickets: Function: buildAcceptanceContext' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: buildParticipantRows' - description: 'code2llm reports `God Function: buildParticipantRows` in `src/communication/analyzer.ts:225`. + description: 'code2llm reports `God Function: buildParticipantRows` in `src/communication/analyzer.ts:248`. Function ''buildParticipantRows'' is oversized: CC=7, fan-out=13, mutations=0. @@ -1306,7 +1062,7 @@ tickets: - god-function files: - src/communication/analyzer.ts - dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:225:God Function: + dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:248:God Function: buildParticipantRows' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: byKey' @@ -1384,6 +1140,25 @@ tickets: - src/extractors/todo.ts dedupe_key: 'code2llm:smell:god_function:src/extractors/todo.ts:49:God Function: classified' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: classifyAgentActionIssue' + description: 'code2llm reports `God Function: classifyAgentActionIssue` in `src/communication/analyzer.ts:189`. + + + Function ''classifyAgentActionIssue'' is oversized: CC=14, fan-out=12, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/communication/analyzer.ts + dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:189:God Function: + classifyAgentActionIssue' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: collect' description: 'code2llm reports `God Function: collect` in `java/JavaAstExtract.java:58`. @@ -1441,6 +1216,26 @@ tickets: - src/communication/analyzer.ts dedupe_key: 'code2llm:smell:god_function:src/communication/analyzer.ts:111:God Function: collectConflictIssues' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: collectDocumentationExtraction' + description: 'code2llm reports `God Function: collectDocumentationExtraction` in + `src/pipeline/run-documentation.ts:12`. + + + Function ''collectDocumentationExtraction'' is oversized: CC=9, fan-out=11, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/pipeline/run-documentation.ts + dedupe_key: 'code2llm:smell:god_function:src/pipeline/run-documentation.ts:12:God + Function: collectDocumentationExtraction' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: collectRecordDiagnostics' description: 'code2llm reports `God Function: collectRecordDiagnostics` in `src/graph/diagnostics.ts:71`. @@ -1672,7 +1467,7 @@ tickets: Function: decodeDelimitedFields' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: decode_chunked' - description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:189`. + description: 'code2llm reports `God Function: decode_chunked` in `sdk/rust/src/client.rs:211`. Function ''decode_chunked'' is oversized: CC=7, fan-out=12, mutations=0. @@ -1687,7 +1482,7 @@ tickets: - god-function files: - sdk/rust/src/client.rs - dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:189:God Function: + dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:211:God Function: decode_chunked' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: diagnoseGraph' @@ -1918,6 +1713,25 @@ tickets: - src/services/actions.ts dedupe_key: 'code2llm:smell:god_function:src/services/actions.ts:413:God Function: executeCloseCodeChangeAction' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: executePipeline' + description: 'code2llm reports `God Function: executePipeline` in `src/pipeline/run-execution.ts:58`. + + + Function ''executePipeline'' is oversized: CC=12, fan-out=26, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - src/pipeline/run-execution.ts + dedupe_key: 'code2llm:smell:god_function:src/pipeline/run-execution.ts:58:God Function: + executePipeline' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: executePipelineAction' description: 'code2llm reports `God Function: executePipelineAction` in `src/services/actions.ts:556`. @@ -2280,7 +2094,7 @@ tickets: Function: graph' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleCommunication' - description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:666`. + description: 'code2llm reports `God Function: handleCommunication` in `src/cli.ts:687`. Function ''handleCommunication'' is oversized: CC=11, fan-out=18, mutations=0. @@ -2295,10 +2109,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:666:God Function: handleCommunication' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:687:God Function: handleCommunication' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleDiff' - description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:468`. + description: 'code2llm reports `God Function: handleDiff` in `src/cli.ts:489`. Function ''handleDiff'' is oversized: CC=9, fan-out=12, mutations=0. @@ -2313,10 +2127,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:468:God Function: handleDiff' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:489:God Function: handleDiff' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleGraphDiff' - description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:494`. + description: 'code2llm reports `God Function: handleGraphDiff` in `src/cli.ts:515`. Function ''handleGraphDiff'' is oversized: CC=7, fan-out=11, mutations=0. @@ -2331,10 +2145,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:494:God Function: handleGraphDiff' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:515:God Function: handleGraphDiff' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleIntake' - description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:706`. + description: 'code2llm reports `God Function: handleIntake` in `src/cli.ts:727`. Function ''handleIntake'' is oversized: CC=13, fan-out=13, mutations=0. @@ -2349,10 +2163,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:706:God Function: handleIntake' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:727:God Function: handleIntake' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleReality' - description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:551`. + description: 'code2llm reports `God Function: handleReality` in `src/cli.ts:572`. Function ''handleReality'' is oversized: CC=9, fan-out=12, mutations=0. @@ -2367,10 +2181,10 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:551:God Function: handleReality' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:572:God Function: handleReality' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: handleWatch' - description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:346`. + description: 'code2llm reports `God Function: handleWatch` in `src/cli.ts:367`. Function ''handleWatch'' is oversized: CC=1, fan-out=11, mutations=0. @@ -2385,7 +2199,7 @@ tickets: - god-function files: - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:346:God Function: handleWatch' + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:367:God Function: handleWatch' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: index' description: 'code2llm reports `God Function: index` in `src/diff/text-render.ts:43`. @@ -2407,7 +2221,7 @@ tickets: index' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: indexModuleAnchors' - description: 'code2llm reports `God Function: indexModuleAnchors` in `src/diff/reality.ts:324`. + description: 'code2llm reports `God Function: indexModuleAnchors` in `src/diff/reality-build.ts:202`. Function ''indexModuleAnchors'' is oversized: CC=12, fan-out=11, mutations=0. @@ -2421,8 +2235,9 @@ tickets: - code-smell - god-function files: - - src/diff/reality.ts - dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:324:God Function: indexModuleAnchors' + - src/diff/reality-build.ts + dedupe_key: 'code2llm:smell:god_function:src/diff/reality-build.ts:202:God Function: + indexModuleAnchors' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: indexResolvableBasenames' description: 'code2llm reports `God Function: indexResolvableBasenames` in `src/graph/linker.ts:94`. @@ -2592,7 +2407,7 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/config/env.ts:76:God Function: loadEnvFile' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: loadRuns' - description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui-script.ts:9`. + description: 'code2llm reports `God Function: loadRuns` in `src/web/diff-ui-script.ts:11`. Function ''loadRuns'' is oversized: CC=12, fan-out=14, mutations=0. @@ -2607,27 +2422,8 @@ tickets: - god-function files: - src/web/diff-ui-script.ts - dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui-script.ts:9:God Function: + dedupe_key: 'code2llm:smell:god_function:src/web/diff-ui-script.ts:11:God Function: loadRuns' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: local' - description: 'code2llm reports `God Function: local` in `scripts/verify-env-contract.mjs:52`. - - - Function ''local'' is oversized: CC=13, fan-out=3, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - scripts/verify-env-contract.mjs - dedupe_key: 'code2llm:smell:god_function:scripts/verify-env-contract.mjs:52:God - Function: local' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' description: 'code2llm reports `God Function: main` in `rust-ast/src/main.rs:36`. @@ -2667,28 +2463,10 @@ tickets: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `src/cli.ts:61`. - - - Function ''main'' is oversized: CC=9, fan-out=12, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:61:God Function: main' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `src/evaluation/gold-cli.ts:11`. + description: 'code2llm reports `God Function: main` in `src/evaluation/gold-cli.ts:48`. - Function ''main'' is oversized: CC=12, fan-out=15, mutations=0. + Function ''main'' is oversized: CC=5, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2700,7 +2478,7 @@ tickets: - god-function files: - src/evaluation/gold-cli.ts - dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cli.ts:11:God Function: + dedupe_key: 'code2llm:smell:god_function:src/evaluation/gold-cli.ts:48:God Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' @@ -2761,10 +2539,10 @@ tickets: Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: main' - description: 'code2llm reports `God Function: main` in `python/ast_extract.py:195`. + description: 'code2llm reports `God Function: main` in `src/cli.ts:61`. - Function ''main'' is oversized: CC=4, fan-out=19, mutations=12. + Function ''main'' is oversized: CC=4, fan-out=12, mutations=0. Make the smallest refactor that removes the smell and run local tests.' @@ -2775,9 +2553,8 @@ tickets: - code-smell - god-function files: - - python/ast_extract.py - dedupe_key: 'code2llm:smell:god_function:python/ast_extract.py:195:God Function: - main' + - src/cli.ts + dedupe_key: 'code2llm:smell:god_function:src/cli.ts:61:God Function: main' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: matchesRunFilters' description: 'code2llm reports `God Function: matchesRunFilters` in `src/interfaces/a2a-history.ts:77`. @@ -2971,24 +2748,6 @@ tickets: - src/communication/intake-protobuf.ts dedupe_key: 'code2llm:smell:god_function:src/communication/intake-protobuf.ts:79:God Function: offset' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: options' - description: 'code2llm reports `God Function: options` in `src/cli.ts:781`. - - - Function ''options'' is oversized: CC=13, fan-out=5, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:781:God Function: options' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: output' description: 'code2llm reports `God Function: output` in `src/communication/llm/implementation-helpers.ts:148`. @@ -3008,24 +2767,6 @@ tickets: - src/communication/llm/implementation-helpers.ts dedupe_key: 'code2llm:smell:god_function:src/communication/llm/implementation-helpers.ts:148:God Function: output' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: parseArgs' - description: 'code2llm reports `God Function: parseArgs` in `src/cli.ts:779`. - - - Function ''parseArgs'' is oversized: CC=13, fan-out=5, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - src/cli.ts - dedupe_key: 'code2llm:smell:god_function:src/cli.ts:779:God Function: parseArgs' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parseArgs' description: 'code2llm reports `God Function: parseArgs` in `scripts/research/rerank-embedding-shortlist.mjs:164`. @@ -3085,7 +2826,7 @@ tickets: Function: parse_args' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: parse_base_url' - description: 'code2llm reports `God Function: parse_base_url` in `sdk/rust/src/client.rs:172`. + description: 'code2llm reports `God Function: parse_base_url` in `sdk/rust/src/client.rs:194`. Function ''parse_base_url'' is oversized: CC=6, fan-out=11, mutations=0. @@ -3100,7 +2841,7 @@ tickets: - god-function files: - sdk/rust/src/client.rs - dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:172:God Function: + dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:194:God Function: parse_base_url' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: participantGroups' @@ -3123,7 +2864,7 @@ tickets: Function: participantGroups' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: primaryTargetKey' - description: 'code2llm reports `God Function: primaryTargetKey` in `src/diff/reality.ts:402`. + description: 'code2llm reports `God Function: primaryTargetKey` in `src/diff/reality-build.ts:257`. Function ''primaryTargetKey'' is oversized: CC=14, fan-out=9, mutations=0. @@ -3137,8 +2878,9 @@ tickets: - code-smell - god-function files: - - src/diff/reality.ts - dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:402:God Function: primaryTargetKey' + - src/diff/reality-build.ts + dedupe_key: 'code2llm:smell:god_function:src/diff/reality-build.ts:257:God Function: + primaryTargetKey' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: read' description: 'code2llm reports `God Function: read` in `src/communication/intake-store.ts:60`. @@ -3273,7 +3015,7 @@ tickets: renderLiveReport' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: renderRealitySvg' - description: 'code2llm reports `God Function: renderRealitySvg` in `src/diff/reality.ts:528`. + description: 'code2llm reports `God Function: renderRealitySvg` in `src/diff/reality.ts:61`. Function ''renderRealitySvg'' is oversized: CC=9, fan-out=16, mutations=0. @@ -3288,7 +3030,7 @@ tickets: - god-function files: - src/diff/reality.ts - dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:528:God Function: renderRealitySvg' + dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:61:God Function: renderRealitySvg' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: renderTextDiffSvg' description: 'code2llm reports `God Function: renderTextDiffSvg` in `src/diff/text-render.ts:70`. @@ -3629,7 +3371,7 @@ tickets: Function: strings' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: summarizeGraph' - description: 'code2llm reports `God Function: summarizeGraph` in `src/summary/summarizer.ts:57`. + description: 'code2llm reports `God Function: summarizeGraph` in `src/summary/summarizer.ts:56`. Function ''summarizeGraph'' is oversized: CC=10, fan-out=13, mutations=0. @@ -3644,11 +3386,11 @@ tickets: - god-function files: - src/summary/summarizer.ts - dedupe_key: 'code2llm:smell:god_function:src/summary/summarizer.ts:57:God Function: + dedupe_key: 'code2llm:smell:god_function:src/summary/summarizer.ts:56:God Function: summarizeGraph' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: synthesizeTodoProposals' - description: 'code2llm reports `God Function: synthesizeTodoProposals` in `src/synthesis/tasks-llm.ts:62`. + description: 'code2llm reports `God Function: synthesizeTodoProposals` in `src/synthesis/tasks-llm.ts:61`. Function ''synthesizeTodoProposals'' is oversized: CC=5, fan-out=12, mutations=0. @@ -3663,7 +3405,7 @@ tickets: - god-function files: - src/synthesis/tasks-llm.ts - dedupe_key: 'code2llm:smell:god_function:src/synthesis/tasks-llm.ts:62:God Function: + dedupe_key: 'code2llm:smell:god_function:src/synthesis/tasks-llm.ts:61:God Function: synthesizeTodoProposals' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: task' @@ -3798,25 +3540,6 @@ tickets: - src/diff/text-render.ts dedupe_key: 'code2llm:smell:god_function:src/diff/text-render.ts:41:God Function: toSideBySideRows' -- signal: code2llm_smell_god_function - title: 'Address code smell: God Function: try' - description: 'code2llm reports `God Function: try` in `java/JavaAstExtract.java:83`. - - - Function ''try'' is oversized: CC=3, fan-out=13, mutations=0. - - - Make the smallest refactor that removes the smell and run local tests.' - priority: normal - labels: - - llm-ready - - code2llm - - code-smell - - god-function - files: - - java/JavaAstExtract.java - dedupe_key: 'code2llm:smell:god_function:java/JavaAstExtract.java:83:God Function: - try' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: unsupportedSourceWarning' description: 'code2llm reports `God Function: unsupportedSourceWarning` in `src/extractors/ast/unsupported.ts:11`. @@ -3878,7 +3601,7 @@ tickets: - signal: code2llm_smell_god_function title: 'Address code smell: God Function: validateOperationExpectations' description: 'code2llm reports `God Function: validateOperationExpectations` in - `src/operations/validation.ts:371`. + `src/operations/validation.ts:280`. Function ''validateOperationExpectations'' is oversized: CC=11, fan-out=13, mutations=0. @@ -3893,7 +3616,7 @@ tickets: - god-function files: - src/operations/validation.ts - dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:371:God Function: + dedupe_key: 'code2llm:smell:god_function:src/operations/validation.ts:280:God Function: validateOperationExpectations' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: validatePatchTargetForEdit' @@ -3933,6 +3656,25 @@ tickets: - src/communication/intake-service.ts dedupe_key: 'code2llm:smell:god_function:src/communication/intake-service.ts:183:God Function: validateProjection' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: validate_http_status_body' + description: 'code2llm reports `God Function: validate_http_status_body` in `sdk/rust/src/client.rs:187`. + + + Function ''validate_http_status_body'' is oversized: CC=14, fan-out=28, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - sdk/rust/src/client.rs + dedupe_key: 'code2llm:smell:god_function:sdk/rust/src/client.rs:187:God Function: + validate_http_status_body' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: values' description: 'code2llm reports `God Function: values` in `src/communication/intake-protobuf.ts:75`. @@ -3970,6 +3712,25 @@ tickets: files: - src/watch/watcher.ts dedupe_key: 'code2llm:smell:god_function:src/watch/watcher.ts:42:God Function: visit' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: visit' + description: 'code2llm reports `God Function: visit` in `scripts/verify-no-llm-imports.mjs:27`. + + + Function ''visit'' is oversized: CC=8, fan-out=14, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - scripts/verify-no-llm-imports.mjs + dedupe_key: 'code2llm:smell:god_function:scripts/verify-no-llm-imports.mjs:27:God + Function: visit' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: visit_item_fn' description: 'code2llm reports `God Function: visit_item_fn` in `rust-ast/src/main.rs:257`. @@ -4008,6 +3769,25 @@ tickets: - rust-ast/src/main.rs dedupe_key: 'code2llm:smell:god_function:rust-ast/src/main.rs:206:God Function: visit_item_mod' +- signal: code2llm_smell_god_function + title: 'Address code smell: God Function: visited' + description: 'code2llm reports `God Function: visited` in `scripts/verify-no-llm-imports.mjs:22`. + + + Function ''visited'' is oversized: CC=8, fan-out=15, mutations=0. + + + Make the smallest refactor that removes the smell and run local tests.' + priority: normal + labels: + - llm-ready + - code2llm + - code-smell + - god-function + files: + - scripts/verify-no-llm-imports.mjs + dedupe_key: 'code2llm:smell:god_function:scripts/verify-no-llm-imports.mjs:22:God + Function: visited' - signal: code2llm_smell_god_function title: 'Address code smell: God Function: writeProjection' description: 'code2llm reports `God Function: writeProjection` in `src/communication/intake-service.ts:132`. @@ -4110,7 +3890,7 @@ tickets: description: 'code2llm reports `God Module: src.communication.analyzer` in `src/communication/analyzer.ts:1`. - Module ''src.communication.analyzer'' is too large (88 functions, 3 classes). + Module ''src.communication.analyzer'' is too large (92 functions, 3 classes). Consider splitting into sub-modules. @@ -4232,7 +4012,7 @@ tickets: description: 'code2llm reports `God Module: src.core.schema.utils` in `src/core/schema/utils.ts:1`. - Module ''src.core.schema.utils'' is too large (42 functions, 0 classes). Consider + Module ''src.core.schema.utils'' is too large (47 functions, 0 classes). Consider splitting into sub-modules. @@ -4307,12 +4087,12 @@ tickets: dedupe_key: 'code2llm:smell:god_function:src/core/types/intent.ts:1:God Module: src.core.types.intent' - signal: code2llm_smell_god_function - title: 'Address code smell: God Module: src.diff.reality' - description: 'code2llm reports `God Module: src.diff.reality` in `src/diff/reality.ts:1`. + title: 'Address code smell: God Module: src.diff.reality-build' + description: 'code2llm reports `God Module: src.diff.reality-build` in `src/diff/reality-build.ts:1`. - Module ''src.diff.reality'' is too large (97 functions, 4 classes). Consider splitting - into sub-modules. + Module ''src.diff.reality-build'' is too large (49 functions, 2 classes). Consider + splitting into sub-modules. Make the smallest refactor that removes the smell and run local tests.' @@ -4323,8 +4103,9 @@ tickets: - code-smell - god-function files: - - src/diff/reality.ts - dedupe_key: 'code2llm:smell:god_function:src/diff/reality.ts:1:God Module: src.diff.reality' + - src/diff/reality-build.ts + dedupe_key: 'code2llm:smell:god_function:src/diff/reality-build.ts:1:God Module: + src.diff.reality-build' - signal: code2llm_smell_god_function title: 'Address code smell: God Module: src.evaluation.gold-cases' description: 'code2llm reports `God Module: src.evaluation.gold-cases` in `src/evaluation/gold-cases.ts:1`. @@ -4350,7 +4131,7 @@ tickets: description: 'code2llm reports `God Module: src.evaluation.gold-types` in `src/evaluation/gold-types.ts:1`. - Module ''src.evaluation.gold-types'' is too large (17 functions, 15 classes). + Module ''src.evaluation.gold-types'' is too large (16 functions, 15 classes). Consider splitting into sub-modules. @@ -4549,7 +4330,7 @@ tickets: description: 'code2llm reports `God Module: src.operations.validation` in `src/operations/validation.ts:1`. - Module ''src.operations.validation'' is too large (75 functions, 0 classes). Consider + Module ''src.operations.validation'' is too large (67 functions, 0 classes). Consider splitting into sub-modules. diff --git a/project/project.toon.yaml b/project/project.toon.yaml index 6c3ad74..ea6c842 100644 --- a/project/project.toon.yaml +++ b/project/project.toon.yaml @@ -1,28 +1,27 @@ -# todo2code | 4129 func | 197f | 43441L | typescript | 2026-08-04 +# todo2code | 4218 func | 209f | 44016L | typescript | 2026-08-04 # generated in 0.00s HEALTH: - CC̄=3.1 critical=187 (limit:10) dup=29 cycles=0 + CC̄=3.0 critical=170 (limit:10) dup=29 cycles=0 ALERTS[20]: !!! high_fan_out compareWorkspaceIntent = 40 (limit:10) !!! cc_exceeded parseFile = 38 (limit:15) - !!! high_fan_out Client.parse_http_response = 37 (limit:10) !!! high_fan_out run = 33 (limit:10) !!! high_fan_out main = 31 (limit:10) - !!! high_fan_out executePipeline = 31 (limit:10) - !!! cc_exceeded makefile = 28 (limit:15) + !!! high_fan_out Client.validate_http_status_body = 28 (limit:10) !!! cc_exceeded main = 27 (limit:15) !!! cc_exceeded run = 26 (limit:15) + !!! high_fan_out executePipeline = 26 (limit:10) !!! high_fan_out temporaryParent = 25 (limit:10) + !!! high_fan_out baseWorktree = 25 (limit:10) -MODULES[281] (top by size): +MODULES[294] (top by size): M[evaluation/gold/v2/dataset.json] 2410L C:0 F:0 CC↑0 D:0 (json) - M[src/cli.ts] 942L C:1 F:124 CC↑13 D:0 (typescript) + M[src/cli.ts] 985L C:1 F:133 CC↑13 D:0 (typescript) M[src/services/actions.ts] 806L C:1 F:106 CC↑13 D:0 (typescript) M[evaluation/gold/v1/dataset.json] 761L C:0 F:0 CC↑0 D:0 (json) - M[src/diff/reality.ts] 690L C:4 F:89 CC↑15 D:0 (typescript) - M[src/communication/analyzer.ts] 596L C:3 F:81 CC↑15 D:0 (typescript) + M[src/communication/analyzer.ts] 619L C:3 F:85 CC↑14 D:0 (typescript) M[schemas/gold-dataset.schema.json] 585L C:0 F:0 CC↑0 D:0 (json) M[src/interfaces/a2a-task-store.ts] 560L C:3 F:88 CC↑11 D:0 (typescript) M[src/core/text.ts] 530L C:0 F:61 CC↑14 D:0 (typescript) @@ -31,22 +30,23 @@ MODULES[281] (top by size): M[sdk/python/todo2code/client.py] 469L C:7 F:45 CC↑7 D:0 (python) M[src/graph/diagnostics.ts] 459L C:1 F:59 CC↑11 D:0 (typescript) M[src/synthesis/code-change-plan/implementation-source-patch-apply-core.ts] 434L C:6 F:50 CC↑13 D:0 (typescript) - M[src/operations/validation.ts] 429L C:0 F:69 CC↑23 D:0 (typescript) - LANGS: typescript:173/json:40/python:16/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 + M[sdk/typescript/src/index.ts] 420L C:14 F:45 CC↑8 D:0 (typescript) + M[sdk/php/src/Client.php] 401L C:1 F:27 CC↑11 D:0 (php) + LANGS: typescript:187/json:40/python:15/javascript:15/shell:8/rust:7/go:6/php:4/toml:3/other:2/yml:2/yaml:2/java:1/txt:1/proto:1 HOTSPOTS[10]: ★ compareWorkspaceIntent fan=40 // Orchestrates 40 calls - ★ Client.parse_http_response fan=37 // Orchestrates 37 calls ★ run fan=33 // Orchestrates 33 calls ★ main fan=31 // Orchestrates 31 calls - ★ executePipeline fan=31 // Orchestrates 31 calls + ★ Client.validate_http_status_body fan=28 // Orchestrates 28 calls + ★ executePipeline fan=26 // Orchestrates 26 calls REFACTOR[15]: [1] H/L Split parseFile (CC=38) - [2] H/L Split makefile (CC=28) - [3] H/L Split main (CC=27) - [4] H/L Split run (CC=26) - [5] H/H Split god module src/communication/analyzer.ts (596L, 3 classes) + [2] H/L Split main (CC=27) + [3] H/L Split run (CC=26) + [4] H/H Split god module src/communication/analyzer.ts (619L, 3 classes) + [5] H/H Split god module src/core/text.ts (530L, 0 classes) EVOLUTION: - 2026-08-04 CC̄=3.1 crit=187 43441L // Automated analysis + 2026-08-04 CC̄=3.0 crit=170 44016L // Automated analysis diff --git a/project/prompt.txt b/project/prompt.txt index 6bb72d0..a9d1251 100644 --- a/project/prompt.txt +++ b/project/prompt.txt @@ -9,10 +9,10 @@ Files for analysis: Note: project/validation.toon.yaml and project/duplication.toon.yaml are generated by external tools (vallm and redup) - analysis.toon.yaml (Health diagnostics - complexity metrics, god modules, coupling issues, refactoring priorities) [25KB] -- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [181KB] +- map.toon.yaml (Structural map - files, sizes, imports, exports, signatures, project header) [187KB] - evolution.toon.yaml (Refactoring queue - ranked actions by impact/effort, risks, metrics targets, history) [2KB] - project.toon.yaml (Compact project overview - generated from project.yaml data) [2KB] -- context.md (LLM narrative - architecture summary and project context) [33KB] +- context.md (LLM narrative - architecture summary and project context) [34KB] - README.md (Generated documentation - overview and usage guide) [9KB] Task: diff --git a/python/ast_extract.py b/python/ast_extract.py index 1a47df6..a15bc02 100755 --- a/python/ast_extract.py +++ b/python/ast_extract.py @@ -167,20 +167,22 @@ def visit_Call(self, node: ast.Call) -> Any: def iter_python_files(root: Path, files_from: Path | None = None) -> list[Path]: if files_from is not None: - values = json.loads(files_from.read_text(encoding='utf-8')) - if not isinstance(values, list) or any(not isinstance(value, str) for value in values): - raise ValueError('--files-from must contain a JSON array of paths') - output: list[Path] = [] - for value in values: - candidate = (root / value).resolve() - try: - candidate.relative_to(root) - except ValueError as exc: - raise ValueError(f'Python source escapes root: {value}') from exc - if candidate.suffix == '.py' and candidate.is_file() and not candidate.is_symlink(): - output.append(candidate) - return sorted(set(output)) + return _iter_python_files_from_manifest(root, files_from) if files_from is not None else _iter_python_files_from_disk(root) + +def _iter_python_files_from_manifest(root: Path, files_from: Path) -> list[Path]: + values = json.loads(files_from.read_text(encoding='utf-8')) + if not isinstance(values, list) or any(not isinstance(value, str) for value in values): + raise ValueError('--files-from must contain a JSON array of paths') + output: list[Path] = [] + for value in values: + candidate = _resolve_candidate(root, value) + if candidate.suffix == '.py' and candidate.is_file() and not candidate.is_symlink(): + output.append(candidate) + return sorted(set(output)) + + +def _iter_python_files_from_disk(root: Path) -> list[Path]: output: list[Path] = [] for current, directories, files in os.walk(root): directories[:] = sorted(directory for directory in directories if directory not in IGNORED_DIRS) @@ -192,6 +194,15 @@ def iter_python_files(root: Path, files_from: Path | None = None) -> list[Path]: return output +def _resolve_candidate(root: Path, value: str) -> Path: + candidate = (root / value).resolve() + try: + candidate.relative_to(root) + except ValueError as exc: + raise ValueError(f'Python source escapes root: {value}') from exc + return candidate + + def main() -> int: parser = argparse.ArgumentParser() parser.add_argument('root') diff --git a/scripts/live-contract-check.mjs b/scripts/live-contract-check.mjs index c3627f3..e60b925 100644 --- a/scripts/live-contract-check.mjs +++ b/scripts/live-contract-check.mjs @@ -29,7 +29,7 @@ const DEFAULTS = { runOutput: '.intent-live-run', }; -function envNumber(raw, name, fallback) { +function resolveEnvNumber(raw, name, fallback) { if (raw === undefined || raw.trim() === '') return fallback; const value = Number(raw); if (!Number.isFinite(value) || value < 0) { @@ -43,13 +43,7 @@ async function main() { await loadEnvFile(REPO_ROOT); const config = getConfig(REPO_ROOT); - if (!config.openRouter.apiKey) { - if (process.env.T2C_REQUIRE_LIVE_CHECK === '1') { - throw new Error('OPENROUTER_API_KEY is not configured and T2C_REQUIRE_LIVE_CHECK=1'); - } - process.stdout.write('live contract check: SKIPPED (OPENROUTER_API_KEY not configured)\n'); - return; - } + if (await maybeSkipLiveContractCheck(config)) return; const { buildRecordedLiveAudit, @@ -57,19 +51,7 @@ async function main() { renderLiveReport, } = await import('../dist/src/live/contract-check.js'); - const budget = { - maxStageLatencyMs: envNumber( - process.env.T2C_LIVE_MAX_STAGE_LATENCY_MS ?? process.env.T2C_LIVE_MAX_LATENCY_MS, - 'T2C_LIVE_MAX_STAGE_LATENCY_MS', - DEFAULTS.maxStageLatencyMs, - ), - maxTotalLatencyMs: envNumber( - process.env.T2C_LIVE_MAX_TOTAL_LATENCY_MS, - 'T2C_LIVE_MAX_TOTAL_LATENCY_MS', - DEFAULTS.maxTotalLatencyMs, - ), - maxCostUsd: envNumber(process.env.T2C_LIVE_MAX_COST_USD, 'T2C_LIVE_MAX_COST_USD', DEFAULTS.maxCostUsd), - }; + const budget = resolveLiveBudget(); const manifest = await runLivePipeline(budget, liveRequestTimeoutMs); const history = await readHistory(); @@ -90,13 +72,42 @@ async function main() { if (!audit.passed) process.exitCode = 1; } +function isLiveCheckRequired() { + return process.env.T2C_REQUIRE_LIVE_CHECK === '1'; +} + +async function maybeSkipLiveContractCheck(config) { + if (config.openRouter.apiKey) return false; + if (isLiveCheckRequired()) { + throw new Error('OPENROUTER_API_KEY is not configured and T2C_REQUIRE_LIVE_CHECK=1'); + } + process.stdout.write('live contract check: SKIPPED (OPENROUTER_API_KEY not configured)\n'); + return true; +} + +function resolveLiveBudget() { + return { + maxStageLatencyMs: resolveEnvNumber( + process.env.T2C_LIVE_MAX_STAGE_LATENCY_MS ?? process.env.T2C_LIVE_MAX_LATENCY_MS, + 'T2C_LIVE_MAX_STAGE_LATENCY_MS', + DEFAULTS.maxStageLatencyMs, + ), + maxTotalLatencyMs: resolveEnvNumber( + process.env.T2C_LIVE_MAX_TOTAL_LATENCY_MS, + 'T2C_LIVE_MAX_TOTAL_LATENCY_MS', + DEFAULTS.maxTotalLatencyMs, + ), + maxCostUsd: resolveEnvNumber(process.env.T2C_LIVE_MAX_COST_USD, 'T2C_LIVE_MAX_COST_USD', DEFAULTS.maxCostUsd), + }; +} + /** * Runs all six semantic stages with no deterministic fallback available. * * `require-llm` throws once a stage cannot honour the contract, but it persists * the failed run's manifest first. That manifest is the finding, so it is read * back and measured: a named stage with its reason beats an opaque exception. - */ +*/ async function runLivePipeline(budget, liveRequestTimeoutMs) { const { runPipeline } = await import('../dist/src/pipeline/run.js'); const { getConfig } = await import('../dist/src/config/env.js'); @@ -117,6 +128,7 @@ async function runLivePipeline(budget, liveRequestTimeoutMs) { const deadline = new AbortController(); const deadlineTimer = setTimeout(() => deadline.abort(), budget.maxTotalLatencyMs); config.openRouter.signal = deadline.signal; + applyLiveBudgetTimeouts(config, budget, liveRequestTimeoutMs); const startedAt = Date.now(); try { @@ -130,6 +142,17 @@ async function runLivePipeline(budget, liveRequestTimeoutMs) { } } +function applyLiveBudgetTimeouts(config, budget, liveRequestTimeoutMs) { + config.openRouter.timeoutMs = liveRequestTimeoutMs( + config.openRouter.timeoutMs, + budget.maxStageLatencyMs, + ); + config.documentTimeoutMs = liveRequestTimeoutMs( + config.documentTimeoutMs, + budget.maxStageLatencyMs, + ); +} + async function runLivePipelineOnce(runPipeline, root, outputDir, config) { const result = await runPipeline({ root, diff --git a/scripts/live-model-comparison.mjs b/scripts/live-model-comparison.mjs index 8f259c2..4bd76b3 100644 --- a/scripts/live-model-comparison.mjs +++ b/scripts/live-model-comparison.mjs @@ -29,13 +29,7 @@ async function main() { await loadEnvFile(REPO_ROOT); const probe = getConfig(REPO_ROOT); - if (!probe.openRouter.apiKey) { - if (process.env.T2C_REQUIRE_LIVE_CHECK === '1') { - throw new Error('OPENROUTER_API_KEY is not configured and T2C_REQUIRE_LIVE_CHECK=1'); - } - process.stdout.write('live model comparison: SKIPPED (OPENROUTER_API_KEY not configured)\n'); - return; - } + if (await maybeSkipLiveModelComparison(probe)) return; const { MARKDOWN_LLM_BATCH_RECORDS, extractMarkdownIntentAudited } = await import( '../dist/src/extractors/markdown-llm.js' @@ -45,42 +39,17 @@ async function main() { ); const { liveRequestTimeoutMs } = await import('../dist/src/live/contract-check.js'); - // The comparison enriches a repository's whole TODO/CHANGELOG, which is - // several bounded batches. A request timeout below that budget measures the - // clock rather than the model — the first live run timed out at 120 s on a - // model that had not failed. - const timeoutMs = Number(process.env.T2C_LIVE_COMPARE_TIMEOUT_MS ?? 300_000); - - const models = (process.env.T2C_LIVE_COMPARE_MODELS ?? DEFAULTS.models) - .split(',') - .map((value) => value.trim()) - .filter(Boolean); - if (models.length < 2) throw new Error('T2C_LIVE_COMPARE_MODELS needs at least two comma-separated models'); - - const root = path.resolve(REPO_ROOT, process.env.T2C_LIVE_COMPARE_ROOT ?? DEFAULTS.root); - const runs = []; - for (const model of models) { - // A fresh config per model: the stage reads its model from configuration, - // and sharing one object would leak the previous model's audit fingerprint. - const config = getConfig(root); - config.root = root; - config.openRouter.markdownModel = model; - config.openRouter.timeoutMs = liveRequestTimeoutMs(config.openRouter.timeoutMs, timeoutMs); - process.stdout.write(`running ${model}…\n`); - const result = await extractMarkdownIntentAudited( - { root, todoPath: 'TODO.md', changelogPath: 'CHANGELOG.md' }, - config, - 'require-llm', - ).catch((error) => ({ error })); - - if (result.error) { - // A model that cannot honour the contract is a comparison result, not a - // crash: record it and keep measuring the others. - runs.push({ model, audit: failedAudit(model, result.error), records: [] }); - continue; - } - runs.push({ model, audit: result.audit, records: result.records }); - } + const timeoutMs = resolveLiveModelComparisonTimeout(); + const models = resolveLiveModelList(); + const root = resolveLiveModelRoot(); + const runs = await compareModels({ + models, + root, + timeoutMs, + getConfig, + extractMarkdownIntentAudited, + liveRequestTimeoutMs, + }); const comparison = buildLiveModelComparison({ runs, @@ -98,6 +67,91 @@ async function main() { if (comparison.models.every((model) => !model.ok)) process.exitCode = 1; } +function isLiveModelComparisonRequired() { + return process.env.T2C_REQUIRE_LIVE_CHECK === '1'; +} + +async function maybeSkipLiveModelComparison(probe) { + if (probe.openRouter.apiKey) return false; + if (isLiveModelComparisonRequired()) { + throw new Error('OPENROUTER_API_KEY is not configured and T2C_REQUIRE_LIVE_CHECK=1'); + } + process.stdout.write('live model comparison: SKIPPED (OPENROUTER_API_KEY not configured)\n'); + return true; +} + +function resolveLiveModelComparisonTimeout() { + const raw = process.env.T2C_LIVE_COMPARE_TIMEOUT_MS; + if (raw === undefined || raw.trim() === '') return 300_000; + const value = Number(raw); + if (!Number.isFinite(value) || value < 0) { + throw new Error(`T2C_LIVE_COMPARE_TIMEOUT_MS must be a non-negative number, received "${raw}"`); + } + return value; +} + +function resolveLiveModelList() { + const models = (process.env.T2C_LIVE_COMPARE_MODELS ?? DEFAULTS.models) + .split(',') + .map((value) => value.trim()) + .filter(Boolean); + if (models.length < 2) { + throw new Error('T2C_LIVE_COMPARE_MODELS needs at least two comma-separated models'); + } + return models; +} + +function resolveLiveModelRoot() { + return path.resolve(REPO_ROOT, process.env.T2C_LIVE_COMPARE_ROOT ?? DEFAULTS.root); +} + +async function compareModels({ + models, + root, + timeoutMs, + getConfig, + extractMarkdownIntentAudited, + liveRequestTimeoutMs, +}) { + const runs = []; + for (const model of models) { + runs.push(await runModelMarkdownComparison({ + model, + root, + timeoutMs, + getConfig, + extractMarkdownIntentAudited, + liveRequestTimeoutMs, + })); + } + return runs; +} + +async function runModelMarkdownComparison({ + model, + root, + timeoutMs, + getConfig, + extractMarkdownIntentAudited, + liveRequestTimeoutMs, +}) { + const config = getConfig(root); + config.root = root; + config.openRouter.markdownModel = model; + config.openRouter.timeoutMs = liveRequestTimeoutMs(config.openRouter.timeoutMs, timeoutMs); + process.stdout.write(`running ${model}…\n`); + const result = await extractMarkdownIntentAudited( + { root, todoPath: 'TODO.md', changelogPath: 'CHANGELOG.md' }, + config, + 'require-llm', + ).catch((error) => ({ error })); + + if (result.error) { + return { model, audit: failedAudit(model, result.error), records: [] }; + } + return { model, audit: result.audit, records: result.records }; +} + function failedAudit(model, error) { const message = error instanceof Error ? error.message : String(error); return { diff --git a/scripts/research/rank-intent-graph-embeddings.py b/scripts/research/rank-intent-graph-embeddings.py index d5b8615..f256b9b 100644 --- a/scripts/research/rank-intent-graph-embeddings.py +++ b/scripts/research/rank-intent-graph-embeddings.py @@ -8,6 +8,7 @@ import json import time from pathlib import Path +from typing import Any, Iterable from sentence_transformers import SentenceTransformer @@ -32,11 +33,13 @@ def projection_text(record: dict, prefix: str) -> str: ))) -def main() -> None: - args = parse_args() - graph_bytes = args.graph.read_bytes() - graph = json.loads(graph_bytes) - modules = sorted( +def load_graph(graph_path: Path) -> tuple[dict[str, Any], bytes]: + graph_bytes = graph_path.read_bytes() + return json.loads(graph_bytes), graph_bytes + + +def extract_modules(graph: dict[str, Any]) -> list[dict[str, Any]]: + return sorted( ( record for record in graph["records"] @@ -44,7 +47,10 @@ def main() -> None: ), key=lambda record: record["id"], ) - declarations = sorted( + + +def extract_declarations(graph: dict[str, Any]) -> list[dict[str, Any]]: + return sorted( ( record for record in graph["records"] @@ -58,39 +64,41 @@ def main() -> None: ), key=lambda record: record["id"], ) - module_ids = {record["id"] for record in modules} + + +def collect_current_module_links( + declarations: Iterable[dict[str, Any]], + relations: Iterable[dict[str, Any]], + module_ids: set[str], +) -> dict[str, set[str]]: current_modules: dict[str, set[str]] = { record["id"]: set() for record in declarations } - for relation in graph["relations"]: - if relation["from"] in current_modules and relation["to"] in module_ids: - current_modules[relation["from"]].add(relation["to"]) - if relation["to"] in current_modules and relation["from"] in module_ids: - current_modules[relation["to"]].add(relation["from"]) + for relation in relations: + source_id = relation["from"] + target_id = relation["to"] + if source_id in current_modules and target_id in module_ids: + current_modules[source_id].add(target_id) + if target_id in current_modules and source_id in module_ids: + current_modules[target_id].add(source_id) + return current_modules + +def build_projection_texts(declarations: list[dict[str, Any]], modules: list[dict[str, Any]]) -> tuple[list[str], list[str]]: query_texts = [projection_text(record, "query: ") for record in declarations] passage_texts = [projection_text(record, "passage: ") for record in modules] - started = time.monotonic() - model = SentenceTransformer( - args.model, - revision=args.revision, - cache_folder=str(args.cache), - ) - query_vectors = model.encode( - query_texts, - batch_size=16, - normalize_embeddings=True, - show_progress_bar=False, - ) - passage_vectors = model.encode( - passage_texts, - batch_size=16, - normalize_embeddings=True, - show_progress_bar=False, - ) - scores = query_vectors @ passage_vectors.T + return query_texts, passage_texts + +def build_rankings( + declarations: list[dict[str, Any]], + modules: list[dict[str, Any]], + scores, + current_modules: dict[str, set[str]], + minimum_score: float, + minimum_margin: float, +) -> list[dict[str, Any]]: rankings = [] for declaration, row in zip(declarations, scores, strict=True): order = row.argsort()[::-1][:3] @@ -116,10 +124,10 @@ def main() -> None: reciprocal = declarations[reverse_best]["id"] == declaration["id"] existing = sorted(current_modules[declaration["id"]]) selected = ( - best["score"] >= args.minimum_score - and margin >= args.minimum_margin + best["score"] >= minimum_score + and margin >= minimum_margin and reciprocal - and reverse_margin >= args.minimum_margin + and reverse_margin >= minimum_margin ) rankings.append({ "recordId": declaration["id"], @@ -135,8 +143,19 @@ def main() -> None: "selected": selected, "addsNewCandidate": selected and best["recordId"] not in existing, }) + return rankings + - output = { +def build_output( + graph: dict[str, Any], + graph_bytes: bytes, + args: argparse.Namespace, + modules: list[dict[str, Any]], + declarations: list[dict[str, Any]], + rankings: list[dict[str, Any]], + elapsed_seconds: float, +) -> dict[str, Any]: + return { "schemaVersion": "t2c.embedding-ranking-experiment/v1", "graphFingerprint": graph["fingerprint"], "graphSha256": hashlib.sha256(graph_bytes).hexdigest(), @@ -150,13 +169,19 @@ def main() -> None: "declarationCount": len(declarations), "selectedCount": sum(row["selected"] for row in rankings), "newCandidateCount": sum(row["addsNewCandidate"] for row in rankings), - "elapsedSeconds": round(time.monotonic() - started, 3), + "elapsedSeconds": elapsed_seconds, "rankings": rankings, } - args.output.write_text( + + +def write_output(path: Path, output: dict[str, Any]) -> None: + path.write_text( json.dumps(output, ensure_ascii=False, indent=2) + "\n", encoding="utf-8", ) + + +def print_summary(output: dict[str, Any]) -> None: print(json.dumps({ key: output[key] for key in ( @@ -170,5 +195,54 @@ def main() -> None: })) +def main() -> None: + args = parse_args() + graph, graph_bytes = load_graph(args.graph) + modules = extract_modules(graph) + declarations = extract_declarations(graph) + module_ids = {record["id"] for record in modules} + current_modules = collect_current_module_links(declarations, graph["relations"], module_ids) + + query_texts, passage_texts = build_projection_texts(declarations, modules) + started = time.monotonic() + model = SentenceTransformer( + args.model, + revision=args.revision, + cache_folder=str(args.cache), + ) + query_vectors = model.encode( + query_texts, + batch_size=16, + normalize_embeddings=True, + show_progress_bar=False, + ) + passage_vectors = model.encode( + passage_texts, + batch_size=16, + normalize_embeddings=True, + show_progress_bar=False, + ) + scores = query_vectors @ passage_vectors.T + rankings = build_rankings( + declarations=declarations, + modules=modules, + scores=scores, + current_modules=current_modules, + minimum_score=args.minimum_score, + minimum_margin=args.minimum_margin, + ) + output = build_output( + graph=graph, + graph_bytes=graph_bytes, + args=args, + modules=modules, + declarations=declarations, + rankings=rankings, + elapsed_seconds=round(time.monotonic() - started, 3), + ) + write_output(args.output, output) + print_summary(output) + + if __name__ == "__main__": main() diff --git a/scripts/verify-env-contract.mjs b/scripts/verify-env-contract.mjs index 604e975..7353d48 100644 --- a/scripts/verify-env-contract.mjs +++ b/scripts/verify-env-contract.mjs @@ -5,23 +5,60 @@ import path from 'node:path'; const root = process.cwd(); const examplePath = path.join(root, '.env.example'); const example = await fs.readFile(examplePath, 'utf8'); -const declared = new Map(); const duplicates = []; -for (const [index, line] of example.split(/\r?\n/).entries()) { - const match = line.match(/^([A-Z][A-Z0-9_]*)=/); - if (!match?.[1]) continue; - if (declared.has(match[1])) duplicates.push(`${match[1]} (lines ${declared.get(match[1])} and ${index + 1})`); - declared.set(match[1], index + 1); +const declared = parseDeclaredEnv(example); +const expected = await collectExpectedVariables(root); +const missing = [...expected].filter((name) => !declared.has(name)).sort(); +const unused = [...declared.keys()].filter((name) => !expected.has(name)).sort(); +const local = await auditLocalKeys(path.join(root, '.env'), declared); +if (hasContractProblems(missing, unused, local)) { + if (duplicates.length) console.error(`Duplicate .env.example keys:\n${duplicates.join('\n')}`); + if (missing.length) console.error(`Environment variables missing from .env.example:\n${missing.join('\n')}`); + if (unused.length) console.error(`Unused environment variables declared in .env.example:\n${unused.join('\n')}`); + if (local.missing.length) console.error(`Environment variables missing from local .env:\n${local.missing.join('\n')}`); + if (local.extra.length) console.error(`Unexpected environment variables in local .env:\n${local.extra.join('\n')}`); + if (local.duplicates.length) console.error(`Duplicate environment variables in local .env:\n${local.duplicates.join('\n')}`); + process.exit(1); +} +console.log(`Environment contract verified: ${expected.size} code/Docker variables, ${declared.size} documented keys, no duplicates.`); + +function parseDeclaredEnv(example) { + const declared = new Map(); + const lines = example.split(/\r?\n/); + for (const [index, line] of lines.entries()) { + const match = line.match(/^([A-Z][A-Z0-9_]*)=/); + if (!match?.[1]) continue; + if (declared.has(match[1])) duplicates.push(`${match[1]} (lines ${declared.get(match[1])} and ${index + 1})`); + declared.set(match[1], index + 1); + } + return declared; +} + +async function collectExpectedVariables(rootPath) { + const expected = new Set(); + for (const value of await collectConfigKeys(path.join(rootPath, 'src', 'config', 'env.ts'))) { + expected.add(value); + } + for (const file of await collectExisting(['src', 'sdk', 'examples', 'scripts'])) { + const body = await fs.readFile(file, 'utf8'); + for (const match of collectEnvReferences(file, body)) expected.add(match); + } + for (const name of collectMakefileReferences(await fs.readFile(path.join(rootPath, 'Makefile'), 'utf8'))) { + expected.add(name); + } + for (const file of ['docker-compose.yml', 'Dockerfile']) { + const body = await fs.readFile(path.join(rootPath, file), 'utf8'); + for (const name of collectDockerReferences(body)) expected.add(name); + } + return expected; } -const expected = new Set(); -const configBody = await fs.readFile(path.join(root, 'src/config/env.ts'), 'utf8'); -for (const match of configBody.matchAll(/env(?:String|Optional|Number|Boolean|List|LlmMode)\('([A-Z][A-Z0-9_]+)'/g)) { - expected.add(match[1]); +async function collectConfigKeys(configFile) { + const body = await fs.readFile(configFile, 'utf8'); + return [...body.matchAll(/env(?:String|Optional|Number|Boolean|List|LlmMode)\('([A-Z][A-Z0-9_]+)'/g)].map((match) => match[1]); } -for (const file of await collectExisting(['src', 'sdk', 'examples', 'scripts'])) { - const body = await fs.readFile(file, 'utf8'); +function collectEnvReferences(file, body) { const patterns = [ /process\.env\.([A-Z][A-Z0-9_]+)/g, /process\.env\[['"]([A-Z][A-Z0-9_]+)['"]\]/g, @@ -30,36 +67,41 @@ for (const file of await collectExisting(['src', 'sdk', 'examples', 'scripts'])) /env::var\(['"]([A-Z][A-Z0-9_]+)['"]\)/g, /os\.Getenv\(['"]([A-Z][A-Z0-9_]+)['"]\)/g, ]; + const names = []; for (const pattern of patterns) { - for (const match of body.matchAll(pattern)) expected.add(match[1]); + for (const match of body.matchAll(pattern)) names.push(match[1]); } if (file.endsWith('.sh')) { - for (const match of body.matchAll(/\b((?:T2C|OPENROUTER)_[A-Z0-9_]+)\b/g)) expected.add(match[1]); + for (const match of body.matchAll(/\b((?:T2C|OPENROUTER)_[A-Z0-9_]+)\b/g)) names.push(match[1]); } + return names; } -const makefile = await fs.readFile(path.join(root, 'Makefile'), 'utf8'); -for (const match of makefile.matchAll(/\b((?:T2C|OPENROUTER)_[A-Z0-9_]+)\b/g)) expected.add(match[1]); +function collectMakefileReferences(makefileBody) { + return [...makefileBody.matchAll(/\b((?:T2C|OPENROUTER)_[A-Z0-9_]+)\b/g)].map((match) => match[1]); +} -for (const fileName of ['docker-compose.yml', 'Dockerfile']) { - const body = await fs.readFile(path.join(root, fileName), 'utf8'); - for (const match of body.matchAll(/\$\{([A-Z][A-Z0-9_]+)/g)) expected.add(match[1]); - for (const match of body.matchAll(/\b((?:T2C|OPENROUTER)_[A-Z0-9_]+)\s*(?::|=)/g)) expected.add(match[1]); +function collectDockerReferences(body) { + return [ + ...extractMatches(body, /\$\{([A-Z][A-Z0-9_]+)/g), + ...extractMatches(body, /\b((?:T2C|OPENROUTER)_[A-Z0-9_]+)\s*(?::|=)/g), + ]; } -const missing = [...expected].filter((name) => !declared.has(name)).sort(); -const unused = [...declared.keys()].filter((name) => !expected.has(name)).sort(); -const local = await auditLocalKeys(path.join(root, '.env'), declared); -if (duplicates.length || missing.length || unused.length || local.missing.length || local.extra.length || local.duplicates.length) { - if (duplicates.length) console.error(`Duplicate .env.example keys:\n${duplicates.join('\n')}`); - if (missing.length) console.error(`Environment variables missing from .env.example:\n${missing.join('\n')}`); - if (unused.length) console.error(`Unused environment variables declared in .env.example:\n${unused.join('\n')}`); - if (local.missing.length) console.error(`Environment variables missing from local .env:\n${local.missing.join('\n')}`); - if (local.extra.length) console.error(`Unexpected environment variables in local .env:\n${local.extra.join('\n')}`); - if (local.duplicates.length) console.error(`Duplicate environment variables in local .env:\n${local.duplicates.join('\n')}`); - process.exit(1); +function extractMatches(body, pattern) { + const names = []; + for (const match of body.matchAll(pattern)) names.push(match[1]); + return names; +} + +function hasContractProblems(missing, unused, local) { + return duplicates.length + || missing.length + || unused.length + || local.missing.length + || local.extra.length + || local.duplicates.length; } -console.log(`Environment contract verified: ${expected.size} code/Docker variables, ${declared.size} documented keys, no duplicates.`); async function auditLocalKeys(file, contract) { try { diff --git a/scripts/verify-no-llm-imports.mjs b/scripts/verify-no-llm-imports.mjs index a5e4eaf..d0a98ef 100755 --- a/scripts/verify-no-llm-imports.mjs +++ b/scripts/verify-no-llm-imports.mjs @@ -25,16 +25,33 @@ const failures = []; for (const entrypoint of entrypoints) await visit(path.resolve(entrypoint), [entrypoint]); async function visit(file, chain) { - if (visited.has(file)) return; - visited.add(file); - if (forbiddenTargets.some((target) => file.includes(target))) { + if (isVisited(file)) return; + markVisited(file); + if (isForbiddenTarget(file)) { failures.push(`forbidden dependency: ${chain.join(' -> ')}`); return; } + const body = await fs.readFile(file, 'utf8'); - for (const pattern of forbiddenContent) { + for (const pattern of forbiddenContentPatterns()) { if (pattern.test(body)) failures.push(`${path.relative(process.cwd(), file)} contains ${pattern}`); } + for (const specifier of collectSourceImports(body)) { + if (!specifier.startsWith('.')) continue; + const resolved = await resolveSource(path.dirname(file), specifier); + if (resolved) await visit(resolved, [...chain, path.relative(process.cwd(), resolved)]); + } +} + +function forbiddenContentPatterns() { + return forbiddenContent; +} + +function isForbiddenTarget(file) { + return forbiddenTargets.some((target) => file.includes(target)); +} + +function collectSourceImports(body) { const imports = []; for (const match of body.matchAll(/import\s+(type\s+)?(?:[^'";]+?\s+from\s+)?['"]([^'"]+)['"]/g)) { if (!match[1] && match[2]) imports.push(match[2]); @@ -45,11 +62,15 @@ async function visit(file, chain) { for (const match of body.matchAll(/import\(\s*['"]([^'"]+)['"]\s*\)/g)) { if (match[1]) imports.push(match[1]); } - for (const specifier of imports) { - if (!specifier.startsWith('.')) continue; - const resolved = await resolveSource(path.dirname(file), specifier); - if (resolved) await visit(resolved, [...chain, path.relative(process.cwd(), resolved)]); - } + return imports; +} + +function isVisited(file) { + return visited.has(file); +} + +function markVisited(file) { + visited.add(file); } async function resolveSource(directory, specifier) { diff --git a/sdk/rust/src/client.rs b/sdk/rust/src/client.rs index ce2d361..3d63a9f 100644 --- a/sdk/rust/src/client.rs +++ b/sdk/rust/src/client.rs @@ -150,23 +150,45 @@ fn unwrap_task(result: Value) -> Value { } fn parse_http_response(response: &str) -> Result { - let separator = response.find("\r\n\r\n") + let (head, raw_body) = split_http_response(response)?; + let status = parse_status_code(head); + let body = parse_http_body(head, raw_body)?; + validate_http_status_body(status, &body)?; + Ok(body) +} + +fn split_http_response(response: &str) -> Result<(&str, &str), Error> { + let separator = response + .find("\r\n\r\n") .ok_or_else(|| Error::Protocol("response had no header terminator".into()))?; - let head = &response[..separator]; - let raw_body = &response[separator + 4..]; - let status = head.lines().next() + Ok((&response[..separator], &response[separator + 4..])) +} + +fn parse_status_code(head: &str) -> u16 { + head.lines() + .next() .and_then(|line| line.split_whitespace().nth(1)) .and_then(|code| code.parse::().ok()) - .unwrap_or(0); - let body = if head.to_ascii_lowercase().contains("transfer-encoding: chunked") { - decode_chunked(raw_body)? + .unwrap_or(0) +} + +fn parse_http_body(head: &str, raw_body: &str) -> Result { + if is_chunked_response(head) { + decode_chunked(raw_body) } else { - raw_body.to_owned() - }; + Ok(raw_body.to_owned()) + } +} + +fn is_chunked_response(head: &str) -> bool { + head.to_ascii_lowercase().contains("transfer-encoding: chunked") +} + +fn validate_http_status_body(status: u16, body: &str) -> Result<(), Error> { if status >= 400 && !body.trim_start().starts_with('{') { return Err(Error::Runtime { code: status as i64, message: format!("HTTP {status}") }); } - Ok(body) + Ok(()) } fn parse_base_url(base_url: &str) -> Result<(String, u16, String), Error> { diff --git a/src/cli.ts b/src/cli.ts index 8a8a5b7..6ecb19b 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -60,30 +60,51 @@ type ExtractHandler = (parsed: ParsedArgs, root: string, out: string | null, con export async function main(argv = process.argv.slice(2)): Promise { await loadEnvFile(); - if (argv[0] === '--help' || argv[0] === '-h') { + if (shouldShowGlobalHelp(argv)) { printHelp(); return; } - if (argv[0] === '--version' || argv[0] === '-v') { + if (shouldShowGlobalVersion(argv)) { process.stdout.write(`todo2code ${T2C_VERSION}\n`); return; } + const parsed = parseArgs(argv); - const command = resolveMainCommand(parsed.positionals.shift() ?? 'help'); + const command = resolveRequestedCommand(parsed); - if (command === 'help' || parsed.options.has('help')) { + if (isHelpRequest(command, parsed)) { printHelp(); return; } + + const config = getConfig(); + const handler = resolveCommandHandler(command); + await handler(parsed, config); +} + +function shouldShowGlobalHelp(argv: string[]): boolean { + return argv[0] === '--help' || argv[0] === '-h'; +} + +function shouldShowGlobalVersion(argv: string[]): boolean { + return argv[0] === '--version' || argv[0] === '-v'; +} + +function resolveRequestedCommand(parsed: ParsedArgs): string { + return resolveMainCommand(parsed.positionals.shift() ?? 'help'); +} + +function isHelpRequest(command: string, parsed: ParsedArgs): boolean { // `parseArgs` removes options from positionals, so `pipeline --help` would // otherwise look exactly like `pipeline` and execute a mutating run. Help is // global until command-specific help exists: it must never reach a handler. - const config = getConfig(); + return command === 'help' || parsed.options.has('help'); +} + +function resolveCommandHandler(command: string): CommandHandler { const handler = commandHandlers()[command]; - if (!handler) { - throw new Error(`Unknown command: ${command}. Run t2c help.`); - } - await handler(parsed, config); + if (!handler) throw new Error(`Unknown command: ${command}. Run t2c help.`); + return handler; } function commandHandlers(): Record { @@ -725,12 +746,21 @@ async function handleIntake(parsed: ParsedArgs, config: ReturnType = { + 'T2C-INTAKE-INVALID-SCHEMA': 2, + 'T2C-INTAKE-INVALID-WIRE': 2, + 'T2C-INTAKE-UNKNOWN-ACTOR': 3, + 'T2C-INTAKE-UNVERIFIED-ACTOR': 3, + 'T2C-INTAKE-ROLE-MISMATCH': 3, + 'T2C-INTAKE-UNAUTHORIZED': 3, + 'T2C-INTAKE-VERSION-CONFLICT': 4, + 'T2C-INTAKE-DUPLICATE': 4, + 'T2C-INTAKE-BROKEN-CHAIN': 5, + 'T2C-INTAKE-PROJECTION-DRIFT': 5, + 'T2C-INTAKE-STORAGE-FAILURE': 6, + }; + if (!code || !(code in exitCodes)) return 7; + return exitCodes[code]; } async function initProject(root: string): Promise { @@ -785,29 +815,10 @@ function parseArgs(argv: string[]): ParsedArgs { positionals.push(...argv.slice(index + 1)); break; } - if (value.startsWith('--')) { - const [rawName = '', inline] = value.slice(2).split('=', 2); - if (inline !== undefined) { - options.set(rawName, inline); - } else { - const next = argv[index + 1]; - if (next !== undefined && !next.startsWith('-')) { - options.set(rawName, next); - index += 1; - } else { - options.set(rawName, true); - } - } - } else if (value.startsWith('-') && value.length === 2) { - const aliases: Record = { o: 'out', r: 'root', c: 'count', h: 'help' }; - const name = aliases[value.slice(1)] ?? value.slice(1); - const next = argv[index + 1]; - if (next !== undefined && !next.startsWith('-')) { - options.set(name, next); - index += 1; - } else { - options.set(name, true); - } + if (isLongOption(value)) { + index = parseLongOption(value, argv, index, options); + } else if (isShortOption(value)) { + index = parseShortOption(value, argv, index, options); } else { positionals.push(value); } @@ -815,6 +826,47 @@ function parseArgs(argv: string[]): ParsedArgs { return { positionals, options }; } +const shortOptionAliases: Record = { + o: 'out', + r: 'root', + c: 'count', + h: 'help', +}; + +function isLongOption(value: string): boolean { + return value.startsWith('--'); +} + +function isShortOption(value: string): boolean { + return value.startsWith('-') && value.length === 2; +} + +function parseLongOption(value: string, argv: string[], index: number, options: Map): number { + const [rawName = '', inline] = value.slice(2).split('=', 2); + if (inline !== undefined) { + options.set(rawName, inline); + return index; + } + const next = argv[index + 1]; + if (next !== undefined && !next.startsWith('-')) { + options.set(rawName, next); + return index + 1; + } + options.set(rawName, true); + return index; +} + +function parseShortOption(value: string, argv: string[], index: number, options: Map): number { + const name = shortOptionAliases[value.slice(1)] ?? value.slice(1); + const next = argv[index + 1]; + if (next !== undefined && !next.startsWith('-')) { + options.set(name, next); + return index + 1; + } + options.set(name, true); + return index; +} + function optionString(parsed: ParsedArgs, name: string): string | null { const value = parsed.options.get(name); return typeof value === 'string' ? value : null; diff --git a/src/communication/analyzer.ts b/src/communication/analyzer.ts index 734cd57..f48b8db 100644 --- a/src/communication/analyzer.ts +++ b/src/communication/analyzer.ts @@ -180,42 +180,65 @@ function collectAgentActionIssues( const issues: CommunicationIssue[] = []; for (const record of communication.filter((record) => roleOf(record) === 'agent')) { const type = typeOf(record); - const isActionableMessage = ['report', 'result', 'claim'].includes(type); - if (isActionableMessage && isHumanDecisionClaim(record)) { - issues.push(issue( - 'AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED', 'review_required', ticketOf(record), - [participantOf(record)], [record.id], - `Agent powołuje się na decyzję człowieka, której nie ma w komunikacji należącej do człowieka: ${record.statement.text}`, - 'Właściciel zakresu powinien zapisać decyzję we własnym pliku komunikacji; agent nie może zrobić tego w jego imieniu.', - 'human', participantsForRole(communication, ticketOf(record), 'human'), - )); - } else if (isActionableMessage && isPositiveImplementationClaim(record)) { - const participantGit = matchedGitRecords(record, graph.records); - const linked = evidenceByRecord.get(record.id) ?? []; - if (participantGit.length === 0 && linked.length === 0) { - issues.push(issue( - 'AGENT_CLAIM_WITHOUT_EVIDENCE', 'review_required', ticketOf(record), [participantOf(record)], [record.id], - `Agent raportuje wykonanie bez powiązanego commita lub faktu AST: ${record.statement.text}`, - 'Dodać ticket do commita albo wskazać paths/symbols i ponownie uruchomić analizę.', - 'agent', [participantOf(record)], - )); - } + const issueItem = classifyAgentActionIssue(record, type, communication, graph, evidenceByRecord, humanRequests, agentMessages); + if (issueItem) issues.push(issueItem); + } + return issues; +} + +function classifyAgentActionIssue( + record: IntentRecord, + type: string, + communication: IntentRecord[], + graph: IntentGraph, + evidenceByRecord: Map, + humanRequests: IntentRecord[], + agentMessages: IntentRecord[], +): CommunicationIssue | null { + if (isActionableMessage(type) && isHumanDecisionClaim(record)) { + return issue( + 'AGENT_HUMAN_DECISION_CLAIM_UNCONFIRMED', 'review_required', ticketOf(record), + [participantOf(record)], [record.id], + `Agent powołuje się na decyzję człowieka, której nie ma w komunikacji należącej do człowieka: ${record.statement.text}`, + 'Właściciel zakresu powinien zapisać decyzję we własnym pliku komunikacji; agent nie może zrobić tego w jego imieniu.', + 'human', participantsForRole(communication, ticketOf(record), 'human'), + ); + } + + if (isActionableMessage(type) && isPositiveImplementationClaim(record)) { + const participantGit = matchedGitRecords(record, graph.records); + const linked = evidenceByRecord.get(record.id) ?? []; + if (participantGit.length === 0 && linked.length === 0) { + return issue( + 'AGENT_CLAIM_WITHOUT_EVIDENCE', 'review_required', ticketOf(record), [participantOf(record)], [record.id], + `Agent raportuje wykonanie bez powiązanego commita lub faktu AST: ${record.statement.text}`, + 'Dodać ticket do commita albo wskazać paths/symbols i ponownie uruchomić analizę.', + 'agent', [participantOf(record)], + ); } - if (['plan', 'report', 'result', 'claim'].includes(type) - && !isHumanDecisionClaim(record) - && isActionableAgentWork(record)) { - const matchedRequest = agentWorkCoveredByHumanScope(record, humanRequests, agentMessages); - if (!matchedRequest) { - issues.push(issue( - 'AGENT_WORK_OUTSIDE_REQUEST', 'warning', ticketOf(record), [participantOf(record)], [record.id], - `Plan lub działanie agenta nie ma powiązanej intencji człowieka: ${record.statement.text}`, - 'Powiązać działanie z poleceniem człowieka albo uzyskać decyzję rozszerzającą zakres ticketu.', - 'human', participantsForRole(communication, ticketOf(record), 'human'), - )); - } + } + + if (isWorkTrackingMessage(type) && !isHumanDecisionClaim(record) && isActionableAgentWork(record)) { + const matchedRequest = agentWorkCoveredByHumanScope(record, humanRequests, agentMessages); + if (!matchedRequest) { + return issue( + 'AGENT_WORK_OUTSIDE_REQUEST', 'warning', ticketOf(record), [participantOf(record)], [record.id], + `Plan lub działanie agenta nie ma powiązanej intencji człowieka: ${record.statement.text}`, + 'Powiązać działanie z poleceniem człowieka albo uzyskać decyzję rozszerzającą zakres ticketu.', + 'human', participantsForRole(communication, ticketOf(record), 'human'), + ); } } - return issues; + + return null; +} + +function isActionableMessage(type: string): boolean { + return ['report', 'result', 'claim'].includes(type); +} + +function isWorkTrackingMessage(type: string): boolean { + return ['plan', 'report', 'result', 'claim'].includes(type); } function deduplicateCommunicationIssues(issues: CommunicationIssue[]): CommunicationIssue[] { diff --git a/src/core/schema/utils.ts b/src/core/schema/utils.ts index 555e9ff..b6c86fb 100644 --- a/src/core/schema/utils.ts +++ b/src/core/schema/utils.ts @@ -98,19 +98,39 @@ export function assertAcyclicProposalDependencies(proposals: { id: string; depen const visiting = new Set(); const visited = new Set(); const visit = (id: string, chain: string[]): void => { - if (visiting.has(id)) { - const start = chain.indexOf(id); - throw new Error(`TODO proposal dependency cycle: ${[...chain.slice(Math.max(0, start)), id].join(' -> ')}`); + if (isCycleStart(chain, id, visiting)) { + throw new Error(`TODO proposal dependency cycle: ${formatProposalCycle(chain, id).join(' -> ')}`); } - if (visited.has(id)) return; - visiting.add(id); + if (isAlreadyVisited(visited, id)) return; + markVisit(visiting, id); for (const dependency of byId.get(id)?.dependencies ?? []) visit(dependency, [...chain, id]); - visiting.delete(id); - visited.add(id); + endVisit(visiting, visited, id); }; for (const proposal of proposals) visit(proposal.id, []); } +function isCycleStart(chain: string[], id: string, visiting: Set): boolean { + return visiting.has(id); +} + +function formatProposalCycle(chain: string[], id: string): string[] { + const start = chain.indexOf(id); + return [...chain.slice(Math.max(0, start)), id]; +} + +function isAlreadyVisited(visited: Set, id: string): boolean { + return visited.has(id); +} + +function markVisit(visiting: Set, id: string): void { + visiting.add(id); +} + +function endVisit(visiting: Set, visited: Set, id: string): void { + visiting.delete(id); + visited.add(id); +} + export function dateString(value: unknown, name: string): asserts value is string { if (typeof value !== 'string' || !ISO_DATE_TIME.test(value) || !Number.isFinite(Date.parse(value))) { throw new Error(`${name} must be an ISO date-time string`); diff --git a/src/diff/reality-build.ts b/src/diff/reality-build.ts index 47733cc..9995246 100644 --- a/src/diff/reality-build.ts +++ b/src/diff/reality-build.ts @@ -1,6 +1,7 @@ import { sha256, stableStringify } from '../core/id.js'; import { assertIntentGraph } from '../core/schema.js'; import { symbolAliases } from '../core/target.js'; +import { buildRealityTotals } from './reality-totals.js'; import type { DiagnosticCode, DiagnosticReport, @@ -172,48 +173,6 @@ function compareRealityRows(left: RealityRow, right: RealityRow): number { return left.key.localeCompare(right.key); } -function buildRealityTotals(graph: IntentGraph, rows: RealityRow[]): IntentRealityView['totals'] { - const byStatus: Record = {}; - for (const row of rows) byStatus[row.status] = (byStatus[row.status] ?? 0) + 1; - - const declaredRecords = graph.records.filter((record) => DECLARED_KINDS.includes(record.source.kind)).length; - const observedRecords = graph.records.filter((record) => OBSERVED_KINDS.includes(record.source.kind)).length; - const aligned = rows.filter((row) => row.status === 'aligned').length; - const declaredTopics = rows.filter((row) => DECLARED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; - const observedTopics = rows.filter((row) => OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; - const implementationAlignedTopics = rows.filter((row) => row.status === 'aligned' - && DECLARED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0) - && OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; - const documentedObservedTopics = rows.filter((row) => - (row.lanes.document ?? 0) > 0 - && OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; - - return { - topics: rows.length, - aligned, - gaps: rows.length - aligned, - alignedByEvidence: { - code: rows.filter((row) => row.status === 'aligned' && row.evidence === 'code').length, - configuration: rows.filter((row) => row.status === 'aligned' && row.evidence === 'configuration').length, - none: rows.filter((row) => row.status === 'aligned' && row.evidence === 'none').length, - }, - byStatus: Object.fromEntries(Object.entries(byStatus).sort(([a], [b]) => a.localeCompare(b))), - declaredRecords, - observedRecords, - declaredTopics, - observedTopics, - implementationAlignedTopics, - implementationCoverage: ratio(implementationAlignedTopics, declaredTopics), - plannedCodeCoverage: ratio(implementationAlignedTopics, observedTopics), - documentedCodeCoverage: ratio(documentedObservedTopics, observedTopics), - documentationMeasured: graph.records.some((record) => record.source.kind === 'document'), - }; -} - -function ratio(numerator: number, denominator: number): number { - return denominator === 0 ? 1 : Math.round((numerator / denominator) * 10_000) / 10_000; -} - /** Renders documentation coverage, or says it was not measured at all. */ export function documentedCoverageLabel(totals: IntentRealityView['totals']): string { if (!totals.documentationMeasured) return 'not measured (no documentation records in this run)'; diff --git a/src/diff/reality-totals.ts b/src/diff/reality-totals.ts new file mode 100644 index 0000000..ab125ac --- /dev/null +++ b/src/diff/reality-totals.ts @@ -0,0 +1,66 @@ +import type { IntentGraph, IntentRealityView, RealityRow, SourceKind } from '../core/types.js'; + +const DECLARED_KINDS: SourceKind[] = ['nl', 'todo', 'document', 'agent_log']; +const OBSERVED_KINDS: SourceKind[] = ['git', 'ast', 'system']; + +export function buildRealityTotals(graph: IntentGraph, rows: RealityRow[]): IntentRealityView['totals'] { + return { + topics: rows.length, + aligned: countAlignedRows(rows), + gaps: rows.length - countAlignedRows(rows), + alignedByEvidence: countAlignedByEvidence(rows), + byStatus: collectByStatus(rows), + declaredRecords: countRecordsBySource(graph, DECLARED_KINDS), + observedRecords: countRecordsBySource(graph, OBSERVED_KINDS), + declaredTopics: countRowsWithSource(rows, DECLARED_KINDS), + observedTopics: countRowsWithSource(rows, OBSERVED_KINDS), + implementationAlignedTopics: countImplementationAlignedTopics(rows), + implementationCoverage: ratio(countImplementationAlignedTopics(rows), countRowsWithSource(rows, DECLARED_KINDS)), + plannedCodeCoverage: ratio(countImplementationAlignedTopics(rows), countRowsWithSource(rows, OBSERVED_KINDS)), + documentedCodeCoverage: ratio(countDocumentedObservedTopics(rows), countRowsWithSource(rows, OBSERVED_KINDS)), + documentationMeasured: graph.records.some((record) => record.source.kind === 'document'), + }; +} + +function countRecordsBySource(graph: IntentGraph, kinds: SourceKind[]): number { + return graph.records.filter((record) => kinds.includes(record.source.kind)).length; +} + +function countRowsWithSource(rows: RealityRow[], kinds: SourceKind[]): number { + return rows.filter((row) => kinds.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; +} + +function countAlignedRows(rows: RealityRow[]): number { + return rows.filter((row) => row.status === 'aligned').length; +} + +function countAlignedByEvidence(rows: RealityRow[]): Record { + return { + code: rows.filter((row) => row.status === 'aligned' && row.evidence === 'code').length, + configuration: rows.filter((row) => row.status === 'aligned' && row.evidence === 'configuration').length, + none: rows.filter((row) => row.status === 'aligned' && row.evidence === 'none').length, + }; +} + +function countImplementationAlignedTopics(rows: RealityRow[]): number { + return rows.filter((row) => row.status === 'aligned' + && DECLARED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0) + && OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; +} + +function countDocumentedObservedTopics(rows: RealityRow[]): number { + return rows.filter((row) => (row.lanes.document ?? 0) > 0 + && OBSERVED_KINDS.some((kind) => (row.lanes[kind] ?? 0) > 0)).length; +} + +function collectByStatus(rows: RealityRow[]): Record { + const counts: Record = {}; + for (const row of rows) { + counts[row.status] = (counts[row.status] ?? 0) + 1; + } + return Object.fromEntries(Object.entries(counts).sort(([a], [b]) => a.localeCompare(b))); +} + +function ratio(numerator: number, denominator: number): number { + return denominator === 0 ? 1 : Math.round((numerator / denominator) * 10_000) / 10_000; +} diff --git a/src/evaluation/gold-cli.ts b/src/evaluation/gold-cli.ts index c265a3e..d005dd8 100644 --- a/src/evaluation/gold-cli.ts +++ b/src/evaluation/gold-cli.ts @@ -8,8 +8,14 @@ import { renderGoldReportMarkdown, } from './gold.js'; -async function main(): Promise { - const args = process.argv.slice(2); +type GoldCliInput = { + datasetArg: string; + json: boolean; + requirePerfect: boolean; + outPath: string | undefined; +}; + +function parseGoldCliInput(args: string[]): GoldCliInput { let datasetArg = 'evaluation/gold/v1/dataset.json'; for (let index = 0; index < args.length; index += 1) { const arg = args[index]; @@ -22,11 +28,26 @@ async function main(): Promise { break; } } + const json = args.includes('--json'); const requirePerfect = args.includes('--require-perfect'); const outIndex = args.indexOf('--out'); const outPath = outIndex >= 0 ? args[outIndex + 1] : undefined; - if (outIndex >= 0 && !outPath) throw new Error('--out requires a path'); + if (outIndex >= 0 && !outPath) { + throw new Error('--out requires a path'); + } + + return { + datasetArg, + json, + requirePerfect, + outPath, + }; +} + +async function main(): Promise { + const args = process.argv.slice(2); + const { datasetArg, json, requirePerfect, outPath } = parseGoldCliInput(args); const dataset = await loadGoldDataset(path.resolve(datasetArg)); const report = await evaluateGoldDataset(dataset); const rendered = json ? `${JSON.stringify(report, null, 2)}\n` : renderGoldReportMarkdown(report); diff --git a/src/evaluation/gold-reranker-validation.ts b/src/evaluation/gold-reranker-validation.ts new file mode 100644 index 0000000..05ad76b --- /dev/null +++ b/src/evaluation/gold-reranker-validation.ts @@ -0,0 +1,39 @@ +import type { GoldRerankerDecisionFixture } from './gold-types.js'; + +export function assertRerankerDecision( + caseId: string, + decision: GoldRerankerDecisionFixture, + seenModules: Set, + recordLabels: Set, +): void { + if (!isKnownNonDeclarationModule(decision.module, recordLabels)) { + throw new Error(`Gold reranker case ${caseId} references unknown module ${decision.module}`); + } + if (seenModules.has(decision.module)) { + throw new Error(`Gold reranker case ${caseId} repeats module ${decision.module}`); + } + seenModules.add(decision.module); + if (!isValidScoreTuple(decision.score, decision.confidence)) { + throw new Error(`Gold reranker case ${caseId} has an invalid score or confidence`); + } + if (!hasGroundedDecisionText(decision.rationale, decision.declarationQuote, decision.moduleQuote)) { + throw new Error(`Gold reranker case ${caseId} has blank grounded decision content`); + } +} + +function isKnownNonDeclarationModule(module: string, recordLabels: Set): boolean { + if (!recordLabels.has(module) || module === 'declaration') { + return false; + } + return true; +} + +function isValidScoreTuple(score: number, confidence: number): boolean { + if (!Number.isFinite(score) || score < -1 || score > 1) return false; + if (!Number.isFinite(confidence) || confidence < 0 || confidence > 1) return false; + return true; +} + +function hasGroundedDecisionText(rationale: string, declarationQuote: string, moduleQuote: string): boolean { + return Boolean(rationale.trim()) && Boolean(declarationQuote.trim()) && Boolean(moduleQuote.trim()); +} diff --git a/src/evaluation/gold-types.ts b/src/evaluation/gold-types.ts index f167614..cc6afb9 100644 --- a/src/evaluation/gold-types.ts +++ b/src/evaluation/gold-types.ts @@ -6,6 +6,7 @@ import type { SourceKind, TodoPriority, } from '../core/types.js'; +import { assertRerankerDecision } from './gold-reranker-validation.js'; export const GOLD_FIXED_TIME = '2026-07-30T00:00:00.000Z'; @@ -379,27 +380,3 @@ function assertRerankerDecisions(fixture: GoldLinkingCase): void { assertRerankerDecision(fixture.id, decision, seenModules, recordLabels); } } - -function assertRerankerDecision( - caseId: string, - decision: GoldRerankerDecisionFixture, - seenModules: Set, - recordLabels: Set, -): void { - if (!recordLabels.has(decision.module) || decision.module === 'declaration') { - throw new Error(`Gold reranker case ${caseId} references unknown module ${decision.module}`); - } - if (seenModules.has(decision.module)) { - throw new Error(`Gold reranker case ${caseId} repeats module ${decision.module}`); - } - seenModules.add(decision.module); - if ( - !Number.isFinite(decision.score) || decision.score < -1 || decision.score > 1 - || !Number.isFinite(decision.confidence) || decision.confidence < 0 || decision.confidence > 1 - ) { - throw new Error(`Gold reranker case ${caseId} has an invalid score or confidence`); - } - if (!decision.rationale.trim() || !decision.declarationQuote.trim() || !decision.moduleQuote.trim()) { - throw new Error(`Gold reranker case ${caseId} has blank grounded decision content`); - } -} diff --git a/src/interfaces/a2a-message-command.ts b/src/interfaces/a2a-message-command.ts index 2c2b41b..a89e237 100644 --- a/src/interfaces/a2a-message-command.ts +++ b/src/interfaces/a2a-message-command.ts @@ -6,6 +6,7 @@ import { type A2AAction, type A2AMessage, } from './a2a-types.js'; +import { looksLikeJson } from './command-input.js'; export function parseCommand( message: A2AMessage, @@ -53,10 +54,6 @@ function parseCommandFromText( return parseCommandFromSentence(text); } -function looksLikeJson(text: string): boolean { - return text.startsWith('{'); -} - function parseCommandFromJson( text: string, message: A2AMessage, diff --git a/src/interfaces/command-input.ts b/src/interfaces/command-input.ts new file mode 100644 index 0000000..4db4c93 --- /dev/null +++ b/src/interfaces/command-input.ts @@ -0,0 +1,3 @@ +export function looksLikeJson(text: string): boolean { + return text.startsWith('{'); +} diff --git a/src/operations/compile-cli.ts b/src/operations/compile-cli.ts index 1eedf40..b939760 100644 --- a/src/operations/compile-cli.ts +++ b/src/operations/compile-cli.ts @@ -2,25 +2,46 @@ import { compileOperationPlanArtifact } from './artifact.js'; function argumentsByName(argv: string[]): Record { const parsed: Record = {}; + const allowedArguments = new Set(['plan', 'bindings', 'out', 'correlation']); for (let index = 0; index < argv.length; index += 2) { - const key = argv[index]; - const value = argv[index + 1]; - if (!key?.startsWith('--') || !value || value.startsWith('--')) throw new Error(`Invalid argument near ${key ?? ''}`); - parsed[key.slice(2)] = value; + parseArgumentPair(argv[index], argv[index + 1], parsed); } - const allowed = new Set(['plan', 'bindings', 'out', 'correlation']); - const unknown = Object.keys(parsed).filter((key) => !allowed.has(key)); + const unknown = collectUnknownArguments(parsed, allowedArguments); if (unknown.length) throw new Error(`Unknown arguments: ${unknown.join(', ')}`); - for (const required of allowed) if (!parsed[required]) throw new Error(`--${required} is required`); + assertRequiredArguments(parsed, allowedArguments); return parsed; } +function parseArgumentPair(key: string | undefined, value: string | undefined, parsed: Record): void { + if (!key?.startsWith('--') || !value || value.startsWith('--')) { + throw new Error(`Invalid argument near ${key ?? ''}`); + } + parsed[key.slice(2)] = value; +} + +function collectUnknownArguments(parsed: Record, allowed: Set): string[] { + return Object.keys(parsed).filter((key) => !allowed.has(key)); +} + +function assertRequiredArguments(parsed: Record, required: Set): void { + for (const argument of required) { + if (!parsed[argument]) throw new Error(`--${argument} is required`); + } +} + +function compilePlanInvocation(args: Record) { + return { + planPath: args.plan!, + bindingsPath: args.bindings!, + outputPath: args.out!, + correlationId: args.correlation!, + }; +} + export async function main(argv = process.argv.slice(2)): Promise { try { const args = argumentsByName(argv); - const { receipt } = await compileOperationPlanArtifact({ - planPath: args.plan!, bindingsPath: args.bindings!, outputPath: args.out!, correlationId: args.correlation!, - }); + const { receipt } = await compileOperationPlanArtifact(compilePlanInvocation(args)); process.stdout.write(`${JSON.stringify({ ok: true, ...receipt })}\n`); return 0; } catch (error) { diff --git a/src/operations/generation-validation.ts b/src/operations/generation-validation.ts index a8a9a2a..c8c7ec3 100644 --- a/src/operations/generation-validation.ts +++ b/src/operations/generation-validation.ts @@ -1,6 +1,23 @@ import type { GroundedGenerationMetadata } from '../core/types.js'; const SHA256 = /^[a-f0-9]{64}$/; +const GENERATION_REQUIRED_FIELDS = [ + 'generator', + 'generatorVersion', + 'runtimeVersion', + 'generatedAt', + 'requestedMode', + 'effectiveMode', + 'degraded', + 'model', + 'provider', + 'responseId', + 'configurationFingerprint', + 'reason', +] as const; + +const REQUESTED_MODES = ['deterministic', 'prefer-llm', 'require-llm'] as const; +const EFFECTIVE_MODES = ['deterministic', 'llm'] as const; function asObject(value: unknown, name: string): Record { if (!value || typeof value !== 'object' || Array.isArray(value)) { @@ -28,42 +45,57 @@ function assertDateString(value: unknown, name: string): void { export function assertGeneration(value: unknown): asserts value is GroundedGenerationMetadata { const generation = asObject(value, 'Operation plan generation'); - assertExactKeys( - generation, - [ - 'generator', - 'generatorVersion', - 'runtimeVersion', - 'generatedAt', - 'requestedMode', - 'effectiveMode', - 'degraded', - 'model', - 'provider', - 'responseId', - 'configurationFingerprint', - 'reason', - ], - 'Operation plan generation', - ); - for (const field of ['generator', 'generatorVersion', 'runtimeVersion'] as const) assertNonBlank(generation[field], `generation.${field}`); + assertExactKeys(generation, [...GENERATION_REQUIRED_FIELDS], 'Operation plan generation'); + assertGenerationRequiredTextFields(generation); assertDateString(generation.generatedAt, 'generation.generatedAt'); - if (!['deterministic', 'prefer-llm', 'require-llm'].includes(String(generation.requestedMode))) throw new Error('generation.requestedMode is invalid'); - if (!['deterministic', 'llm'].includes(String(generation.effectiveMode))) throw new Error('generation.effectiveMode is invalid'); - if (typeof generation.degraded !== 'boolean') throw new Error('generation.degraded must be a boolean'); - if (typeof generation.configurationFingerprint !== 'string' || !SHA256.test(generation.configurationFingerprint)) { - throw new Error('generation.configurationFingerprint must be SHA-256'); + assertGenerationModes(generation); + assertGenerationOptionalTextFields(generation); + assertGenerationProvenanceRules(generation); +} + +function assertGenerationRequiredTextFields(generation: Record): void { + for (const field of ['generator', 'generatorVersion', 'runtimeVersion'] as const) assertNonBlank(generation[field], `generation.${field}`); +} + +function assertGenerationModes(generation: Record): void { + if (!isAllowedGenerationMode(generation.requestedMode, REQUESTED_MODES)) { + throw new Error('generation.requestedMode is invalid'); + } + if (!isAllowedGenerationMode(generation.effectiveMode, EFFECTIVE_MODES)) { + throw new Error('generation.effectiveMode is invalid'); } +} + +function assertGenerationOptionalTextFields(generation: Record): void { for (const field of ['model', 'provider', 'responseId', 'reason'] as const) { if (generation[field] !== null) assertNonBlank(generation[field], `generation.${field}`); } +} + +function assertGenerationProvenanceRules(generation: Record): void { + if (typeof generation.degraded !== 'boolean') throw new Error('generation.degraded must be a boolean'); + if (typeof generation.configurationFingerprint !== 'string' || !SHA256.test(generation.configurationFingerprint)) { + throw new Error('generation.configurationFingerprint must be SHA-256'); + } + if (generation.effectiveMode === 'llm' && (generation.model === null || generation.provider === null)) { throw new Error('LLM operation plans require model and provider provenance'); } - if ( + if (isDeterministicModeProvenance(generation)) { + throw new Error('Deterministic operation plans cannot claim LLM provenance'); + } +} + +function isAllowedGenerationMode(value: unknown, allowed: readonly string[]): boolean { + return allowed.includes(String(value)); +} + +function isDeterministicModeProvenance(generation: Record): boolean { + return ( generation.effectiveMode === 'deterministic' && (generation.model !== null || generation.provider !== null || generation.responseId !== null) ) { - throw new Error('Deterministic operation plans cannot claim LLM provenance'); + return true; } + return false; } diff --git a/src/operations/operation-step-validation.ts b/src/operations/operation-step-validation.ts new file mode 100644 index 0000000..fe6f118 --- /dev/null +++ b/src/operations/operation-step-validation.ts @@ -0,0 +1,178 @@ +import type { OperationPlan, VariableContract } from './types.js'; + +const URI = /^[a-z][a-z0-9+.-]*:\/\/[^\s*]+$/i; +const PRINCIPAL = /^(?:authority|human|bot|machine):[a-z0-9][a-z0-9._-]*$/; +const PARAMETER_NAME = /^[a-z][a-z0-9_]{0,79}$/; +const RISK_CLASSES = new Set(['read_only', 'reversible', 'boundary', 'governance']); +const STEP_ID = /^[a-z][a-z0-9-]{1,79}$/; +const STEP_EFFECTS = ['query', 'command'] as const; +const ROLLBACK_KINDS = ['uri_process', 'unavailable'] as const; + +function objectValue(value: unknown, name: string): Record { + if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${name} must be an object`); + return value as Record; +} + +function exactKeys(value: Record, expected: string[], name: string): void { + const actual = Object.keys(value).sort(); + const wanted = [...expected].sort(); + if (JSON.stringify(actual) !== JSON.stringify(wanted)) { + throw new Error(`${name} keys must be exactly: ${expected.join(', ')}`); + } +} + +function nonBlank(value: unknown, name: string): asserts value is string { + if (typeof value !== 'string' || !value.trim()) throw new Error(`${name} must be a non-blank string`); +} + +function uniqueStrings(value: unknown, name: string, { nonEmpty = false }: { nonEmpty?: boolean } = {}): string[] { + if (!Array.isArray(value) || value.some((item) => typeof item !== 'string' || !item.trim())) { + throw new Error(`${name} must be an array of non-blank strings`); + } + if (nonEmpty && value.length === 0) throw new Error(`${name} must not be empty`); + if (new Set(value).size !== value.length) throw new Error(`${name} must contain unique values`); + return value; +} + +function parseOperationStep(value: unknown, stepIds: Set): OperationStepInput { + const step = objectValue(value, 'Operation step'); + exactKeys(step, ['id', 'name', 'capability', 'uriProcess', 'actor', 'effect', 'reversible', 'riskClass', 'parameters', 'dependsOn', 'humanApproval', 'rollback'], `Operation step ${String(step.id)}`); + if (typeof step.id !== 'string' || !STEP_ID.test(step.id) || stepIds.has(step.id)) { + throw new Error('Operation step id is invalid or duplicate'); + } + stepIds.add(step.id); + return step as OperationStepInput; +} + +function validateStepIdentity(step: OperationStepInput): void { + nonBlank(step.id, 'Operation step id'); + nonBlank(step.name, `Operation step ${step.id}: name`); + nonBlank(step.capability, `Operation step ${step.id}: capability`); + if (typeof step.uriProcess !== 'string' || !URI.test(step.uriProcess)) { + throw new Error(`Operation step ${step.id}: uriProcess must be concrete and contain no wildcard`); + } + if (typeof step.actor !== 'string' || !PRINCIPAL.test(step.actor) || step.actor.startsWith('human:')) { + throw new Error(`Operation step ${step.id}: actor must be a non-human registered principal`); + } + if (typeof step.humanApproval !== 'boolean') { + throw new Error(`Operation step ${step.id}: humanApproval must be a boolean`); + } +} + +function validateStepRuntime(step: OperationStepInput): void { + if (!STEP_EFFECTS.includes(step.effect as 'query' | 'command')) { + throw new Error(`Operation step ${step.id}: effect is invalid`); + } + if (![true, false, null].includes(step.reversible as boolean | null)) { + throw new Error(`Operation step ${step.id}: reversible is invalid`); + } + if (!RISK_CLASSES.has(String(step.riskClass))) { + throw new Error(`Operation step ${step.id}: riskClass is invalid`); + } +} + +function validateOperationStepPolicy(step: OperationStepInput, rollback: OperationPlan['steps'][number]['rollback']): void { + if (step.effect === 'query') { + if (step.riskClass !== 'read_only' || step.reversible !== true || step.humanApproval || rollback !== null) { + throw new Error(`Operation step ${step.id}: queries must be read_only, reversible, autonomous and have no rollback`); + } + return; + } + if (step.riskClass === 'read_only' || rollback === null) { + throw new Error(`Operation step ${step.id}: commands require a non-read-only risk and rollback declaration`); + } + if ((step.reversible !== true || ['boundary', 'governance'].includes(String(step.riskClass))) && !step.humanApproval) { + throw new Error(`Operation step ${step.id}: safety-sensitive commands require humanApproval`); + } +} + +type OperationStepInput = { + id: string; + name: string; + capability: string; + uriProcess: string; + actor: string; + effect: string; + reversible: boolean | null; + riskClass: string; + parameters: unknown; + dependsOn: unknown; + humanApproval: boolean; + rollback: unknown; +}; + +function parseStepParameters( + value: unknown, + stepId: string, + variableById: Map, + actor: string, +): Record { + const parameters = objectValue(value, `Operation step ${stepId}: parameters`); + const parsed: Record = {}; + for (const [name, rawReference] of Object.entries(parameters)) { + if (!PARAMETER_NAME.test(name)) throw new Error(`Operation step ${stepId}: parameter name ${name} is invalid`); + const reference = objectValue(rawReference, `Operation step ${stepId}: parameter ${name}`); + exactKeys(reference, ['kind', 'variableId'], `Operation step ${stepId}: parameter ${name}`); + if (reference.kind !== 'variable' || typeof reference.variableId !== 'string' || !variableById.has(reference.variableId)) { + throw new Error(`Operation step ${stepId}: parameter ${name} must reference a declared variable`); + } + const variable = variableById.get(reference.variableId); + if (variable?.classification === 'secret') { + throw new Error(`Operation step ${stepId}: secret variable ${reference.variableId} cannot enter a process envelope payload`); + } + if (!variable?.access.readers.includes(actor) && actor !== 'authority:founder') { + throw new Error(`Operation step ${stepId}: actor cannot read variable ${reference.variableId}`); + } + parsed[name] = { kind: 'variable', variableId: reference.variableId }; + } + return parsed; +} + +function validateOperationStepRollback(value: unknown, stepId: string): OperationPlan['steps'][number]['rollback'] { + if (value === null) return null; + const rollback = objectValue(value, `Operation step ${stepId}: rollback`); + exactKeys(rollback, ['kind', 'uriProcess', 'reason'], `Operation step ${stepId}: rollback`); + if (!ROLLBACK_KINDS.includes(rollback.kind as (typeof ROLLBACK_KINDS)[number])) { + throw new Error(`Operation step ${stepId}: rollback.kind is invalid`); + } + if (rollback.kind === 'uri_process') { + if (typeof rollback.uriProcess !== 'string' || !URI.test(rollback.uriProcess)) throw new Error(`Operation step ${stepId}: rollback URI is invalid`); + if (rollback.reason !== null) throw new Error(`Operation step ${stepId}: URI rollback reason must be null`); + } else { + if (rollback.uriProcess !== null) throw new Error(`Operation step ${stepId}: unavailable rollback URI must be null`); + nonBlank(rollback.reason, `Operation step ${stepId}: unavailable rollback reason`); + } + return { + kind: rollback.kind as OperationPlan['steps'][number]['rollback']['kind'], + uriProcess: rollback.uriProcess as string | null, + reason: rollback.reason as string | null, + }; +} + +export function validateOperationStep( + value: unknown, + variableById: Map, + stepIds: Set, +): OperationPlan['steps'][number] { + const step = parseOperationStep(value, stepIds); + validateStepIdentity(step); + validateStepRuntime(step); + const parameters = parseStepParameters(step.parameters, step.id, variableById, step.actor); + uniqueStrings(step.dependsOn, `Operation step ${step.id}: dependsOn`); + const rollback = validateOperationStepRollback(step.rollback, step.id as string); + validateOperationStepPolicy(step, rollback); + return { + id: step.id as string, + name: step.name as string, + capability: step.capability as string, + uriProcess: step.uriProcess as string, + actor: step.actor as string, + effect: step.effect as OperationPlan['steps'][number]['effect'], + reversible: step.reversible as boolean | null, + riskClass: step.riskClass as OperationPlan['steps'][number]['riskClass'], + parameters, + dependsOn: step.dependsOn as string[], + humanApproval: step.humanApproval as boolean, + rollback, + }; +} diff --git a/src/operations/validation.ts b/src/operations/validation.ts index 182f1ba..98b3a06 100644 --- a/src/operations/validation.ts +++ b/src/operations/validation.ts @@ -2,18 +2,17 @@ import { shortHash, stableStringify } from '../core/id.js'; import type { JsonValue } from '../core/types.js'; import type { OperationPlan, VariableContract } from './types.js'; import { assertGeneration } from './generation-validation.js'; +import { validateOperationStep as validateOperationStepFromModule } from './operation-step-validation.js'; const VARIABLE_ID = /^VAR-[a-f0-9]{20}$/; const PLAN_ID = /^OPLAN-[a-f0-9]{20}$/; const STEP_ID = /^[a-z][a-z0-9-]{1,79}$/; const VARIABLE_NAME = /^[a-z][a-z0-9_]{0,79}$/; -const PARAMETER_NAME = /^[a-z][a-z0-9_]{0,79}$/; -const URI = /^[a-z][a-z0-9+.-]*:\/\/[^\s*]+$/i; +const SHA256 = /^[a-f0-9]{64}$/; const PRINCIPAL = /^(?:authority|human|bot|service|machine):[a-z0-9][a-z0-9._-]*$/; const VALUE_TYPES = new Set(['string', 'number', 'integer', 'boolean', 'string[]', 'object']); const CLASSIFICATIONS = new Set(['public', 'internal', 'confidential', 'secret']); const SOURCE_KINDS = new Set(['aql', 'digital_twin', 'vault', 'runtime']); -const RISK_CLASSES = new Set(['read_only', 'reversible', 'boundary', 'governance']); function objectValue(value: unknown, name: string): Record { if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${name} must be an object`); @@ -165,19 +164,47 @@ function assertAcyclic(steps: OperationPlan['steps']): void { const visited = new Set(); const byId = new Map(steps.map((step) => [step.id, step])); const visit = (id: string): void => { - if (visiting.has(id)) throw new Error('Operation step dependencies must be acyclic'); - if (visited.has(id)) return; - visiting.add(id); + if (isOperationStepCircularDependency(visiting, id)) { + throw new Error('Operation step dependencies must be acyclic'); + } + if (hasOperationStepBeenVisited(visited, id)) return; + startOperationStepVisit(visiting, id); for (const dependency of byId.get(id)?.dependsOn ?? []) { - if (!ids.has(dependency)) throw new Error(`Operation step ${id} references unknown dependency ${dependency}`); + validateOperationStepDependency(ids, id, dependency); visit(dependency); } - visiting.delete(id); - visited.add(id); + completeOperationStepVisit(visiting, visited, id); }; for (const id of ids) visit(id); } +function isOperationStepCircularDependency(visiting: Set, id: string): boolean { + return visiting.has(id); +} + +function hasOperationStepBeenVisited(visited: Set, id: string): boolean { + return visited.has(id); +} + +function startOperationStepVisit(visiting: Set, id: string): void { + visiting.add(id); +} + +function validateOperationStepDependency( + knownIds: Set, + stepId: string, + dependency: string, +): void { + if (!knownIds.has(dependency)) { + throw new Error(`Operation step ${stepId} references unknown dependency ${dependency}`); + } +} + +function completeOperationStepVisit(visiting: Set, visited: Set, id: string): void { + visiting.delete(id); + visited.add(id); +} + export function assertOperationPlan(value: unknown): asserts value is OperationPlan { const plan = objectValue(value, 'Operation plan'); validateOperationPlanShape(plan); @@ -241,7 +268,7 @@ function validateOperationSteps( let hasCommandStep = false; let founderDecisionRequired = false; for (const rawStep of steps) { - const step = validateOperationStep(rawStep, variableById, stepIds); + const step = validateOperationStepFromModule(rawStep, variableById, stepIds); validatedSteps.push(step); hasCommandStep ||= step.effect === 'command'; founderDecisionRequired ||= step.effect === 'command' && (step.reversible !== true || ['boundary', 'governance'].includes(step.riskClass)); @@ -250,100 +277,6 @@ function validateOperationSteps( return { steps: validatedSteps, stepIds, hasCommandStep, founderDecisionRequired }; } -function validateOperationStep( - value: unknown, - variableById: Map, - stepIds: Set, -): OperationPlan['steps'][number] { - const step = objectValue(value, 'Operation step'); - exactKeys(step, ['id', 'name', 'capability', 'uriProcess', 'actor', 'effect', 'reversible', 'riskClass', 'parameters', 'dependsOn', 'humanApproval', 'rollback'], `Operation step ${String(step.id)}`); - if (typeof step.id !== 'string' || !STEP_ID.test(step.id) || stepIds.has(step.id)) throw new Error('Operation step id is invalid or duplicate'); - stepIds.add(step.id); - nonBlank(step.name, `Operation step ${step.id}: name`); - nonBlank(step.capability, `Operation step ${step.id}: capability`); - if (typeof step.uriProcess !== 'string' || !URI.test(step.uriProcess)) throw new Error(`Operation step ${step.id}: uriProcess must be concrete and contain no wildcard`); - if (typeof step.actor !== 'string' || !PRINCIPAL.test(step.actor) || step.actor.startsWith('human:')) throw new Error(`Operation step ${step.id}: actor must be a non-human registered principal`); - if (!['query', 'command'].includes(String(step.effect))) throw new Error(`Operation step ${step.id}: effect is invalid`); - if (![true, false, null].includes(step.reversible as boolean | null)) throw new Error(`Operation step ${step.id}: reversible is invalid`); - if (!RISK_CLASSES.has(String(step.riskClass))) throw new Error(`Operation step ${step.id}: riskClass is invalid`); - if (typeof step.humanApproval !== 'boolean') throw new Error(`Operation step ${step.id}: humanApproval must be a boolean`); - const parameters = validateOperationStepParameters(step.parameters, variableById, step.id as string, step.actor as string); - uniqueStrings(step.dependsOn, `Operation step ${step.id}: dependsOn`); - const rollback = validateOperationStepRollback(step.rollback, step.id as string); - if (step.effect === 'query') { - if (step.riskClass !== 'read_only' || step.reversible !== true || step.humanApproval || rollback !== null) { - throw new Error(`Operation step ${step.id}: queries must be read_only, reversible, autonomous and have no rollback`); - } - } else { - if (step.riskClass === 'read_only' || rollback === null) { - throw new Error(`Operation step ${step.id}: commands require a non-read-only risk and rollback declaration`); - } - if ((step.reversible !== true || ['boundary', 'governance'].includes(String(step.riskClass))) && !step.humanApproval) { - throw new Error(`Operation step ${step.id}: safety-sensitive commands require humanApproval`); - } - } - return { - id: step.id as string, - name: step.name as string, - capability: step.capability as string, - uriProcess: step.uriProcess as string, - actor: step.actor as string, - effect: step.effect as OperationPlan['steps'][number]['effect'], - reversible: step.reversible as boolean | null, - riskClass: step.riskClass as OperationPlan['steps'][number]['riskClass'], - parameters, - dependsOn: step.dependsOn as string[], - humanApproval: step.humanApproval as boolean, - rollback, - }; -} - -function validateOperationStepParameters( - value: unknown, - variableById: Map, - stepId: string, - actor: string, -): Record { - const parameters = objectValue(value, `Operation step ${stepId}: parameters`); - const parsed: Record = {}; - for (const [name, rawReference] of Object.entries(parameters)) { - if (!PARAMETER_NAME.test(name)) throw new Error(`Operation step ${stepId}: parameter name ${name} is invalid`); - const reference = objectValue(rawReference, `Operation step ${stepId}: parameter ${name}`); - exactKeys(reference, ['kind', 'variableId'], `Operation step ${stepId}: parameter ${name}`); - if (reference.kind !== 'variable' || typeof reference.variableId !== 'string' || !variableById.has(reference.variableId)) { - throw new Error(`Operation step ${stepId}: parameter ${name} must reference a declared variable`); - } - const variable = variableById.get(reference.variableId); - if (variable?.classification === 'secret') { - throw new Error(`Operation step ${stepId}: secret variable ${reference.variableId} cannot enter a process envelope payload`); - } - if (!variable?.access.readers.includes(actor) && actor !== 'authority:founder') { - throw new Error(`Operation step ${stepId}: actor cannot read variable ${reference.variableId}`); - } - parsed[name] = { kind: 'variable', variableId: reference.variableId }; - } - return parsed; -} - -function validateOperationStepRollback(value: unknown, stepId: string): OperationPlan['steps'][number]['rollback'] { - if (value === null) return null; - const rollback = objectValue(value, `Operation step ${stepId}: rollback`); - exactKeys(rollback, ['kind', 'uriProcess', 'reason'], `Operation step ${stepId}: rollback`); - if (!['uri_process', 'unavailable'].includes(String(rollback.kind))) throw new Error(`Operation step ${stepId}: rollback.kind is invalid`); - if (rollback.kind === 'uri_process') { - if (typeof rollback.uriProcess !== 'string' || !URI.test(rollback.uriProcess)) throw new Error(`Operation step ${stepId}: rollback URI is invalid`); - if (rollback.reason !== null) throw new Error(`Operation step ${stepId}: URI rollback reason must be null`); - } else { - if (rollback.uriProcess !== null) throw new Error(`Operation step ${stepId}: unavailable rollback URI must be null`); - nonBlank(rollback.reason, `Operation step ${stepId}: unavailable rollback reason`); - } - return { - kind: rollback.kind as OperationPlan['steps'][number]['rollback']['kind'], - uriProcess: rollback.uriProcess as string | null, - reason: rollback.reason as string | null, - }; -} - function validateOperationExpectations(value: unknown, stepIds: Set): void { if (!Array.isArray(value) || value.length === 0) throw new Error('Operation plan expectations must not be empty'); const coveredSteps = new Set(); diff --git a/src/pipeline/persist-optional-artifacts.ts b/src/pipeline/persist-optional-artifacts.ts new file mode 100644 index 0000000..95a14a0 --- /dev/null +++ b/src/pipeline/persist-optional-artifacts.ts @@ -0,0 +1,128 @@ +import path from 'node:path'; + +import { writeJson, writeText } from '../core/io.js'; +import { renderCommunicationMarkdown } from '../communication/analyzer.js'; +import type { PipelineExecutionOutput } from './run-types.js'; + +type OptionalArtifactPaths = { + taskSynthesisPath: string | null; + todoValidationPath: string | null; + todoPatchPath: string | null; + todoPatchAuditPath: string | null; + communicationAnalysisPath: string | null; + communicationMarkdownPath: string | null; +}; + +type PersistOptionalArtifactsResult = { + files: Record; + taskSynthesisPath: string | null; + todoPatchPath: string | null; + todoPatchAuditPath: string | null; + communicationAnalysisPath: string | null; +}; + +function relativeArtifactPath(root: string, filePath: string): string { + return path.relative(root, filePath).replace(/\\/g, '/'); +} + +function buildOptionalArtifactPaths( + runDirectory: string, + taskSynthesis: PipelineExecutionOutput['taskSynthesis'], + todoPatch: PipelineExecutionOutput['todoPatch'], + communicationAnalysis: PipelineExecutionOutput['communicationAnalysis'], +): OptionalArtifactPaths { + return { + taskSynthesisPath: taskSynthesis ? path.join(runDirectory, 'task-synthesis.json') : null, + todoValidationPath: taskSynthesis ? path.join(runDirectory, 'todo-validation.json') : null, + todoPatchPath: todoPatch ? path.join(runDirectory, 'TODO.patch') : null, + todoPatchAuditPath: todoPatch ? path.join(runDirectory, 'TODO.patch.json') : null, + communicationAnalysisPath: communicationAnalysis ? path.join(runDirectory, 'communication-analysis.json') : null, + communicationMarkdownPath: communicationAnalysis ? path.join(runDirectory, 'communication-analysis.md') : null, + }; +} + +async function persistCommunicationArtifacts( + root: string, + files: Record, + communicationAnalysisPath: string | null, + communicationMarkdownPath: string | null, + communicationAnalysis: PipelineExecutionOutput['communicationAnalysis'], +): Promise { + if (!communicationAnalysisPath || !communicationMarkdownPath || !communicationAnalysis) { + return; + } + + await Promise.all([ + writeJson(communicationAnalysisPath, communicationAnalysis), + writeText(communicationMarkdownPath, renderCommunicationMarkdown(communicationAnalysis)), + ]); + + files.communicationAnalysis = relativeArtifactPath(root, communicationAnalysisPath); + files.communicationAnalysisMarkdown = relativeArtifactPath(root, communicationMarkdownPath); +} + +async function persistTaskSynthesisArtifacts( + root: string, + files: Record, + taskSynthesisPath: string | null, + todoValidationPath: string | null, + todoPatchPath: string | null, + todoPatchAuditPath: string | null, + taskSynthesis: PipelineExecutionOutput['taskSynthesis'], + todoPatch: PipelineExecutionOutput['todoPatch'], +): Promise { + if (!taskSynthesisPath || !todoValidationPath || !todoPatchPath || !todoPatchAuditPath || !taskSynthesis || !todoPatch) { + return; + } + + await Promise.all([ + writeJson(taskSynthesisPath, taskSynthesis), + writeJson(todoValidationPath, taskSynthesis.validation), + writeText(todoPatchPath, todoPatch.markdown), + writeJson(todoPatchAuditPath, todoPatch.artifact), + ]); + + files.taskSynthesis = relativeArtifactPath(root, taskSynthesisPath); + files.todoValidation = relativeArtifactPath(root, todoValidationPath); + files.todoPatch = relativeArtifactPath(root, todoPatchPath); + files.todoPatchAudit = relativeArtifactPath(root, todoPatchAuditPath); +} + +export async function persistOptionalArtifacts( + runDirectory: string, + root: string, + taskSynthesis: PipelineExecutionOutput['taskSynthesis'], + todoPatch: PipelineExecutionOutput['todoPatch'], + communicationAnalysis: PipelineExecutionOutput['communicationAnalysis'], +): Promise { + const files: Record = {}; + const paths = buildOptionalArtifactPaths(runDirectory, taskSynthesis, todoPatch, communicationAnalysis); + + await Promise.all([ + persistTaskSynthesisArtifacts( + root, + files, + paths.taskSynthesisPath, + paths.todoValidationPath, + paths.todoPatchPath, + paths.todoPatchAuditPath, + taskSynthesis, + todoPatch, + ), + persistCommunicationArtifacts( + root, + files, + paths.communicationAnalysisPath, + paths.communicationMarkdownPath, + communicationAnalysis, + ), + ]); + + return { + files, + taskSynthesisPath: paths.taskSynthesisPath, + todoPatchPath: paths.todoPatchPath, + todoPatchAuditPath: paths.todoPatchAuditPath, + communicationAnalysisPath: paths.communicationAnalysisPath, + }; +} diff --git a/src/pipeline/run-persistence.ts b/src/pipeline/run-persistence.ts index 668b958..3d86ef0 100644 --- a/src/pipeline/run-persistence.ts +++ b/src/pipeline/run-persistence.ts @@ -3,11 +3,11 @@ import path from 'node:path'; import { sha256, stableStringify } from '../core/id.js'; import { writeJson, writeJsonl, writeText } from '../core/io.js'; import { T2C_VERSION } from '../version.js'; -import { renderCommunicationMarkdown } from '../communication/analyzer.js'; import { hasOpenRouter } from '../config/env.js'; import type { PipelineManifest, PipelineOptions, PipelineStageAudit } from '../core/types.js'; import type { T2CConfig } from '../config/env.js'; import type { PipelineContext, PipelineExecutionOutput, PipelinePersistedPaths } from './run-types.js'; +import { persistOptionalArtifacts } from './persist-optional-artifacts.js'; export function makePipelineManifest( context: PipelineContext, @@ -183,62 +183,6 @@ async function persistCoreArtifacts( }; } -type PersistOptionalArtifactsResult = { - files: Record; - taskSynthesisPath: string | null; - todoPatchPath: string | null; - todoPatchAuditPath: string | null; - communicationAnalysisPath: string | null; -}; - -async function persistOptionalArtifacts( - runDirectory: string, - root: string, - taskSynthesis: PipelineExecutionOutput['taskSynthesis'], - todoPatch: PipelineExecutionOutput['todoPatch'], - communicationAnalysis: PipelineExecutionOutput['communicationAnalysis'], -): Promise { - const files: Record = {}; - - const taskSynthesisPath = taskSynthesis ? path.join(runDirectory, 'task-synthesis.json') : null; - const todoValidationPath = taskSynthesis ? path.join(runDirectory, 'todo-validation.json') : null; - const todoPatchPath = todoPatch ? path.join(runDirectory, 'TODO.patch') : null; - const todoPatchAuditPath = todoPatch ? path.join(runDirectory, 'TODO.patch.json') : null; - - const communicationAnalysisPath = communicationAnalysis ? path.join(runDirectory, 'communication-analysis.json') : null; - const communicationMarkdownPath = communicationAnalysis ? path.join(runDirectory, 'communication-analysis.md') : null; - - if (communicationAnalysisPath && communicationMarkdownPath && communicationAnalysis) { - await Promise.all([ - writeJson(communicationAnalysisPath, communicationAnalysis), - writeText(communicationMarkdownPath, renderCommunicationMarkdown(communicationAnalysis)), - ]); - files.communicationAnalysis = path.relative(root, communicationAnalysisPath).replace(/\\/g, '/'); - files.communicationAnalysisMarkdown = path.relative(root, communicationMarkdownPath).replace(/\\/g, '/'); - } - - if (taskSynthesisPath && todoValidationPath && todoPatchPath && todoPatchAuditPath && taskSynthesis && todoPatch) { - await Promise.all([ - writeJson(taskSynthesisPath, taskSynthesis), - writeJson(todoValidationPath, taskSynthesis.validation), - writeText(todoPatchPath, todoPatch.markdown), - writeJson(todoPatchAuditPath, todoPatch.artifact), - ]); - files.taskSynthesis = path.relative(root, taskSynthesisPath).replace(/\\/g, '/'); - files.todoValidation = path.relative(root, todoValidationPath).replace(/\\/g, '/'); - files.todoPatch = path.relative(root, todoPatchPath).replace(/\\/g, '/'); - files.todoPatchAudit = path.relative(root, todoPatchAuditPath).replace(/\\/g, '/'); - } - - return { - files, - taskSynthesisPath, - todoPatchPath, - todoPatchAuditPath, - communicationAnalysisPath, - }; -} - export function manifestConfiguration(options: PipelineOptions, config: T2CConfig): PipelineManifest['configuration'] { const configuration = { nlMode: options.nlMode ?? config.nlMode, diff --git a/src/summary/generation-metadata.ts b/src/summary/generation-metadata.ts index 6433cba..90956a4 100644 --- a/src/summary/generation-metadata.ts +++ b/src/summary/generation-metadata.ts @@ -13,12 +13,8 @@ export function generationMetadata( response?: LlmResponseMetadata, reason?: string, ): GroundedGenerationMetadata { - const effectiveMode = response ? 'llm' : 'deterministic'; - const degraded = mode === 'prefer-llm' && effectiveMode === 'deterministic'; - const configuration = openRouterAuditConfiguration( - config, - mode === 'deterministic' ? null : config.openRouter.summaryModel, - ); + const effectiveMode = resolveGenerationMode(response); + const degraded = shouldDegradeGeneration(mode, effectiveMode); return { generator: 't2c/grounded-summary', generatorVersion: '2', @@ -27,10 +23,39 @@ export function generationMetadata( requestedMode: mode, effectiveMode, degraded, - model: response ? response.model ?? config.openRouter.summaryModel : null, - provider: response ? response.provider ?? 'openrouter' : null, + model: resolveGenerationModel(config, response), + provider: resolveGenerationProvider(response), responseId: response?.responseId ?? null, - configurationFingerprint: sha256(stableStringify(configuration)), + configurationFingerprint: sha256(stableStringify(resolveGenerationConfiguration(config, mode))), reason: degraded ? reason ?? 'LLM_UNAVAILABLE' : null, }; } + +function resolveGenerationMode(response?: LlmResponseMetadata): 'llm' | 'deterministic' { + return response ? 'llm' : 'deterministic'; +} + +function shouldDegradeGeneration( + mode: GroundedGenerationMetadata['requestedMode'], + effectiveMode: 'llm' | 'deterministic', +): boolean { + return mode === 'prefer-llm' && effectiveMode === 'deterministic'; +} + +function resolveGenerationModel(config: T2CConfig, response?: LlmResponseMetadata): string | null { + return response ? response.model ?? config.openRouter.summaryModel : null; +} + +function resolveGenerationProvider(response?: LlmResponseMetadata): string | null { + return response ? response.provider ?? 'openrouter' : null; +} + +function resolveGenerationConfiguration( + config: T2CConfig, + mode: GroundedGenerationMetadata['requestedMode'], +) { + return openRouterAuditConfiguration( + config, + mode === 'deterministic' ? null : config.openRouter.summaryModel, + ); +} diff --git a/src/synthesis/task-synthesis-metadata.ts b/src/synthesis/task-synthesis-metadata.ts new file mode 100644 index 0000000..b21ac45 --- /dev/null +++ b/src/synthesis/task-synthesis-metadata.ts @@ -0,0 +1,28 @@ +import { sha256, stableStringify } from '../core/id.js'; +import { openRouterAuditConfiguration } from '../llm/audit.js'; +import type { T2CConfig } from '../config/env.js'; +import type { GroundedGenerationMetadata, LlmResponseMetadata } from '../core/types.js'; +import { T2C_VERSION } from '../version.js'; + +export type TaskSynthesisMode = 'prefer-llm' | 'require-llm'; +export function taskSynthesisGenerationMetadata( + config: T2CConfig, + mode: TaskSynthesisMode, + response: LlmResponseMetadata, +): GroundedGenerationMetadata { + const configuration = openRouterAuditConfiguration(config, config.openRouter.taskModel); + return { + generator: 't2c/task-synthesis', + generatorVersion: '2', + runtimeVersion: T2C_VERSION, + generatedAt: new Date().toISOString(), + requestedMode: mode, + effectiveMode: 'llm', + degraded: false, + model: response.model ?? config.openRouter.taskModel, + provider: response.provider ?? 'openrouter', + responseId: response.responseId, + configurationFingerprint: sha256(stableStringify(configuration)), + reason: null, + }; +} diff --git a/src/synthesis/tasks-llm.ts b/src/synthesis/tasks-llm.ts index 38de106..2e2da3f 100644 --- a/src/synthesis/tasks-llm.ts +++ b/src/synthesis/tasks-llm.ts @@ -1,13 +1,11 @@ import { promises as fs } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import { sha256, stableStringify } from '../core/id.js'; import { pathExists } from '../core/io.js'; import { assertConclusions } from '../core/schema.js'; import type { Conclusion, DiagnosticReport, - GroundedGenerationMetadata, IntentGraph, LlmResponseMetadata, PipelineStageAudit, @@ -22,6 +20,7 @@ import { T2C_VERSION } from '../version.js'; import { TASK_SYNTHESIS_RESPONSE_CONTRACT } from './task-synthesis-contract.js'; import { materializeTaskSynthesisResponse } from './task-synthesis-materialize.js'; import { compactSynthesisPayload } from './task-synthesis-payload.js'; +import { taskSynthesisGenerationMetadata } from './task-synthesis-metadata.js'; import { validateAndClassifyTodoProposals, type TodoProposalValidationResult, @@ -159,7 +158,7 @@ async function synthesizeWithCorrection( } responses.push(completion.metadata); try { - const generation = generationMetadata(config, mode, completion.metadata); + const generation = taskSynthesisGenerationMetadata(config, mode, completion.metadata); return { output: materializeTaskSynthesisResponse(completion.value, graph, diagnostics, generation), responses }; } catch (error) { const message = error instanceof Error ? error.message : String(error); @@ -210,28 +209,6 @@ async function fallbackOrThrow( }; } -function generationMetadata( - config: T2CConfig, - mode: TaskSynthesisMode, - response: LlmResponseMetadata, -): GroundedGenerationMetadata { - const configuration = openRouterAuditConfiguration(config, config.openRouter.taskModel); - return { - generator: 't2c/task-synthesis', - generatorVersion: '2', - runtimeVersion: T2C_VERSION, - generatedAt: new Date().toISOString(), - requestedMode: mode, - effectiveMode: 'llm', - degraded: false, - model: response.model ?? config.openRouter.taskModel, - provider: response.provider ?? 'openrouter', - responseId: response.responseId, - configurationFingerprint: sha256(stableStringify(configuration)), - reason: null, - }; -} - function synthesisAudit( status: PipelineStageAudit['status'], effectiveMode: PipelineStageAudit['effectiveMode'], diff --git a/src/web/diff-ui-compare.ts b/src/web/diff-ui-compare.ts new file mode 100644 index 0000000..2741205 --- /dev/null +++ b/src/web/diff-ui-compare.ts @@ -0,0 +1,105 @@ +export const DIFF_UI_COMPARE_SCRIPT = ` +function comparisonPayloadFromInputs() { + const beforePath = byId('before-run').value || byId('before-path').value.trim(); + const afterPath = byId('after-run').value || byId('after-path').value.trim(); + if (beforePath && afterPath) { + return { beforePath, afterPath, includeSvg: true, compact: true }; + } + + const beforeGraphText = byId('before').value.trim(); + const afterGraphText = byId('after').value.trim(); + if (!beforeGraphText || !afterGraphText) { + throw new Error('Wybierz dwa runy albo podaj oba grafy ręcznie.'); + } + + return { + beforeGraph: JSON.parse(beforeGraphText), + afterGraph: JSON.parse(afterGraphText), + includeSvg: true, + compact: true, + }; +} + +function comparisonFilters() { + const filters = {}; + for (const [key, id] of [ + ['participant', 'participant-filter'], + ['role', 'role-filter'], + ['ticket', 'ticket-filter'], + ]) { + const value = byId(id).value.trim(); + if (value) { + filters[key] = value; + } + } + return filters; +} + +function formatComparisonSummary(summary) { + return [ + ['Rekordy +', summary.recordsAdded], + ['Rekordy −', summary.recordsRemoved], + ['Zmienione', summary.recordsChanged], + ['Relacje +', summary.relationsAdded], + ['Relacje −', summary.relationsRemoved], + ] + .map(([label, value]) => '
' + value + '' + label + '
') + .join(''); +} + +function renderComparisonResponse(responsePayload) { + const summary = responsePayload.diff.summary; + byId('metrics').innerHTML = formatComparisonSummary(summary); + byId('svg-host').innerHTML = responsePayload.svg; + byId('fingerprint').textContent = 'diff fingerprint: ' + responsePayload.diff.fingerprint; + byId('result').classList.add('visible'); +} + +async function loadComparisonPayload() { + const payload = comparisonPayloadFromInputs(); + const filters = comparisonFilters(); + for (const [key, value] of Object.entries(filters)) { + payload[key] = value; + } + + if (payload.participant || payload.role) { + payload.communicationOnly = true; + } + + const response = await fetch('/api/diff', { + method: 'POST', + headers: requestHeaders(true), + body: JSON.stringify(payload), + }); + + const responsePayload = await response.json(); + if (!response.ok) { + throw new Error(typeof responsePayload.error === 'string' ? responsePayload.error : 'HTTP ' + response.status); + } + + return responsePayload; +} + +async function compareGraphs() { + const button = byId('compare'); + const status = byId('status'); + const error = byId('error'); + const result = byId('result'); + + button.disabled = true; + status.textContent = 'Obliczanie diffu…'; + error.textContent = ''; + result.classList.remove('visible'); + + try { + const responsePayload = await loadComparisonPayload(); + renderComparisonResponse(responsePayload); + status.textContent = 'Porównanie gotowe'; + } catch (cause) { + error.textContent = cause instanceof Error ? cause.message : String(cause); + status.textContent = 'Porównanie nie powiodło się'; + } finally { + button.disabled = false; + } +} +`; diff --git a/src/web/diff-ui-script.ts b/src/web/diff-ui-script.ts index 0ceec46..57a6991 100644 --- a/src/web/diff-ui-script.ts +++ b/src/web/diff-ui-script.ts @@ -1,3 +1,5 @@ +import { DIFF_UI_COMPARE_SCRIPT } from './diff-ui-compare.js'; + export const DIFF_UI_SCRIPT = `